package com.emf4sw.owl.impl.notify; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.ecore.EObject; import com.emf4sw.owl.DataProperty; import com.emf4sw.owl.OWLPackage; import com.emf4sw.owl.ObjectProperty; import com.emf4sw.owl.Ontology; import com.emf4sw.owl.vocabulary.OWL; import com.emf4sw.rdf.Node; import com.emf4sw.rdf.vocabulary.RDF; import com.emf4sw.rdf.vocabulary.RDFS; public abstract class ClassPropertyTripleAdapter extends AdapterImpl { public ClassPropertyTripleAdapter() { } @Override public void notifyChanged(Notification msg) { super.notifyChanged(msg); } protected void addPropertyTypeTriple(Notification msg, Ontology ontology, String type) { final boolean value = msg.getNewBooleanValue(); if (value) ontology.addTriple((Node) msg.getNotifier(), ontology.getProperty(RDF.type), ontology.getResource(type)); } protected void addPropertyValueTriple(Notification msg, Ontology ontology, String type) { if (ontology == null || ontology.getProperty(type) == null) return; final Object value = msg.getNewValue(); if (value != null) { ontology.addTriple((Node) msg.getNotifier(), ontology.getProperty(type), (Node)value); } } public static class ObjectPropertyTripleAdapter extends ClassPropertyTripleAdapter { public ObjectPropertyTripleAdapter() { } @Override public void notifyChanged(Notification msg) { switch (msg.getEventType()) { case Notification.ADD: case Notification.ADD_MANY: if (msg.getNotifier() instanceof EObject) { Ontology ontology = (Ontology) ((EObject)msg.getNotifier()).eContainer(); switch (msg.getFeatureID(ObjectProperty.class)) { case OWLPackage.OBJECT_PROPERTY__DOMAIN: addPropertyValueTriple(msg, ontology, RDFS.domain); break; case OWLPackage.OBJECT_PROPERTY__RANGE: addPropertyValueTriple(msg, ontology, RDFS.range); break; case OWLPackage.OBJECT_PROPERTY__SUB_PROPERTY_OF: addPropertyValueTriple(msg, ontology, RDFS.subPropertyOf); break; case OWLPackage.OBJECT_PROPERTY__EQUIVALENT_PROPERTIES: addPropertyValueTriple(msg, ontology, OWL.equivalentProperty); break; case OWLPackage.OBJECT_PROPERTY__DISJOINT_PROPERTIES: addPropertyValueTriple(msg, ontology, OWL.propertyDisjointWith); break; case OWLPackage.OBJECT_PROPERTY__IS_FUNCTIONAL: addPropertyTypeTriple(msg, ontology, OWL.FunctionalProperty); break; case OWLPackage.OBJECT_PROPERTY__IS_INVERSE_FUNCTIONAL: addPropertyTypeTriple(msg, ontology, OWL.InverseFunctionalProperty); break; case OWLPackage.OBJECT_PROPERTY__IS_SYMMETRIC: addPropertyTypeTriple(msg, ontology, OWL.SymmetricProperty); break; case OWLPackage.OBJECT_PROPERTY__IS_ASYMMETRIC: addPropertyTypeTriple(msg, ontology, OWL.AsymmetricProperty); break; case OWLPackage.OBJECT_PROPERTY__IS_TRANSITIVE: addPropertyTypeTriple(msg, ontology, OWL.TransitiveProperty); break; case OWLPackage.OBJECT_PROPERTY__IS_REFLEXIVE: addPropertyTypeTriple(msg, ontology, OWL.ReflexiveProperty); break; case OWLPackage.OBJECT_PROPERTY__IS_IRREFLEXIVE: addPropertyTypeTriple(msg, ontology, OWL.IrreflexiveProperty); break; default: break; } } break; default: break; } super.notifyChanged(msg); } } public static class DataPropertyTripleAdapter extends ClassPropertyTripleAdapter { public DataPropertyTripleAdapter() { } @Override public void notifyChanged(Notification msg) { switch (msg.getEventType()) { case Notification.ADD: case Notification.ADD_MANY: if (msg.getNotifier() instanceof EObject) { Ontology ontology = (Ontology) ((EObject)msg.getNotifier()).eContainer(); switch (msg.getFeatureID(DataProperty.class)) { case OWLPackage.DATA_PROPERTY__DOMAIN: addPropertyValueTriple(msg, ontology, RDFS.domain); break; case OWLPackage.DATA_PROPERTY__RANGE: addPropertyValueTriple(msg, ontology, RDFS.range); break; case OWLPackage.DATA_PROPERTY__SUB_PROPERTY_OF: addPropertyValueTriple(msg, ontology, RDFS.subPropertyOf); break; case OWLPackage.DATA_PROPERTY__EQUIVALENT_PROPERTIES: addPropertyValueTriple(msg, ontology, OWL.equivalentProperty); break; case OWLPackage.DATA_PROPERTY__DISJOINT_PROPERTIES: addPropertyValueTriple(msg, ontology, OWL.propertyDisjointWith); break; case OWLPackage.DATA_PROPERTY__IS_FUNCTIONAL: addPropertyTypeTriple(msg, ontology, OWL.FunctionalProperty); break; default: break; } } break; default: break; } super.notifyChanged(msg); } } }