001 package eu.lod2.nlp2rdf.schema;
002
003 import java.util.ArrayList;
004 import java.util.List;
005 import java.util.Iterator;
006
007 import nl.tudelft.tbm.eeni.owl2java.model.jenautils.NullFilter;
008
009 import org.apache.commons.logging.Log;
010 import org.apache.commons.logging.LogFactory;
011
012 import com.hp.hpl.jena.enhanced.BuiltinPersonalities;
013 import com.hp.hpl.jena.enhanced.EnhGraph;
014 import com.hp.hpl.jena.enhanced.EnhNode;
015 import com.hp.hpl.jena.enhanced.Implementation;
016 import com.hp.hpl.jena.graph.Graph;
017 import com.hp.hpl.jena.graph.Node;
018 import com.hp.hpl.jena.ontology.Individual;
019 import com.hp.hpl.jena.ontology.OntClass;
020 import com.hp.hpl.jena.ontology.OntModel;
021 import com.hp.hpl.jena.ontology.Profile;
022 import com.hp.hpl.jena.ontology.impl.IndividualImpl;
023 import com.hp.hpl.jena.rdf.model.Resource;
024 import com.hp.hpl.jena.rdf.model.RDFNode;
025 import com.hp.hpl.jena.rdf.model.Statement;
026 import com.hp.hpl.jena.rdf.model.Literal;
027 import com.hp.hpl.jena.util.iterator.WrappedIterator;
028 import com.hp.hpl.jena.util.iterator.ExtendedIterator;
029 import com.hp.hpl.jena.util.iterator.Filter;
030 import com.hp.hpl.jena.util.iterator.Map1;
031
032 // import interface
033 import eu.lod2.nlp2rdf.schema.IThing;
034
035 /**
036 * Class http://www.w3.org/2002/07/owl#Thing
037 */
038 public class Thing extends IndividualImpl implements IThing {
039
040 private static Log log = LogFactory.getLog(Thing.class);
041
042 /**
043 * Implementation factory for Thing
044 */
045 static final public Implementation factory = new Implementation() {
046
047 /**
048 * Convert a Node into an instance of the class
049 */
050 public EnhNode wrap(Node n, EnhGraph eg) {
051 if (canWrap(n, eg)) {
052 return new Thing(n, eg);
053 } else {
054 log.warn("Cannot convert node " + n.toString() + " to Thing");
055 return null;
056 }
057 }
058
059 /**
060 * Return true iff the node can be converted to an instance of
061 * this class (Thing)
062 */
063 public boolean canWrap(Node n, EnhGraph eg) {
064 Profile profile;
065 if (eg instanceof OntModel)
066 profile = ((OntModel) eg).getProfile();
067 else
068 return false;
069
070 if (!profile.isSupported(n, eg, Individual.class)) {
071 return false;
072 }
073
074 Graph graph = eg.asGraph();
075 return graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.Thing.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.String.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.OffsetBasedString.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.ContextHashBasedString.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.Document.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.Phrase.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.Word.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.StopWord.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.Sentence.asNode()) || graph.contains(n, com.hp.hpl.jena.vocabulary.RDF.type.asNode(), eu.lod2.nlp2rdf.schema.tools.Vocabulary.Topic.asNode());
076 }
077 };
078
079 /**
080 * Filtering support for Thing
081 */
082 static final public Filter<Thing> nullFilter = new NullFilter<Thing>();
083
084 /**
085 * Mapping support for Thing
086 */
087 public static <From> Map1<From, Thing> mapperFrom(Class<From> from) {
088 return new Map1<From, Thing>() {
089 @Override
090 public Thing map1(Object x) {
091 if (x instanceof Statement) {
092 Resource r = ((Statement) x).getResource();
093 if (r.canAs(Thing.class))
094 return r.as(Thing.class);
095 } else if (x instanceof RDFNode) {
096 if (((RDFNode) x).canAs(Thing.class))
097 return ((RDFNode) x).as(Thing.class);
098 }
099 return null;
100 }
101 };
102 }
103
104 // Instantiate some mappers for general use
105 static final public Map1<Statement, Thing> statementMapper = mapperFrom(Statement.class);
106 static final public Map1<Individual, Thing> individualMapper = mapperFrom(Individual.class);
107 static final public Map1<RDFNode, Thing> nodeMapper = mapperFrom(RDFNode.class);
108
109 /**
110 * Generic functions from parent class
111 */
112 public Thing(Node n, EnhGraph g) {
113 super(n, g);
114 }
115
116 /**
117 * Registers all custom classes with jena
118 */
119 public static void register() {
120 log.debug("Registering custom class Thing with jena");
121 BuiltinPersonalities.model.add(Thing.class, Thing.factory);
122 BuiltinPersonalities.model.add(eu.lod2.nlp2rdf.schema.Thing.class, Thing.factory);
123 }
124
125 /**
126 * Static Functions for instance handling
127 */
128 public static Thing get(java.lang.String uri, OntModel ontModel) {
129 Individual individual = ontModel.getIndividual(uri);
130 return (eu.lod2.nlp2rdf.schema.Thing) individual.as(eu.lod2.nlp2rdf.schema.Thing.class);
131 }
132
133 public static Thing get(java.lang.String uri) {
134 return get(uri, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
135 }
136
137 public static Iterator<Thing> iterate(OntModel ontModel) {
138 ExtendedIterator<Individual> it = ontModel.listIndividuals(eu.lod2.nlp2rdf.schema.tools.Vocabulary.Thing);
139 return it.mapWith(individualMapper).filterDrop(nullFilter);
140 }
141
142 public static Iterator<Thing> iterate() {
143 return iterate(eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
144 }
145
146 public static List<Thing> list(OntModel ontModel) {
147 List<Thing> list = new ArrayList<Thing>();
148 Iterator<Thing> it = iterate(ontModel);
149 while (it.hasNext()) {
150 Thing cls = it.next();
151 list.add(cls);
152 }
153 return list;
154 }
155
156 public static List<Thing> list() {
157 return list(eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
158 }
159
160 public static Iterator<Thing> iterate(boolean direct, OntModel ontModel) {
161 OntClass cls = ontModel.getOntClass("http://www.w3.org/2002/07/owl#Thing");
162 ExtendedIterator<? extends RDFNode> it = cls.listInstances(direct);
163 ExtendedIterator<RDFNode> nodeIt = new WrappedIterator<RDFNode>(it) {
164 };
165 return nodeIt.mapWith(nodeMapper).filterDrop(nullFilter);
166 }
167
168 public static Iterator<Thing> iterate(boolean direct) {
169 return iterate(direct, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
170 }
171
172 public static List<Thing> list(boolean direct, OntModel ontModel) {
173 List<Thing> list = new ArrayList<Thing>();
174 Iterator<Thing> it = iterate(direct, ontModel);
175 while (it.hasNext()) {
176 Thing cls = it.next();
177 list.add(cls);
178 }
179 return list;
180 }
181
182 public static List<Thing> list(boolean direct) {
183 return list(direct, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
184 }
185
186 public static int count(OntModel ontModel) {
187 int count = 0;
188 Iterator<Thing> it = iterate(ontModel);
189 while (it.hasNext()) {
190 it.next();
191 count++;
192 }
193 return count;
194 }
195
196 public static int count() {
197 return count(eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
198 }
199
200 public static int count(boolean direct, OntModel ontModel) {
201 int count = 0;
202 Iterator<Thing> it = iterate(direct, ontModel);
203 while (it.hasNext()) {
204 it.next();
205 count++;
206 }
207 return count;
208 }
209
210 public static int count(boolean direct) {
211 return count(direct, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
212 }
213
214 public static boolean exists(java.lang.String uri, OntModel ontModel) {
215 Individual individual = ontModel.getIndividual(uri);
216 if (individual != null)
217 return true;
218 return false;
219 }
220
221 public static boolean exists(java.lang.String uri) {
222 return exists(uri, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
223 }
224
225 public static Thing create(java.lang.String uri, OntModel ontModel) {
226 return (Thing) ontModel.createOntResource(Thing.class, eu.lod2.nlp2rdf.schema.tools.Vocabulary.Thing, uri);
227 }
228
229 public static Thing create(OntModel ontModel) {
230 return create(null, ontModel);
231 }
232
233 public static Thing create(java.lang.String uri) {
234 return create(uri, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
235 }
236
237 public static Thing create() {
238 return create(null, eu.lod2.nlp2rdf.schema.tools.Factory.getDefaultModel());
239 }
240
241 public static void delete(java.lang.String uri, OntModel ontModel) {
242 eu.lod2.nlp2rdf.schema.tools.Factory.deleteInstance(uri, ontModel);
243 }
244
245 public static void delete(java.lang.String uri) {
246 eu.lod2.nlp2rdf.schema.tools.Factory.deleteInstance(uri);
247 }
248
249 }