コード例 #1
0
ファイル: AuditingConnection.java プロジェクト: stain/alibaba
 @Override
 public synchronized void removeStatements(
     Resource subj, URI pred, Value obj, Resource... contexts) throws SailException {
   if (sail.isArchiving()) {
     CloseableIteration<? extends Statement, SailException> stmts;
     stmts = super.getStatements(subj, pred, obj, false, contexts);
     try {
       while (stmts.hasNext()) {
         Statement st = stmts.next();
         Resource s = st.getSubject();
         URI p = st.getPredicate();
         Value o = st.getObject();
         Resource ctx = st.getContext();
         removeRevision(s, p);
         if (ctx instanceof URI && !ctx.equals(trx)) {
           if (modified.add(ctx)) {
             super.addStatement(getTrx(), MODIFIED, ctx, getTrx());
           }
           BNode node = vf.createBNode();
           super.addStatement(ctx, CONTAINED, node, getTrx());
           super.addStatement(node, RDF.SUBJECT, s, getTrx());
           super.addStatement(node, RDF.PREDICATE, p, getTrx());
           super.addStatement(node, RDF.OBJECT, o, getTrx());
         }
       }
     } finally {
       stmts.close();
     }
     super.removeStatements(subj, pred, obj, contexts);
   } else {
     if (sail.getMaxArchive() > 0 && arch.size() <= sail.getMaxArchive()) {
       CloseableIteration<? extends Statement, SailException> stmts;
       stmts = super.getStatements(subj, pred, obj, false, contexts);
       try {
         int maxArchive = sail.getMaxArchive();
         while (stmts.hasNext() && arch.size() <= maxArchive) {
           Statement st = stmts.next();
           Resource ctx = st.getContext();
           if (ctx instanceof URI && !ctx.equals(trx)) {
             arch.add(st);
           }
         }
       } finally {
         stmts.close();
       }
     }
     super.removeStatements(subj, pred, obj, contexts);
     removeRevision(subj, pred);
     if (contexts != null && contexts.length > 0) {
       for (Resource ctx : contexts) {
         if (ctx != null && modified.add(ctx)) {
           addMetadata(currentTrx, MODIFIED, ctx, currentTrx);
         }
       }
     }
   }
 }
コード例 #2
0
ファイル: AuditingConnection.java プロジェクト: stain/alibaba
 private URI getTrx() throws SailException {
   if (trx == null) {
     trx = sail.nextTransaction();
     synchronized (metadata) {
       for (Statement st : metadata) {
         storeStatement(st.getSubject(), st.getPredicate(), st.getObject(), st.getContext());
       }
       metadata.clear();
     }
   }
   return trx;
 }
コード例 #3
0
ファイル: AuditingConnection.java プロジェクト: stain/alibaba
 @Override
 public synchronized void commit() throws SailException {
   flushArchive();
   if (trx != null) {
     for (Statement st : arch) {
       Resource ctx = st.getContext();
       if (ctx instanceof URI) {
         modified.add(ctx);
       }
     }
     for (Resource ctx : modified) {
       if (isObsolete(ctx)) {
         super.addStatement(ctx, RDF.TYPE, Audit.OBSOLETE, trx);
       }
     }
     GregorianCalendar cal = new GregorianCalendar();
     XMLGregorianCalendar xgc = factory.newXMLGregorianCalendar(cal);
     Literal now = vf.createLiteral(xgc);
     super.addStatement(trx, RDF.TYPE, TRANSACTION, trx);
     super.addStatement(trx, COMMITTED_ON, now, trx);
     for (Resource predecessor : predecessors) {
       super.addStatement(trx, PREDECESSOR, predecessor, trx);
     }
     sail.recent(trx, getWrappedConnection());
   }
   super.commit();
   metadata.clear();
   revised.clear();
   modified.clear();
   arch.clear();
   if (trx != null) {
     sail.committed(trx, predecessors);
     predecessors = Collections.singleton(trx);
     trx = null;
   }
 }
コード例 #4
0
ファイル: AuditingConnection.java プロジェクト: stain/alibaba
 public AuditingConnection(
     AuditingSail sail, SailConnection wrappedCon, Set<Resource> predecessors)
     throws DatatypeConfigurationException {
   super(wrappedCon);
   this.sail = sail;
   factory = DatatypeFactory.newInstance();
   vf = sail.getValueFactory();
   entityResolver = new OperationEntityResolver(vf);
   currentTrx = vf.createURI(CURRENT_TRX.stringValue());
   this.predecessors = predecessors;
   informedBy = vf.createURI(WAS_INFORMED_BY);
   qualifiedUsage = vf.createURI(QUALIFIED_USAGE);
   usedEntity = vf.createURI(ENTITY);
   changed = vf.createURI(CHANGED);
   subject = vf.createURI(RDF.SUBJECT.stringValue());
   predicate = vf.createURI(RDF.PREDICATE.stringValue());
   object = vf.createURI(RDF.OBJECT.stringValue());
 }
コード例 #5
0
ファイル: AuditingConnection.java プロジェクト: stain/alibaba
 private void flushArchive() throws SailException {
   if (arch.size() <= sail.getMaxArchive()) {
     for (Statement st : arch) {
       Resource s = st.getSubject();
       URI p = st.getPredicate();
       Value o = st.getObject();
       Resource ctx = st.getContext();
       removeRevision(s, p);
       BNode node = vf.createBNode();
       super.addStatement(ctx, CONTAINED, node, getTrx());
       super.addStatement(node, RDF.SUBJECT, s, getTrx());
       super.addStatement(node, RDF.PREDICATE, p, getTrx());
       super.addStatement(node, RDF.OBJECT, o, getTrx());
       if (ctx instanceof URI && modified.add(ctx)) {
         super.addStatement(getTrx(), MODIFIED, ctx, getTrx());
       }
     }
     arch.clear();
   }
 }