Package org.ontoware.rdf2go.model.impl

Source Code of org.ontoware.rdf2go.model.impl.NotifyingModelLayer

/**
* LICENSE INFORMATION
*
* Copyright 2005-2008 by FZI (http://www.fzi.de).
* Licensed under a BSD license (http://www.opensource.org/licenses/bsd-license.php)
* <OWNER> = Max Völkel
* <ORGANIZATION> = FZI Forschungszentrum Informatik Karlsruhe, Karlsruhe, Germany
* <YEAR> = 2010
*
* Further project information at http://semanticweb.org/wiki/RDF2Go
*/

package org.ontoware.rdf2go.model.impl;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.ontoware.rdf2go.exception.ModelRuntimeException;
import org.ontoware.rdf2go.model.DiffReader;
import org.ontoware.rdf2go.model.Model;
import org.ontoware.rdf2go.model.ModelChangedListener;
import org.ontoware.rdf2go.model.NotifyingModel;
import org.ontoware.rdf2go.model.Statement;
import org.ontoware.rdf2go.model.TriplePattern;
import org.ontoware.rdf2go.model.node.Node;
import org.ontoware.rdf2go.model.node.NodeOrVariable;
import org.ontoware.rdf2go.model.node.Resource;
import org.ontoware.rdf2go.model.node.ResourceOrVariable;
import org.ontoware.rdf2go.model.node.URI;
import org.ontoware.rdf2go.model.node.UriOrVariable;


/**
* Adds notifying capabilites to existing models.
*
* @author voelkel
*
*/
public class NotifyingModelLayer extends DelegatingModel implements NotifyingModel {
 
  /**
     *
     */
    private static final long serialVersionUID = -285355000693599975L;

  public NotifyingModelLayer(Model model) {
    super(model);
  }
 
