From aa931b231d157252e9d05b59ba28dd9c6b18b5ca Mon Sep 17 00:00:00 2001 From: Lukas Harzenetter Date: Fri, 25 Nov 2022 14:08:19 +0100 Subject: [PATCH] DA Refinement logging (#699) --- org.eclipse.winery.model.adaptation/pom.xml | 10 ++- .../TopologyFragmentRefinement.java | 83 +++++++++++-------- .../TopologyFragmentRefinementTest.java | 16 +++- .../model/tosca/TDeploymentArtifact.java | 9 ++ .../AbstractFileBasedRepository.java | 2 +- 5 files changed, 82 insertions(+), 38 deletions(-) diff --git a/org.eclipse.winery.model.adaptation/pom.xml b/org.eclipse.winery.model.adaptation/pom.xml index b208c583af..73ec6c1fd2 100644 --- a/org.eclipse.winery.model.adaptation/pom.xml +++ b/org.eclipse.winery.model.adaptation/pom.xml @@ -96,7 +96,15 @@ ${checkstyle.addons.version} - org.apache.maven.pluginsmaven-compiler-plugin88 + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + diff --git a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java index a22b8191e3..ae91255ed7 100644 --- a/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java +++ b/org.eclipse.winery.model.adaptation/src/main/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinement.java @@ -215,6 +215,7 @@ private boolean applyDeploymentArtifactMapping(RefinementCandidate refinement, T .filter(mapping -> mapping.getDetectorElement().getId().equals(detectorNode.getId())) .anyMatch(mapping -> { if (ModelUtilities.isOfType(mapping.getArtifactType(), deploymentArtifact.getArtifactType(), this.artifactTypes)) { + // only do the actual transformation in the transformation step, not the "is-applicable" step if (idMapping != null) { TNodeTemplate addedNode = topology.getNodeTemplate(idMapping.get(mapping.getRefinementElement().getId())); if (addedNode != null) { @@ -286,46 +287,63 @@ TDeploymentArtifact translateDeploymentArtifact(OTDeploymentArtifactMapping mapp HttpPost httpPost = new HttpPost(service.url); httpPost.setEntity(multipartBuilder.build()); + LOGGER.info("Sending request: {}", httpPost); + try (CloseableHttpResponse response = httpClient.execute(httpPost)) { - ArtifactTemplateId translatedArtifactId = new ArtifactTemplateId( - artifactTemplateId.getNamespace().getDecoded(), - VersionSupport.getNewComponentVersionId(artifactTemplateId, mapping.getTargetArtifactType().getLocalPart()), - false - ); - this.repository.setElement( - translatedArtifactId, - new TArtifactTemplate.Builder(translatedArtifactId.getXmlId().getDecoded(), mapping.getTargetArtifactType()) - .build() - ); - - String fileName = "translated"; - if (response.getFirstHeader("Content-Disposition") != null) { - String value = response.getFirstHeader("Content-Disposition").getValue(); - if (value != null) { - for (String contentDisposition : value.split(" ")) { - if (contentDisposition.startsWith("filename=") && contentDisposition.length() > "filename=".length() + 1) { - fileName = contentDisposition.substring(contentDisposition.indexOf("=") + 1); + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode >= 200 && statusCode < 300) { + ArtifactTemplateId translatedArtifactId = new ArtifactTemplateId( + artifactTemplateId.getNamespace().getDecoded(), + VersionSupport.getNewComponentVersionId(artifactTemplateId, mapping.getTargetArtifactType().getLocalPart()), + false + ); + this.repository.setElement( + translatedArtifactId, + new TArtifactTemplate.Builder(translatedArtifactId.getXmlId().getDecoded(), mapping.getTargetArtifactType()) + .setName(translatedArtifactId.getXmlId().getDecoded()) + .build() + ); + LOGGER.info("Created new Artifact Template with QName \"{}\"", translatedArtifactId.getQName()); + + String fileName = "translated"; + if (response.getFirstHeader("Content-Disposition") != null) { + String value = response.getFirstHeader("Content-Disposition").getValue(); + if (value != null) { + for (String contentDisposition : value.split(" ")) { + if (contentDisposition.startsWith("filename=") && contentDisposition.length() > "filename=".length() + 1) { + fileName = contentDisposition.substring(contentDisposition.indexOf("=") + 1); + } } } } - } - ArtifactTemplateFilesDirectoryId filesId = new ArtifactTemplateFilesDirectoryId(translatedArtifactId); - if (response.getEntity() != null) { - try (BufferedInputStream contentStream = new BufferedInputStream(response.getEntity().getContent())) { - repository.putContentToFile( - new RepositoryFileReference(filesId, fileName), - contentStream - ); + LOGGER.info("Saving translated file \"{}\"", fileName); + ArtifactTemplateFilesDirectoryId filesId = new ArtifactTemplateFilesDirectoryId(translatedArtifactId); + if (response.getEntity() != null) { + try (BufferedInputStream contentStream = new BufferedInputStream(response.getEntity().getContent())) { + repository.putContentToFile( + new RepositoryFileReference(filesId, fileName), + contentStream + ); - BackendUtils.synchronizeReferences(RepositoryFactory.getRepository(), translatedArtifactId); + BackendUtils.synchronizeReferences(RepositoryFactory.getRepository(), translatedArtifactId); + LOGGER.info("Successfully saved file!"); - return new TDeploymentArtifact.Builder(deploymentArtifact.getName() + "-translated", mapping.getTargetArtifactType()) - .setArtifactRef(translatedArtifactId.getQName()) - .build(); + TDeploymentArtifact translatedArtifact = new TDeploymentArtifact.Builder(deploymentArtifact.getName() + "-translated", mapping.getTargetArtifactType()) + .setArtifactRef(translatedArtifactId.getQName()) + .build(); + LOGGER.info("Created \"{}\"", translatedArtifact); + + return translatedArtifact; + } + } else { + LOGGER.error("Service did not respond with a translated file!"); } } else { - LOGGER.error("Service did not respond with a translated file!"); + LOGGER.error("Server responded with Status {} and error \"{}\"", + statusCode, + new String(response.getEntity().getContent().readAllBytes()) + ); } } catch (IOException e) { LOGGER.error("Could not refine DA...!", e); @@ -334,14 +352,13 @@ TDeploymentArtifact translateDeploymentArtifact(OTDeploymentArtifactMapping mapp } } catch (IOException e) { LOGGER.error("Could not refine DA...!", e); - LOGGER.warn("Defaulting to already contained DA!"); } catch (WineryRepositoryException e) { LOGGER.error("Error while zipping the files in the artifact!", e); } } } - LOGGER.warn("Using existing DA..."); + LOGGER.warn("Defaulting to already contained DA!"); return deploymentArtifact; } diff --git a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinementTest.java b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinementTest.java index 85731f1250..315514d0ea 100644 --- a/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinementTest.java +++ b/org.eclipse.winery.model.adaptation/src/test/java/org/eclipse/winery/model/adaptation/substitution/refinement/topologyrefinement/TopologyFragmentRefinementTest.java @@ -24,6 +24,7 @@ import org.eclipse.winery.common.configuration.DARefinementConfigurationObject; import org.eclipse.winery.model.ids.definitions.ArtifactTemplateId; +import org.eclipse.winery.model.tosca.TArtifactTemplate; import org.eclipse.winery.model.tosca.TDeploymentArtifact; import org.eclipse.winery.model.tosca.extensions.OTDeploymentArtifactMapping; import org.eclipse.winery.repository.TestWithGitBackedRepository; @@ -71,9 +72,9 @@ public void testDeploymentArtifactTranslation(WireMockRuntimeInfo mockServer) th service.url = mockServer.getHttpBaseUrl() + "/endpoint"; service.canRefine = new DARefinementConfigurationObject.TransformationCapabilities(); service.canRefine.from = new ArrayList<>(); - service.canRefine.from.add("TestType"); + service.canRefine.from.add(sourceType.getLocalPart()); service.canRefine.to = new ArrayList<>(); - service.canRefine.to.add("TargetType"); + service.canRefine.to.add(targetType.getLocalPart()); Map configMap = new HashMap<>(); configMap.put("testRefinementService", service); @@ -114,8 +115,17 @@ public void testDeploymentArtifactTranslation(WireMockRuntimeInfo mockServer) th assertNotNull(transformationResult); assertNotEquals(testDa, transformationResult); + assertEquals(targetType, transformationResult.getArtifactType()); + assertEquals(testDa.getName() + "-translated", transformationResult.getName()); - ArtifactTemplateFilesDirectoryId filesDirectoryId = new ArtifactTemplateFilesDirectoryId(new ArtifactTemplateId(transformationResult.getArtifactRef())); + ArtifactTemplateId artifactTemplateId = new ArtifactTemplateId(transformationResult.getArtifactRef()); + + TArtifactTemplate element = repository.getElement(artifactTemplateId); + assertEquals(targetType, element.getType()); + assertEquals("ArtifactTemplateWithFilesAndSources-ArtifactTypeWithoutProperties_TargetType-w1-wip1", element.getId()); + assertEquals("ArtifactTemplateWithFilesAndSources-ArtifactTypeWithoutProperties_TargetType-w1-wip1", element.getName()); + + ArtifactTemplateFilesDirectoryId filesDirectoryId = new ArtifactTemplateFilesDirectoryId(artifactTemplateId); RepositoryFileReference repositoryFileReference = new RepositoryFileReference(filesDirectoryId, "test.zip"); assertEquals( Files.size(Paths.get(ClassLoader.getSystemClassLoader().getResource("__files/test.zip").toURI())), // 128 bytes diff --git a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java index 4491c1790d..d12bd4fad3 100644 --- a/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java +++ b/org.eclipse.winery.model/org.eclipse.winery.model.tosca.canonical/src/main/java/org/eclipse/winery/model/tosca/TDeploymentArtifact.java @@ -43,6 +43,15 @@ public void accept(Visitor visitor) { visitor.visit(this); } + @Override + public String toString() { + return "TDeploymentArtifact{" + + "name='" + name + '\'' + + ", artifactType=" + artifactType + + ", artifactRef=" + artifactRef + + '}'; + } + public static class Builder extends TDeploymentOrImplementationArtifact.Builder { public Builder(String name, QName artifactType) { diff --git a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/AbstractFileBasedRepository.java b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/AbstractFileBasedRepository.java index eb8ae732e6..723e482823 100644 --- a/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/AbstractFileBasedRepository.java +++ b/org.eclipse.winery.repository/src/main/java/org/eclipse/winery/repository/backend/filebased/AbstractFileBasedRepository.java @@ -587,7 +587,7 @@ public void writeInputStreamToPath(Path targetPath, InputStream inputStream) thr FileUtils.createDirectory(targetPath.getParent()); try { - LOGGER.debug("Wrote {} bytes to \"{}\"", + LOGGER.debug("Wrote {} bytes to \"{}\"", Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING), targetPath );