package io.lumify.analystsNotebook.model; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import io.lumify.core.model.ontology.Concept; import io.lumify.core.model.ontology.OntologyProperty; import io.lumify.core.model.ontology.OntologyRepository; import io.lumify.core.model.properties.LumifyProperties; import org.securegraph.Vertex; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class AttributeClass { public static final String NAME_SUBTITLE = "subtitle"; public static final String NAME_TIME = "time"; public static final String NAME_IMAGE_URL = "imageUrl"; public static final String TYPE_FLAG = "AttFlag"; public static final String TYPE_NUMBER = "AttNumber"; public static final String TYPE_TEXT = "AttText"; public static final String TYPE_TIME = "AttTime"; @JacksonXmlProperty(isAttribute = true) private String name; @JacksonXmlProperty(isAttribute = true) private String type; @JacksonXmlProperty(isAttribute = true) private boolean showValue; @JacksonXmlProperty(isAttribute = true) private boolean visible; public AttributeClass() { } public AttributeClass(String name, String type, boolean displayOnChart) { this.name = name; this.type = type; showValue = displayOnChart; visible = displayOnChart; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public boolean isShowValue() { return showValue; } public void setShowValue(boolean showValue) { this.showValue = showValue; } public boolean isVisible() { return visible; } public void setVisible(boolean visible) { this.visible = visible; } public static List<AttributeClass> createForVertices(Iterable<Vertex> vertices, OntologyRepository ontologyRepository) { Map<String, List<AttributeClass>> conceptTypeAttributeClassListMap = new HashMap<String, List<AttributeClass>>(); for (Vertex vertex : vertices) { String conceptType = LumifyProperties.CONCEPT_TYPE.getPropertyValue(vertex); if (!conceptTypeAttributeClassListMap.containsKey(conceptType)) { List<AttributeClass> conceptAttributeClasses = new ArrayList<AttributeClass>(); Concept concept = ontologyRepository.getConceptByIRI(conceptType); for (OntologyProperty property : concept.getProperties()) { if (property.getUserVisible()) { String name = property.getTitle(); String type = AttributeClass.TYPE_TEXT; AttributeClass attributeClass = new AttributeClass(name, type, false); conceptAttributeClasses.add(attributeClass); } } conceptTypeAttributeClassListMap.put(conceptType, conceptAttributeClasses); } } List<AttributeClass> attributeClasses = new ArrayList<AttributeClass>(); for (List<AttributeClass> conceptAttributeClasses : conceptTypeAttributeClassListMap.values()) { for (AttributeClass attributeClass : conceptAttributeClasses) { attributeClasses.add(attributeClass); } } return attributeClasses; } }