package org.alien4cloud.tosca.editor; import java.util.List; import javax.inject.Inject; import io.swagger.annotations.Api; import org.hibernate.validator.constraints.NotBlank; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.alien4cloud.tosca.model.types.CapabilityType; import org.alien4cloud.tosca.model.types.NodeType; import org.alien4cloud.tosca.model.types.RelationshipType; import org.alien4cloud.tosca.model.templates.Capability; import org.alien4cloud.tosca.model.templates.RelationshipTemplate; import alien4cloud.rest.model.RestResponse; import alien4cloud.rest.model.RestResponseBuilder; import alien4cloud.tosca.context.ToscaContext; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; /** * This controller provides helper operations to find input candidates from the editor. * * This is not intended to be a user API. */ @RestController @RequestMapping({ "/rest/v2/editor/{topologyId}/inputhelper", "/rest/latest/editor/{topologyId}/inputhelper" }) @Api public class EditorInputHelperController { @Inject private EditorInputHelperService editorService; /** * Get the possible inputs candidates to be associated with this node template property. */ @ApiOperation(value = "Get the possible inputs candidates to be associated with this property.", notes = "Application role required [ APPLICATION_MANAGER | APPLICATION_DEVOPS ]") @RequestMapping(value = "/node", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public RestResponse<List<String>> getNodetemplatePropertyInputCandidate( @ApiParam(value = "The topology id.", required = true) @NotBlank @PathVariable final String topologyId, @ApiParam(value = "The node temlate id.", required = true) @NotBlank @RequestParam(value = "nodeTemplateName") final String nodeTemplateName, @ApiParam(value = "The property id.", required = true) @NotBlank @RequestParam("propertyId") final String propertyId) { List<String> inputCandidates = editorService.getInputCandidates(topologyId, nodeTemplateName, nodeTemplate -> ToscaContext.get(NodeType.class, nodeTemplate.getType()).getProperties().get(propertyId)); return RestResponseBuilder.<List<String>> builder().data(inputCandidates).build(); } /** * Get the possible inputs candidates to be associated with this capability property. */ @ApiOperation(value = "Get the possible inputs candidates to be associated with this capability property.", notes = "Application role required [ APPLICATION_MANAGER | APPLICATION_DEVOPS ]") @RequestMapping(value = "/capability", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public RestResponse<List<String>> getCapabilitiesPropertyInputCandidate( @ApiParam(value = "The topology id.", required = true) @NotBlank @PathVariable final String topologyId, @ApiParam(value = "The node temlate id.", required = true) @NotBlank @RequestParam(value = "nodeTemplateName") final String nodeTemplateName, @ApiParam(value = "The property id.", required = true) @NotBlank @RequestParam(value = "propertyId") final String propertyId, @ApiParam(value = "The capability template id.", required = true) @NotBlank @RequestParam(value = "capabilityId") final String capabilityId) { List<String> inputCandidates = editorService.getInputCandidates(topologyId, nodeTemplateName, nodeTemplate -> { Capability capabilityTemplate = nodeTemplate.getCapabilities().get(capabilityId); return ToscaContext.get(CapabilityType.class, capabilityTemplate.getType()).getProperties().get(propertyId); }); return RestResponseBuilder.<List<String>> builder().data(inputCandidates).build(); } /** * Get the possible inputs candidates to be associated with this relationship property. */ @ApiOperation(value = "Get the possible inputs candidates to be associated with this relationship property.", notes = "Application role required [ APPLICATION_MANAGER | APPLICATION_DEVOPS ]") @RequestMapping(value = "/relationship", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) public RestResponse<List<String>> getRelationshipPropertyInputCandidate( @ApiParam(value = "The topology id.", required = true) @NotBlank @PathVariable final String topologyId, @ApiParam(value = "The node temlate id.", required = true) @NotBlank @RequestParam(value = "nodeTemplateName") final String nodeTemplateName, @ApiParam(value = "The property id.", required = true) @NotBlank @RequestParam(value = "propertyId") final String propertyId, @ApiParam(value = "The relationship template id.", required = true) @NotBlank @RequestParam(value = "relationshipId") final String relationshipId) { List<String> inputCandidates = editorService.getInputCandidates(topologyId, nodeTemplateName, nodeTemplate -> { RelationshipTemplate relationshipTemplate = nodeTemplate.getRelationships().get(relationshipId); return ToscaContext.get(RelationshipType.class, relationshipTemplate.getType()).getProperties().get(propertyId); }); return RestResponseBuilder.<List<String>> builder().data(inputCandidates).build(); } }