package com.emf4sw.owl.impl.notify; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.EContentAdapter; import com.emf4sw.owl.DataProperty; import com.emf4sw.owl.OWLClass; import com.emf4sw.owl.ObjectAllValuesFrom; import com.emf4sw.owl.ObjectExactCardinality; import com.emf4sw.owl.ObjectMaxCardinality; import com.emf4sw.owl.ObjectMinCardinality; import com.emf4sw.owl.ObjectProperty; import com.emf4sw.owl.ObjectSomeValuesFrom; import com.emf4sw.owl.Ontology; import com.emf4sw.owl.util.OWLSwitch; import com.emf4sw.owl.vocabulary.OWL; import com.emf4sw.rdf.Literal; import com.emf4sw.rdf.RDFFactory; import com.emf4sw.rdf.Triple; import com.emf4sw.rdf.vocabulary.RDF; public class OntologyTripleAdapter extends EContentAdapter { @Override public void notifyChanged(Notification msg) { EStructuralFeature feature = (EStructuralFeature) msg.getFeature(); if (feature instanceof EReference) { Object value = msg.getNewValue(); if (value instanceof EObject) { Ontology ontology = (Ontology) ((EObject) value).eContainer(); Triple added = new TripleBuilderSwitch(ontology).doSwitch((EObject) value); if (added != null) ontology.getTriples().add(added); } } } public static class TripleBuilderSwitch extends OWLSwitch<Triple> { Ontology ontology; public TripleBuilderSwitch(Ontology ontology) { this.ontology = ontology; } @Override public Triple caseOWLClass(OWLClass object) { return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.Class)); } @Override public Triple caseDataProperty(DataProperty object) { return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.DatatypeProperty)); } @Override public Triple caseObjectProperty(ObjectProperty object) { return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.ObjectProperty)); } @Override public Triple caseObjectAllValuesFrom(ObjectAllValuesFrom object) { return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.Restriction)); } @Override public Triple caseObjectSomeValuesFrom(ObjectSomeValuesFrom object) { return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.Restriction)); } @Override public Triple caseObjectExactCardinality(ObjectExactCardinality object) { ontology.addTriple(object, ontology.getProperty(OWL.cardinality), createLiteral(object.getCardinality(), ontology)); return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.Restriction)); } @Override public Triple caseObjectMaxCardinality(ObjectMaxCardinality object) { ontology.addTriple(object, ontology.getProperty(OWL.maxCardinality), createLiteral(object.getCardinality(), ontology)); return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.Restriction)); } @Override public Triple caseObjectMinCardinality(ObjectMinCardinality object) { ontology.addTriple(object, ontology.getProperty(OWL.minCardinality), createLiteral(object.getCardinality(), ontology)); return ontology.addTriple(object, ontology.getProperty(RDF.type), ontology.getResource(OWL.Restriction)); } private Literal createLiteral(Object value, Ontology ontology) { Literal literal = RDFFactory.eINSTANCE.createLiteral(); literal.setLexicalForm(value.toString()); ontology.getLiterals().add(literal); return literal; } } }