package io.lumify.core.model.ontology;
import io.lumify.web.clientapi.model.ClientApiOntology;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public abstract class Relationship {
private final List<String> domainConceptIRIs;
private final List<String> rangeConceptIRIs;
protected Relationship(List<String> domainConceptIRIs, List<String> rangeConceptIRIs) {
this.domainConceptIRIs = domainConceptIRIs;
this.rangeConceptIRIs = rangeConceptIRIs;
}
public abstract String getIRI();
public abstract String getDisplayName();
public abstract Iterable<String> getInverseOfIRIs();
public List<String> getDomainConceptIRIs() {
return domainConceptIRIs;
}
public List<String> getRangeConceptIRIs() {
return rangeConceptIRIs;
}
public abstract boolean getUserVisible();
public abstract String[] getIntents();
public ClientApiOntology.Relationship toClientApi() {
try {
ClientApiOntology.Relationship result = new ClientApiOntology.Relationship();
result.setTitle(getIRI());
result.setDisplayName(getDisplayName());
result.setDomainConceptIris(getDomainConceptIRIs());
result.setRangeConceptIris(getRangeConceptIRIs());
result.setUserVisible(getUserVisible());
if (getIntents() != null) {
result.getIntents().addAll(Arrays.asList(getIntents()));
}
Iterable<String> inverseOfIRIs = getInverseOfIRIs();
for (String inverseOfIRI : inverseOfIRIs) {
ClientApiOntology.Relationship.InverseOf inverseOf = new ClientApiOntology.Relationship.InverseOf();
inverseOf.setIri(inverseOfIRI);
inverseOf.setPrimaryIri(getPrimaryInverseOfIRI(getIRI(), inverseOfIRI));
result.getInverseOfs().add(inverseOf);
}
return result;
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
public static String getPrimaryInverseOfIRI(String iri1, String iri2) {
if (iri1.compareTo(iri2) > 0) {
return iri2;
}
return iri1;
}
public static Collection<ClientApiOntology.Relationship> toClientApiRelationships(Iterable<Relationship> relationships) {
Collection<ClientApiOntology.Relationship> results = new ArrayList<>();
for (Relationship vertex : relationships) {
results.add(vertex.toClientApi());
}
return results;
}
}