Zurück zum Beitrag Wenn Objekte Rollen spielen

public class StatementTemplates extends Resource 
    implements IStatementAddable 
{ 

  Collection fItems = new ArrayList();
  
  private class StatementTemplate 
      implements 
	ISubject,
	IPredicate, 
	IObject, 
	IStatementTemplate 
  {

    private boolean fSameSubject;
    private boolean fSamePredicate;
    private boolean fSameObject;
    private boolean fAddIfMissing;
    private Resource fSubject;
    private Resource fPredicate;
    private Resource fObject;

    public StatementTemplate(
             boolean addIfMissing) {
      fAddIfMissing = addIfMissing;
      fItems.add(this);
    }
    	
    public ISubject addStatementWith() {
      return this;
    }
      
    public IPredicate sameSubject() {
      fSameSubject = true;
      return this;
    }
	
    public IPredicate subject(
                        Resource subject) {
      fSubject = subject;
      return this;
    }
	
    public IObject samePredicate() {
      fSamePredicate = true;
      return this; 
    }
	
    public IObject predicate(
                     Resource predicate) {
      fPredicate = predicate;
      return this;
    }
	
    public IStatementAddable sameObject() {
      fSameObject = true;
	return StatementTemplates.this;
    }
	
    public IStatementAddable object(
                              Resource object) {  
      fObject = object;
	return StatementTemplates.this;
    }

    public void apply(Resource subject, 
                      Resource predicate, 
                      Resource object) {

      if (!fSameSubject) subject = fSubject;
      if (!fSamePredicate) predicate = fPredicate;
      if (!fSameObject) object = fObject;

      if (fAddIfMissing) {
        if (subject.hasStatementFor(predicate))
          return;
      }
	      
      if(getModel().statementExists(subject, 
				    predicate, 
                                    object)) {
        return;
      }
	      
      subject.property(predicate,object);
    }
    
  }

  public IStatementTemplate ifMissing() {
    return new StatementTemplate(true);
  }

  public IStatementTemplate always() {
    return new StatementTemplate(false);
  }

  public void apply(Resource subject, 
                    Resource property, 
                    Resource object) {
    Iterator iter = fItems.iterator();
    while (iter.hasNext()) {
      StatementTemplate template = 
          (StatementTemplate) iter.next();
      template.apply(subject,property,object);
    }
  }

}

Zurück zum Beitrag Wenn Objekte Rollen spielen

Druckbare Version