diff --git a/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java b/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java index 59fc70b9af..85764291a7 100644 --- a/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/RepositoryAccessITCase.java @@ -182,7 +182,8 @@ public class RepositoryAccessITCase { .then() .statusCode(HttpStatus.SC_OK) .extract() - .path("files.find{it.name=='a.txt'}._links.self.href"); + .path("_embedded.files.find{it.name=='a.txt'}._links.self.href"); + given() .when() .get(rootContentUrl) @@ -196,16 +197,22 @@ public class RepositoryAccessITCase { .then() .statusCode(HttpStatus.SC_OK) .extract() - .path("files.find{it.name=='subfolder'}._links.self.href"); - - String subfolderContentUrl= given() + .path("_embedded.files.find{it.name=='subfolder'}._links.self.href"); + String selfOfSubfolderUrl = given() .when() .get(subfolderSourceUrl) .then() .statusCode(HttpStatus.SC_OK) .extract() - .path("files[0]._links.self.href"); - + .path("_links.self.href"); + assertThat(subfolderSourceUrl).isEqualTo(selfOfSubfolderUrl); + String subfolderContentUrl = given() + .when() + .get(subfolderSourceUrl) + .then() + .statusCode(HttpStatus.SC_OK) + .extract() + .path("_embedded.files[0]._links.self.href"); given() .when() .get(subfolderContentUrl) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java index b8ffd7ff26..2b49f18fa1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultDto.java @@ -6,18 +6,13 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import java.util.Iterator; import java.util.List; @Getter @Setter @NoArgsConstructor -public class BrowserResultDto extends HalRepresentation implements Iterable { +public class BrowserResultDto extends HalRepresentation { private String revision; - private String tag; - private String branch; - // REVIEW files nicht embedded? - private List files; @Override @SuppressWarnings("squid:S1185") // We want to have this method available in this package @@ -25,16 +20,7 @@ public class BrowserResultDto extends HalRepresentation implements Iterable iterator() { - Iterator it = null; - - if (files != null) - { - it = files.iterator(); - } - - return it; + public void setFiles(List files) { + this.withEmbedded("files", files); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultToBrowserResultDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultToBrowserResultDtoMapper.java index 7abb1ae69b..c877cb0647 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultToBrowserResultDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BrowserResultToBrowserResultDtoMapper.java @@ -17,11 +17,9 @@ public class BrowserResultToBrowserResultDtoMapper { @Inject private ResourceLinks resourceLinks; - public BrowserResultDto map(BrowserResult browserResult, NamespaceAndName namespaceAndName) { + public BrowserResultDto map(BrowserResult browserResult, NamespaceAndName namespaceAndName, String path) { BrowserResultDto browserResultDto = new BrowserResultDto(); - browserResultDto.setTag(browserResult.getTag()); - browserResultDto.setBranch(browserResult.getBranch()); browserResultDto.setRevision(browserResult.getRevision()); List fileObjectDtoList = new ArrayList<>(); @@ -30,7 +28,7 @@ public class BrowserResultToBrowserResultDtoMapper { } browserResultDto.setFiles(fileObjectDtoList); - this.addLinks(browserResult, browserResultDto, namespaceAndName); + this.addLinks(browserResult, browserResultDto, namespaceAndName, path); return browserResultDto; } @@ -38,13 +36,14 @@ public class BrowserResultToBrowserResultDtoMapper { return fileObjectToFileObjectDtoMapper.map(fileObject, namespaceAndName, revision); } - private void addLinks(BrowserResult browserResult, BrowserResultDto dto, NamespaceAndName namespaceAndName) { + private void addLinks(BrowserResult browserResult, BrowserResultDto dto, NamespaceAndName namespaceAndName, String path) { + if (path.equals("/")) { + path = ""; + } if (browserResult.getRevision() == null) { - dto.add(Links.linkingTo().self(resourceLinks.source().selfWithoutRevision(namespaceAndName.getNamespace(), namespaceAndName.getName())).build()); + throw new IllegalStateException("missing revision in browser result for repository " + namespaceAndName + " and path " + path); } else { - dto.add(Links.linkingTo().self(resourceLinks.source().self(namespaceAndName.getNamespace(), namespaceAndName.getName(), browserResult.getRevision())).build()); + dto.add(Links.linkingTo().self(resourceLinks.source().sourceWithPath(namespaceAndName.getNamespace(), namespaceAndName.getName(), browserResult.getRevision(), path)).build()); } } - - } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectToFileObjectDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectToFileObjectDtoMapper.java index bc814c7e0c..fdcc5c56ca 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectToFileObjectDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileObjectToFileObjectDtoMapper.java @@ -10,7 +10,6 @@ import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.SubRepository; import javax.inject.Inject; -import java.net.URI; @Mapper public abstract class FileObjectToFileObjectDtoMapper extends BaseMapper { @@ -27,19 +26,14 @@ public abstract class FileObjectToFileObjectDtoMapper extends BaseMapper