diff --git a/src/main/java/de/ozgcloud/admin/common/AbstractLinkedResourceDeserializer.java b/src/main/java/de/ozgcloud/admin/common/AbstractLinkedResourceDeserializer.java deleted file mode 100644 index 106c3616b4a08d51e8ee413587fed710fc0dba98..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/AbstractLinkedResourceDeserializer.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import org.apache.commons.lang3.StringUtils; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.deser.ContextualDeserializer; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -import de.ozgcloud.common.datatype.StringBasedValue; -import lombok.Getter; - -abstract class AbstractLinkedResourceDeserializer extends StdDeserializer<Object> implements ContextualDeserializer { - - private static final long serialVersionUID = 1L; - - @Getter - private BeanProperty beanProperty; - - @Getter - private final JavaType targetType; - - protected AbstractLinkedResourceDeserializer() { - super(Object.class); - targetType = null; - } - - protected AbstractLinkedResourceDeserializer(BeanProperty beanProperty) { - super(Object.class); - this.beanProperty = beanProperty; - this.targetType = beanProperty.getType(); - } - - @Override - public Object deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException { - if (jsonParser.isExpectedStartArrayToken()) { - Collection<Object> idList = targetType.getRawClass().isAssignableFrom(Set.class) ? new HashSet<>() : new ArrayList<>(); - - while (!jsonParser.nextToken().isStructEnd()) { - idList.add(extractId(jsonParser.getText())); - } - return idList; - } else { - return extractId(jsonParser.getText()); - } - } - - Object extractId(String url) { - Class<?> type; - if (targetType.isCollectionLikeType()) { - type = targetType.getContentType().getRawClass(); - } else { - type = targetType.getRawClass(); - } - - if (String.class.isAssignableFrom(type)) { - return extractStringId(url); - } - if (Long.class.isAssignableFrom(type) || Long.TYPE.isAssignableFrom(type)) { - return extractLongId(url); - } - if (StringBasedValue.class.isAssignableFrom(type)) { - return extractStringBasedValue(type, url); - } - return buildByBuilder(url); - } - - abstract Object buildByBuilder(String url); - - public static Long extractLongId(String uri) { - var trimedUri = StringUtils.trimToNull(uri); - if (Objects.isNull(trimedUri)) { - return null; - } - return Long.parseLong(URLDecoder.decode(trimedUri.substring(trimedUri.lastIndexOf('/') + 1), StandardCharsets.UTF_8)); - } - - private StringBasedValue extractStringBasedValue(Class<?> type, String url) { - String value = extractStringId(url); - Method fromMethod; - try { - fromMethod = type.getMethod("from", String.class); - } catch (NoSuchMethodException e) { - throw new IllegalStateException( - String.format("Cannot generate Id from type '%s'. Missing 'from' Method.", targetType.getRawClass().getSimpleName())); - } - try { - return (StringBasedValue) fromMethod.invoke(null, value); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - throw new IllegalStateException( - String.format("Cannot generate Id from type '%s'. Error calling 'from' Method.", targetType.getRawClass().getSimpleName()), - e); - } - } - - public static String extractStringId(String url) { - return URLDecoder.decode(url.substring(url.lastIndexOf('/') + 1), StandardCharsets.UTF_8); - } -} diff --git a/src/main/java/de/ozgcloud/admin/common/AbstractLinkedResourceSerializer.java b/src/main/java/de/ozgcloud/admin/common/AbstractLinkedResourceSerializer.java deleted file mode 100644 index aff16f22a29698cf591680353e4bf07800810d04..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/AbstractLinkedResourceSerializer.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import java.io.IOException; -import java.util.Collection; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.ser.ContextualSerializer; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -abstract class AbstractLinkedResourceSerializer extends JsonSerializer<Object> implements ContextualSerializer { - @Override - public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - - if (value instanceof Collection) { - gen.writeStartArray(); - ((Collection<?>) value).forEach(val -> writeObject(gen, buildLink(val))); - gen.writeEndArray(); - } else { - writeObject(gen, buildLink(value)); - } - } - - abstract String buildLink(Object id); - - abstract IdExtractor<Object> getExtractor(); - - void writeObject(JsonGenerator gen, Object value) { - try { - gen.writeObject(value); - } catch (IOException e) { - throw new TechnicalException("Error writing String to json", e); - } - } -} diff --git a/src/main/java/de/ozgcloud/admin/common/IdBuilder.java b/src/main/java/de/ozgcloud/admin/common/IdBuilder.java deleted file mode 100644 index f893795312adcde8c17d1c0da58cf1eaa4e5cf26..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/IdBuilder.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import com.fasterxml.jackson.databind.BeanProperty; - -import lombok.NoArgsConstructor; - -@NoArgsConstructor -class IdBuilder implements ObjectBuilder<Object> { - - @Override - public Object build(Object id) { - return id; - } - - @Override - public ObjectBuilder<Object> constructContextAware(BeanProperty property) { - return new IdBuilder(); - } -} diff --git a/src/main/java/de/ozgcloud/admin/common/IdExtractor.java b/src/main/java/de/ozgcloud/admin/common/IdExtractor.java deleted file mode 100644 index 658b06586cd447274ef701dc8942af43300a814a..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/IdExtractor.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -@FunctionalInterface -public interface IdExtractor<T> { - String extractId(T object); -} \ No newline at end of file diff --git a/src/main/java/de/ozgcloud/admin/common/LinkedResource.java b/src/main/java/de/ozgcloud/admin/common/LinkedResource.java deleted file mode 100644 index 4798f516bf52910ab2641ecba167540622dfb101..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/LinkedResource.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.springframework.core.annotation.AliasFor; - -import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -@Inherited - -@JacksonAnnotationsInside -@JsonSerialize(using = LinkedResourceSerializer.class) -@JsonDeserialize(using = LinkedResourceDeserializer.class) -public @interface LinkedResource { - - Class<?> controllerClass(); - - Class<? extends IdExtractor<Object>> extractor() default ToStringExtractor.class; - - @AliasFor(annotation = JsonDeserialize.class, attribute = "builder") - Class<? extends ObjectBuilder<Object>> builder() default IdBuilder.class; -} \ No newline at end of file diff --git a/src/main/java/de/ozgcloud/admin/common/LinkedResourceDeserializer.java b/src/main/java/de/ozgcloud/admin/common/LinkedResourceDeserializer.java deleted file mode 100644 index 7130e16af20c1f774e599b3096bced026c1b7bbe..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/LinkedResourceDeserializer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import java.lang.reflect.InvocationTargetException; - -import org.apache.commons.lang3.reflect.ConstructorUtils; - -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; - -import de.ozgcloud.common.errorhandling.TechnicalException; - -public class LinkedResourceDeserializer extends AbstractLinkedResourceDeserializer { - - private static final long serialVersionUID = 1L; - - private LinkedResource annotation; - - protected LinkedResourceDeserializer() { - super(); - } - - protected LinkedResourceDeserializer(BeanProperty beanProperty) { - super(beanProperty); - this.annotation = beanProperty.getAnnotation(LinkedResource.class); - } - - @Override - Object buildByBuilder(String url) { - ObjectBuilder<?> builder; - try { - builder = ConstructorUtils.invokeConstructor(annotation.builder()).constructContextAware(getBeanProperty()); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) { - throw new TechnicalException("Error instanciating Builder.", e); - } - return builder.build(extractStringId(url)); - } - - @Override - public JsonDeserializer<?> createContextual(DeserializationContext ctxt, BeanProperty property) { - return new LinkedResourceDeserializer(property); - } - -} diff --git a/src/main/java/de/ozgcloud/admin/common/LinkedResourceSerializer.java b/src/main/java/de/ozgcloud/admin/common/LinkedResourceSerializer.java deleted file mode 100644 index 28a098c82185730476c0f85f4eb299a7bdd3ed13..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/LinkedResourceSerializer.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; - -import java.lang.reflect.InvocationTargetException; - -import org.apache.commons.lang3.reflect.ConstructorUtils; - -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -public class LinkedResourceSerializer extends AbstractLinkedResourceSerializer { - - private LinkedResource annotation; - - private LinkedResourceSerializer(LinkedResource annotation) { - this.annotation = annotation; - } - - @Override - public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) { - return new LinkedResourceSerializer(property.getAnnotation(LinkedResource.class)); - } - - @Override - String buildLink(Object id) { - return linkTo(annotation.controllerClass()).slash(getExtractor().extractId(id)).toString(); - } - - @Override - IdExtractor<Object> getExtractor() { - try { - return ConstructorUtils.invokeConstructor(annotation.extractor()); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) { - throw new TechnicalException("Error instanciating IdExtractor", e); - } - } -} diff --git a/src/main/java/de/ozgcloud/admin/common/ModelBuilder.java b/src/main/java/de/ozgcloud/admin/common/ModelBuilder.java deleted file mode 100644 index cd90619981aa59db2f29a1f158c76000773aacb2..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/ModelBuilder.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.BooleanSupplier; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.function.UnaryOperator; -import java.util.stream.Collectors; - -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.reflect.FieldUtils; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; -import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder; - -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class ModelBuilder<T> { - - private static final Map<Class<?>, Map<Object, List<Field>>> ANNOTATED_FIELDS_BY_ANNOTATION = new ConcurrentHashMap<>(); - - private final T entity; - private final EntityModel<T> model; - - private final List<Link> links = new LinkedList<>(); - private final List<Function<EntityModel<T>, EntityModel<T>>> mapper = new LinkedList<>(); - - private ModelBuilder(T entity) { - this.entity = entity; - this.model = null; - } - - private ModelBuilder(EntityModel<T> model) { - this.entity = null; - this.model = model; - } - - public static <T> ModelBuilder<T> fromEntity(T entity) { - return new ModelBuilder<>(entity); - } - - public static <T> ModelBuilder<T> fromModel(EntityModel<T> model) { - return new ModelBuilder<>(model); - } - - public ModelBuilder<T> addLink(Link link) { - links.add(link); - return this; - } - - public ModelBuilder<T> addLink(Optional<Link> link) { - link.ifPresent(links::add); - return this; - } - - public ModelBuilder<T> addLinks(Link... links) { - this.links.addAll(Arrays.asList(links)); - return this; - } - - public ModelBuilder<T> addLinks(Collection<Link> links) { - this.links.addAll(links); - return this; - } - - public ConditionalLinkAdder ifMatch(Predicate<T> predicate) { - return new ConditionalLinkAdder(predicate.test(Objects.isNull(entity) ? model.getContent() : entity)); - } - - public ConditionalLinkAdder ifMatch(BooleanSupplier guard) { - return new ConditionalLinkAdder(guard.getAsBoolean()); - } - - public ModelBuilder<T> map(UnaryOperator<EntityModel<T>> mapper) { - this.mapper.add(mapper); - return this; - } - - public EntityModel<T> buildModel() { - var filteredLinks = links.stream().filter(Objects::nonNull).collect(Collectors.toSet()); - - EntityModel<T> buildedModel = Objects.isNull(model) ? EntityModel.of(entity) : model; - buildedModel = buildedModel.add(filteredLinks); - - addLinkByLinkedResourceAnnotationIfMissing(buildedModel); - - return applyMapper(buildedModel); - } - - private EntityModel<T> applyMapper(EntityModel<T> resource) { - Iterator<Function<EntityModel<T>, EntityModel<T>>> i = mapper.iterator(); - EntityModel<T> result = resource; - while (i.hasNext()) { - result = i.next().apply(result); - } - return result; - } - - private void addLinkByLinkedResourceAnnotationIfMissing(EntityModel<T> resource) { - getFields(LinkedResource.class).stream() - .filter(field -> shouldAddLink(resource, field)) - .forEach(field -> handleLinkedResourceField(resource, field)); - } - - private void handleLinkedResourceField(EntityModel<T> resource, Field field) { - getEntityFieldValue(field).map(Object::toString).filter(StringUtils::isNotBlank).ifPresent(val -> resource - .add(WebMvcLinkBuilder.linkTo(field.getAnnotation(LinkedResource.class).controllerClass()).slash(val) - .withRel(sanitizeName(field.getName())))); - } - - private boolean shouldAddLink(EntityModel<T> resource, Field field) { - return !(field.getType().isArray() || Collection.class.isAssignableFrom(field.getType()) || resource.hasLink(sanitizeName(field.getName()))); - } - - private List<Field> getFields(Class<? extends Annotation> annotationClass) { - var fields = Optional.ofNullable(ANNOTATED_FIELDS_BY_ANNOTATION.get(getEntity().getClass())) - .map(fieldsByAnnotation -> fieldsByAnnotation.get(annotationClass)) - .orElseGet(Collections::emptyList); - - if (CollectionUtils.isEmpty(fields)) { - fields = FieldUtils.getFieldsListWithAnnotation(getEntity().getClass(), annotationClass); - - updateFields(annotationClass, fields); - } - return fields; - } - - private void updateFields(Class<? extends Annotation> annotationClass, List<Field> fields) { - var annotationMap = Optional.ofNullable(ANNOTATED_FIELDS_BY_ANNOTATION.get(getEntity().getClass())).orElseGet(HashMap::new); - annotationMap.put(annotationClass, fields); - - ANNOTATED_FIELDS_BY_ANNOTATION.put(annotationClass, annotationMap); - } - - private String sanitizeName(String fieldName) { - if (fieldName.endsWith("Id")) { - return fieldName.substring(0, fieldName.indexOf("Id")); - } - return fieldName; - } - - private Optional<Object> getEntityFieldValue(Field field) { - try { - field.setAccessible(true); - Optional<Object> value = Optional.ofNullable(field.get(getEntity())); - field.setAccessible(false); - return value; - } catch (IllegalArgumentException | IllegalAccessException e) { - LOG.warn("Cannot access field value of LinkedResource field.", e); - } - return Optional.empty(); - } - - private T getEntity() { - return Optional.ofNullable(entity == null ? model.getContent() : entity) - .orElseThrow(() -> new IllegalStateException("Entity must not null for ModelBuilding")); - } - - @RequiredArgsConstructor - public class ConditionalLinkAdder { - - public final boolean conditionFulfilled; - - public ModelBuilder<T> addLink(Supplier<Link> linkSupplier) { - if (conditionFulfilled) { - addLink(linkSupplier.get()); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLinkIfPresent(Supplier<Optional<Link>> linkSupplier) { - if (conditionFulfilled) { - addLink(linkSupplier.get()); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLink(Function<T, Link> linkBuilder) { - if (conditionFulfilled) { - addLink(linkBuilder.apply(getEntity())); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLink(Link link) { - if (conditionFulfilled) { - links.add(link); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLink(Optional<Link> link) { - if (conditionFulfilled) { - link.ifPresent(links::add); - } - return ModelBuilder.this; - } - - public ModelBuilder<T> addLinks(Link... links) { - if (conditionFulfilled) { - ModelBuilder.this.links.addAll(Arrays.asList(links)); - } - return ModelBuilder.this; - } - - @SafeVarargs - public final ModelBuilder<T> addLinks(Supplier<Link>... linkSuppliers) { - if (conditionFulfilled) { - for (int i = 0; i < linkSuppliers.length; i++) { - ModelBuilder.this.links.add(linkSuppliers[i].get()); - } - } - return ModelBuilder.this; - } - - public final ModelBuilder<T> addLinks(Supplier<Collection<Link>> linksSupplier) { - if (conditionFulfilled) { - linksSupplier.get().forEach(ModelBuilder.this.links::add); - } - - return ModelBuilder.this; - } - - } -} \ No newline at end of file diff --git a/src/main/java/de/ozgcloud/admin/common/ObjectBuilder.java b/src/main/java/de/ozgcloud/admin/common/ObjectBuilder.java deleted file mode 100644 index a08385af64361f8e178d9a03451f81853eeda9d8..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/ObjectBuilder.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import com.fasterxml.jackson.databind.BeanProperty; - -public interface ObjectBuilder<T> { - - T build(Object id); - - ObjectBuilder<T> constructContextAware(BeanProperty property); -} diff --git a/src/main/java/de/ozgcloud/admin/common/ToStringExtractor.java b/src/main/java/de/ozgcloud/admin/common/ToStringExtractor.java deleted file mode 100644 index dade3573176baac48e7f6df83e0c45a4c1cb9389..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/admin/common/ToStringExtractor.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import lombok.NoArgsConstructor; - -@NoArgsConstructor -class ToStringExtractor implements IdExtractor<Object> { - - @Override - public String extractId(Object object) { - return object.toString(); - } -} diff --git a/src/test/java/de/ozgcloud/admin/common/CollectionModelBuilderTest.java b/src/test/java/de/ozgcloud/admin/common/CollectionModelBuilderTest.java deleted file mode 100644 index 8327c18845e9ead36fc76bfff226334adac98881..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/CollectionModelBuilderTest.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import static org.assertj.core.api.Assertions.*; - -import java.util.List; -import java.util.stream.Stream; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.hateoas.Link; - -import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheit; -import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitTestFactory; - -class CollectionModelBuilderTest { - - private final String HREF = "http://test"; - private final String REL = "rel"; - - @Nested - class TestBuildModel { - - @Test - void shouldBuildModel() { - var vorgang = OrganisationsEinheitTestFactory.create(); - - var model = CollectionModelBuilder.fromEntities(List.of(vorgang)).buildModel(); - - assertThat(model.getContent()).hasSize(1).first().usingRecursiveComparison().isEqualTo(vorgang); - } - } - - @Nested - class TestAddLink { - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - } - - @Nested - class TestIfMatch { - - @Nested - class TestWithBooleanSupplier { - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(Link.of(HREF, REL)).buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - - @Nested - class TestWithPredicate { - - private final Stream<OrganisationsEinheit> wiedervorlageStream = Stream.of(OrganisationsEinheitTestFactory.create()); - - @Test - void shouldAddLink() { - var model = CollectionModelBuilder.fromEntities(wiedervorlageStream) - .ifMatch(wiedervorlagen -> true) - .addLink(Link.of(HREF, REL)) - .buildModel(); - - assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL); - } - - @Test - void shouldNotAddLink() { - var model = CollectionModelBuilder.fromEntities(wiedervorlageStream) - .ifMatch(wiedervorlagen -> false) - .addLink(Link.of(HREF, REL)) - .buildModel(); - - assertThat(model.getLinks()).isEmpty(); - } - } - } - -} \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/admin/common/EntityModelTestFactory.java b/src/test/java/de/ozgcloud/admin/common/EntityModelTestFactory.java deleted file mode 100644 index 1f01a94247938090c4e85f0d9c96d3ec399aeb6c..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/EntityModelTestFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import org.springframework.hateoas.EntityModel; - -import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheit; -import lombok.NoArgsConstructor; - -public class EntityModelTestFactory { - - public static final NullableEntityModel NULLABLE = createNullable(); - - private static NullableEntityModel createNullable() { - return new NullableEntityModel(); - } - - @NoArgsConstructor - private static class NullableEntityModel extends EntityModel<OrganisationsEinheit> { - - } -} diff --git a/src/test/java/de/ozgcloud/admin/common/IdBuilderTest.java b/src/test/java/de/ozgcloud/admin/common/IdBuilderTest.java deleted file mode 100644 index 608fe7e6e3607c04bdcedca85b29238bd840db66..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/IdBuilderTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.BeanProperty; - -class IdBuilderTest { - - @DisplayName("Test building ID when deserializing linked resources") - @Nested - class TestBuilingId { - private static final String ID = "id"; - - @Test - void shouldBuildId() { - IdBuilder idBuilder = new IdBuilder(); - - var idObject = idBuilder.build(ID); - - assertThat(idObject).isInstanceOf(Object.class).asString().isEqualTo(ID); - } - - @Test - void shouldCreateObjectBuilder() { - BeanProperty property = mock(BeanProperty.class); - ObjectBuilder<Object> idBuilder = new IdBuilder().constructContextAware(property); - - assertThat(idBuilder).isNotNull(); - } - } -} diff --git a/src/test/java/de/ozgcloud/admin/common/LinkedResourceDeserializerTest.java b/src/test/java/de/ozgcloud/admin/common/LinkedResourceDeserializerTest.java deleted file mode 100644 index b50116770c539a5abba0108c8f82efe81b0763ec..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/LinkedResourceDeserializerTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import static org.assertj.core.api.Assertions.*; - -import java.io.IOException; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import de.ozgcloud.admin.common.user.TestId; -import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitTestFactory; - -class LinkedResourceDeserializerTest { - private static final String TEST_JSON = "{\"id\":\"/api/vorgangs/" + OrganisationsEinheitTestFactory.ID + "\"}"; - - @DisplayName("Test the deserilization of linked resource json") - @Nested - class TestDeserialization { - @Test - void shouldDeserialize() throws IOException { - LinkedResourceTestObject res = new ObjectMapper().readValue(TEST_JSON.getBytes(), LinkedResourceTestObject.class); - - assertThat(res).hasFieldOrPropertyWithValue("id", TestId.from(OrganisationsEinheitTestFactory.ID)); - } - - } - -} diff --git a/src/test/java/de/ozgcloud/admin/common/LinkedResourceSerializerTest.java b/src/test/java/de/ozgcloud/admin/common/LinkedResourceSerializerTest.java deleted file mode 100644 index 05764d09b88e72edd2032e861bbc58cd863a36c9..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/LinkedResourceSerializerTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -import de.ozgcloud.admin.common.user.TestId; -import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitTestFactory; - -class LinkedResourceSerializerTest { - - @DisplayName("Test the json serialization of linked resource annotations") - @Nested - class TestSerialization { - @Test - void shouldSerialize() throws JsonProcessingException { - var testObj = new LinkedResourceTestObject(TestId.from(OrganisationsEinheitTestFactory.ID)); - - String serialized = new ObjectMapper().writeValueAsString(testObj); - - assertThat(serialized).isEqualTo("{\"id\":\"/api/organisationseinheits/" + OrganisationsEinheitTestFactory.ID + "\"}"); - } - - } -} diff --git a/src/test/java/de/ozgcloud/admin/common/LinkedResourceTestObject.java b/src/test/java/de/ozgcloud/admin/common/LinkedResourceTestObject.java deleted file mode 100644 index d30ab26ef5568705572702d1e5401c215a5b40cb..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/LinkedResourceTestObject.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import de.ozgcloud.admin.common.user.TestId; -import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitController; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@AllArgsConstructor -@NoArgsConstructor -class LinkedResourceTestObject { - @LinkedResource(controllerClass = OrganisationsEinheitController.class) - private TestId id; -} diff --git a/src/test/java/de/ozgcloud/admin/common/ModelBuilderTest.java b/src/test/java/de/ozgcloud/admin/common/ModelBuilderTest.java deleted file mode 100644 index 74c8a11de179d56b34bfb52fc47108c5cd491dc6..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/admin/common/ModelBuilderTest.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.admin.common; - -import static org.assertj.core.api.Assertions.*; - -import java.util.UUID; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.NullAndEmptySource; -import org.mockito.Mock; -import org.springframework.context.ApplicationContext; -import org.springframework.web.bind.annotation.RequestMapping; - -import lombok.Builder; - -class ModelBuilderTest { - - @DisplayName("Add link by annotation if missing") - @Nested - class TestAddLinkByAnnotationIfMissing { - - private static final String USER_MANAGER_URL = "http://localhost"; - private static final String USER_MANAGER_PROFILE_TEMPLATE = "/api/profile/%s"; - - @Mock - private ApplicationContext context; - - private TestEntity entity = TestEntityTestFactory.create(); - - @Test - void shouldHaveAddLinkByLinkedResource() { - var model = ModelBuilder.fromEntity(entity).buildModel(); - - assertThat(model.getLink(TestController.FILE_REL).get().getHref()).isEqualTo(TestController.PATH + "/" + TestEntityTestFactory.FILE); - } - - @ParameterizedTest - @NullAndEmptySource - void shouldNotAddLinkByLinkedRessourceIfFieldValueIsNotSet(String fileId) { - var model = ModelBuilder.fromEntity(TestEntityTestFactory.createBuilder().file(fileId).build()).buildModel(); - - assertThat(model.getLink(TestController.FILE_REL)).isEmpty(); - } - } -} - -@Builder -class TestEntity { - - @LinkedResource(controllerClass = TestController.class) - private String file; -} - -@RequestMapping(TestController.PATH) -class TestController { - - static final String PATH = "/api/test"; - - static final String USER_REL = "user"; - static final String FILE_REL = "file"; - -} - -class TestEntityTestFactory { - - static final String USER = UUID.randomUUID().toString(); - static final String FILE = UUID.randomUUID().toString(); - - public static TestEntity create() { - return createBuilder().build(); - } - - public static TestEntity.TestEntityBuilder createBuilder() { - return TestEntity.builder() - .file(FILE); - } -}