[Reasoner4j-user] SF.net SVN: reasoner4j:[56] trunk/reasoner4j/src
Status: Pre-Alpha
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2011-01-07 05:51:07
|
Revision: 56
http://reasoner4j.svn.sourceforge.net/reasoner4j/?rev=56&view=rev
Author: luc_peuvrier
Date: 2011-01-07 05:51:01 +0000 (Fri, 07 Jan 2011)
Log Message:
-----------
fact pattern feature added
Modified Paths:
--------------
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractFactSet.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/IFactSet.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/ObjectOfSubjectPredicate.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateObjectOfSubject.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateOfSubjectObject.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SingleFactSet.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectObjectOfPredicate.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectOfPredicateObject.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectPredicateOfObject.java
trunk/reasoner4j/src/test/resources/log4j.properties
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractFactSet.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractFactSet.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -41,6 +41,8 @@
private Exception closeTrace;
+ protected boolean pattern;
+
public AbstractFactSet() {
super();
open = true;
@@ -112,6 +114,6 @@
@Override
public boolean isRemovable() {
assertOpen();
- return !hasListener() && isEmpty();
+ return !hasListener() && isEmpty() && !pattern;
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -143,4 +143,11 @@
assertOpen();
return parentFactSet.removeFact(causeIdentifiedFact, doFire);
}
+
+ @Override
+ public String toString() {
+ return getClass().getName() + " [subject=" + getSubject()
+ + ", predicate=" + getPredicate() + ", object=" + getObject()
+ + "]";
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -383,4 +383,57 @@
}
return singleFactSet;
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assertOpen();
+ final T subject = fact.getSubject();
+ final T predicate = fact.getPredicate();
+ final T object = fact.getObject();
+ boolean added = false;
+ if (subject != null) {
+ final PredicateObjectOfSubject<T> predicateObjectOfSubject =
+ /**/predicateObjectOfSubjectGetOrCreate(subject);
+ predicateObjectOfSubject.addFactPattern(fact);
+ added = true;
+ }
+ if (predicate != null) {
+ final SubjectObjectOfPredicate<T> subjectObjectOfPredicate =
+ /**/subjectObjectOfPredicateGetOrCreate(predicate);
+ subjectObjectOfPredicate.addFactPattern(fact);
+ added = true;
+ }
+ if (object == null) {
+ final SubjectPredicateOfObject<T> subjectPredicateOfObject =
+ /**/subjectPredicateOfObjectGetOrCreate(object);
+ subjectPredicateOfObject.addFactPattern(fact);
+ added = true;
+ }
+ if (!added) {
+ throw new ReasonerException("can not fact pattern " + fact);
+ }
+ }
+
+ @Override
+ public boolean match(IFact<T> fact) {
+ boolean match;
+ IFactSet<T> factSet;
+ assertOpen();
+ final T subject = fact.getSubject();
+ factSet = predicateObjectBySubjectMap.get(subject);
+ if (factSet != null && factSet.match(fact)) {
+ match = true;
+ } else {
+ final T predicate = fact.getPredicate();
+ factSet = subjectObjectByPredicateMap.get(predicate);
+ if (factSet != null && factSet.match(fact)) {
+ match = true;
+ } else {
+ final T object = fact.getObject();
+ factSet = subjectPredicateByObjectMap.get(object);
+ match = factSet != null && factSet.match(fact);
+ }
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -29,7 +29,7 @@
* @author luc peuvrier
*
*/
-public class CauseIdentifiedFact<T> {
+public class CauseIdentifiedFact<T> implements IFact<T> {
private final static Logger LOGGER = Logger
.getLogger(CauseIdentifiedFact.class);
@@ -62,14 +62,17 @@
return fact;
}
+ @Override
public T getSubject() {
return fact.getSubject();
}
+ @Override
public T getPredicate() {
return fact.getPredicate();
}
+ @Override
public T getObject() {
return fact.getObject();
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/IFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/IFactSet.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/IFactSet.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -71,4 +71,8 @@
* @return true if removable
*/
boolean isRemovable();
+
+ void addFactPattern(IFact<T> fact);
+
+ boolean match(IFact<T> fact);
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/ObjectOfSubjectPredicate.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/ObjectOfSubjectPredicate.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/ObjectOfSubjectPredicate.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -26,6 +26,8 @@
import java.util.Iterator;
import java.util.Map;
+import net.sf.reasoner4j.ReasonerException;
+
/**
*
* @author luc peuvrier
@@ -172,4 +174,32 @@
assertOpen();
return new FactIterator<T>(factByObjectMap);
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject())
+ && predicate.equals(fact.getPredicate());
+ assertOpen();
+ if (fact.getObject() != null) {
+ throw new ReasonerException("can not add pattern " + fact + " to "
+ + toString());
+ }
+ pattern = true;
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject())
+ && predicate.equals(fact.getPredicate());
+ assertOpen();
+ boolean match;
+ if (pattern) {
+ match = true;
+ } else {
+ final T object = fact.getObject();
+ final IFactSet<T> factSet = factByObjectMap.get(object);
+ match = factSet != null && factSet.match(fact);
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateObjectOfSubject.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateObjectOfSubject.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateObjectOfSubject.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -223,4 +223,50 @@
assertOpen();
return new FactIterator<T>(objectOfSubjectPredicateByPredicateMap);
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject());
+ assertOpen();
+ boolean added = false;
+ final T predicate = fact.getPredicate();
+ if (predicate != null) {
+ final ObjectOfSubjectPredicate<T> objectOfSubjectPredicate =
+ /**/objectOfSubjectPredicateGetOrCreate(predicate);
+ objectOfSubjectPredicate.addFactPattern(fact);
+ added = true;
+ }
+ final T object = fact.getObject();
+ if (object != null) {
+ final PredicateOfSubjectObject<T> predicateOfSubjectObject =
+ /**/predicateOfSubjectObjectGetOrCreate(object);
+ predicateOfSubjectObject.addFactPattern(fact);
+ added = true;
+ }
+ if (!added) {
+ pattern = true;
+ }
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject());
+ assertOpen();
+ boolean match;
+ if (pattern) {
+ match = true;
+ } else {
+ IFactSet<T> factSet;
+ final T predicate = fact.getPredicate();
+ factSet = objectOfSubjectPredicateByPredicateMap.get(predicate);
+ if (factSet != null && factSet.match(fact)) {
+ match = true;
+ } else {
+ final T object = fact.getObject();
+ factSet = predicateOfSubjectObjectByObjectMap.get(object);
+ match = factSet != null && factSet.match(fact);
+ }
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateOfSubjectObject.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateOfSubjectObject.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/PredicateOfSubjectObject.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -26,6 +26,8 @@
import java.util.Iterator;
import java.util.Map;
+import net.sf.reasoner4j.ReasonerException;
+
/**
*
* @author luc peuvrier
@@ -171,4 +173,32 @@
assertOpen();
return new FactIterator<T>(factByPredicate);
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject())
+ && object.equals(fact.getObject());
+ assertOpen();
+ if (fact.getObject() != null) {
+ throw new ReasonerException("can not add pattern " + fact + " to "
+ + toString());
+ }
+ pattern = true;
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject())
+ && object.equals(fact.getObject());
+ assertOpen();
+ boolean match;
+ if (pattern) {
+ match = true;
+ } else {
+ final T predicate = fact.getPredicate();
+ final IFactSet<T> factSet = factByPredicate.get(predicate);
+ match = factSet != null && factSet.match(fact);
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SingleFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SingleFactSet.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SingleFactSet.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -223,6 +223,24 @@
}
@Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject())
+ && predicate.equals(fact.getPredicate())
+ && object.equals(fact.getObject());
+ assertOpen();
+ pattern = true;
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert subject.equals(fact.getSubject())
+ && predicate.equals(fact.getPredicate())
+ && object.equals(fact.getObject());
+ assertOpen();
+ return pattern;
+ }
+
+ @Override
public String toString() {
return "SingleFactSet [subject=" + subject + ", predicate=" + predicate
+ ", object=" + object + ", ruleIdentifierSet="
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectObjectOfPredicate.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectObjectOfPredicate.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectObjectOfPredicate.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -45,7 +45,7 @@
/**/new HashMap<T/* S */, IFactSet<T>>();
// o -> s(p,o) SubjectOfPredicateObject
- private final Map<T/* O */, SubjectOfPredicateObject<T>> subjectOfPredicateObjectByPredicateMap =
+ private final Map<T/* O */, SubjectOfPredicateObject<T>> subjectOfPredicateObjectByObjectMap =
/**/new HashMap<T/* O */, SubjectOfPredicateObject<T>>();
public SubjectObjectOfPredicate(final ISubFactSet<T> parentFactSet,
@@ -89,11 +89,11 @@
private SubjectOfPredicateObject<T> subjectOfPredicateObjectGetOrCreate(
final T object) {
SubjectOfPredicateObject<T> subjectOfPredicateObject =
- /**/subjectOfPredicateObjectByPredicateMap.get(object);
+ /**/subjectOfPredicateObjectByObjectMap.get(object);
if (subjectOfPredicateObject == null) {
subjectOfPredicateObject = new SubjectOfPredicateObject<T>(
parentFactSet, predicate, object);
- subjectOfPredicateObjectByPredicateMap.put(object,
+ subjectOfPredicateObjectByObjectMap.put(object,
subjectOfPredicateObject);
}
return subjectOfPredicateObject;
@@ -138,12 +138,12 @@
}
final T object = singleFactSet.getObject();
SubjectOfPredicateObject<T> subjectOfPredicateObject =
- /**/subjectOfPredicateObjectByPredicateMap.get(object);
+ /**/subjectOfPredicateObjectByObjectMap.get(object);
if (subjectOfPredicateObject != null) {
removed = subjectOfPredicateObject.removeFact(singleFactSet, fact,
doFire);
if (subjectOfPredicateObject.isRemovable()) {
- subjectOfPredicateObjectByPredicateMap.remove(object).close();
+ subjectOfPredicateObjectByObjectMap.remove(object).close();
}
}
if (removed && doFire) {
@@ -156,7 +156,7 @@
public boolean isEmpty() {
assertOpen();
return objectOfSubjectPredicateBySubjectMap.isEmpty()
- && subjectOfPredicateObjectByPredicateMap.isEmpty();
+ && subjectOfPredicateObjectByObjectMap.isEmpty();
}
@Override
@@ -168,7 +168,7 @@
}
final T object = subFactSet.getObject();
if (object != null) {
- subjectOfPredicateObjectByPredicateMap.remove(object).close();
+ subjectOfPredicateObjectByObjectMap.remove(object).close();
}
if (isRemovable()) {
fireRemovable();
@@ -223,4 +223,50 @@
assertOpen();
return new FactIterator<T>(objectOfSubjectPredicateBySubjectMap);
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert predicate.equals(fact.getPredicate());
+ assertOpen();
+ boolean added = false;
+ final T subject = fact.getSubject();
+ if (subject != null) {
+ final ObjectOfSubjectPredicate<T> objectOfSubjectPredicate =
+ /**/objectOfSubjectPredicateGetOrCreate(subject);
+ objectOfSubjectPredicate.addFactPattern(fact);
+ added = true;
+ }
+ final T object = fact.getObject();
+ if (object != null) {
+ final SubjectOfPredicateObject<T> subjectOfPredicateObject =
+ /**/subjectOfPredicateObjectGetOrCreate(object);
+ subjectOfPredicateObject.addFactPattern(fact);
+ added = true;
+ }
+ if (!added) {
+ pattern = true;
+ }
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert predicate.equals(fact.getPredicate());
+ assertOpen();
+ boolean match;
+ if (pattern) {
+ match = true;
+ } else {
+ IFactSet<T> factSet;
+ final T subject = fact.getSubject();
+ factSet = objectOfSubjectPredicateBySubjectMap.get(subject);
+ if (factSet != null && factSet.match(fact)) {
+ match = true;
+ } else {
+ final T object = fact.getObject();
+ factSet = subjectOfPredicateObjectByObjectMap.get(object);
+ match = factSet != null && factSet.match(fact);
+ }
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectOfPredicateObject.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectOfPredicateObject.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectOfPredicateObject.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -26,6 +26,8 @@
import java.util.Iterator;
import java.util.Map;
+import net.sf.reasoner4j.ReasonerException;
+
/**
*
* @author luc peuvrier
@@ -171,4 +173,32 @@
assertOpen();
return new FactIterator<T>(factBySubject);
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert predicate.equals(fact.getPredicate())
+ && object.equals(fact.getObject());
+ assertOpen();
+ if (fact.getObject() != null) {
+ throw new ReasonerException("can not add pattern " + fact + " to "
+ + toString());
+ }
+ pattern = true;
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert predicate.equals(fact.getPredicate())
+ && object.equals(fact.getObject());
+ assertOpen();
+ boolean match;
+ if (pattern) {
+ match = true;
+ } else {
+ final T subject = fact.getSubject();
+ final IFactSet<T> factSet = factBySubject.get(subject);
+ match = factSet != null && factSet.match(fact);
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectPredicateOfObject.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectPredicateOfObject.java 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/SubjectPredicateOfObject.java 2011-01-07 05:51:01 UTC (rev 56)
@@ -223,4 +223,50 @@
assertOpen();
return new FactIterator<T>(predicateOfSubjectObjectBySubjectMap);
}
+
+ @Override
+ public void addFactPattern(final IFact<T> fact) {
+ assert object.equals(fact.getObject());
+ assertOpen();
+ boolean added = false;
+ final T subject = fact.getSubject();
+ if (subject != null) {
+ final PredicateOfSubjectObject<T> predicateOfSubjectObject =
+ /**/predicateOfSubjectObjectGetOrCreate(subject);
+ predicateOfSubjectObject.addFactPattern(fact);
+ added = true;
+ }
+ final T predicate = fact.getPredicate();
+ if (predicate != null) {
+ final SubjectOfPredicateObject<T> subjectOfPredicateObject =
+ /**/subjectOfPredicateObjectGetOrCreate(predicate);
+ subjectOfPredicateObject.addFactPattern(fact);
+ added = true;
+ }
+ if (!added) {
+ pattern = true;
+ }
+ }
+
+ @Override
+ public boolean match(final IFact<T> fact) {
+ assert object.equals(fact.getObject());
+ assertOpen();
+ boolean match;
+ if (pattern) {
+ match = true;
+ } else {
+ IFactSet<T> factSet;
+ final T subject = fact.getSubject();
+ factSet = predicateOfSubjectObjectBySubjectMap.get(subject);
+ if (factSet != null && factSet.match(fact)) {
+ match = true;
+ } else {
+ final T predicate = fact.getPredicate();
+ factSet = subjectOfPredicateObjectByPredicateMap.get(predicate);
+ match = factSet != null && factSet.match(fact);
+ }
+ }
+ return match;
+ }
}
Modified: trunk/reasoner4j/src/test/resources/log4j.properties
===================================================================
--- trunk/reasoner4j/src/test/resources/log4j.properties 2011-01-07 04:28:39 UTC (rev 55)
+++ trunk/reasoner4j/src/test/resources/log4j.properties 2011-01-07 05:51:01 UTC (rev 56)
@@ -23,7 +23,7 @@
#log4j.logger.net.sf.reasoner4j.TestExistential=debug
#log4j.logger.net.sf.reasoner4j.TestBasicInference=debug
#log4j.logger.net.sf.reasoner4j.TestBuiltin=debug
-log4j.logger.net.sf.reasoner4j.TestExpressionCompute=debug
+#log4j.logger.net.sf.reasoner4j.TestExpressionCompute=debug
#log4j.logger.net.sf.reasoner4j.motor.Motor=debug
#log4j.logger.net.sf.reasoner4j.rete.entity.AffectConclusionNotifier=debug
@@ -32,4 +32,4 @@
#log4j.logger.net.sf.reasoner4j.rete.entity.RetractConclusionNotifier=debug
#log4j.logger.net.sf.reasoner4j.fact.AllFactSet=debug
-log4j.logger.net.sf.reasoner4j.fact.CauseIdentifiedFact=debug
+#log4j.logger.net.sf.reasoner4j.fact.CauseIdentifiedFact=debug
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|