@Test public void testListArchiveContents() throws Exception { byte[] archive = createContentArchive(); try (ByteArrayInputStream stream = new ByteArrayInputStream(archive)) { byte[] hash = repository.addContent(stream); // hash is different from the simple overlay.xhtml as we add the content folder name in the // computation assertThat(hash, is(notNullValue())); List<String> contents = repository .listContent(hash, "", ContentFilter.Factory.createContentFilter(-1, false)) .stream() .map(ContentRepositoryElement::getPath) .collect(Collectors.toList()); assertThat(contents.size(), is(5)); assertThat( contents, CoreMatchers.hasItems( "test.jsp", "overlay.xhtml", "test/empty-file.txt", "test/", "empty-dir/")); hash = repository.addContentToExploded( hash, Collections.singletonList(new ExplodedContent("test/empty-file.txt", emptyStream())), true); hash = repository.addContentToExploded( hash, Collections.singletonList(new ExplodedContent("empty-dir", null)), true); contents = repository .listContent(hash, "", ContentFilter.Factory.createContentFilter(1, false)) .stream() .map(ContentRepositoryElement::getPath) .collect(Collectors.toList()); assertThat(contents, is(notNullValue())); assertThat(contents.size(), is(4)); assertThat( contents, CoreMatchers.hasItems("test.jsp", "overlay.xhtml", "test/", "empty-dir/")); contents = repository .listContent(hash, "", ContentFilter.Factory.createFileFilter(-1, false)) .stream() .map(ContentRepositoryElement::getPath) .collect(Collectors.toList()); assertThat(contents, is(notNullValue())); assertThat(contents.size(), is(3)); assertThat( contents, CoreMatchers.hasItems("test.jsp", "overlay.xhtml", "test/empty-file.txt")); } }
@Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { if (context.getProcessType() == ProcessType.SELF_CONTAINED) { throw DomainControllerLogger.ROOT_LOGGER.cannotReadContentFromSelfContainedServer(); } final Resource deploymentResource = context.readResource(PathAddress.EMPTY_ADDRESS); ModelNode contentItemNode = getContentItem(deploymentResource); // Validate this op is available if (!isManaged(contentItemNode)) { throw DomainControllerLogger.ROOT_LOGGER.cannotReadContentFromUnmanagedDeployment(); } final byte[] deploymentHash = CONTENT_HASH.resolveModelAttribute(context, contentItemNode).asBytes(); final ModelNode pathNode = DEPLOYMENT_CONTENT_PATH.resolveModelAttribute(context, operation); final String path; if (pathNode.isDefined()) { path = pathNode.asString(); } else { path = ""; } int depth = DEPTH.resolveModelAttribute(context, operation).asInt(); boolean explodable = ARCHIVE.resolveModelAttribute(context, operation).asBoolean(); try { for (ContentRepositoryElement content : contentRepository.listContent( deploymentHash, path, ContentFilter.Factory.createContentFilter(depth, explodable))) { ModelNode contentNode = new ModelNode(); contentNode.get(PATH).set(content.getPath()); contentNode.get(DIRECTORY).set(content.isFolder()); if (!content.isFolder()) { contentNode.get(FILE_SIZE).set(content.getSize()); } context.getResult().add(contentNode); } } catch (ExplodedContentException ex) { throw new OperationFailedException(ex.getMessage()); } }
@Test public void testListContents() throws Exception { byte[] archive = createArchive(Collections.singletonList("overlay.xhtml")); try (ByteArrayInputStream stream = new ByteArrayInputStream(archive)) { byte[] hash = repository.explodeContent(repository.addContent(stream)); String expResult = "b1f18e286615dda0643633ec31f1a17d90e48875"; // hash is different from the simple overlay.xhtml as we add the content folder name in the // computation assertThat(hash, is(notNullValue())); Path content = repository.getContent(hash).getPhysicalFile().toPath(); String contentHtml = readFileContent(content.resolve("overlay.xhtml")); String expectedContentHtml = readFileContent(getResourceAsStream("overlay.xhtml")); assertThat(contentHtml, is(expectedContentHtml)); assertThat(HashUtil.bytesToHexString(hash), is(expResult)); String updatedExpectedResult = "161a2c95b16d5ffede0721c2cec984ca51009082"; hash = repository.addContentToExploded( hash, Collections.singletonList( new ExplodedContent( "test.jsp", new ByteArrayInputStream("this is a test".getBytes(StandardCharsets.UTF_8)))), true); assertThat(hash, is(notNullValue())); assertThat(HashUtil.bytesToHexString(hash), is(updatedExpectedResult)); List<String> contents = repository .listContent(hash, "", ContentFilter.Factory.createContentFilter(-1, false)) .stream() .map(ContentRepositoryElement::getPath) .collect(Collectors.toList()); assertThat(contents.size(), is(2)); assertThat(contents, CoreMatchers.hasItems("test.jsp", "overlay.xhtml")); hash = repository.addContentToExploded( hash, Collections.singletonList(new ExplodedContent("test/empty-file.txt", emptyStream())), true); hash = repository.addContentToExploded( hash, Collections.singletonList(new ExplodedContent("empty-dir", null)), true); contents = repository .listContent(hash, "", ContentFilter.Factory.createContentFilter(-1, false)) .stream() .map(ContentRepositoryElement::getPath) .collect(Collectors.toList()); assertThat(contents, is(notNullValue())); assertThat(contents.size(), is(5)); assertThat( contents, CoreMatchers.hasItems( "test.jsp", "overlay.xhtml", "test/empty-file.txt", "test/", "empty-dir/")); hash = repository.removeContentFromExploded(hash, Collections.singletonList("test.jsp")); contents = repository .listContent(hash, "", ContentFilter.Factory.createFileFilter(-1, false)) .stream() .map(ContentRepositoryElement::getPath) .collect(Collectors.toList()); assertThat(contents, is(notNullValue())); assertThat(contents.size(), is(2)); assertThat(contents, CoreMatchers.hasItems("overlay.xhtml", "test/empty-file.txt")); } }