package io.lumify.analystsNotebook.model;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import io.lumify.analystsNotebook.AnalystsNotebookImageUtil;
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 CustomImage {
@JacksonXmlProperty(isAttribute = true)
private String id;
@JacksonXmlProperty(isAttribute = true)
private String data;
@JacksonXmlProperty(isAttribute = true)
private int dataLength;
public CustomImage() {
}
public CustomImage(String id, byte[] data) {
this.id = id;
data = AnalystsNotebookImageUtil.convertImageFormat(data);
this.data = AnalystsNotebookImageUtil.base64EncodedImageBytes(data);
dataLength = data.length;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public int getDataLength() {
return dataLength;
}
public void setDataLength(int dataLength) {
this.dataLength = dataLength;
}
public static List<CustomImage> createForVertices(Iterable<Vertex> vertices, OntologyRepository ontologyRepository) {
Map<String, CustomImage> customImageMap = new HashMap<String, CustomImage>();
for (Vertex vertex : vertices) {
String conceptType = LumifyProperties.CONCEPT_TYPE.getPropertyValue(vertex);
if (!customImageMap.containsKey(conceptType)) {
CustomImage customImage = null;
Concept concept = ontologyRepository.getConceptByIRI(conceptType);
byte[] glyphIcon = getGlyphIcon(concept, ontologyRepository);
if (glyphIcon != null) {
customImage = new CustomImage(conceptType, glyphIcon);
}
customImageMap.put(conceptType, customImage);
}
}
List<CustomImage> customImages = new ArrayList<CustomImage>();
for (CustomImage customImage : customImageMap.values()) {
if (customImage != null) {
customImages.add(customImage);
}
}
return customImages;
}
private static byte[] getGlyphIcon(Concept concept, OntologyRepository ontologyRepository) {
if (concept.hasGlyphIconResource()) {
return concept.getGlyphIcon();
} else {
concept = ontologyRepository.getParentConcept(concept);
if (concept != null) {
return getGlyphIcon(concept, ontologyRepository);
} else {
return null;
}
}
}
}