package alien4cloud.model.application; import static alien4cloud.dao.model.FetchContext.SUMMARY; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import org.elasticsearch.annotation.DateField; import org.elasticsearch.annotation.ESAll; import org.elasticsearch.annotation.ESObject; import org.elasticsearch.annotation.Id; import org.elasticsearch.annotation.NestedObject; import org.elasticsearch.annotation.StringField; import org.elasticsearch.annotation.query.FetchContext; import org.elasticsearch.annotation.query.TermFilter; import org.elasticsearch.mapping.IndexType; 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.model.common.IDatableResource; import alien4cloud.model.common.IMetaProperties; import alien4cloud.model.common.ITaggableResource; import alien4cloud.model.common.Tag; import alien4cloud.model.deployment.IDeploymentSource; import alien4cloud.security.ISecuredResource; import alien4cloud.security.model.ApplicationRole; import alien4cloud.utils.jackson.ConditionalAttributes; import alien4cloud.utils.jackson.ConditionalOnAttribute; import alien4cloud.utils.jackson.JSonMapEntryArrayDeSerializer; import alien4cloud.utils.jackson.JSonMapEntryArraySerializer; import alien4cloud.utils.jackson.NotAnalyzedTextMapEntry; import lombok.Getter; import lombok.Setter; /** * Model for an application in alien. * * @author luc boutier */ @ESObject @Getter @Setter @JsonInclude(Include.NON_NULL) @ESAll(analyser = "simple") public class Application implements ISecuredResource, IDeploymentSource, ITaggableResource, IMetaProperties, IDatableResource { @Id @FetchContext(contexts = { SUMMARY }, include = { true }) private String id; @FetchContext(contexts = { SUMMARY }, include = { true }) @TermFilter @StringField(indexType = IndexType.not_analyzed) private String name; @StringField(indexType = IndexType.analyzed) private String description; @DateField(includeInAll = false, index = IndexType.no) private Date creationDate; @DateField(includeInAll = false, index = IndexType.no) private Date lastUpdateDate; @StringField(includeInAll = false, indexType = IndexType.no) private String imageId; @StringField(includeInAll = true, indexType = IndexType.analyzed) private List<Tag> tags; @StringField(includeInAll = true, indexType = IndexType.analyzed) private Map<String, String> metaProperties; @TermFilter(paths = { "key", "value" }) @NestedObject(nestedClass = NotAnalyzedTextMapEntry.class) @ConditionalOnAttribute(ConditionalAttributes.ES) @JsonDeserialize(using = JSonMapEntryArrayDeSerializer.class) @JsonSerialize(using = JSonMapEntryArraySerializer.class) @FetchContext(contexts = { SUMMARY }, include = { true }) private Map<String, Set<String>> userRoles; @TermFilter(paths = { "key", "value" }) @NestedObject(nestedClass = NotAnalyzedTextMapEntry.class) @ConditionalOnAttribute(ConditionalAttributes.ES) @JsonDeserialize(using = JSonMapEntryArrayDeSerializer.class) @JsonSerialize(using = JSonMapEntryArraySerializer.class) @FetchContext(contexts = { SUMMARY }, include = { true }) private Map<String, Set<String>> groupRoles; @Override public Class<ApplicationRole> roleEnum() { return ApplicationRole.class; } }