[Reasoner4j-user] SF.net SVN: reasoner4j:[45] trunk/reasoner4j/src
Status: Pre-Alpha
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2010-12-29 04:57:09
|
Revision: 45
http://reasoner4j.svn.sourceforge.net/reasoner4j/?rev=45&view=rev
Author: luc_peuvrier
Date: 2010-12-29 04:57:00 +0000 (Wed, 29 Dec 2010)
Log Message:
-----------
list builtin deprecated, logging added, log of conclude fact cause
Modified Paths:
--------------
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListAppendBuiltin.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListBuiltin.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultBuiltinProvider.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/motor/Motor.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractTable.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AssertConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ITableListener.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/MergeTable.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTable.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTableAndDefault.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ReplaceConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/RetractConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/service/PremiseTableFactory.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremise.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremiseAndDefault.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AssertedPremise.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/IPremise.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/Premise.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefault.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/MockTable.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestMergeTable.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestPremiseTable.java
trunk/reasoner4j/src/test/resources/log4j.properties
Added Paths:
-----------
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumPremiseMode.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuiltin.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestExpressionCompute.java
Removed Paths:
-------------
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuitin.java
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/TermIdentifierConstant.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -39,6 +39,8 @@
public static final String NIL_IDENTIFIER = "nil";
+ // FIXMELUC ListBuiltin no more needed
+ @Deprecated
public static final String LIST_PREDICATE_IDENTIFIER = "list";
public static final String IN_LIST_PREDICATE_IDENTIFIER = "inList";
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListAppendBuiltin.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListAppendBuiltin.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListAppendBuiltin.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -79,6 +79,7 @@
@Override
public void removed(final int ruleIdentifier, final T subject,
final T predicate, final T object) {
- removeList(ruleIdentifier, object);
+ // FIXMELUC list can be used elsewhere
+ // removeList(ruleIdentifier, object);
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListBuiltin.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListBuiltin.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/impl/list/ListBuiltin.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -38,6 +38,8 @@
*
* @param <T>
*/
+// FIXMELUC ListBuiltin no more needed
+@Deprecated
public class ListBuiltin<T> extends AbstractBuiltin<T> {
@SuppressWarnings("unchecked")
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultBuiltinProvider.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultBuiltinProvider.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/builtin/provider/DefaultBuiltinProvider.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -29,8 +29,8 @@
import net.sf.reasoner4j.builtin.impl.BlankNodeBuiltin;
import net.sf.reasoner4j.builtin.impl.list.InListBuiltin;
import net.sf.reasoner4j.builtin.impl.list.ListAppendBuiltin;
-import net.sf.reasoner4j.builtin.impl.list.ListBuiltin;
import net.sf.reasoner4j.builtin.impl.math.MathProductBuiltin;
+import net.sf.reasoner4j.builtin.impl.math.MathSumBuiltin;
/**
*
@@ -46,7 +46,9 @@
super();
builtinList.add(new BlankNodeBuiltin<T>());
builtinList.add(new MathProductBuiltin<T>(builtinComputer));
- builtinList.add(new ListBuiltin<T>());
+ builtinList.add(new MathSumBuiltin<T>(builtinComputer));
+ // FIXMELUC ListBuiltin no more needed
+ // builtinList.add(new ListBuiltin<T>());
builtinList.add(new InListBuiltin<T>());
builtinList.add(new ListAppendBuiltin<T>());
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -28,6 +28,8 @@
import java.util.LinkedList;
import java.util.Map;
+import org.apache.log4j.Logger;
+
import net.sf.reasoner4j.ReasonerException;
/**
@@ -39,6 +41,8 @@
public class AllFactSet<T> extends AbstractSubFactSet<T> implements
ISubFactSet<T> {
+ private final static Logger LOGGER = Logger.getLogger(AllFactSet.class);
+
// private final Map<T/* S */, PredicateObjectOfSubject<T>>
// predicateObjectBySubjectMap =
// /**/new HashMap<T/* S */, PredicateObjectOfSubject<T>>();
@@ -121,6 +125,9 @@
} else {
added = false;
}
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("added=" + added + " " + fact + " doFire=" + doFire);
+ }
return added;
}
@@ -228,6 +235,10 @@
}
}
}
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("removed=" + removed + " " + fact + " doFire="
+ + doFire);
+ }
return removed;
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/CauseIdentifiedFact.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -22,6 +22,8 @@
*/
package net.sf.reasoner4j.fact;
+import org.apache.log4j.Logger;
+
/**
*
* @author luc peuvrier
@@ -29,16 +31,28 @@
*/
public class CauseIdentifiedFact<T> {
+ private final static Logger LOGGER = Logger
+ .getLogger(CauseIdentifiedFact.class);
+
private final IFact<T> fact;
private final int ruleIdentifier;
+ private Exception creationTraceForDebug;
+
public CauseIdentifiedFact(final IFact<T> fact, final int ruleIdentifier) {
super();
this.fact = fact;
this.ruleIdentifier = ruleIdentifier;
+ if (LOGGER.isDebugEnabled()) {
+ creationTraceForDebug = new Exception("creation of " + fact);
+ }
}
+ public Exception getCreationTraceForDebug() {
+ return creationTraceForDebug;
+ }
+
public CauseIdentifiedFact(final T subject, final T predicate,
final T object, final int ruleIdentifier) {
this(new Fact<T>(subject, predicate, object), ruleIdentifier);
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -176,18 +176,21 @@
}
public void updateKnowledgeBaseWithConclusion() {
+ // FIXMELUC _multiple occurrence of same fact
CauseIdentifiedFact<T> asserted = assertedStack.poll();
CauseIdentifiedFact<T> retracted = retractedStack.poll();
do {
if (retracted != null) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("conclusion retraction " + retracted);
+ LOGGER.debug("conclusion retraction " + retracted,
+ retracted.getCreationTraceForDebug());
}
allKnowledgeBase.retractFactInFactSet(retracted);
retracted = retractedStack.poll();
} else if (asserted != null) {
if (LOGGER.isDebugEnabled()) {
- LOGGER.debug("conclusion assertion " + asserted);
+ LOGGER.debug("conclusion assertion " + asserted,
+ asserted.getCreationTraceForDebug());
}
allKnowledgeBase.assertFactInFactSet(asserted);
asserted = assertedStack.poll();
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractConclusionNotifier.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractConclusionNotifier.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -24,9 +24,12 @@
import java.util.List;
+import org.apache.log4j.Logger;
+
import net.sf.reasoner4j.ReasonerException;
import net.sf.reasoner4j.fact.CauseIdentifiedFact;
import net.sf.reasoner4j.fact.Fact;
+import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.rule.IConclusion;
/**
@@ -38,6 +41,8 @@
public abstract class AbstractConclusionNotifier<T> implements
ITableListener<T>, IConclusionNotifier<T> {
+ protected final Logger logger = Logger.getLogger(getClass());
+
protected final IConclusionListener<T> listener;
private final IConclusion<T> conclusion;
@@ -58,11 +63,11 @@
this.ruleIdentifier = ruleIdentifier;
}
- protected CauseIdentifiedFact<T> createFact(final List<T> variableValueSet) {
- return createFact(variableValueSet, ruleIdentifier);
+ protected CauseIdentifiedFact<T> createFact(final List<T> value) {
+ return createFact(value, ruleIdentifier);
}
- protected CauseIdentifiedFact<T> createFact(final List<T> variableValueSet,
+ protected CauseIdentifiedFact<T> createFact(final List<T> value,
final int ruleIdentifier) {
try {
int index = 0;
@@ -70,19 +75,19 @@
if (conclusion.getSubjectVariableName() == null) {
subject = conclusion.getSubject();
} else {
- subject = variableValueSet.get(mapping[index++]);
+ subject = value.get(mapping[index++]);
}
final T predicate;
if (conclusion.getPredicateVariableName() == null) {
predicate = conclusion.getPredicate();
} else {
- predicate = variableValueSet.get(mapping[index++]);
+ predicate = value.get(mapping[index++]);
}
final T object;
if (conclusion.getObjectVariableName() == null) {
object = conclusion.getObject();
} else {
- object = variableValueSet.get(mapping[index++]);
+ object = value.get(mapping[index++]);
}
return new CauseIdentifiedFact<T>(new Fact<T>(subject, predicate,
object), ruleIdentifier);
@@ -92,20 +97,28 @@
}
@Override
- public void added(final List<T> value, final boolean conclude) {
+ public void added(final List<T> value, final IFact<T> cause,
+ final boolean conclude) {
if (conclude) {
- addedImpl(value);
+ addedImpl(value, cause);
+ } else if (logger.isDebugEnabled()) {
+ logger.debug("do not add conclude " + createFact(value)
+ + " cause by " + cause);
}
}
- protected abstract void addedImpl(List<T> value);
+ protected abstract void addedImpl(List<T> value, IFact<T> cause);
@Override
- public void removed(final List<T> value, final boolean conclude) {
+ public void removed(final List<T> value, final IFact<T> cause,
+ final boolean conclude) {
if (conclude) {
- removedImpl(value);
+ removedImpl(value, cause);
+ } else if (logger.isDebugEnabled()) {
+ logger.debug("do not remove conclude " + createFact(value)
+ + " cause by " + cause);
}
}
- protected abstract void removedImpl(List<T> value);
+ protected abstract void removedImpl(List<T> value, IFact<T> cause);
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -25,6 +25,7 @@
import java.util.List;
import net.sf.reasoner4j.fact.CauseIdentifiedFact;
+import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
/**
@@ -72,9 +73,15 @@
return toRetract;
}
- protected void addedImpl(final List<T> value) {
+ protected void addedImpl(final List<T> value, final IFact<T> cause) {
final CauseIdentifiedFact<T> createFact = createFact(value);
final CauseIdentifiedFact<T> toRetract = toRetract(createFact);
+ if (logger.isDebugEnabled()) {
+ logger.debug("retraction of " + toRetract + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ logger.debug("assertion of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
listener.conclusionViewRetraction(toRetract);
listener.conclusionAssertion(createFact);
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractTable.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractTable.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractTable.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -26,6 +26,8 @@
import java.util.List;
import java.util.Set;
+import net.sf.reasoner4j.fact.IFact;
+
/**
*
* @author luc peuvrier
@@ -46,18 +48,20 @@
listenerSet.remove(listener);
}
- protected void fireAdded(final List<T> value, final boolean conclude) {
+ protected void fireAdded(final List<T> value, final IFact<T> cause,
+ final boolean conclude) {
if (!listenerSet.isEmpty()) {
for (ITableListener<T> listener : listenerSet) {
- listener.added(value, conclude);
+ listener.added(value, cause, conclude);
}
}
}
- protected void fireRemoved(final List<T> value, final boolean conclude) {
+ protected void fireRemoved(final List<T> value, final IFact<T> cause,
+ final boolean conclude) {
if (!listenerSet.isEmpty()) {
for (ITableListener<T> listener : listenerSet) {
- listener.removed(value, conclude);
+ listener.removed(value, cause, conclude);
}
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -24,6 +24,8 @@
import java.util.List;
+import net.sf.reasoner4j.fact.CauseIdentifiedFact;
+import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
/**
@@ -43,7 +45,13 @@
}
@Override
- public void removedImpl(final List<T> value) {
+ public void removedImpl(final List<T> value, final IFact<T> cause) {
// no retraction
+ if (logger.isDebugEnabled()) {
+ final CauseIdentifiedFact<T> createFact = createFact(value,
+ ReteRule.ANY_CAUSE_RULE_IDENTIFIER);
+ logger.debug("no remove conclude of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AssertConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AssertConclusionNotifier.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AssertConclusionNotifier.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -24,6 +24,8 @@
import java.util.List;
+import net.sf.reasoner4j.fact.CauseIdentifiedFact;
+import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.rule.IConclusion;
/**
@@ -41,12 +43,22 @@
}
@Override
- public void addedImpl(final List<T> value) {
- listener.conclusionAssertion(createFact(value));
+ public void addedImpl(final List<T> value, final IFact<T> cause) {
+ final CauseIdentifiedFact<T> createFact = createFact(value);
+ if (logger.isDebugEnabled()) {
+ logger.debug("assertion of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
+ listener.conclusionAssertion(createFact);
}
@Override
- public void removedImpl(final List<T> value) {
- listener.conclusionRetraction(createFact(value));
+ public void removedImpl(final List<T> value, final IFact<T> cause) {
+ final CauseIdentifiedFact<T> createFact = createFact(value);
+ if (logger.isDebugEnabled()) {
+ logger.debug("retraction of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
+ listener.conclusionRetraction(createFact);
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ITableListener.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ITableListener.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ITableListener.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -24,6 +24,8 @@
import java.util.List;
+import net.sf.reasoner4j.fact.IFact;
+
/**
*
* @author luc peuvrier
@@ -32,7 +34,7 @@
*/
public interface ITableListener<T> {
- void added(List<T> value, boolean conclude);
+ void added(List<T> value, IFact<T> cause, boolean conclude);
- void removed(List<T> value, boolean conclude);
+ void removed(List<T> value, IFact<T> cause, boolean conclude);
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/MergeTable.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/MergeTable.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/MergeTable.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -33,6 +33,7 @@
import net.sf.reasoner4j.Fortest;
import net.sf.reasoner4j.ReasonerException;
+import net.sf.reasoner4j.fact.IFact;
/**
*
@@ -83,33 +84,37 @@
this.rightTable = rightTable;
leftListener = new ITableListener<T>() {
@Override
- public void added(final List<T> leftValue, final boolean conclude) {
+ public void added(final List<T> leftValue, final IFact<T> cause,
+ final boolean conclude) {
addMerge(rightTable, leftValue, rightTableMapping,
leftTableMapping, rightIndexedTable, leftIndexedTable,
- conclude);
+ cause, conclude);
}
@Override
- public void removed(final List<T> leftValue, final boolean conclude) {
+ public void removed(final List<T> leftValue, final IFact<T> cause,
+ final boolean conclude) {
removeMerge(rightTable, leftValue, rightTableMapping,
/* leftTableMapping, */rightIndexedTable, leftIndexedTable,
- conclude);
+ cause, conclude);
}
};
leftTable.addListener(leftListener);
rightListener = new ITableListener<T>() {
@Override
- public void added(final List<T> rightValue, final boolean conclude) {
+ public void added(final List<T> rightValue, final IFact<T> cause,
+ final boolean conclude) {
addMerge(leftTable, rightValue, leftTableMapping,
rightTableMapping, leftIndexedTable, rightIndexedTable,
- conclude);
+ cause, conclude);
}
@Override
- public void removed(final List<T> rightValue, final boolean conclude) {
+ public void removed(final List<T> rightValue, final IFact<T> cause,
+ final boolean conclude) {
removeMerge(leftTable, rightValue, leftTableMapping,
/* rightTableMapping, */leftIndexedTable, rightIndexedTable,
- conclude);
+ cause, conclude);
}
};
rightTable.addListener(rightListener);
@@ -131,7 +136,7 @@
final TableSourceDestinationMapping<T> secondSourceTableMapping,
final Map<List<T>, Set<List<T>>> firstSourceIndexedTable,
final Map<List<T>, Set<List<T>>> secondSourceIndexedTable,
- final boolean conclude) {
+ final IFact<T> cause, final boolean conclude) {
final List<T> thisTableValue = secondSourceTableMapping
.fromSourceToDest(secondSourceValue);
final List<T> firstSourcevalue = firstSourceTableMapping
@@ -145,7 +150,7 @@
if (add(thisValueToAdd)) {
add(firstSourceIndexedTable, firstSourceValue, thisValueToAdd);
add(secondSourceIndexedTable, secondSourceValue, thisValueToAdd);
- fireAdded(thisValueToAdd, conclude);
+ fireAdded(thisValueToAdd, cause, conclude);
}
}
}
@@ -156,7 +161,7 @@
/* final TableSourceDestinationMapping<T> secondSourceTableMapping, */
final Map<List<T>, Set<List<T>>> firstSourceIndexedTable,
final Map<List<T>, Set<List<T>>> secondSourceIndexedTable,
- final boolean conclude) {
+ final IFact<T> cause, final boolean conclude) {
final Set<List<T>> toRemoveSet = secondSourceIndexedTable
.remove(secondSourceValue);
if (toRemoveSet == null) {
@@ -172,7 +177,7 @@
.fromDestToSource(thisValueToRemove);
firstSourceTable.removed(firstSourceValue);
remove(firstSourceIndexedTable, firstSourceValue, thisValueToRemove);
- fireRemoved(thisValueToRemove, conclude);
+ fireRemoved(thisValueToRemove, cause, conclude);
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTable.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTable.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTable.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -29,6 +29,7 @@
import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.fact.IFactSet;
import net.sf.reasoner4j.fact.IFactSetListener;
+import net.sf.reasoner4j.rule.EnumPremiseMode;
import net.sf.reasoner4j.rule.EnumPremiseType;
import net.sf.reasoner4j.rule.IPremise;
@@ -43,13 +44,13 @@
protected final IFactSet<T> factSet;
- private final boolean conclude;
+ private final EnumPremiseMode mode;
public PremiseTable(final IPremise<T> premise, final IFactSet<T> factSet,
- final boolean conclude) {
+ final EnumPremiseMode mode) {
super(premise);
this.factSet = factSet;
- this.conclude = conclude;
+ this.mode = mode;
factSet.addListener(this);
}
@@ -60,14 +61,18 @@
@Override
public void asserted(final IFact<T> fact) {
- final List<T> value = premise.createVariableValueSet(fact);
- fireAdded(value, conclude);
+ if (!EnumPremiseMode.DO_NOT_LISTENING.equals(mode)) {
+ final List<T> value = premise.createVariableValueSet(fact);
+ fireAdded(value, fact,
+ true ^ EnumPremiseMode.DO_NOT_CONCLUDE.equals(mode));
+ }
}
@Override
public void retracted(final IFact<T> fact) {
final List<T> value = premise.createVariableValueSet(fact);
- fireRemoved(value, conclude);
+ fireRemoved(value, fact,
+ true ^ EnumPremiseMode.DO_NOT_CONCLUDE.equals(mode));
}
private class SelectionIterator implements Iterator<List<T>> {
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTableAndDefault.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTableAndDefault.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTableAndDefault.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -26,6 +26,7 @@
import net.sf.reasoner4j.fact.IFactSet;
import net.sf.reasoner4j.fact.SingleFactSet;
import net.sf.reasoner4j.rule.AbstractPremiseAndDefault;
+import net.sf.reasoner4j.rule.EnumPremiseMode;
/**
*
@@ -42,8 +43,8 @@
private final T defaultObject;
public PremiseTableAndDefault(final AbstractPremiseAndDefault<T> premise,
- final IFactSet<T> factSet, final boolean listening) {
- super(premise, factSet, listening);
+ final IFactSet<T> factSet, final EnumPremiseMode mode) {
+ super(premise, factSet, mode);
defaultSubject = premise.getDefaultSubject();
defaultPredicate = premise.getDefaultPredicate();
defaultObject = premise.getDefaultObject();
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ReplaceConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ReplaceConclusionNotifier.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ReplaceConclusionNotifier.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -25,6 +25,7 @@
import java.util.List;
import net.sf.reasoner4j.fact.CauseIdentifiedFact;
+import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
/**
@@ -44,8 +45,12 @@
}
@Override
- public void removedImpl(final List<T> value) {
+ public void removedImpl(final List<T> value, final IFact<T> cause) {
final CauseIdentifiedFact<T> createFact = createFact(value);
+ if (logger.isDebugEnabled()) {
+ logger.debug("retraction of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
listener.conclusionRetraction(createFact);
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/RetractConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/RetractConclusionNotifier.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/RetractConclusionNotifier.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -24,6 +24,8 @@
import java.util.List;
+import net.sf.reasoner4j.fact.CauseIdentifiedFact;
+import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.rule.IConclusion;
/**
@@ -41,13 +43,23 @@
}
@Override
- public void addedImpl(final List<T> value) {
- listener.conclusionRetraction(createFact(value,
- ReteRule.ANY_CAUSE_RULE_IDENTIFIER));
+ public void addedImpl(final List<T> value, final IFact<T> cause) {
+ final CauseIdentifiedFact<T> createFact = createFact(value,
+ ReteRule.ANY_CAUSE_RULE_IDENTIFIER);
+ if (logger.isDebugEnabled()) {
+ logger.debug("retraction of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
+ listener.conclusionRetraction(createFact);
}
@Override
- public void removedImpl(final List<T> value) {
- // notify nothing
+ public void removedImpl(final List<T> value, final IFact<T> cause) {
+ if (logger.isDebugEnabled()) {
+ final CauseIdentifiedFact<T> createFact = createFact(value,
+ ReteRule.ANY_CAUSE_RULE_IDENTIFIER);
+ logger.debug("no remove conclude of " + createFact + " to "
+ + listener.getClass().getName() + "\n cause by " + cause);
+ }
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/service/PremiseTableFactory.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/service/PremiseTableFactory.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/service/PremiseTableFactory.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -53,10 +53,9 @@
if (EnumPremiseType.DEFAULT.equals(premise.getType())) {
premiseTable = new PremiseTableAndDefault<T>(
(AbstractPremiseAndDefault<T>) premise, view,
- premise.isConclude());
+ premise.getMode());
} else {
- premiseTable = new PremiseTable<T>(premise, view,
- premise.isConclude());
+ premiseTable = new PremiseTable<T>(premise, view, premise.getMode());
}
return premiseTable;
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremise.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremise.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremise.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -40,17 +40,17 @@
private final EnumPremiseType type;
- private final boolean conclude;
+ private final EnumPremiseMode mode;
public AbstractPremise(final EnumPremiseType type,
final String subjectVariableName, final T subject,
final String predicateVariableName, final T predicate,
final String objectVariableName, final T object,
- final boolean conclude) {
+ final EnumPremiseMode mode) {
super(subjectVariableName, subject, predicateVariableName, predicate,
objectVariableName, object);
this.type = type;
- this.conclude = conclude;
+ this.mode = mode;
}
@Override
@@ -59,8 +59,8 @@
}
@Override
- public boolean isConclude() {
- return conclude;
+ public EnumPremiseMode getMode() {
+ return mode;
}
@Override
@@ -110,8 +110,8 @@
@Override
public String toString() {
- return "AbstractPremise [type=" + type + ", conclude=" + conclude
- + ", " + super.toString() + "]";
+ return "AbstractPremise [type=" + type + ", mode=" + mode + ", "
+ + super.toString() + "]";
}
@Override
@@ -119,6 +119,7 @@
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((type == null) ? 0 : type.hashCode());
+ result = prime * result + ((mode == null) ? 0 : mode.hashCode());
return result;
}
@@ -132,6 +133,8 @@
AbstractPremise<T> other = (AbstractPremise<T>) obj;
if (type != other.getType())
return false;
+ if (mode != other.getMode())
+ return false;
return true;
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremiseAndDefault.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremiseAndDefault.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremiseAndDefault.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -39,10 +39,10 @@
final T subject, final T defaultSubject,
final String predicateVariableName, final T predicate,
final T defaultPredicate, final String objectVariableName,
- final T object, final T defaultObject, final boolean listening) {
+ final T object, final T defaultObject, final EnumPremiseMode mode) {
super(EnumPremiseType.DEFAULT, subjectVariableName, subject,
predicateVariableName, predicate, objectVariableName, object,
- listening);
+ mode);
this.defaultSubject = defaultSubject;
this.defaultPredicate = defaultPredicate;
this.defaultObject = defaultObject;
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AssertedPremise.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AssertedPremise.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AssertedPremise.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -35,7 +35,7 @@
final String objectVariableName, final T object) {
super(EnumPremiseType.ASSERTED, subjectVariableName, subject,
predicateVariableName, predicate, objectVariableName, object,
- true);
+ EnumPremiseMode.STANDARD);
}
@Override
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumPremiseMode.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumPremiseMode.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumPremiseMode.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -0,0 +1,39 @@
+package net.sf.reasoner4j.rule;
+
+/*
+ * Copyright 2010 Luc Peuvrier
+ *
+ * This file is a part of reasoner4j.
+ *
+ * reasoner4j is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * reasoner4j is distributed in the hope that it will be useful, but
+ * unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+public enum EnumPremiseMode {
+
+ /**
+ *
+ */
+ STANDARD,
+ /**
+ *
+ */
+ DO_NOT_CONCLUDE,
+ /**
+ *
+ */
+ DO_NOT_LISTENING;
+}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/IPremise.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/IPremise.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/IPremise.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -36,7 +36,7 @@
EnumPremiseType getType();
- boolean isConclude();
+ EnumPremiseMode getMode();
String getSubjectVariableName();
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/Premise.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/Premise.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/Premise.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -35,7 +35,7 @@
String objectVariableName, T object) {
super(EnumPremiseType.STANDARD, subjectVariableName, subject,
predicateVariableName, predicate, objectVariableName, object,
- true);
+ EnumPremiseMode.STANDARD);
}
@Override
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefault.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefault.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefault.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -37,7 +37,8 @@
final T defaultObject) {
super(subjectVariableName, subject, defaultSubject,
predicateVariableName, predicate, defaultPredicate,
- objectVariableName, object, defaultObject, true);
+ objectVariableName, object, defaultObject,
+ EnumPremiseMode.STANDARD);
}
@Override
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -38,7 +38,8 @@
final T object, final T defaultObject) {
super(subjectVariableName, subject, defaultSubject,
predicateVariableName, predicate, defaultPredicate,
- objectVariableName, object, defaultObject, false);
+ objectVariableName, object, defaultObject,
+ EnumPremiseMode.DO_NOT_CONCLUDE);
}
@Override
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010 Luc Peuvrier
+ *
+ * This file is a part of reasoner4j.
+ *
+ * reasoner4j is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * reasoner4j is distributed in the hope that it will be useful, but
+ * unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.reasoner4j.rule;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ * @param <T>
+ */
+public class PremiseAndDefaultNotListening<T> extends
+ AbstractPremiseAndDefault<T> {
+
+ public PremiseAndDefaultNotListening(final String subjectVariableName,
+ final T subject, final T defaultSubject,
+ final String predicateVariableName, final T predicate,
+ final T defaultPredicate, final String objectVariableName,
+ final T object, final T defaultObject) {
+ super(subjectVariableName, subject, defaultSubject,
+ predicateVariableName, predicate, defaultPredicate,
+ objectVariableName, object, defaultObject,
+ EnumPremiseMode.DO_NOT_LISTENING);
+ }
+
+ @Override
+ public String toString() {
+ return "PremiseAndDefaultNotListening [" + super.toString() + "]";
+ }
+}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -35,7 +35,7 @@
String objectVariableName, T object) {
super(EnumPremiseType.STANDARD, subjectVariableName, subject,
predicateVariableName, predicate, objectVariableName, object,
- false);
+ EnumPremiseMode.DO_NOT_CONCLUDE);
}
@Override
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010 Luc Peuvrier
+ *
+ * This file is a part of reasoner4j.
+ *
+ * reasoner4j is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * reasoner4j is distributed in the hope that it will be useful, but
+ * unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.reasoner4j.rule;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ * @param <T>
+ */
+public class PremiseNotListening<T> extends AbstractPremise<T> {
+
+ public PremiseNotListening(String subjectVariableName, T subject,
+ String predicateVariableName, T predicate,
+ String objectVariableName, T object) {
+ super(EnumPremiseType.STANDARD, subjectVariableName, subject,
+ predicateVariableName, predicate, objectVariableName, object,
+ EnumPremiseMode.DO_NOT_LISTENING);
+ }
+
+ @Override
+ public String toString() {
+ return "PremiseNotListening [" + super.toString() + "]";
+ }
+}
Copied: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuiltin.java (from rev 44, trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuitin.java)
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuiltin.java (rev 0)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuiltin.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2010 Luc Peuvrier
+ *
+ * This file is a part of reasoner4j.
+ *
+ * reasoner4j is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.gnu.org/licenses/lgpl.html
+ *
+ * reasoner4j is distributed in the hope that it will be useful, but
+ * unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sf.reasoner4j;
+
+import java.util.Iterator;
+
+import net.sf.reasoner4j.fact.Fact;
+import net.sf.reasoner4j.fact.IFact;
+import net.sf.reasoner4j.fact.IFactSet;
+import net.sf.reasoner4j.kb.IKnowledgeBase;
+import net.sf.reasoner4j.kb.MainKnowledgeBaseFactory;
+import net.sf.reasoner4j.motor.IMotor;
+import net.sf.reasoner4j.motor.Motor;
+import net.sf.reasoner4j.motor.MotorFactory;
+import net.sf.reasoner4j.rule.AssertConclusion;
+import net.sf.reasoner4j.rule.AssertedPremise;
+import net.sf.reasoner4j.rule.IPremise;
+import net.sf.reasoner4j.rule.Premise;
+import net.sf.reasoner4j.rule.Rule;
+
+import org.apache.log4j.Logger;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+public class TestBuiltin extends AbstractTestCase {
+
+ @SuppressWarnings("unused")
+ private static final Logger LOGGER = Logger.getLogger(TestBuiltin.class);
+
+ public void testPropertySetToProductResult() {
+ final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
+ final MotorFactory<String> motorFactory = new MotorFactory<String>();
+ final IKnowledgeBase<String> kb = kbFactory.create();
+ final IMotor<String> motor = motorFactory.create(kb, this, this);
+ motor.addBuiltin(defaultBuiltinProvider);
+
+ Rule<String> rule = new Rule<String>();
+ // ?M :hasXAcceleration ?G.
+ IPremise<String> premise = new Premise<String>(
+ /* subject */"?M", null,
+ /* predicate */null, ":hasXAcceleration",
+ /* object */"?G", null);
+ rule.addPremise(premise);
+ // ?M :hasElapsedTime ?T.
+ premise = new Premise<String>(
+ /* subject */"?M", null,
+ /* predicate */null, ":hasElapsedTime",
+ /* object */"?T", null);
+ rule.addPremise(premise);
+ // ?L listFirst 0.5.
+ AssertedPremise<String> aPremise = new AssertedPremise<String>(
+ /* subject */"?L", null,
+ /* predicate */null, "listFirst",
+ /* object */null, "0.5");
+ rule.addPremise(aPremise);
+ // ?L listRest ?R1.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?L", null,
+ /* predicate */null, "listRest",
+ /* object */"?R1", null);
+ rule.addPremise(aPremise);
+ // ?R1 listFirst ?G.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?R1", null,
+ /* predicate */null, "listFirst",
+ /* object */"?G", null);
+ rule.addPremise(aPremise);
+ // ?R1 listRest ?R2.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?R1", null,
+ /* predicate */null, "listRest",
+ /* object */"?R2", null);
+ rule.addPremise(aPremise);
+ // ?R2 listFirst ?T.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?R2", null,
+ /* predicate */null, "listFirst",
+ /* object */"?T", null);
+ rule.addPremise(aPremise);
+ // ?R2 listRest ?R3.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?R2", null,
+ /* predicate */null, "listRest",
+ /* object */"?R3", null);
+ rule.addPremise(aPremise);
+ // ?R3 listFirst ?T.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?R3", null,
+ /* predicate */null, "listFirst",
+ /* object */"?T", null);
+ rule.addPremise(aPremise);
+ // ?R3 listRest nil.
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?R3", null,
+ /* predicate */null, "listRest",
+ /* object */null, "nil");
+ rule.addPremise(aPremise);
+ // ?L mathProduct ?X.
+ premise = new Premise<String>(
+ /* subject */"?L", null,
+ /* predicate */null, "mathProduct",
+ /* object */"?X", null);
+ rule.addPremise(premise);
+
+ // ?M :hasX ?X.
+ final AssertConclusion<String> conclusion = new AssertConclusion<String>(
+ /* subject */"?M", null,
+ /* predicate */null, ":hasX",
+ /* object */"?X", null);
+ rule.addConclusion(conclusion);
+
+ motor.addRule(rule);
+
+ // :creamTart a :Mobile ;
+ // :hasXAcceleration 20.0 ;
+ // :hasElapsedTime 0.3 .
+
+ IFact<String> fact;
+ fact = new Fact<String>(":creamTart", ":hasElapsedTime", "0.3");
+ motor.assertFact(fact);
+ fact = new Fact<String>(":creamTart", ":hasXAcceleration", "20.0");
+ motor.assertFact(fact);
+
+ final IFactSet<String> allFactSet = ((Motor<String>) motor)
+ .getAllFactSet();
+ final IFactSet<String> view = allFactSet.view(":creamTart", ":hasX",
+ null);
+ assertNotNull(view);
+
+ // assert result accessing to internal fact set
+ Iterator<IFact<String>> iterator = view.iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals("0.8999999999999999", iterator.next().getObject());
+ assertFalse(iterator.hasNext());
+
+ // assert result accessing knowledge base view
+ IKnowledgeBase<String> kbView = kb.view(":creamTart", ":hasX", null);
+ assertNotNull(kbView);
+ iterator = kbView.iterator();
+ assertTrue(iterator.hasNext());
+ assertEquals("0.8999999999999999", iterator.next().getObject());
+ assertFalse(iterator.hasNext());
+ }
+
+ public void testPropertyIsProductResultOfAnOtherProperty() {
+ final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
+ final MotorFactory<String> motorFactory = new MotorFactory<String>();
+ final IKnowledgeBase<String> kb = kbFactory.create();
+ final IMotor<String> motor = motorFactory.create(kb, this, this);
+ motor.addBuiltin(defaultBuiltinProvider);
+
+ Rule<String> rule = new Rule<String>();
+ // ?X value ?V
+ IPremise<String> premise = new Premise<String>(
+ /* subject */"?X", null,
+ /* predicate */null, "value",
+ /* object */"?V", null);
+ rule.addPremise(premise);
+ // ?X factor ?F
+ premise = new Premise<String>(
+ /* subject */"?X", null,
+ /* predicate */null, "factor",
+ /* object */"?F", null);
+ rule.addPremise(premise);
+ // ?L listFirst ?F
+ AssertedPremise<String> aPremise = new AssertedPremise<String>(
+ /* subject */"?L", null,
+ /* predicate */null, "listFirst",
+ /* object */"?F", null);
+ rule.addPremise(aPremise);
+ // ?L listRest nil
+ aPremise = new AssertedPremise<String>(
+ /* subject */"?L", null,
+ /* predicate */null, "listRest",
+ /* object */null, "nil");
+ rule.addPremise(aPremise);
+ // ?L mathProduct ?V.
+ premise = new Premise<String>(
+ /* subject */"?L", null,
+ /* predicate */null, "mathProduct",
+ /* object */"?V", null);
+ rule.addPremise(premise);
+
+ // ?M :hasX ?X.
+ final AssertConclusion<String> conclusion = new AssertConclusion<String>(
+ /* subject */"?F", null,
+ /* predicate */null, "xxx",
+ /* object */"?V", null);
+ rule.addConclusion(conclusion);
+
+ motor.addRule(rule);
+
+ // truc value 5
+ // truc factor 6
+
+ IFact<String> fact;
+ fact = new Fact<String>("truc", "value", "5");
+ motor.assertFact(fact);
+ fact = new Fact<String>("truc", "factor", "6");
+
+ motor.assertFact(fact);
+ final IFactSet<String> allFactSet = ((Motor<String>) motor)
+ .getAllFactSet();
+ final IFactSet<String> view = allFactSet.view(null, "xxx", null);
+ assertNotNull(view);
+ assertFalse(view.iterator().hasNext());
+
+ final IKnowledgeBase<String> kbView = kb.view(null, "xxx", null);
+ assertNotNull(kbView);
+ assertFalse(kbView.iterator().hasNext());
+ }
+}
Deleted: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuitin.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuitin.java 2010-12-28 01:57:31 UTC (rev 44)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBuitin.java 2010-12-29 04:57:00 UTC (rev 45)
@@ -1,297 +0,0 @@
-/*
- * Copyright 2010 Luc Peuvrier
- *
- * This file is a part of reasoner4j.
- *
- * reasoner4j is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License.
- *
- * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
- * Licensed under the LGPL License, Version 3, 29 June 2007 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.gnu.org/licenses/lgpl.html
- *
- * reasoner4j is distributed in the hope that it will be useful, but
- * unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package net.sf.reasoner4j;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import net.sf.reasoner4j.builtin.impl.BuiltinSupport;
-import net.sf.reasoner4j.fact.Fact;
-import net.sf.reasoner4j.fact.IFact;
-import net.sf.reasoner4j.fact.IFactSet;
-import net.sf.reasoner4j.kb.IKnowledgeBase;
-import net.sf.reasoner4j.kb.MainKnowledgeBaseFactory;
-import net.sf.reasoner4j.motor.IMotor;
-import net.sf.reasoner4j.motor.Motor;
-import net.sf.reasoner4j.motor.MotorFactory;
-import net.sf.reasoner4j.rule.AssertConclusion;
-import net.sf.reasoner4j.rule.AssertedPremise;
-import net.sf.reasoner4j.rule.IPremise;
-import net.sf.reasoner4j.rule.Premise;
-import net.sf.reasoner4j.rule.Rule;
-
-/**
- *
- * @author luc peuvrier
- *
- */
-public class TestBuitin extends AbstractTestCase {
-
- public void testPropertySetToProductResult() {
- final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
- final MotorFactory<String> motorFactory = new MotorFactory<String>();
- final IKnowledgeBase<String> kb = kbFactory.create();
- final IMotor<String> motor = motorFactory.create(kb, this, this);
- motor.addBuiltin(defaultBuiltinProvider);
-
- Rule<String> rule = new Rule<String>();
- // ?M :hasXAcceleration ?G.
- IPremise<String> premise = new Premise<String>(
- /* subject */"?M", null,
- /* predicate */null, ":hasXAcceleration",
- /* object */"?G", null);
- rule.addPremise(premise);
- // ?M :hasElapsedTime ?T.
- premise = new Premise<String>(
- /* subject */"?M", null,
- /* predicate */null, ":hasElapsedTime",
- /* object */"?T", null);
- rule.addPremise(premise);
- // ?L listFirst 0.5.
- AssertedPremise<String> aPremise = new AssertedPremise<String>(
- /* subject */"?L", null,
- /* predicate */null, "listFirst",
- /* object */null, "0.5");
- rule.addPremise(aPremise);
- // ?L listRest ?R1.
- aPremise = new AssertedPremise<String>(
- /* subject */"?L", null,
- /* predicate */null, "listRest",
- /* object */"?R1", null);
- rule.addPremise(aPremise);
- // ?R1 listFirst ?G.
- aPremise = new AssertedPremise<String>(
- /* subject */"?R1", null,
- /* predicate */null, "listFirst",
- /* object */"?G", null);
- rule.addPremise(aPremise);
- // ?R1 listRest ?R2.
- aPremise = new AssertedPremise<String>(
- /* subject */"?R1", null,
- /* predicate */null, "listRest",
- /* object */"?R2", null);
- rule.addPremise(aPremise);
- // ?R2 listFirst ?T.
- aPremise = new AssertedPremise<String>(
- /* subject */"?R2", null,
- /* predicate */null, "listFirst",
- /* object */"?T", null);
- rule.addPremise(aPremise);
- // ?R2 listRest ?R3.
- aPremise = new AssertedPremise<String>(
- /* subject */"?R2", null,
- /* predicate */null, "listRest",
- /* object */"?R3", null);
- rule.addPremise(aPremise);
- // ?R3 listFirst ?T.
- aPremise = new AssertedPremise<String>(
- /* subject */"?R3", null,
- /* predicate */null, "listFirst",
- /* object */"?T", null);
- rule.addPremise(aPremise);
- // ?R3 listRest nil.
- aPremise = new AssertedPremise<String>(
- /* subject */"?R3", null,
- /* predicate */null, "listRest",
- /* object */null, "nil");
- rule.addPremise(aPremise);
- // ?L mathProduct ?X.
- premise = new Premise<String>(
- /* subject */"?L", null,
- /* predicate */null, "mathProduct",
- /* object */"?X", null);
- rule.addPremise(premise);
-
- // ?M :hasX ?X.
- final AssertConclusion<String> conclusion = new AssertConclusion<String>(
- /* subject */"?M", null,
- /* predicate */null, ":hasX",
- /* object */"?X", null);
- rule.addConclusion(conclusion);
-
- motor.addRule(rule);
-
- // :creamTart a :Mobile ;
- // :hasXAcceleration 20.0 ;
- // :hasElapsedTime 0.3 .
-
- IFact<String> fact;
- fact = new Fact<String>(":creamTart", ":hasElapsedTime", "0.3");
- motor.assertFact(fact);
- fact = new Fact<String>(":creamTart", ":hasXAcceleration", "20.0");
- motor.assertFact(fact);
-
- final IFactSet<String> allFactSet = ((Motor<String>) motor)
- .getAllFactSet();
- final IFactSet<String> view = allFactSet.view(":creamTart", ":hasX",
- null);
- assertNotNull(view);
-
- // assert result accessing to internal fact set
- Iterator<IFact<String>> iterator = view.iterator();
- assertTrue(iterator.hasNext());
- assertEquals("0.8999999999999999", iterator.next().getObject());
- assertFalse(iterator.hasNext());
-
- // assert result accessing knowledge base view
- IKnowledgeBase<String> kbView = kb.view(":creamTart", ":hasX", null);
- assertNotNull(kbView);
- iterator = kbView.iterator();
- assertTrue(iterator.hasNext());
- assertEquals("0.8999999999999999", iterator.next().getObject());
- assertFalse(iterator.hasNext());
- }
-
- public void testPropertyIsProductResultOfAnOtherProperty() {
- final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
- final MotorFactory<String> motorFactory = new MotorFactory<String>();
- final IKnowledgeBase<String> kb = kbFactory.create();
- final IMotor<String> motor = motorFactory.create(kb, this, this);
- motor.addBuiltin(defaultBuiltinProvider);
-
- Rule<String> rule = new Rule<String>();
- // ?X value ?V
- IPremise<String> premise = new Premise<String>(
- /* subject */"?X", null,
- /* predicate */null, "value",
- /* object */"?V", null);
- rule.addPremise(premise);
- // ?X factor ?F
- premise = new Premise<String>(
- /* subject */"?X", null,
- /* predicate */null, "factor",
- /* object */"?F", null);
- rule.addPremise(premise);
- // ?L listFirst ?F
- AssertedPremise<String> aPremise = new AssertedPremise<String>(
- /* subject */"?L", null,
- /* predicate */null, "listFirst",
- /* object */"?F", null);
- rule.addPremise(aPremise);
- // ?L listRest nil
- aPremise = new AssertedPremise<String>(
- /* subject */"?L", null,
- /* predicate */null, "listRest",
- /* object */null, "nil");
- rule.addPremise(aPremise);
- // ?L mathProduct ?V.
- premise = new Premise<String>(
- /* subject */"?L", null,
- /* predicate */null, "mathProduct",
- /* object */"?V", null);
- rule.addPremise(premise);
-
- // ?M :hasX ?X.
- final AssertConclusion<String> conclusion = new AssertConclusion<String>(
- /* subject */"?F", null,
- /* predicate */null, "xxx",
- /* object */"?V", null);
- rule.addConclusion(conclusion);
-
- motor.addRule(rule);
-
- // truc value 5
- // truc factor 6
-
- IFact<String> fact;
- fact = new Fact<String>("truc", "value", "5");
- motor.assertFact(fact);
- fact = new Fact<String>("truc", "factor", "6");
-
- motor.assertFact(fact);
- final IFactSet<String> allFactSet = ((Motor<String>) motor)
- .getAllFactSet();
- final IFactSet<String> view = allFactSet.view(null, "xxx", null);
- assertNotNull(view);
- assertFalse(view.iterator().hasNext());
-
- final IKnowledgeBase<String> kbView = kb.view(null, "xxx", null);
- assertNotNull(kbView);
- assertFalse(kbView.iterator().hasNext());
- }
-
- public void testListInListVersusPropertySum() {
- final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
- final MotorFactory<String> motorFactory = new MotorFactory<String>();
- final IKnowledgeBase<String> kb = kbFactory.create();
- final IMotor<String> motor = motorFactory.create(kb, this, this);
- motor.addBuiltin(defaultBuiltinProvider);
- final BuiltinSupport<String> builtinSupport = ((Motor<String>) motor)
- .getBuiltinSupport();
-
- Rule<String> rule = new Rule<String>();
- // ?X value ?V
- IPremise<String> premise = new Premise<String>(
- /* subject */"?X", null,
- /* predicate */null, "value",
- /* object */"?V", null);
- rule.addPremise(premise);
- // ?X factor ?F
- premise = new Premise<String>(
- /* subject */null, "xList",
- /* predicate */null, "list",
- /* object */"?L", null);
- rule.addPremise(premise);
-
- // ?M :hasX ?X.
- final AssertConclusion<String> conclusion = new AssertConclusion<String>(
- /* subject */"?V", null,
- /* predicate */null, "inList",
- /* object */"?L", null);
- rule.addConclusion(conclusion);
-
- motor.addRule(rule);
-
- motor.assertFact(new Fact<String>("truc", "value", "5"));
- assertList(builtinSupport, new String[] { "5" });
- motor.assertFact(new Fact<String>("truc", "value", "7"));
- assertList(builtinSupport, new String[] { "7", "5" });
- motor.retractFact(new Fact<String>("truc", "value", "5"));
- assertList(builtinSupport, new String[] { "7" });
- }
-
- private void assertList(final BuiltinSupport<String> builtinSupport,
- final String[] expectedValues) {
- final S...
[truncated message content] |