add RepositoryToHalMapper as interface to map a repositoryDto outside of webapp

This commit is contained in:
Eduard Heimbuch
2020-03-25 09:54:12 +01:00
parent df285182a8
commit fd12464af4
4 changed files with 24 additions and 4 deletions

View File

@@ -0,0 +1,8 @@
package sonia.scm.web.api;
import de.otto.edison.hal.HalRepresentation;
import sonia.scm.repository.Repository;
public interface RepositoryToHalMapper {
HalRepresentation map(Repository repository);
}

View File

@@ -32,6 +32,11 @@ const MarginLeft = styled.div`
margin-left: 0.5rem;
`;
const FlexContainer = styled.div`
display: flex;
flex-direction: row;
`;
export default class Page extends React.Component<Props> {
componentDidUpdate() {
const { title } = this.props;
@@ -86,9 +91,9 @@ export default class Page extends React.Component<Props> {
<>
<div className="columns">
<div className="column">
<div className="is-flex">
<Title title={title} /> <MarginLeft>{afterTitle}</MarginLeft>
</div>
<FlexContainer>
<Title title={title} /> {afterTitle && <MarginLeft>{afterTitle}</MarginLeft>}
</FlexContainer>
<Subtitle subtitle={subtitle} />
</div>
{pageActions}

View File

@@ -3,6 +3,7 @@ package sonia.scm.api.v2.resources;
import com.google.inject.AbstractModule;
import com.google.inject.servlet.ServletScopes;
import org.mapstruct.factory.Mappers;
import sonia.scm.web.api.RepositoryToHalMapper;
public class MapperModule extends AbstractModule {
@Override
@@ -46,6 +47,8 @@ public class MapperModule extends AbstractModule {
bind(ScmViolationExceptionToErrorDtoMapper.class).to(Mappers.getMapper(ScmViolationExceptionToErrorDtoMapper.class).getClass());
bind(ExceptionWithContextToErrorDtoMapper.class).to(Mappers.getMapper(ExceptionWithContextToErrorDtoMapper.class).getClass());
bind(RepositoryToHalMapper.class).to(Mappers.getMapper(RepositoryToRepositoryDtoMapper.class).getClass());
// no mapstruct required
bind(MeDtoFactory.class);
bind(UIPluginDtoMapper.class);

View File

@@ -14,6 +14,7 @@ import sonia.scm.repository.api.Command;
import sonia.scm.repository.api.RepositoryService;
import sonia.scm.repository.api.RepositoryServiceFactory;
import sonia.scm.repository.api.ScmProtocol;
import sonia.scm.web.api.RepositoryToHalMapper;
import java.util.List;
@@ -25,7 +26,7 @@ import static java.util.stream.Collectors.toList;
// Mapstruct does not support parameterized (i.e. non-default) constructors. Thus, we need to use field injection.
@SuppressWarnings("squid:S3306")
@Mapper
public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Repository, RepositoryDto> {
public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Repository, RepositoryDto> implements RepositoryToHalMapper {
@Inject
private ResourceLinks resourceLinks;
@@ -34,6 +35,9 @@ public abstract class RepositoryToRepositoryDtoMapper extends BaseMapper<Reposit
abstract HealthCheckFailureDto toDto(HealthCheckFailure failure);
@Override
public abstract RepositoryDto map(Repository modelObject);
@ObjectFactory
RepositoryDto createDto(Repository repository) {
Links.Builder linksBuilder = linkingTo().self(resourceLinks.repository().self(repository.getNamespace(), repository.getName()));