package io.lumify.mimeTypeOntologyMapper;
import io.lumify.core.ingest.graphProperty.GraphPropertyWorkData;
import io.lumify.core.ingest.graphProperty.GraphPropertyWorker;
import io.lumify.core.ingest.graphProperty.GraphPropertyWorkerPrepareData;
import io.lumify.core.model.ontology.Concept;
import io.lumify.core.model.properties.LumifyProperties;
import io.lumify.core.util.LumifyLogger;
import io.lumify.core.util.LumifyLoggerFactory;
import org.securegraph.Element;
import org.securegraph.Property;
import java.io.InputStream;
public class MimeTypeOntologyMapperGraphPropertyWorker extends GraphPropertyWorker {
private static final LumifyLogger LOGGER = LumifyLoggerFactory.getLogger(MimeTypeOntologyMapperGraphPropertyWorker.class);
private Concept imageConcept;
private Concept audioConcept;
private Concept videoConcept;
private Concept documentConcept;
@Override
public void prepare(GraphPropertyWorkerPrepareData workerPrepareData) throws Exception {
super.prepare(workerPrepareData);
imageConcept = getOntologyRepository().getRequiredConceptByIntent("image");
audioConcept = getOntologyRepository().getRequiredConceptByIntent("audio");
videoConcept = getOntologyRepository().getRequiredConceptByIntent("video");
documentConcept = getOntologyRepository().getRequiredConceptByIntent("document");
}
@Override
public void execute(InputStream in, GraphPropertyWorkData data) throws Exception {
String mimeType = LumifyProperties.MIME_TYPE.getPropertyValue(data.getElement());
Concept concept = null;
if (imageConcept != null && mimeType.startsWith("image")) {
concept = imageConcept;
} else if (audioConcept != null && mimeType.startsWith("audio")) {
concept = audioConcept;
} else if (videoConcept != null && mimeType.startsWith("video")) {
concept = videoConcept;
} else if (documentConcept != null) {
concept = documentConcept;
}
if (concept == null) {
LOGGER.debug("skipping, no concept mapped for vertex " + data.getElement().getId());
return;
}
LOGGER.debug("assigning concept type %s to vertex %s", concept.getIRI(), data.getElement().getId());
LumifyProperties.CONCEPT_TYPE.setProperty(data.getElement(), concept.getIRI(), data.createPropertyMetadata(), data.getVisibility(), getAuthorizations());
getGraph().flush();
getWorkQueueRepository().pushGraphPropertyQueue(data.getElement(), null, LumifyProperties.CONCEPT_TYPE.getPropertyName(),
data.getWorkspaceId(), data.getVisibilitySource());
}
@Override
public boolean isHandled(Element element, Property property) {
if (property == null) {
return false;
}
if (!property.getName().equals(LumifyProperties.RAW.getPropertyName())) {
return false;
}
String mimeType = LumifyProperties.MIME_TYPE.getPropertyValue(element);
if (mimeType == null) {
return false;
}
String existingConceptType = LumifyProperties.CONCEPT_TYPE.getPropertyValue(element);
if (existingConceptType != null) {
return false;
}
return true;
}
}