From 87044d0a92d3fda7a079eb4dfbc94389eb4db17d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 30 Aug 2018 09:19:10 +0200 Subject: [PATCH] Mind LSP for sub classes --- .../resources/BasicCollectionToDtoMapper.java | 29 +++++++------------ .../ChangesetCollectionToDtoMapper.java | 21 +++----------- .../resources/GroupCollectionToDtoMapper.java | 22 +++++++------- .../RepositoryCollectionToDtoMapper.java | 20 +++++++------ .../resources/UserCollectionToDtoMapper.java | 20 +++++++------ 5 files changed, 49 insertions(+), 63 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BasicCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BasicCollectionToDtoMapper.java index 4787452003..b189a22d1c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BasicCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BasicCollectionToDtoMapper.java @@ -11,6 +11,7 @@ import sonia.scm.PageResult; import javax.inject.Inject; import java.util.EnumSet; import java.util.List; +import java.util.Optional; import java.util.function.Function; import static com.damnhandy.uri.template.UriTemplate.fromTemplate; @@ -24,7 +25,7 @@ abstract class BasicCollectionToDtoMapper pageResult) { - return map(pageNumber, pageSize, pageResult, entityToDtoMapper::map, createSelfLink()); + CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, String selfLink, Optional createLink) { + return map(pageNumber, pageSize, pageResult, selfLink, createLink, entityToDtoMapper::map); } - public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Function mapper, String selfLink) { + CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, String selfLink, Optional createLink, Function mapper) { NumberedPaging paging = zeroBasedNumberedPaging(pageNumber, pageSize, pageResult.getOverallCount()); - List dtos = pageResult.getEntities().stream().map(mapper).collect(toList()); + List dtos = pageResult.getEntities().stream().map(mapper).collect(toList()); CollectionDto collectionDto = new CollectionDto( - createLinks(paging, selfLink), + createLinks(paging, selfLink, createLink), embedDtos(dtos)); collectionDto.setPage(pageNumber); collectionDto.setPageTotal(computePageTotal(pageSize, pageResult)); @@ -55,24 +56,16 @@ abstract class BasicCollectionToDtoMapper createLink) { Links.Builder linksBuilder = linkingTo() .with(page.links( - fromTemplate(baseUrl + "{?page,pageSize}"), + fromTemplate(selfLink + "{?page,pageSize}"), EnumSet.allOf(PagingRel.class))); - if (isCreatePermitted()) { - linksBuilder.single(link("create", createCreateLink())); - } + createLink.ifPresent(link -> linksBuilder.single(link("create", link))); return linksBuilder.build(); } - abstract boolean isCreatePermitted(); - - abstract String createCreateLink(); - - abstract String createSelfLink(); - - private Embedded embedDtos(List dtos) { + private Embedded embedDtos(List dtos) { return embeddedBuilder() .with(collectionName, dtos) .build(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java index 93eb372fe9..fcc4085486 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java @@ -5,38 +5,25 @@ import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; import javax.inject.Inject; +import java.util.Optional; public class ChangesetCollectionToDtoMapper extends BasicCollectionToDtoMapper { + private final ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper; private final ResourceLinks resourceLinks; @Inject public ChangesetCollectionToDtoMapper(ChangesetToChangesetDtoMapper changesetToChangesetDtoMapper, ResourceLinks resourceLinks) { super("changesets", changesetToChangesetDtoMapper); + this.changesetToChangesetDtoMapper = changesetToChangesetDtoMapper; this.resourceLinks = resourceLinks; } public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult, Repository repository) { - return super.map(pageNumber, pageSize, pageResult, changeset -> super.entityToDtoMapper.map(changeset, repository), createSelfLink(repository)); - } - - - @Override - String createCreateLink() { - return null; - } - - @Override - String createSelfLink() { - return null; + return super.map(pageNumber, pageSize, pageResult, createSelfLink(repository), Optional.empty(), changeset -> changesetToChangesetDtoMapper.map(changeset, repository)); } private String createSelfLink(Repository repository) { return resourceLinks.changeset().all(repository.getNamespace(), repository.getName()); } - - @Override - boolean isCreatePermitted() { - return false; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java index 8d13662b10..1550e57ce2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java @@ -1,9 +1,14 @@ package sonia.scm.api.v2.resources; +import sonia.scm.PageResult; import sonia.scm.group.Group; import sonia.scm.group.GroupPermissions; import javax.inject.Inject; +import java.util.Optional; + +import static java.util.Optional.empty; +import static java.util.Optional.of; public class GroupCollectionToDtoMapper extends BasicCollectionToDtoMapper { @@ -15,18 +20,15 @@ public class GroupCollectionToDtoMapper extends BasicCollectionToDtoMapper pageResult) { + return map(pageNumber, pageSize, pageResult, this.createSelfLink(), this.createCreateLink()); } - @Override - String createSelfLink() { + private Optional createCreateLink() { + return GroupPermissions.create().isPermitted() ? of(resourceLinks.groupCollection().create()): empty(); + } + + private String createSelfLink() { return resourceLinks.groupCollection().self(); } - - @Override - boolean isCreatePermitted() { - return GroupPermissions.create().isPermitted(); - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java index 9a5fbb1429..77674270d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java @@ -1,9 +1,14 @@ package sonia.scm.api.v2.resources; +import sonia.scm.PageResult; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; import javax.inject.Inject; +import java.util.Optional; + +import static java.util.Optional.empty; +import static java.util.Optional.of; // Mapstruct does not support parameterized (i.e. non-default) constructors. Thus, we need to use field injection. @SuppressWarnings("squid:S3306") @@ -17,18 +22,15 @@ public class RepositoryCollectionToDtoMapper extends BasicCollectionToDtoMapper< this.resourceLinks = resourceLinks; } - @Override - String createCreateLink() { - return resourceLinks.repositoryCollection().create(); + public CollectionDto map(int pageNumber, int pageSize, PageResult pageResult) { + return map(pageNumber, pageSize, pageResult, this.createSelfLink(), this.createCreateLink()); + } + + Optional createCreateLink() { + return RepositoryPermissions.create().isPermitted() ? of(resourceLinks.repositoryCollection().create()): empty(); } - @Override String createSelfLink() { return resourceLinks.repositoryCollection().self(); } - - @Override - boolean isCreatePermitted() { - return RepositoryPermissions.create().isPermitted(); - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java index 01517d63e7..c70bd268ff 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java @@ -1,9 +1,14 @@ package sonia.scm.api.v2.resources; +import sonia.scm.PageResult; import sonia.scm.user.User; import sonia.scm.user.UserPermissions; import javax.inject.Inject; +import java.util.Optional; + +import static java.util.Optional.empty; +import static java.util.Optional.of; // Mapstruct does not support parameterized (i.e. non-default) constructors. Thus, we need to use field injection. @SuppressWarnings("squid:S3306") @@ -17,18 +22,15 @@ public class UserCollectionToDtoMapper extends BasicCollectionToDtoMapper pageResult) { + return map(pageNumber, pageSize, pageResult, this.createSelfLink(), this.createCreateLink()); + } + + Optional createCreateLink() { + return UserPermissions.create().isPermitted() ? of(resourceLinks.userCollection().create()): empty(); } - @Override String createSelfLink() { return resourceLinks.userCollection().self(); } - - @Override - boolean isCreatePermitted() { - return UserPermissions.create().isPermitted(); - } }