/******************************************************************************* * Copyright (c) 2011 Guillaume Hillairet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Guillaume Hillairet - initial API and implementation *******************************************************************************/ package com.emf4sw.rdf.impl; import java.util.Collection; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.util.BasicFeatureMap; import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.FeatureMap; import org.eclipse.emf.ecore.util.InternalEList; import com.emf4sw.rdf.BlankNode; import com.emf4sw.rdf.Datatype; import com.emf4sw.rdf.Literal; import com.emf4sw.rdf.Node; import com.emf4sw.rdf.Property; import com.emf4sw.rdf.RDFFactory; import com.emf4sw.rdf.RDFGraph; import com.emf4sw.rdf.RDFPackage; import com.emf4sw.rdf.Resource; import com.emf4sw.rdf.SubjectNode; import com.emf4sw.rdf.Triple; /** * <!-- begin-user-doc --> * An implementation of the model object '<em><b>Graph</b></em>'. * <!-- end-user-doc --> * <p> * The following features are implemented: * <ul> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getNodes <em>Nodes</em>}</li> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getResources <em>Resources</em>}</li> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getProperties <em>Properties</em>}</li> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getBlankNodes <em>Blank Nodes</em>}</li> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getDatatypes <em>Datatypes</em>}</li> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getLiterals <em>Literals</em>}</li> * <li>{@link com.emf4sw.rdf.impl.RDFGraphImpl#getTriples <em>Triples</em>}</li> * </ul> * </p> * * @generated */ public abstract class RDFGraphImpl extends URIElementImpl implements RDFGraph { /** * The cached value of the '{@link #getNodes() <em>Nodes</em>}' attribute list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getNodes() * @generated * @ordered */ protected FeatureMap nodes; /** * The cached value of the '{@link #getTriples() <em>Triples</em>}' containment reference list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getTriples() * @generated * @ordered */ protected EList<Triple> triples; /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ protected RDFGraphImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return RDFPackage.Literals.RDF_GRAPH; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public FeatureMap getNodes() { if (nodes == null) { nodes = new BasicFeatureMap(this, RDFPackage.RDF_GRAPH__NODES); } return nodes; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<Resource> getResources() { return getNodes().list(RDFPackage.Literals.RDF_GRAPH__RESOURCES); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<Property> getProperties() { return getNodes().list(RDFPackage.Literals.RDF_GRAPH__PROPERTIES); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<BlankNode> getBlankNodes() { return getNodes().list(RDFPackage.Literals.RDF_GRAPH__BLANK_NODES); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<Datatype> getDatatypes() { return getNodes().list(RDFPackage.Literals.RDF_GRAPH__DATATYPES); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<Literal> getLiterals() { return getNodes().list(RDFPackage.Literals.RDF_GRAPH__LITERALS); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList<Triple> getTriples() { if (triples == null) { triples = new EObjectContainmentWithInverseEList<Triple>(Triple.class, this, RDFPackage.RDF_GRAPH__TRIPLES, RDFPackage.TRIPLE__GRAPH); } return triples; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public boolean isEquivalentTo(RDFGraph graph) { return false; // return RDFOperations.equivalentTo(this, graph); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public abstract void add(RDFGraph graph); /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public RDFGraph union(RDFGraph graph) { return graph; // return RDFOperations.unionOf(this, graph); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public RDFGraph diff(RDFGraph graph) { return graph; // return RDFOperations.differenceOf(this, graph); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public Triple addTriple(Node subject, Property property, Node object) { Triple triple = null; if (subject != null && property != null && object != null) { triple = RDFFactory.eINSTANCE.createTriple(); triple.setSubject((SubjectNode) subject); triple.setPredicate(property); triple.setObject(object); this.getTriples().add(triple); } return triple; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public EList<SubjectNode> listSubjectsWithProperty(Property property) { final EList<SubjectNode> nodes = new BasicEList<SubjectNode>(); for (Triple triple: listAllTriples()) { if (triple.getPredicate().equals(property)) { nodes.add(triple.getSubject()); } } return nodes; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public EList<SubjectNode> listSubjectsWithPropertyValue(Property property, Node object) { final EList<SubjectNode> nodes = new BasicEList<SubjectNode>(); for (Triple triple: listAllTriples()) { if (triple.getPredicate().equals(property) && triple.getObject().equals(object)) { nodes.add(triple.getSubject()); } } return nodes; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public abstract EList<Triple> listAllTriples(); /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public abstract EList<Resource> listAllResources(); /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public abstract EList<Property> listAllProperties(); /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public EList<SubjectNode> listSubjects() { final EList<SubjectNode> subjects = new BasicEList<SubjectNode>(); for (Triple aTriple: getTriples()) { if (!subjects.contains(aTriple.getSubject())) { subjects.add(aTriple.getSubject()); } } return subjects; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public Resource getResource(String uri) { EObject obj = eResource() == null ? null : eResource().getEObject(uri); if (obj == null) { obj = RDFFactory.eINSTANCE.createResource(); ((Resource) obj).setURI(uri); this.getResources().add((Resource) obj); } return obj instanceof Resource ? (Resource)obj : null; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public Property getProperty(String uri) { EObject obj = eResource() == null ? null : eResource().getEObject(uri); if (obj == null) { obj = RDFFactory.eINSTANCE.createProperty(); ((Property) obj).setURI(uri); this.getProperties().add((Property) obj); } return obj instanceof Property ? (Property)obj : null; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public Datatype getDatatype(String uri) { EObject obj = eResource() == null ? null : eResource().getEObject(uri); if (obj == null) { obj = RDFFactory.eINSTANCE.createDatatype(); ((Datatype) obj).setURI(uri); this.getDatatypes().add((Datatype) obj); } return obj instanceof Datatype ? (Datatype)obj : null; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ public BlankNode getBlankNode(String nodeID) { EObject obj = eResource() == null ? null : eResource().getEObject(nodeID); if (obj == null) { obj = RDFFactory.eINSTANCE.createBlankNode(); ((BlankNode) obj).setNodeID(nodeID); this.getBlankNodes().add((BlankNode) obj); } return obj instanceof BlankNode ? (BlankNode)obj : null; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case RDFPackage.RDF_GRAPH__RESOURCES: return ((InternalEList<InternalEObject>)(InternalEList<?>)getResources()).basicAdd(otherEnd, msgs); case RDFPackage.RDF_GRAPH__BLANK_NODES: return ((InternalEList<InternalEObject>)(InternalEList<?>)getBlankNodes()).basicAdd(otherEnd, msgs); case RDFPackage.RDF_GRAPH__LITERALS: return ((InternalEList<InternalEObject>)(InternalEList<?>)getLiterals()).basicAdd(otherEnd, msgs); case RDFPackage.RDF_GRAPH__TRIPLES: return ((InternalEList<InternalEObject>)(InternalEList<?>)getTriples()).basicAdd(otherEnd, msgs); } return super.eInverseAdd(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case RDFPackage.RDF_GRAPH__NODES: return ((InternalEList<?>)getNodes()).basicRemove(otherEnd, msgs); case RDFPackage.RDF_GRAPH__RESOURCES: return ((InternalEList<?>)getResources()).basicRemove(otherEnd, msgs); case RDFPackage.RDF_GRAPH__PROPERTIES: return ((InternalEList<?>)getProperties()).basicRemove(otherEnd, msgs); case RDFPackage.RDF_GRAPH__BLANK_NODES: return ((InternalEList<?>)getBlankNodes()).basicRemove(otherEnd, msgs); case RDFPackage.RDF_GRAPH__DATATYPES: return ((InternalEList<?>)getDatatypes()).basicRemove(otherEnd, msgs); case RDFPackage.RDF_GRAPH__LITERALS: return ((InternalEList<?>)getLiterals()).basicRemove(otherEnd, msgs); case RDFPackage.RDF_GRAPH__TRIPLES: return ((InternalEList<?>)getTriples()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case RDFPackage.RDF_GRAPH__NODES: if (coreType) return getNodes(); return ((FeatureMap.Internal)getNodes()).getWrapper(); case RDFPackage.RDF_GRAPH__RESOURCES: return getResources(); case RDFPackage.RDF_GRAPH__PROPERTIES: return getProperties(); case RDFPackage.RDF_GRAPH__BLANK_NODES: return getBlankNodes(); case RDFPackage.RDF_GRAPH__DATATYPES: return getDatatypes(); case RDFPackage.RDF_GRAPH__LITERALS: return getLiterals(); case RDFPackage.RDF_GRAPH__TRIPLES: return getTriples(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @SuppressWarnings("unchecked") @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case RDFPackage.RDF_GRAPH__NODES: ((FeatureMap.Internal)getNodes()).set(newValue); return; case RDFPackage.RDF_GRAPH__RESOURCES: getResources().clear(); getResources().addAll((Collection<? extends Resource>)newValue); return; case RDFPackage.RDF_GRAPH__PROPERTIES: getProperties().clear(); getProperties().addAll((Collection<? extends Property>)newValue); return; case RDFPackage.RDF_GRAPH__BLANK_NODES: getBlankNodes().clear(); getBlankNodes().addAll((Collection<? extends BlankNode>)newValue); return; case RDFPackage.RDF_GRAPH__DATATYPES: getDatatypes().clear(); getDatatypes().addAll((Collection<? extends Datatype>)newValue); return; case RDFPackage.RDF_GRAPH__LITERALS: getLiterals().clear(); getLiterals().addAll((Collection<? extends Literal>)newValue); return; case RDFPackage.RDF_GRAPH__TRIPLES: getTriples().clear(); getTriples().addAll((Collection<? extends Triple>)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case RDFPackage.RDF_GRAPH__NODES: getNodes().clear(); return; case RDFPackage.RDF_GRAPH__RESOURCES: getResources().clear(); return; case RDFPackage.RDF_GRAPH__PROPERTIES: getProperties().clear(); return; case RDFPackage.RDF_GRAPH__BLANK_NODES: getBlankNodes().clear(); return; case RDFPackage.RDF_GRAPH__DATATYPES: getDatatypes().clear(); return; case RDFPackage.RDF_GRAPH__LITERALS: getLiterals().clear(); return; case RDFPackage.RDF_GRAPH__TRIPLES: getTriples().clear(); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case RDFPackage.RDF_GRAPH__NODES: return nodes != null && !nodes.isEmpty(); case RDFPackage.RDF_GRAPH__RESOURCES: return !getResources().isEmpty(); case RDFPackage.RDF_GRAPH__PROPERTIES: return !getProperties().isEmpty(); case RDFPackage.RDF_GRAPH__BLANK_NODES: return !getBlankNodes().isEmpty(); case RDFPackage.RDF_GRAPH__DATATYPES: return !getDatatypes().isEmpty(); case RDFPackage.RDF_GRAPH__LITERALS: return !getLiterals().isEmpty(); case RDFPackage.RDF_GRAPH__TRIPLES: return triples != null && !triples.isEmpty(); } return super.eIsSet(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated NOT */ @Override public String toString() { if (eIsProxy()) return super.toString(); return "<"+uri+">"; } } //RDFGraphImpl