diff --git a/pom.xml b/pom.xml index 174fa07079..59d08a375c 100644 --- a/pom.xml +++ b/pom.xml @@ -252,6 +252,25 @@ ${resteasy.version} + + javax.ws.rs + javax.ws.rs-api + ${jaxrs.version} + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + diff --git a/scm-core/pom.xml b/scm-core/pom.xml index f19ad7453e..a25214da7e 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -85,17 +85,32 @@ javax.ws.rs javax.ws.rs-api - ${jaxrs.version} + com.fasterxml.jackson.core jackson-core - ${jackson.version} + com.fasterxml.jackson.core jackson-databind - ${jackson.version} + + + + de.otto.edison + edison-hal + + + + org.mapstruct + mapstruct-jdk8 + + + + org.mapstruct + mapstruct-processor + provided diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseMapper.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/BaseMapper.java similarity index 77% rename from scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseMapper.java rename to scm-core/src/main/java/sonia/scm/api/v2/resources/BaseMapper.java index 94d884c437..a3f83d21ab 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseMapper.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/BaseMapper.java @@ -2,11 +2,10 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; import org.mapstruct.Mapping; -import sonia.scm.ModelObject; import java.time.Instant; -abstract class BaseMapper { +abstract class BaseMapper { @Mapping(target = "attributes", ignore = true) // We do not map HAL attributes public abstract D map(T modelObject); diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/CollectionToDtoMapper.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/CollectionToDtoMapper.java new file mode 100644 index 0000000000..4f8c6a6f3f --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/CollectionToDtoMapper.java @@ -0,0 +1,32 @@ +package sonia.scm.api.v2.resources; + +import de.otto.edison.hal.HalRepresentation; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +import static de.otto.edison.hal.Embedded.embeddedBuilder; +import static de.otto.edison.hal.Links.linkingTo; + +abstract class CollectionToDtoMapper { + + private final String collectionName; + private final BaseMapper mapper; + + protected CollectionToDtoMapper(String collectionName, BaseMapper mapper) { + this.collectionName = collectionName; + this.mapper = mapper; + } + + public HalRepresentation map(Collection collection) { + List dtos = collection.stream().map(mapper::map).collect(Collectors.toList()); + return new HalRepresentation( + linkingTo().self(createSelfLink()).build(), + embeddedBuilder().with(collectionName, dtos).build() + ); + } + + protected abstract String createSelfLink(); + +} diff --git a/scm-plugins/pom.xml b/scm-plugins/pom.xml index 70dee9676a..e82eaddb9a 100644 --- a/scm-plugins/pom.xml +++ b/scm-plugins/pom.xml @@ -63,23 +63,6 @@ enunciate-core-annotations - - org.mapstruct - mapstruct-jdk8 - - - - org.mapstruct - mapstruct-processor - provided - - - - de.otto.edison - edison-hal - compile - - org.projectlombok lombok diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 538eba4911..30944d49cc 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -150,11 +150,6 @@ resteasy-servlet-initializer - - de.otto.edison - edison-hal - - @@ -383,17 +378,6 @@ provided - - org.mapstruct - mapstruct-jdk8 - - - - org.mapstruct - mapstruct-processor - provided - -