View Javadoc

1   /*
2    ORDI - Ontology Repository and Data Integration
3   
4    Copyright (c) 2004-2007, OntoText Lab. / SIRMA
5   
6    This library is free software; you can redistribute it and/or modify it under
7    the terms of the GNU Lesser General Public License as published by the Free
8    Software Foundation; either version 2.1 of the License, or (at your option)
9    any later version.
10   This library is distributed in the hope that it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12   FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
13   details.
14   You should have received a copy of the GNU Lesser General Public License along
15   with this library; if not, write to the Free Software Foundation, Inc.,
16   59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17   */
18  package com.ontotext.ordi.trree;
19  
20  import java.util.Iterator;
21  import java.util.Map;
22  
23  import org.apache.log4j.Logger;
24  import org.openrdf.model.impl.URIImpl;
25  
26  import com.ontotext.ordi.tripleset.Listener;
27  import com.ontotext.ordi.tripleset.ORDIConst;
28  import com.ontotext.trree.owlim_ext.AbstractInferencer;
29  import com.ontotext.trree.owlim_ext.AbstractRepository;
30  import com.ontotext.trree.owlim_ext.EntityPool;
31  import com.ontotext.trree.owlim_ext.Notify;
32  import com.ontotext.trree.owlim_ext.StatementIdIterator;
33  
34  public class TRREEWrapper implements AbstractRepository {
35  
36      private Listener listener;
37      private EntityPool pool;
38      private AbstractRepository repository;
39      private int defaultGraphId;
40      private static Logger logger = Logger.getLogger(TRREEWrapper.class);
41  
42      public TRREEWrapper(AbstractRepository repository, EntityPool pool) {
43          if (repository == null || pool == null) {
44              throw new IllegalArgumentException();
45          }
46          this.repository = repository;
47          this.pool = pool;
48          defaultGraphId = pool.createId(new URIImpl(ORDIConst.DEFAULT_GRAPH));
49      }
50  
51      public AbstractRepository getWrappedRepository() {
52          return repository;
53      }
54  
55      public void setListener(Listener listener) {
56          this.listener = listener;
57      }
58  
59      public Listener getListener() {
60          return listener;
61      }
62  
63      /***************************************************************************
64       * TRREE method implementation
65       **************************************************************************/
66      public void clear() {
67          repository.clear();
68      }
69  
70      public StatementIdIterator getExplicitStatements(int subj, int pred, int obj) {
71          return repository.getExplicitStatements(subj, pred, obj);
72      }
73  
74      public StatementIdIterator getExplicitStatements(int subj, int pred,
75              int obj, int context) {
76          logger.trace(String.format("getExplicitStatements(%d, %d, %d, %d)",
77                  new Object[] { subj, pred, obj, context }));
78          return repository.getExplicitStatements(subj, pred, obj, context);
79      }
80  
81      public StatementIdIterator getFromQuadSet(int subj, int pred, int obj,
82              int context, int quadSet) {
83          return repository.getFromQuadSet(subj, pred, obj, context, quadSet);
84      }
85  
86      public StatementIdIterator getFromQuadSet(int quadset) {
87          return repository.getFromQuadSet(quadset);
88      }
89  
90      public StatementIdIterator getInferStatementIterator() {
91          return repository.getInferStatementIterator();
92      }
93  
94      public int[] getMappedQuadSets(int subj, int pred, int obj, int context) {
95          return repository.getMappedQuadSets(subj, pred, obj, context);
96      }
97  
98      public int getNumberOfExplicitStatements() {
99          return repository.getNumberOfExplicitStatements();
100     }
101 
102     public StatementIdIterator getReinferStatementIterator() {
103         return repository.getInferStatementIterator();
104     }
105 
106     public StatementIdIterator getStatements(int subj, int pred, int obj) {
107         return repository.getStatements(subj, pred, obj);
108     }
109 
110     public StatementIdIterator getStatements(int subj, int pred, int obj,
111             int context) {
112         if (logger.isTraceEnabled()) {
113             logger.trace(String.format("search(%d, %d, %d, %d)", new Object[] {
114                     subj, pred, obj, context }));
115         }
116         return repository.getStatements(subj, pred, obj, context);
117     }
118 
119     public boolean hasStatement(int subj, int pred, int obj) {
120         return repository.hasStatement(subj, pred, obj);
121     }
122 
123     public boolean hasStatement(int subj, int pred, int obj, int context) {
124         return repository.hasStatement(subj, pred, obj, context);
125     }
126 
127     @SuppressWarnings("unchecked")
128     public void initialize(Map params) {
129         logger.debug("Repository initialized: " + params.toString());
130         repository.initialize(params);
131     }
132 
133     public boolean mapToQuadSet(int subj, int pred, int obj, int context,
134             int quadset) {
135         if (logger.isTraceEnabled()) {
136             logger.trace(String.format("associate(%d, %d, %d, %d, %d)",
137                     new Object[] { subj, pred, obj, context, quadset }));
138         }
139         if (listener != null) {
140             listener.statementAssociated(new LazyTStatementImpl(subj, pred,
141                     obj, context, pool, repository));
142         }
143         return repository.mapToQuadSet(subj, pred, obj, context, quadset);
144     }
145 
146     public boolean putStatement(int subj, int pred, int obj, byte status) {
147         if (logger.isTraceEnabled()) {
148             logger.trace(String.format("add(%d, %d, %d, %s)", new Object[] {
149                     subj, pred, obj, "inferred" }));
150         }
151         if (listener != null
152                 && status == AbstractRepository.INFERRED_STATEMENT_STATUS) {
153             listener.statementInferred(new LazyTStatementImpl(subj, pred, obj,
154                     defaultGraphId, pool, repository));
155         }
156         return repository.putStatement(subj, pred, obj, status);
157     }
158 
159     
160     public boolean putStatement(int subj, int pred, int obj, int context) {
161         if (logger.isTraceEnabled()) {
162             logger.trace(String.format("add(%d, %d, %d, %d)", new Object[] {
163                     subj, pred, obj, context }));
164         }
165         if (listener != null) {
166             listener.statementAdded(new LazyTStatementImpl(subj, pred, obj,
167                     context, pool, repository));
168         }
169         return repository.putStatement(subj, pred, obj, context);
170     }
171 
172     public boolean removeMappingFromQuadSet(int subj, int pred, int obj,
173             int context, int quadset) {
174         if (logger.isTraceEnabled()) {
175             logger.trace(String.format("deassociate(%d, %d, %d, %d, %d)",
176                     new Object[] { subj, pred, obj, context, quadset }));
177         }
178         if (listener != null) {
179             listener.statementDeassociated(new LazyTStatementImpl(subj, pred,
180                     obj, context, pool, repository));
181         }
182         return repository.removeMappingFromQuadSet(subj, pred, obj, context,
183                 quadset);
184     }
185 
186     public int removeStatements(int subj, int pred, int obj) {
187         if (logger.isTraceEnabled()) {
188             logger.trace(String.format("remove(%d, %d, %d, %d)", new Object[] {
189                     subj, pred, obj }));
190         }
191         if (listener != null) {
192             StatementIdIterator iter = repository.getExplicitStatements(subj,
193                     pred, obj);
194             while (iter.hasNext()) {
195                 listener.statementRemoved(new LazyTStatementImpl(iter.Subj,
196                         iter.Pred, iter.Obj, iter.Context, pool, repository));
197                 iter.next();
198             }
199         }
200         return repository.removeStatements(subj, pred, obj);
201     }
202 
203     public int removeStatements(int subj, int pred, int obj, int context) {
204         if (logger.isTraceEnabled()) {
205             logger.trace(String.format("remove(%d, %d, %d, %d)", new Object[] {
206                     subj, pred, obj, context }));
207         }
208         if (listener != null) {
209             StatementIdIterator iter = repository.getExplicitStatements(subj,
210                     pred, obj, context);
211             while (iter.hasNext()) {
212                 listener.statementRemoved(new LazyTStatementImpl(iter.Subj,
213                         iter.Pred, iter.Obj, iter.Context, pool, repository));
214                 iter.next();
215             }
216         }
217         return repository.removeStatements(subj, pred, obj, context);
218     }
219 
220     public void setInferencer(AbstractInferencer infer) {
221         repository.setInferencer(infer);
222     }
223 
224     public void setSystemNodes(int rdf_type, int rdfs_Resource,
225             int rdf_Property, int rdfs_subPropertyOf, int owl_sameAs,
226             int rdfs_subClassOf, int owl_SymmetricProperty,
227             int owl_TransitiveProperty, int owl_equivalentProperty,
228             int owl_equivalentClass) {
229         repository.setSystemNodes(rdf_type, rdfs_Resource, rdf_Property,
230                 rdfs_subPropertyOf, owl_sameAs, rdfs_subClassOf,
231                 owl_SymmetricProperty, owl_TransitiveProperty,
232                 owl_equivalentProperty, owl_equivalentClass);
233     }
234 
235     public void shutdown() {
236         logger.debug("Repository is shutting down...");
237         repository.shutdown();
238     }
239 
240     public int size() {
241         return repository.size();
242     }
243 
244     public boolean isRestoredFromPersistence() {
245         return repository.isRestoredFromPersistence();
246     }
247 
248     public boolean isRecoveredSuccessfully() {
249         return repository.isRecoveredSuccessfully();
250     }
251 
252     public void removeListener(Notify arg) {
253         repository.removeListener(arg);
254     }
255     
256     public void addListener(Notify arg) {
257         repository.addListener(arg);
258     }
259 
260     @SuppressWarnings("unchecked")
261     public Iterator getContexts() {
262         return repository.getContexts();
263     }
264 }