package alien4cloud.model.common; import javax.validation.constraints.NotNull; import org.elasticsearch.annotation.ESObject; import org.elasticsearch.annotation.Id; import org.elasticsearch.annotation.ObjectField; import org.elasticsearch.annotation.StringField; import org.elasticsearch.annotation.query.TermFilter; import org.elasticsearch.annotation.query.TermsFacet; import org.elasticsearch.mapping.IndexType; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import alien4cloud.json.deserializer.PropertyValueDeserializer; import org.alien4cloud.tosca.model.definitions.PropertyDefinition; import org.alien4cloud.tosca.model.definitions.PropertyValue; import alien4cloud.tosca.container.validation.ToscaPropertyConstraint; import alien4cloud.tosca.container.validation.ToscaPropertyDefaultValueConstraints; import alien4cloud.tosca.container.validation.ToscaPropertyDefaultValueType; import alien4cloud.tosca.container.validation.ToscaPropertyPostValidationGroup; import alien4cloud.ui.form.annotation.FormLabel; import alien4cloud.ui.form.annotation.FormProperties; import alien4cloud.ui.form.annotation.FormPropertyDefinition; import alien4cloud.ui.form.annotation.FormValidValues; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; /** * Predefined configuration for tag edit */ @ESObject @Getter @Setter @JsonInclude(JsonInclude.Include.NON_NULL) @ToscaPropertyDefaultValueType @ToscaPropertyConstraint @ToscaPropertyDefaultValueConstraints(groups = { ToscaPropertyPostValidationGroup.class }) @FormProperties({ "name", "description", "required", "target", "type", "password", "default", "constraints" }) public class MetaPropConfiguration extends PropertyDefinition { /** * Auto generated id */ @Id private String id; /** * The name of the tag */ @TermFilter @StringField(includeInAll = true, indexType = IndexType.not_analyzed) @NotNull @FormLabel("COMMON.NAME") private String name; /** * Target of the tag configuration (application or component or cloud) */ @StringField(includeInAll = true, indexType = IndexType.not_analyzed) @FormValidValues({ "application", "component", "location" }) @NotNull @TermsFacet @FormLabel("COMMON.TARGET") private String target; @JsonProperty("default") @JsonDeserialize(using = PropertyValueDeserializer.class) @Getter(AccessLevel.NONE) @Setter(AccessLevel.NONE) private PropertyValue defaultValue; @ObjectField(enabled = false) @FormPropertyDefinition(type = "string") public PropertyValue getDefault() { return this.defaultValue; } public void setDefault(PropertyValue defaultValue) { this.defaultValue = defaultValue; } }