[Reasoner4j-user] SF.net SVN: reasoner4j:[42] trunk/reasoner4j
Status: Pre-Alpha
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2010-12-26 09:34:15
|
Revision: 42
http://reasoner4j.svn.sourceforge.net/reasoner4j/?rev=42&view=rev
Author: luc_peuvrier
Date: 2010-12-26 09:34:07 +0000 (Sun, 26 Dec 2010)
Log Message:
-----------
changed for retract count test, concept of not concluding premise
Modified Paths:
--------------
trunk/reasoner4j/doc/doc.txt
trunk/reasoner4j/doc/todo.txt
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/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/AbstractTable.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AssertConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/IConclusionListener.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/retemgr/service/ReteBuilder.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremise.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumConclusionType.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/IPremise.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/ReplaceConclusion.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBasicInference.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestReasoner.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/MockTable.java
trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestConclusionNotifier.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/rete/entity/AbstractReplaceConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractReplaceConclusion.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java
Removed Paths:
-------------
trunk/reasoner4j/logs/
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java
trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java
Modified: trunk/reasoner4j/doc/doc.txt
===================================================================
--- trunk/reasoner4j/doc/doc.txt 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/doc/doc.txt 2010-12-26 09:34:07 UTC (rev 42)
@@ -16,10 +16,10 @@
Premise PremiseTable
BuiltinPremiseTable
-PremiseNotListening PremiseTableNotListening
+PremiseNotConclude PremiseTableNotConclude
AssertedPremise AssertedPremiseTable
PremiseAndDefault PremiseTable
-PremiseAndDefaultNotListening PremiseTableNotListening
+PremiseAndDefaultNotConclude PremiseTableNotConclude
Merge:
------
Modified: trunk/reasoner4j/doc/todo.txt
===================================================================
--- trunk/reasoner4j/doc/todo.txt 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/doc/todo.txt 2010-12-26 09:34:07 UTC (rev 42)
@@ -26,10 +26,11 @@
Rule:
-----
-consistency check
-conclusion variable must appears in premise, or create blank node -> rete
-premise must have at least one variable
-rule removal : see FactSet problem
+consistency check:
+- conclusion variable must appears in premise, or create blank node -> rete
+- premise must have at least one variable
+- loop problem: A B C => A
+rule add/remove and fact exist => conclude assertion/retraction
ReteBuilder:
------------
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AbstractSubFactSet.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -22,6 +22,8 @@
*/
package net.sf.reasoner4j.fact;
+import net.sf.reasoner4j.ReasonerException;
+
/**
*
* @author luc peuvrier
@@ -91,10 +93,15 @@
@Override
public void fireRetracted(final CauseIdentifiedFact<T> fact) {
- if (!listenerSet.isEmpty()) {
- for (IFactSetListener<T> listener : listenerSet) {
- listener.retracted(fact.getFact());
+ try {
+ if (!listenerSet.isEmpty()) {
+ for (IFactSetListener<T> listener : listenerSet) {
+ listener.retracted(fact.getFact());
+ }
}
+ } catch (Exception exception) {
+ // FIXMELUC for test
+ throw new ReasonerException("for " + fact, exception);
}
}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/fact/AllFactSet.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -57,9 +57,12 @@
private final Map<IFact<T>, SingleFactSet<T>> singleFacSetMap =
/**/new HashMap<IFact<T>, SingleFactSet<T>>();
- // FIXME FIXMELUC temporary for assertFact and retractFact
+ // FIXMELUC temporary for assertFact
private final List<ISubFactSet<T>> subFactSetList = new LinkedList<ISubFactSet<T>>();
+ // FIXMELUC temporary for retractFact
+ private final List<ISubFactSet<T>> toRetractSubFactSetList = new LinkedList<ISubFactSet<T>>();
+
public AllFactSet() {
super(null);
}
@@ -68,7 +71,8 @@
public void assertFact(final CauseIdentifiedFact<T> fact) {
assertOpen();
subFactSetList.clear();
- if (addFact(fact, true)) {
+ if (addFact(fact, true)) {// update all
+ // then fire
for (ISubFactSet<T> subFactSet : subFactSetList) {
subFactSet.fireAsserted(fact);
}
@@ -146,18 +150,24 @@
@Override
public void retractFact(final CauseIdentifiedFact<T> fact) {
assertOpen();
- subFactSetList.clear();
- removeFact(fact, true);
- for (ISubFactSet<T> subFactSet : subFactSetList) {
- subFactSet.fireRetracted(fact);
+ try {
+ toRetractSubFactSetList.clear();
+ if (removeFact(fact, true)) {// update all
+ // then fire
+ for (ISubFactSet<T> subFactSet : toRetractSubFactSetList) {
+ subFactSet.fireRetracted(fact);
+ }
+ }
+ toRetractSubFactSetList.clear();
+ fireRetracted(fact);
+ } catch (Exception exception) {
+ throw new ReasonerException("for " + fact, exception);
}
- subFactSetList.clear();
- fireRetracted(fact);
}
@Override
public void fireRetracted(final ISubFactSet<T> subFactSet) {
- subFactSetList.add(subFactSet);
+ toRetractSubFactSetList.add(subFactSet);
}
@Override
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/motor/Motor.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -186,14 +186,15 @@
}
@Override
- public void conclusionRetraction(final T subject, final T predicate,
- final T object, int ruleIdentifier) {
- final IKnowledgeBase<T> view = allKnowledgeBase.view(subject,
- predicate, object);
+ public void conclusionViewRetraction(final CauseIdentifiedFact<T> fact) {
+ final IKnowledgeBase<T> view = allKnowledgeBase.view(fact.getSubject(),
+ fact.getPredicate(), fact.getObject());
final Iterator<IFact<T>> iterator = view.iterator();
while (iterator.hasNext()) {
- conclusionRetraction(new CauseIdentifiedFact<T>(iterator.next(),
- ruleIdentifier));
+ // conclusionRetraction(new CauseIdentifiedFact<T>(iterator.next(),
+ // fact.getRuleIdentifier()));
+ retractedStack.push(new CauseIdentifiedFact<T>(iterator.next(),
+ fact.getRuleIdentifier()));
}
}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -90,4 +90,22 @@
throw new ReasonerException("for conclusion " + conclusion, e);
}
}
+
+ @Override
+ public void added(final List<T> value, final boolean conclude) {
+ if (conclude) {
+ addedImpl(value);
+ }
+ }
+
+ protected abstract void addedImpl(List<T> value);
+
+ @Override
+ public void removed(final List<T> value, final boolean conclude) {
+ if (conclude) {
+ removedImpl(value);
+ }
+ }
+
+ protected abstract void removedImpl(List<T> value);
}
Copied: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java (from rev 41, trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ReplaceConclusionNotifier.java)
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractReplaceConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -0,0 +1,81 @@
+/*
+ * 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.rete.entity;
+
+import java.util.List;
+
+import net.sf.reasoner4j.fact.CauseIdentifiedFact;
+import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ * @param <T>
+ */
+public abstract class AbstractReplaceConclusionNotifier<T> extends
+ AbstractConclusionNotifier<T> {
+
+ private final AbstractReplaceConclusion<T> replaceConclusion;
+
+ public AbstractReplaceConclusionNotifier(final int ruleIdentifier,
+ final ITable<T> table,
+ final AbstractReplaceConclusion<T> replaceConclusion,
+ final int[] mapping, final IConclusionListener<T> listener) {
+ super(ruleIdentifier, table, replaceConclusion, mapping, listener);
+ this.replaceConclusion = replaceConclusion;
+ }
+
+ protected CauseIdentifiedFact<T> toRetract(
+ final CauseIdentifiedFact<T> createFact) {
+ final T subjectOfToRetract;
+ if (replaceConclusion.isSubjectReplacement()) {
+ subjectOfToRetract = null;
+ } else {
+ subjectOfToRetract = createFact.getSubject();
+ }
+ final T predicateOfToRetract;
+ if (replaceConclusion.isPredicateReplacement()) {
+ predicateOfToRetract = null;
+ } else {
+ predicateOfToRetract = createFact.getPredicate();
+ }
+ final T objectOfToRetract;
+ if (replaceConclusion.isObjectReplacement()) {
+ objectOfToRetract = null;
+ } else {
+ objectOfToRetract = createFact.getObject();
+ }
+ final CauseIdentifiedFact<T> toRetract = new CauseIdentifiedFact<T>(
+ subjectOfToRetract, predicateOfToRetract, objectOfToRetract,
+ ruleIdentifier);
+ return toRetract;
+ }
+
+ protected void addedImpl(final List<T> value) {
+ final CauseIdentifiedFact<T> createFact = createFact(value);
+ final CauseIdentifiedFact<T> toRetract = toRetract(createFact);
+ 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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AbstractTable.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -46,18 +46,18 @@
listenerSet.remove(listener);
}
- protected void fireAdded(final List<T> value) {
+ protected void fireAdded(final List<T> value, final boolean conclude) {
if (!listenerSet.isEmpty()) {
for (ITableListener<T> listener : listenerSet) {
- listener.added(value);
+ listener.added(value, conclude);
}
}
}
- protected void fireRemoved(final List<T> value) {
+ protected void fireRemoved(final List<T> value, final boolean conclude) {
if (!listenerSet.isEmpty()) {
for (ITableListener<T> listener : listenerSet) {
- listener.removed(value);
+ listener.removed(value, conclude);
}
}
}
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AffectConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -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.rete.entity;
+
+import java.util.List;
+
+import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ * @param <T>
+ */
+public class AffectConclusionNotifier<T> extends
+ AbstractReplaceConclusionNotifier<T> {
+
+ public AffectConclusionNotifier(final int ruleIdentifier,
+ final ITable<T> table,
+ final AbstractReplaceConclusion<T> replaceConclusion,
+ final int[] mapping, final IConclusionListener<T> listener) {
+ super(ruleIdentifier, table, replaceConclusion, mapping, listener);
+ }
+
+ @Override
+ public void removedImpl(final List<T> value) {
+ // no retraction
+ }
+}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/AssertConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -41,12 +41,12 @@
}
@Override
- public void added(final List<T> variableValueSet) {
- listener.conclusionAssertion(createFact(variableValueSet));
+ public void addedImpl(final List<T> value) {
+ listener.conclusionAssertion(createFact(value));
}
@Override
- public void removed(final List<T> variableValueSet) {
- listener.conclusionRetraction(createFact(variableValueSet));
+ public void removedImpl(final List<T> value) {
+ listener.conclusionRetraction(createFact(value));
}
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/IConclusionListener.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/IConclusionListener.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/IConclusionListener.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -36,6 +36,5 @@
void conclusionRetraction(CauseIdentifiedFact<T> fact);
- void conclusionRetraction(T subject, T predicate, T object,
- int ruleIdentifier);
+ void conclusionViewRetraction(CauseIdentifiedFact<T> fact);
}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ITableListener.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -32,7 +32,7 @@
*/
public interface ITableListener<T> {
- void added(final List<T> value);
+ void added(List<T> value, boolean conclude);
- void removed(final List<T> value);
+ void removed(List<T> value, 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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/MergeTable.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -83,29 +83,33 @@
this.rightTable = rightTable;
leftListener = new ITableListener<T>() {
@Override
- public void added(final List<T> leftValue) {
+ public void added(final List<T> leftValue, final boolean conclude) {
addMerge(rightTable, leftValue, rightTableMapping,
- leftTableMapping, rightIndexedTable, leftIndexedTable);
+ leftTableMapping, rightIndexedTable, leftIndexedTable,
+ conclude);
}
@Override
- public void removed(final List<T> leftValue) {
+ public void removed(final List<T> leftValue, final boolean conclude) {
removeMerge(rightTable, leftValue, rightTableMapping,
- /* leftTableMapping, */rightIndexedTable, leftIndexedTable);
+ /* leftTableMapping, */rightIndexedTable, leftIndexedTable,
+ conclude);
}
};
leftTable.addListener(leftListener);
rightListener = new ITableListener<T>() {
@Override
- public void added(final List<T> rightValue) {
+ public void added(final List<T> rightValue, final boolean conclude) {
addMerge(leftTable, rightValue, leftTableMapping,
- rightTableMapping, leftIndexedTable, rightIndexedTable);
+ rightTableMapping, leftIndexedTable, rightIndexedTable,
+ conclude);
}
@Override
- public void removed(final List<T> rightValue) {
+ public void removed(final List<T> rightValue, final boolean conclude) {
removeMerge(leftTable, rightValue, leftTableMapping,
- /* rightTableMapping, */leftIndexedTable, rightIndexedTable);
+ /* rightTableMapping, */leftIndexedTable, rightIndexedTable,
+ conclude);
}
};
rightTable.addListener(rightListener);
@@ -126,7 +130,8 @@
final TableSourceDestinationMapping<T> firstSourceTableMapping,
final TableSourceDestinationMapping<T> secondSourceTableMapping,
final Map<List<T>, Set<List<T>>> firstSourceIndexedTable,
- final Map<List<T>, Set<List<T>>> secondSourceIndexedTable) {
+ final Map<List<T>, Set<List<T>>> secondSourceIndexedTable,
+ final boolean conclude) {
final List<T> thisTableValue = secondSourceTableMapping
.fromSourceToDest(secondSourceValue);
final List<T> firstSourcevalue = firstSourceTableMapping
@@ -140,7 +145,7 @@
if (add(thisValueToAdd)) {
add(firstSourceIndexedTable, firstSourceValue, thisValueToAdd);
add(secondSourceIndexedTable, secondSourceValue, thisValueToAdd);
- fireAdded(thisValueToAdd);
+ fireAdded(thisValueToAdd, conclude);
}
}
}
@@ -150,9 +155,14 @@
final TableSourceDestinationMapping<T> firstSourceTableMapping,
/* final TableSourceDestinationMapping<T> secondSourceTableMapping, */
final Map<List<T>, Set<List<T>>> firstSourceIndexedTable,
- final Map<List<T>, Set<List<T>>> secondSourceIndexedTable) {
+ final Map<List<T>, Set<List<T>>> secondSourceIndexedTable,
+ final boolean conclude) {
final Set<List<T>> toRemoveSet = secondSourceIndexedTable
.remove(secondSourceValue);
+ if (toRemoveSet == null) {
+ throw new ReasonerException("no elements for "
+ + secondSourceValue.toString());
+ }
for (List<T> thisValueToRemove : toRemoveSet) {
if (!remove(thisValueToRemove)) {
throw new ReasonerException("must remove "
@@ -162,7 +172,7 @@
.fromDestToSource(thisValueToRemove);
firstSourceTable.removed(firstSourceValue);
remove(firstSourceIndexedTable, firstSourceValue, thisValueToRemove);
- fireRemoved(thisValueToRemove);
+ fireRemoved(thisValueToRemove, 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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTable.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -43,13 +43,13 @@
protected final IFactSet<T> factSet;
- private final boolean listening;
+ private final boolean conclude;
public PremiseTable(final IPremise<T> premise, final IFactSet<T> factSet,
- final boolean listening) {
+ final boolean conclude) {
super(premise);
this.factSet = factSet;
- this.listening = listening;
+ this.conclude = conclude;
factSet.addListener(this);
}
@@ -60,16 +60,14 @@
@Override
public void asserted(final IFact<T> fact) {
- if (listening) {
- final List<T> value = premise.createVariableValueSet(fact);
- fireAdded(value);
- }
+ final List<T> value = premise.createVariableValueSet(fact);
+ fireAdded(value, conclude);
}
@Override
public void retracted(final IFact<T> fact) {
final List<T> value = premise.createVariableValueSet(fact);
- fireRemoved(value);
+ fireRemoved(value, conclude);
}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/PremiseTableAndDefault.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -58,7 +58,7 @@
final T dpredicate = predicate == null ? defaultPredicate
: predicate;
final T dobject = object == null ? defaultObject : object;
- // FIXMELUC a local minimum implementation of fact set
+ // FIXMELUC is it better a local minimum implementation of fact set
view = new SingleFactSet<T>(null, dsubject, dpredicate, dobject);
view.addFact(new CauseIdentifiedFact<T>(dsubject, dpredicate,
dobject, 0/*
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/ReplaceConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -25,7 +25,7 @@
import java.util.List;
import net.sf.reasoner4j.fact.CauseIdentifiedFact;
-import net.sf.reasoner4j.rule.ReplaceConclusion;
+import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
/**
*
@@ -33,49 +33,19 @@
*
* @param <T>
*/
-public class ReplaceConclusionNotifier<T> extends AbstractConclusionNotifier<T> {
+public class ReplaceConclusionNotifier<T> extends
+ AbstractReplaceConclusionNotifier<T> {
- private final ReplaceConclusion<T> replaceConclusion;
-
public ReplaceConclusionNotifier(final int ruleIdentifier,
final ITable<T> table,
- final ReplaceConclusion<T> replaceConclusion, final int[] mapping,
- final IConclusionListener<T> listener) {
+ final AbstractReplaceConclusion<T> replaceConclusion,
+ final int[] mapping, final IConclusionListener<T> listener) {
super(ruleIdentifier, table, replaceConclusion, mapping, listener);
- this.replaceConclusion = replaceConclusion;
}
@Override
- public void added(final List<T> variableValueSet) {
- final CauseIdentifiedFact<T> createFact = createFact(variableValueSet);
- final T subjectOfToRetract;
- if (replaceConclusion.isSubjectReplacement()) {
- subjectOfToRetract = null;
- } else {
- subjectOfToRetract = createFact.getSubject();
- }
- final T predicateOfToRetract;
- if (replaceConclusion.isPredicateReplacement()) {
- predicateOfToRetract = null;
- } else {
- predicateOfToRetract = createFact.getPredicate();
- }
- final T objectOfToRetract;
- if (replaceConclusion.isObjectReplacement()) {
- objectOfToRetract = null;
- } else {
- objectOfToRetract = createFact.getObject();
- }
- listener.conclusionRetraction(subjectOfToRetract, predicateOfToRetract,
- objectOfToRetract, ruleIdentifier);
- listener.conclusionAssertion(createFact);
+ public void removedImpl(final List<T> value) {
+ final CauseIdentifiedFact<T> createFact = createFact(value);
+ listener.conclusionRetraction(createFact);
}
-
- @Override
- public void removed(final List<T> variableValueSet) {
- // FIXMELUC since asserted is always new, retract always fail
- // final CauseIdentifiedFact<T> createFact =
- // createFact(variableValueSet);
- // 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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/entity/RetractConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -41,13 +41,13 @@
}
@Override
- public void added(final List<T> variableValueSet) {
- listener.conclusionRetraction(createFact(variableValueSet,
+ public void addedImpl(final List<T> value) {
+ listener.conclusionRetraction(createFact(value,
ReteRule.ANY_CAUSE_RULE_IDENTIFIER));
}
@Override
- public void removed(final List<T> variableValueSet) {
+ public void removedImpl(final List<T> value) {
// notify nothing
}
}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rete/service/PremiseTableFactory.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -53,10 +53,10 @@
if (EnumPremiseType.DEFAULT.equals(premise.getType())) {
premiseTable = new PremiseTableAndDefault<T>(
(AbstractPremiseAndDefault<T>) premise, view,
- premise.isListening());
+ premise.isConclude());
} else {
premiseTable = new PremiseTable<T>(premise, view,
- premise.isListening());
+ premise.isConclude());
}
return premiseTable;
}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/retemgr/service/ReteBuilder.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/retemgr/service/ReteBuilder.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/retemgr/service/ReteBuilder.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -31,6 +31,7 @@
import net.sf.reasoner4j.fact.Fact;
import net.sf.reasoner4j.fact.IFact;
import net.sf.reasoner4j.motor.Motor;
+import net.sf.reasoner4j.rete.entity.AffectConclusionNotifier;
import net.sf.reasoner4j.rete.entity.AssertConclusionNotifier;
import net.sf.reasoner4j.rete.entity.AssertedPremiseTable;
import net.sf.reasoner4j.rete.entity.BuiltinPremiseTable;
@@ -51,9 +52,9 @@
import net.sf.reasoner4j.retemgr.entity.MergeReteNode;
import net.sf.reasoner4j.retemgr.entity.PremiseReteNode;
import net.sf.reasoner4j.retemgr.entity.RootReteNode;
+import net.sf.reasoner4j.rule.AbstractReplaceConclusion;
import net.sf.reasoner4j.rule.IConclusion;
import net.sf.reasoner4j.rule.IPremise;
-import net.sf.reasoner4j.rule.ReplaceConclusion;
import net.sf.reasoner4j.rule.Rule;
/**
@@ -194,8 +195,13 @@
case REPLACE:
conclusionNotifier = new ReplaceConclusionNotifier<T>(
reteRule.getIdentifier(), table,
- (ReplaceConclusion<T>) conclusion, mapping, motor);
+ (AbstractReplaceConclusion<T>) conclusion, mapping, motor);
break;
+ case AFFECT:
+ conclusionNotifier = new AffectConclusionNotifier<T>(
+ reteRule.getIdentifier(), table,
+ (AbstractReplaceConclusion<T>) conclusion, mapping, motor);
+ break;
default:
throw new ReasonerException("do not manage conclusion type "
+ conclusion.getType());
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractPremise.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -33,17 +33,17 @@
private final EnumPremiseType type;
- private final boolean listening;
+ private final boolean conclude;
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 listening) {
+ final boolean conclude) {
super(subjectVariableName, subject, predicateVariableName, predicate,
objectVariableName, object);
this.type = type;
- this.listening = listening;
+ this.conclude = conclude;
}
@Override
@@ -52,13 +52,14 @@
}
@Override
- public boolean isListening() {
- return listening;
+ public boolean isConclude() {
+ return conclude;
}
@Override
public String toString() {
- return "[type=" + type + ", listening=" + listening + "]";
+ return "AbstractPremise [type=" + type + ", conclude=" + conclude
+ + ", " + super.toString() + "]";
}
@Override
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractReplaceConclusion.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractReplaceConclusion.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AbstractReplaceConclusion.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -0,0 +1,64 @@
+/*
+ * 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 AbstractReplaceConclusion<T> extends AbstractConclusion<T> {
+
+ private final boolean subjectReplacement;
+
+ private final boolean predicateReplacement;
+
+ private final boolean objectReplacement;
+
+ public AbstractReplaceConclusion(final EnumConclusionType type,
+ final String subjectVariableName, final T subject,
+ final boolean subjectReplacement,
+ final String predicateVariableName, final T predicate,
+ final boolean predicateReplacement,
+ final String objectVariableName, final T object,
+ final boolean objectReplacement) {
+ super(type, subjectVariableName, subject, predicateVariableName,
+ predicate, objectVariableName, object);
+ this.subjectReplacement = subjectReplacement;
+ this.predicateReplacement = predicateReplacement;
+ this.objectReplacement = objectReplacement;
+ }
+
+ public boolean isSubjectReplacement() {
+ return subjectReplacement;
+ }
+
+ public boolean isPredicateReplacement() {
+ return predicateReplacement;
+ }
+
+ public boolean isObjectReplacement() {
+ return objectReplacement;
+ }
+}
Added: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/AffectConclusion.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -0,0 +1,44 @@
+/*
+ * 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 AffectConclusion<T> extends AbstractReplaceConclusion<T> {
+
+ public AffectConclusion(final String subjectVariableName, final T subject,
+ final boolean subjectReplacement,
+ final String predicateVariableName, final T predicate,
+ final boolean predicateReplacement,
+ final String objectVariableName, final T object,
+ final boolean objectReplacement) {
+ super(EnumConclusionType.AFFECT, subjectVariableName, subject,
+ subjectReplacement, predicateVariableName, predicate,
+ predicateReplacement, objectVariableName, object,
+ objectReplacement);
+ }
+}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumConclusionType.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumConclusionType.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/EnumConclusionType.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -40,5 +40,9 @@
/**
*
*/
- REPLACE;
+ REPLACE,
+ /**
+ *
+ */
+ AFFECT;
}
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-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/IPremise.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -36,7 +36,7 @@
EnumPremiseType getType();
- boolean isListening();
+ boolean isConclude();
String getSubjectVariableName();
Copied: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java (from rev 41, trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java)
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotConclude.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -0,0 +1,48 @@
+/*
+ * 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 PremiseAndDefaultNotConclude<T> extends
+ AbstractPremiseAndDefault<T> {
+
+ public PremiseAndDefaultNotConclude(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, false);
+ }
+
+ @Override
+ public String toString() {
+ return "PremiseAndDefaultNotListening [" + super.toString() + "]";
+ }
+}
Deleted: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseAndDefaultNotListening.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -1,48 +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.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, false);
- }
-
- @Override
- public String toString() {
- return "PremiseAndDefaultNotListening [" + super.toString() + "]";
- }
-}
Copied: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java (from rev 41, trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java)
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java (rev 0)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotConclude.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -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 PremiseNotConclude<T> extends AbstractPremise<T> {
+
+ public PremiseNotConclude(String subjectVariableName, T subject,
+ String predicateVariableName, T predicate,
+ String objectVariableName, T object) {
+ super(EnumPremiseType.STANDARD, subjectVariableName, subject,
+ predicateVariableName, predicate, objectVariableName, object,
+ false);
+ }
+
+ @Override
+ public String toString() {
+ return "PremiseNotListening [" + super.toString() + "]";
+ }
+}
Deleted: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/PremiseNotListening.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -1,45 +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.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,
- false);
- }
-
- @Override
- public String toString() {
- return "PremiseNotListening [" + super.toString() + "]";
- }
-}
Modified: trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/ReplaceConclusion.java
===================================================================
--- trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/ReplaceConclusion.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/main/java/net/sf/reasoner4j/rule/ReplaceConclusion.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -28,14 +28,8 @@
*
* @param <T>
*/
-public class ReplaceConclusion<T> extends AbstractConclusion<T> {
+public class ReplaceConclusion<T> extends AbstractReplaceConclusion<T> {
- private final boolean subjectReplacement;
-
- private final boolean predicateReplacement;
-
- private final boolean objectReplacement;
-
public ReplaceConclusion(final String subjectVariableName, final T subject,
final boolean subjectReplacement,
final String predicateVariableName, final T predicate,
@@ -43,21 +37,8 @@
final String objectVariableName, final T object,
final boolean objectReplacement) {
super(EnumConclusionType.REPLACE, subjectVariableName, subject,
- predicateVariableName, predicate, objectVariableName, object);
- this.subjectReplacement = subjectReplacement;
- this.predicateReplacement = predicateReplacement;
- this.objectReplacement = objectReplacement;
+ subjectReplacement, predicateVariableName, predicate,
+ predicateReplacement, objectVariableName, object,
+ objectReplacement);
}
-
- public boolean isSubjectReplacement() {
- return subjectReplacement;
- }
-
- public boolean isPredicateReplacement() {
- return predicateReplacement;
- }
-
- public boolean isObjectReplacement() {
- return objectReplacement;
- }
}
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBasicInference.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBasicInference.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestBasicInference.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -26,8 +26,6 @@
import java.util.Iterator;
import java.util.List;
-import org.apache.log4j.Logger;
-
import net.sf.reasoner4j.builtin.impl.AbstractBuiltin;
import net.sf.reasoner4j.fact.Fact;
import net.sf.reasoner4j.fact.IFact;
@@ -35,14 +33,17 @@
import net.sf.reasoner4j.kb.MainKnowledgeBaseFactory;
import net.sf.reasoner4j.motor.IMotor;
import net.sf.reasoner4j.motor.MotorFactory;
+import net.sf.reasoner4j.rule.AffectConclusion;
import net.sf.reasoner4j.rule.AssertConclusion;
import net.sf.reasoner4j.rule.IPremise;
import net.sf.reasoner4j.rule.Premise;
-import net.sf.reasoner4j.rule.PremiseAndDefaultNotListening;
-import net.sf.reasoner4j.rule.ReplaceConclusion;
+import net.sf.reasoner4j.rule.PremiseAndDefault;
+import net.sf.reasoner4j.rule.PremiseAndDefaultNotConclude;
import net.sf.reasoner4j.rule.RetractConclusion;
import net.sf.reasoner4j.rule.Rule;
+import org.apache.log4j.Logger;
+
/**
*
* @author luc peuvrier
@@ -269,7 +270,7 @@
}
}
- public void testDefaultPremiseAndReplaceConclusion() {
+ public void testCountRetract() {
final MainKnowledgeBaseFactory<String> kbFactory = new MainKnowledgeBaseFactory<String>();
final MotorFactory<String> motorFactory = new MotorFactory<String>();
final IKnowledgeBase<String> kb = kbFactory.create();
@@ -282,7 +283,7 @@
/* predicate */null, "state",
/* object */null, "ko");
rule.addPremise(premise);
- premise = new PremiseAndDefaultNotListening<String>(
+ premise = new PremiseAndDefaultNotConclude<String>(
/* subject */"?X", null, null,
/* predicate */null, "koCount", null,
/* object */"?C", null, "0");
@@ -293,7 +294,7 @@
/* object */"?NC", null);
rule.addPremise(premise);
- ReplaceConclusion<String> conclusion = new ReplaceConclusion<String>(
+ AffectConclusion<String> conclusion = new AffectConclusion<String>(
/* subject */"?X", null, false,
/* predicate */null, "koCount", false,
/* object */"?NC", null, true);
@@ -309,6 +310,12 @@
logKoCount("second ko assert", kb);
assertNotNull(kb.get("myCar", "koCount", "2"));
assertNull(kb.get("myCar", "koCount", "1"));
+ motor.retractFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("ko retract", kb);
+ motor.assertFact(new Fact<String>("myCar", "state", "ko"));
+ logKoCount("third ko assert", kb);
+ assertNotNull(kb.get("myCar", "koCount", "3"));
+ assertNull(kb.get("myCar", "koCount", "2"));
}
private void logKoCount(final String title, final IKnowledgeBase<String> kb) {
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestReasoner.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestReasoner.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/TestReasoner.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -51,8 +51,8 @@
import net.sf.reasoner4j.rule.IPremise;
import net.sf.reasoner4j.rule.Premise;
import net.sf.reasoner4j.rule.PremiseAndDefault;
-import net.sf.reasoner4j.rule.PremiseAndDefaultNotListening;
-import net.sf.reasoner4j.rule.PremiseNotListening;
+import net.sf.reasoner4j.rule.PremiseAndDefaultNotConclude;
+import net.sf.reasoner4j.rule.PremiseNotConclude;
import net.sf.reasoner4j.rule.ReplaceConclusion;
import net.sf.reasoner4j.rule.RetractConclusion;
import net.sf.reasoner4j.rule.Rule;
@@ -187,8 +187,6 @@
final IFactSet<String> kbFactSet = ((Motor<String>) motor)
.getAllFactSet();
final IKnowledgeBase<String> kb = motor.getKnowledgeBase();
- // FIXMELUC because of fact added by asserted premise add to conclude
- // fact
final Iterator<IFact<String>> iterator = kbFactSet.iterator();
while (iterator.hasNext()) {
final IFact<String> kbFact = iterator.next();
@@ -224,7 +222,7 @@
private void addPremiseNotListening(final Rule<String> currentRule,
final String[] definition) {
final String[] params = getParams(definition);
- final IPremise<String> premise = new PremiseNotListening<String>(
+ final IPremise<String> premise = new PremiseNotConclude<String>(
/* subject */params[0], params[1],
/* predicate */params[2], params[3],
/* object */params[4], params[5]);
@@ -244,7 +242,7 @@
private void addPremiseAndDefaultNotListening(
final Rule<String> currentRule, final String[] definition) {
final String[] params = getParams(definition);
- final IPremise<String> premise = new PremiseAndDefaultNotListening<String>(
+ final IPremise<String> premise = new PremiseAndDefaultNotConclude<String>(
/* subject */params[0], params[1], params[6],
/* predicate */params[2], params[3], params[7],
/* object */params[4], params[5], params[8]);
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/MockTable.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/MockTable.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/MockTable.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -63,7 +63,7 @@
}
final boolean added = indexedValueSetForKey.add(indexedValue);
if (added) {
- fireAdded(value);
+ fireAdded(value, true);
}
return added;
}
@@ -81,7 +81,7 @@
table.remove(key);
}
if (removed) {
- fireRemoved(value);
+ fireRemoved(value, true);
}
}
return removed;
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestConclusionNotifier.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestConclusionNotifier.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestConclusionNotifier.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -98,8 +98,7 @@
}
@Override
- public void conclusionRetraction(String subject, String predicate,
- String object, int ruleIdentifier) {
- // FIXMELUC test with replacement conclusion
+ public void conclusionViewRetraction(final CauseIdentifiedFact<String> fact) {
+ // // FIXMELUC test with replacement conclusion
}
}
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestMergeTable.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestMergeTable.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestMergeTable.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -164,7 +164,8 @@
* add to merge table notification
*/
@Override
- public void added(final List<String> variableValueSet) {
+ public void added(final List<String> variableValueSet,
+ final boolean conclude) {
addedList.add(variableValueSet);
}
@@ -172,7 +173,8 @@
* remove from merge table notification
*/
@Override
- public void removed(final List<String> variableValueSet) {
+ public void removed(final List<String> variableValueSet,
+ final boolean conclude) {
removedList.add(variableValueSet);
}
}
Modified: trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestPremiseTable.java
===================================================================
--- trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestPremiseTable.java 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/java/net/sf/reasoner4j/rete/entity/TestPremiseTable.java 2010-12-26 09:34:07 UTC (rev 42)
@@ -152,15 +152,15 @@
* add to merge table notification
*/
@Override
- public void added(final List<String> variableValueSet) {
- addedList.add(variableValueSet);
+ public void added(final List<String> value, final boolean conclude) {
+ addedList.add(value);
}
/**
* remove from merge table notification
*/
@Override
- public void removed(final List<String> variableValueSet) {
- removedList.add(variableValueSet);
+ public void removed(final List<String> value, final boolean conclude) {
+ removedList.add(value);
}
}
Modified: trunk/reasoner4j/src/test/resources/log4j.properties
===================================================================
--- trunk/reasoner4j/src/test/resources/log4j.properties 2010-12-25 04:43:52 UTC (rev 41)
+++ trunk/reasoner4j/src/test/resources/log4j.properties 2010-12-26 09:34:07 UTC (rev 42)
@@ -21,6 +21,6 @@
#log4j.logger.net.sf.reasoner4j.TestReteTable=debug
#log4j.logger.net.sf.reasoner4j.TestExistential=debug
-#log4j.logger.net.sf.reasoner4j.TestBasicInference=debug
+log4j.logger.net.sf.reasoner4j.TestBasicInference=debug
-#log4j.logger.net.sf.reasoner4j.motor.Motor=debug
\ No newline at end of file
+log4j.logger.net.sf.reasoner4j.motor.Motor=debug
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|