use of org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplateResource in project winery by eclipse.
the class RestUtils method createArtifactTemplate.
public static ArtifactTemplateId createArtifactTemplate(InputStream uploadedInputStream, FormDataContentDisposition fileDetail, FormDataBodyPart body, QName artifactType, UriInfo uriInfo) {
ArtifactTemplatesResource templateResource = new ArtifactTemplatesResource();
QNameWithTypeApiData qNameApiData = new QNameWithTypeApiData();
qNameApiData.localname = "xaasPackager_" + fileDetail.getFileName();
qNameApiData.namespace = "http://opentosca.org/xaaspackager";
qNameApiData.type = artifactType.toString();
templateResource.onJsonPost(qNameApiData);
ArtifactTemplateId artifactTemplateId = new ArtifactTemplateId("http://opentosca.org/xaaspackager", "xaasPackager_" + fileDetail.getFileName(), false);
ArtifactTemplateResource atRes = new ArtifactTemplateResource(artifactTemplateId);
atRes.getFilesResource().onPost(uploadedInputStream, fileDetail, body, uriInfo);
return artifactTemplateId;
}
use of org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplateResource in project winery by eclipse.
the class EdmmResource method createPlaceholders.
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Path("create-placeholders-scripts")
public Response createPlaceholders(String componentType, @Context UriInfo uriInfo) throws IOException {
// adding the interface to the component node type
NodeTypeResource nodeTypeResource = new NodeTypesResource().getComponentInstanceResource(EncodingUtil.URLencode(NODE_TYPES), componentType);
// the interfaces will be overridden
nodeTypeResource.getInterfaces().onPost(buildInterfacesForNodeType(LIFECYCLE_NAME, LIFECYCLE));
for (String operation : LIFECYCLE) {
// adding a new artifact template
final String artifactLocalName = componentType + "-" + StringUtils.capitalize(operation);
ArtifactTemplatesResource artifactTemplatesResource = new ArtifactTemplatesResource();
QNameWithTypeApiData qNameWithTypeApiData = new QNameWithTypeApiData(artifactLocalName, ARTIFACT_TEMPLATES, "{" + ARTIFACT_TYPES + "}Script");
artifactTemplatesResource.onJsonPost(qNameWithTypeApiData);
// adding the placeholder file
ArtifactTemplateResource artifactTemplateResource = artifactTemplatesResource.getComponentInstanceResource(EncodingUtil.URLencode(ARTIFACT_TEMPLATES), artifactLocalName);
boolean fileExists = artifactTemplateResource.getFilesResource().getAllFileMetas().stream().anyMatch(fileMeta -> fileMeta.getName().equals(operation + ".sh"));
// if the file exists it will be overridden, but we do not want that.
if (!fileExists) {
artifactTemplateResource.getFilesResource().putContentToFile(operation + ".sh", getPlaceholderFile(operation), "text/x-sh");
artifactTemplateResource.synchronizeReferences();
}
// creating a new node type implementation
String nodeTypeImplementationLocalName = componentType + "-IA";
NodeTypeImplementationsResource nodeTypeImplementationsResource = new NodeTypeImplementationsResource();
qNameWithTypeApiData = new QNameWithTypeApiData(nodeTypeImplementationLocalName, NODE_TYPE_IMPLEMENTATIONS, "{" + NODE_TYPES + "}" + componentType);
nodeTypeImplementationsResource.onJsonPost(qNameWithTypeApiData);
// linking the artifact template to the node type implementation
NodeTypeImplementationResource nodeTypeImplementationResource = nodeTypeImplementationsResource.getComponentInstanceResource(EncodingUtil.URLencode(NODE_TYPE_IMPLEMENTATIONS), nodeTypeImplementationLocalName);
GenerateArtifactApiData artifactApiData = new GenerateArtifactApiData();
artifactApiData.artifactName = operation;
artifactApiData.artifactTemplate = "{" + ARTIFACT_TEMPLATES + "}" + artifactLocalName;
artifactApiData.interfaceName = LIFECYCLE_NAME;
artifactApiData.operationName = operation;
boolean implementationResourceExists = nodeTypeImplementationResource.getImplementationArtifacts().getAllArtifactResources().stream().anyMatch(artifactResource -> {
TImplementationArtifact implementationArtifact = artifactResource.getImplementationArtifact();
return operation.equals(implementationArtifact.getOperationName()) && LIFECYCLE_NAME.equals(implementationArtifact.getInterfaceName()) && implementationArtifact.getArtifactRef() != null && artifactApiData.artifactTemplate.equals(implementationArtifact.getArtifactRef().toString());
});
if (!implementationResourceExists) {
nodeTypeImplementationResource.getImplementationArtifacts().generateArtifact(artifactApiData, uriInfo);
}
}
return Response.status(Response.Status.CREATED).build();
}
use of org.eclipse.winery.repository.rest.resources.entitytemplates.artifacttemplates.ArtifactTemplateResource in project winery by eclipse.
the class NodeTemplateResource method createStateElement.
@POST
@Path("state")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response createStateElement(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("file") FormDataBodyPart body, @Context UriInfo uriInfo) {
LOGGER.debug("Received state artifact for Node Template {} with ID {}", this.nodeTemplate.getName(), this.nodeTemplate.getId());
LOGGER.debug("Artifact file name is {} and is {} bytes big.", fileDetail.getFileName(), fileDetail.getSize());
// ensure that the artifact type exists.
IRepository repo = RepositoryFactory.getRepository();
repo.getElement(new ArtifactTypeId(OpenToscaBaseTypes.stateArtifactType));
// create DA
Optional<TDeploymentArtifact> stateDeploymentArtifact = this.getDeploymentArtifacts().getDeploymentArtifacts().stream().filter(artifact -> artifact.getArtifactType() != null).filter(artifact -> artifact.getArtifactType().equals(OpenToscaBaseTypes.stateArtifactType)).findFirst();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
TDeploymentArtifact deploymentArtifact = new TDeploymentArtifact.Builder("state", OpenToscaBaseTypes.stateArtifactType).build();
String componentVersion = dateFormat.format(new Date());
ArtifactTemplateId newArtifactTemplateId = new ArtifactTemplateId("http://opentosca.org/artifacttemplates", this.getServiceTemplateResource().getServiceTemplate().getName() + "-" + this.nodeTemplate.getId() + "-State" + WineryVersion.WINERY_NAME_FROM_VERSION_SEPARATOR + componentVersion + WineryVersion.WINERY_VERSION_SEPARATOR + WineryVersion.WINERY_VERSION_PREFIX + "1", false);
LOGGER.debug("Created Artifact Template of Type \"State\" called {}", newArtifactTemplateId.getQName());
// if there is already a state artifact, update the file
if (stateDeploymentArtifact.isPresent()) {
LOGGER.debug("Updating the state DA of the Node Template...");
deploymentArtifact = stateDeploymentArtifact.get();
// create new ArtifactTemplate version
ArtifactTemplateId oldArtifactTemplateId = new ArtifactTemplateId(deploymentArtifact.getArtifactRef());
List<WineryVersion> versions = WineryVersionUtils.getAllVersionsOfOneDefinition(oldArtifactTemplateId, repo);
WineryVersion newWineryVersion = VersionUtils.getNewWineryVersion(versions);
newWineryVersion.setWorkInProgressVersion(0);
newWineryVersion.setComponentVersion(componentVersion);
newArtifactTemplateId = (ArtifactTemplateId) VersionSupport.getDefinitionInTheGivenVersion(oldArtifactTemplateId, newWineryVersion);
} else {
LOGGER.debug("Creating the state DA of the Node Template...");
List<TDeploymentArtifact> list = this.nodeTemplate.getDeploymentArtifacts();
if (Objects.isNull(list)) {
list = new ArrayList<>();
this.nodeTemplate.setDeploymentArtifacts(list);
}
list.add(deploymentArtifact);
}
new ArtifactTemplatesResource().onJsonPost(new QNameWithTypeApiData(newArtifactTemplateId.getQName().getLocalPart(), newArtifactTemplateId.getQName().getNamespaceURI(), OpenToscaBaseTypes.stateArtifactType.toString()));
LOGGER.debug("Attaching the new Artifact...");
deploymentArtifact.setArtifactRef(newArtifactTemplateId.getQName());
Response response = new ArtifactTemplateResource(newArtifactTemplateId).getFilesResource().onPost(uploadedInputStream, fileDetail, body, uriInfo, this.nodeTemplate.getId() + ".state");
if (response.getStatus() != Response.Status.CREATED.getStatusCode()) {
LOGGER.debug("Could not create artifact file! Response was {}", response);
return response;
}
LOGGER.debug("Persisting now...");
return RestUtils.persist(this.res);
}
Aggregations