package org.alien4cloud.tosca.model.templates; import java.util.Map; import java.util.Set; import org.elasticsearch.annotation.MapKeyValue; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import alien4cloud.json.deserializer.PropertyValueDeserializer; import org.alien4cloud.tosca.model.definitions.AbstractPropertyValue; import org.alien4cloud.tosca.model.definitions.DeploymentArtifact; import org.alien4cloud.tosca.model.definitions.IValue; import org.alien4cloud.tosca.model.definitions.Interface; import alien4cloud.utils.jackson.ConditionalAttributes; import alien4cloud.utils.jackson.ConditionalOnAttribute; import alien4cloud.utils.jackson.JSonMapEntryArrayDeSerializer; import alien4cloud.utils.jackson.JSonMapEntryArraySerializer; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; /** * Specifies a kind of a component making up the cloud application. * * @author luc boutier */ @Getter @Setter @NoArgsConstructor public class NodeTemplate extends AbstractTemplate { /** * The requirement that this node template defines */ @MapKeyValue @ConditionalOnAttribute(value = { ConditionalAttributes.REST, ConditionalAttributes.ES_1_2 }) @JsonDeserialize(using = JSonMapEntryArrayDeSerializer.class) @JsonSerialize(using = JSonMapEntryArraySerializer.class) private Map<String, Requirement> requirements; /** * Relationships between node templates */ @MapKeyValue @ConditionalOnAttribute(value = { ConditionalAttributes.REST, ConditionalAttributes.ES_1_2 }) @JsonDeserialize(using = JSonMapEntryArrayDeSerializer.class) @JsonSerialize(using = JSonMapEntryArraySerializer.class) private Map<String, RelationshipTemplate> relationships; /** * The capabilities that this node template defines */ @MapKeyValue @ConditionalOnAttribute(value = { ConditionalAttributes.REST, ConditionalAttributes.ES_1_2 }) @JsonDeserialize(using = JSonMapEntryArrayDeSerializer.class) @JsonSerialize(using = JSonMapEntryArraySerializer.class) private Map<String, Capability> capabilities; /** * The {@link NodeGroup}s this template is member of. */ private Set<String> groups; /** * Template portability indicators. */ @ConditionalOnAttribute(ConditionalAttributes.REST) @JsonDeserialize(contentUsing = PropertyValueDeserializer.class) @JsonInclude(Include.NON_NULL) private Map<String, AbstractPropertyValue> portability; public NodeTemplate(String type, Map<String, AbstractPropertyValue> properties, Map<String, IValue> attributes, Map<String, RelationshipTemplate> relationships, Map<String, Requirement> requirements, Map<String, Capability> capabilities, Map<String, Interface> interfaces, Map<String, DeploymentArtifact> artifacts) { this.setType(type); this.setProperties(properties); this.setArtifacts(artifacts); this.setAttributes(attributes); this.relationships = relationships; this.requirements = requirements; this.capabilities = capabilities; this.setInterfaces(interfaces); } }