package io.lumify.analystsNotebook.model;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import io.lumify.analystsNotebook.AnalystsNotebookVersion;
import io.lumify.core.model.ontology.Concept;
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 EntityType {
public static final String ONTOLOGY_CONCEPT_METADATA_KEY_SUFFIX = "#iconFile";
@JacksonXmlProperty(isAttribute = true)
private String name;
@JacksonXmlProperty(isAttribute = true)
private String iconFile;
public EntityType() {
}
public EntityType(String name, String iconFile) {
this.name = name;
this.iconFile = iconFile;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIconFile() {
return iconFile;
}
public void setIconFile(String iconFile) {
this.iconFile = iconFile;
}
public static List<EntityType> createForVertices(Iterable<Vertex> vertices, OntologyRepository ontologyRepository, AnalystsNotebookVersion version) {
Map<String, String> conceptTypeIconFileMap = new HashMap<String, String>();
for (Vertex vertex : vertices) {
String conceptType = LumifyProperties.CONCEPT_TYPE.getPropertyValue(vertex);
if (!conceptTypeIconFileMap.containsKey(conceptType)) {
Concept concept = ontologyRepository.getConceptByIRI(conceptType);
String iconFile = getMetadataIconFile(concept, ontologyRepository, version);
if (iconFile == null) {
iconFile = version.getDefaultIconFile();
}
conceptTypeIconFileMap.put(conceptType, iconFile);
}
}
List<EntityType> entityTypes = new ArrayList<EntityType>();
for (Map.Entry<String, String> entry : conceptTypeIconFileMap.entrySet()) {
entityTypes.add(new EntityType(entry.getKey(), entry.getValue()));
}
return entityTypes;
}
private static String getMetadataIconFile(Concept concept, OntologyRepository ontologyRepository, AnalystsNotebookVersion version) {
Map<String, String> metadata = concept.getMetadata();
String ontologyConceptMetadataIconFileKey = version.getOntologyConceptMetadataKeyPrefix() + ONTOLOGY_CONCEPT_METADATA_KEY_SUFFIX;
if (metadata.containsKey(ontologyConceptMetadataIconFileKey)) {
return metadata.get(ontologyConceptMetadataIconFileKey);
} else {
concept = ontologyRepository.getParentConcept(concept);
if (concept != null) {
return getMetadataIconFile(concept, ontologyRepository, version);
} else {
return null;
}
}
}
}