  // /////////////////////////////////
  // override methods to be able to notify
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.common.CommonModelWriter#addAll(org.ontoware
   * .rdf2go.core.common.CommonModelReader)
   */
  @Override
  public void addAll(Iterator<? extends Statement> other) throws ModelRuntimeException {
    while(other.hasNext()) {
      this.addStatement(other.next());
    }
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * org.ontoware.rdf2go.core.node.Node)
   */
  @Override
  public void addStatement(Resource subject, URI predicate, Node object)
          throws ModelRuntimeException {
    this.addStatement(super.getDelegatedModel().createStatement(subject, predicate, object));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * java.lang.String, java.lang.String)
   */
  @Override
  public void addStatement(Resource subject, URI predicate, String literal, String languageTag)
          throws ModelRuntimeException {
    this.addStatement(getDelegatedModel().createStatement(subject, predicate,
            getDelegatedModel().createLanguageTagLiteral(literal, languageTag)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * java.lang.String, org.ontoware.rdf2go.core.node.URI)
   */
  @Override
  public void addStatement(Resource subject, URI predicate, String literal, URI datatypeURI)
          throws ModelRuntimeException {
    this.addStatement(subject, predicate, getDelegatedModel().createDatatypeLiteral(literal,
            datatypeURI));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * java.lang.String)
   */
  @Override
  public void addStatement(Resource subject, URI predicate, String literal)
          throws ModelRuntimeException {
    this.addStatement(getDelegatedModel().createStatement(subject, predicate,
            getDelegatedModel().createPlainLiteral(literal)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see org.ontoware.rdf2go.core.common.CommonModelWriter#addStatement(S)
   */
  @Override
  public void addStatement(Statement statement) throws ModelRuntimeException {
    for(ModelChangedListener listener : this.modelChangeListener.keySet()) {
      TriplePattern pattern = this.modelChangeListener.get(listener);
      if(pattern == null || pattern.matches(statement)) {
        listener.addedStatement(statement);
      }
    }
    getDelegatedModel().addStatement(statement);
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(java.lang.String
   * , org.ontoware.rdf2go.core.node.URI, java.lang.String, java.lang.String)
   */
  @Override
  public void addStatement(String subjectURIString, URI predicate, String literal,
          String languageTag) throws ModelRuntimeException {
    this.addStatement(getDelegatedModel().createStatement(
            getDelegatedModel().createURI(subjectURIString), predicate,
            getDelegatedModel().createLanguageTagLiteral(literal, languageTag)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(java.lang.String
   * , org.ontoware.rdf2go.core.node.URI, java.lang.String,
   * org.ontoware.rdf2go.core.node.URI)
   */
  @Override
  public void addStatement(String subjectURIString, URI predicate, String literal, URI datatypeURI)
          throws ModelRuntimeException {
    this.addStatement(getDelegatedModel().createStatement(
            getDelegatedModel().createURI(subjectURIString), predicate,
            getDelegatedModel().createDatatypeLiteral(literal, datatypeURI)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#addStatement(java.lang.String
   * , org.ontoware.rdf2go.core.node.URI, java.lang.String)
   */
  @Override
  public void addStatement(String subjectURIString, URI predicate, String literal)
          throws ModelRuntimeException {
    this.addStatement(getDelegatedModel().createStatement(
            getDelegatedModel().createURI(subjectURIString), predicate,
            getDelegatedModel().createPlainLiteral(literal)));
  }
 
  // ///////////// remove
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.common.CommonModelWriter#removeAll(org.ontoware
   * .rdf2go.core.common.CommonModelReader)
   */
  @Override
  public void removeAll(Iterator<? extends Statement> other) throws ModelRuntimeException {
    while(other.hasNext()) {
      this.removeStatement(other.next());
    }
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * org.ontoware.rdf2go.core.node.Node)
   */
  @Override
  public void removeStatement(Resource subject, URI predicate, Node object)
          throws ModelRuntimeException {
    this.removeStatement(getDelegatedModel().createStatement(subject, predicate, object));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * java.lang.String, java.lang.String)
   */
  @Override
  public void removeStatement(Resource subject, URI predicate, String literal, String languageTag)
          throws ModelRuntimeException {
    this.removeStatement(getDelegatedModel().createStatement(subject, predicate,
            getDelegatedModel().createLanguageTagLiteral(literal, languageTag)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * java.lang.String, org.ontoware.rdf2go.core.node.URI)
   */
  @Override
  public void removeStatement(Resource subject, URI predicate, String literal, URI datatypeURI)
          throws ModelRuntimeException {
    this.removeStatement(subject, predicate, getDelegatedModel().createDatatypeLiteral(literal,
            datatypeURI));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(org.ontoware
   * .rdf2go.core.node.Resource, org.ontoware.rdf2go.core.node.URI,
   * java.lang.String)
   */
  @Override
  public void removeStatement(Resource subject, URI predicate, String literal)
          throws ModelRuntimeException {
    this.removeStatement(getDelegatedModel().createStatement(subject, predicate,
            getDelegatedModel().createPlainLiteral(literal)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see org.ontoware.rdf2go.core.common.CommonModelWriter#removeStatement(S)
   */
  @Override
  public void removeStatement(Statement statement) throws ModelRuntimeException {
    for(ModelChangedListener listener : this.modelChangeListener.keySet()) {
      TriplePattern pattern = this.modelChangeListener.get(listener);
      if(pattern == null || pattern.matches(statement)) {
        listener.removedStatement(statement);
      }
    }
    getDelegatedModel().removeStatement(statement);
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(java.lang
   * .String, org.ontoware.rdf2go.core.node.URI, java.lang.String,
   * java.lang.String)
   */
  @Override
  public void removeStatement(String subjectURIString, URI predicate, String literal,
          String languageTag) throws ModelRuntimeException {
    this.removeStatement(getDelegatedModel().createStatement(
            getDelegatedModel().createURI(subjectURIString), predicate,
            getDelegatedModel().createLanguageTagLiteral(literal, languageTag)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(java.lang
   * .String, org.ontoware.rdf2go.core.node.URI, java.lang.String,
   * org.ontoware.rdf2go.core.node.URI)
   */
  @Override
  public void removeStatement(String subjectURIString, URI predicate, String literal,
          URI datatypeURI) throws ModelRuntimeException {
    this.removeStatement(getDelegatedModel().createStatement(
            getDelegatedModel().createURI(subjectURIString), predicate,
            getDelegatedModel().createDatatypeLiteral(literal, datatypeURI)));
  }
 
  /*
   * (non-Javadoc)
   *
   * @see
   * org.ontoware.rdf2go.core.triple.ModelWriter#removeStatement(java.lang
   * .String, org.ontoware.rdf2go.core.node.URI, java.lang.String)
   */
  @Override
  public void removeStatement(String subjectURIString, URI predicate, String literal)
          throws ModelRuntimeException {
    this.removeStatement(getDelegatedModel().createStatement(
            getDelegatedModel().createURI(subjectURIString), predicate,
            getDelegatedModel().createPlainLiteral(literal)));
  }
 
  @Override
  public void removeStatements(ResourceOrVariable subject, UriOrVariable predicate,
          NodeOrVariable object) throws ModelRuntimeException {
    ModelAddRemoveMemoryImpl toBeRemoved = new ModelAddRemoveMemoryImpl();
    toBeRemoved.addAll(this.findStatements(subject, predicate, object));
    this.removeAll(toBeRemoved.iterator());
   
    this.getDelegatedModel().removeAll(toBeRemoved.iterator());
  }
 
  // ////////// diff
 
  @Override
  public synchronized void update(DiffReader diff) throws ModelRuntimeException {
    for(ModelChangedListener listener : this.modelChangeListener.keySet()) {
      listener.performedUpdate(diff);
    }
    getDelegatedModel().update(diff);
  }
 
  // //////////////////////////////////
  // implement NotifyingModel
 
  private Map<ModelChangedListener,TriplePattern> modelChangeListener = new HashMap<ModelChangedListener,TriplePattern>();
 
  @Override
    public void addModelChangedListener(ModelChangedListener listener, TriplePattern pattern) {
    this.modelChangeListener.put(listener, pattern);
  }
 
  @Override
    public void addModelChangedListener(ModelChangedListener listener) {
    this.modelChangeListener.put(listener, null);
  }
 
  @Override
    public void removeModelChangedListener(ModelChangedListener listener) {
    this.modelChangeListener.remove(listener);
  }
 
}
TOP

Related Classes of org.ontoware.rdf2go.model.impl.NotifyingModelLayer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.