From: <jom...@us...> - 2008-09-27 12:49:07
|
Revision: 1380 http://jason.svn.sourceforge.net/jason/?rev=1380&view=rev Author: jomifred Date: 2008-09-27 12:48:55 +0000 (Sat, 27 Sep 2008) Log Message: ----------- Add annotations in the java classes to help the generation of UML diagrams in the apidoc (using UMLGraph) Implement the new hierarchy of classes related to Literal and Atom -- as discussed in the jason-developers list. To create a new literal, the previous method Literal.parseLiteral(....) still works, but the constructor new Literal(...) has to be used as new LiteralImpl(....) Modified Paths: -------------- trunk/applications/as-unit-test/src/jason/asunit/TestArch.java trunk/applications/jason-moise/src/jmoise/OrgAgent.java trunk/applications/jason-team/src/java/arch/ACProxy.java trunk/applications/jason-team/src/java/arch/CowboyArch.java trunk/build.xml trunk/demos/sync-environment/EnvSync.java trunk/examples/game-of-life/LifeEnvironment.java trunk/examples/gold-miners-II/arch/MinerArch.java trunk/examples/gold-miners-II/env/MiningEnvironment.java trunk/examples/sniffer/comm/SnifferCentralised.java trunk/release-notes.txt trunk/src/jason/JasonException.java trunk/src/jason/asSemantics/ActionExec.java trunk/src/jason/asSemantics/TransitionSystem.java trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/ArithExpr.java trunk/src/jason/asSyntax/Atom.java trunk/src/jason/asSyntax/BinaryStructure.java trunk/src/jason/asSyntax/InternalActionLiteral.java trunk/src/jason/asSyntax/ListTermImpl.java trunk/src/jason/asSyntax/Literal.java trunk/src/jason/asSyntax/LogExpr.java trunk/src/jason/asSyntax/NumberTermImpl.java trunk/src/jason/asSyntax/Plan.java trunk/src/jason/asSyntax/PlanBodyImpl.java trunk/src/jason/asSyntax/PlanLibrary.java trunk/src/jason/asSyntax/Pred.java trunk/src/jason/asSyntax/RelExpr.java trunk/src/jason/asSyntax/Rule.java trunk/src/jason/asSyntax/Structure.java trunk/src/jason/asSyntax/Trigger.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/jason/asSyntax/patterns/goal/BC.java trunk/src/jason/asSyntax/patterns/goal/EBDG.java trunk/src/jason/asSyntax/patterns/goal/MG.java trunk/src/jason/asSyntax/patterns/goal/OMC.java trunk/src/jason/asSyntax/patterns/goal/RC.java trunk/src/jason/asSyntax/patterns/goal/SMC.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/jason/bb/JDBCPersistentBB.java trunk/src/jason/functions/RuleToFunction.java trunk/src/jason/stdlib/add_annot.java trunk/src/jason/stdlib/add_nested_source.java trunk/src/jason/stdlib/add_plan.java trunk/src/jason/stdlib/desire.java trunk/src/jason/stdlib/remove_plan.java trunk/src/test/BeliefBaseTest.java trunk/src/test/ExprTermTest.java trunk/src/test/PlanTest.java trunk/src/test/TermTest.java trunk/src/test/VarTermTest.java Added Paths: ----------- trunk/src/jason/stdlib/package.html Removed Paths: ------------- trunk/src/jason/stdlib/package.dox Modified: trunk/applications/as-unit-test/src/jason/asunit/TestArch.java =================================================================== --- trunk/applications/as-unit-test/src/jason/asunit/TestArch.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/applications/as-unit-test/src/jason/asunit/TestArch.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -4,7 +4,6 @@ import jason.architecture.AgArch; import jason.asSemantics.ActionExec; import jason.asSyntax.Literal; -import jason.asSyntax.Structure; import jason.environment.Environment; import jason.infra.centralised.CentralisedAgArch; import jason.infra.centralised.CentralisedEnvironment; @@ -20,7 +19,7 @@ private Condition condition; private int cycle = 0; - private List<Structure> actions = new ArrayList<Structure>(); + private List<Literal> actions = new ArrayList<Literal>(); StringBuilder output = new StringBuilder(); @@ -40,7 +39,7 @@ return cycle; } - public List<Structure> getActions() { + public List<Literal> getActions() { return actions; } Modified: trunk/applications/jason-moise/src/jmoise/OrgAgent.java =================================================================== --- trunk/applications/jason-moise/src/jmoise/OrgAgent.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/applications/jason-moise/src/jmoise/OrgAgent.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -13,6 +13,7 @@ import jason.asSyntax.DefaultTerm; import jason.asSyntax.InternalActionLiteral; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.PlanBody; import jason.asSyntax.PlanBodyImpl; import jason.asSyntax.Pred; @@ -216,7 +217,7 @@ } - private void generateObligationPermissionEvents(Pred m) throws RevisionFailedException { + private void generateObligationPermissionEvents(Literal m) throws RevisionFailedException { // computes this agent obligations in the scheme String schId = m.getTerm(0).toString(); String grId = m.getTerm(1).toString(); @@ -255,7 +256,7 @@ Structure giAnnot = new Structure("group"); giAnnot.addTerm(gr); - Literal obl = new Literal(type); + Literal obl = new LiteralImpl(type); obl.addTerms(sch,new UnnamedVar()); obl.addAnnot(giAnnot); @@ -367,7 +368,7 @@ } private Literal buildLiteralToCleanBB(Atom aSchId, PredicateIndicator pred, boolean schInEnd) { - Literal l = new Literal(pred.getFunctor()); + Literal l = new LiteralImpl(pred.getFunctor()); if (!schInEnd) { l.addTerm(aSchId); } @@ -434,7 +435,7 @@ // create the literal to be added VarTerm S = new VarTerm("S"); - Literal gil = new Literal("goal_state"); + Literal gil = new LiteralImpl("goal_state"); gil.addTerms(new Atom(gi.getScheme().getId()), gap, S); gil.addAnnot(managerSource); Modified: trunk/applications/jason-team/src/java/arch/ACProxy.java =================================================================== --- trunk/applications/jason-team/src/java/arch/ACProxy.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/applications/jason-team/src/java/arch/ACProxy.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -1,6 +1,7 @@ package arch; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.Structure; import jason.environment.grid.Location; @@ -151,7 +152,7 @@ arq.setScore(score); // add location in perception - Literal lpos = new Literal("pos"); + Literal lpos = new LiteralImpl("pos"); lpos.addTerms(new NumberTermImpl(agx), new NumberTermImpl(agy), new NumberTermImpl(step)); percepts.add(lpos); @@ -188,7 +189,7 @@ // ignore cows in the border, they complicate all :-) if (absx < arq.getModel().getWidth()-1 && absx != 0 && absy != 00 && absy < arq.getModel().getHeight()-1) { int cowId = Integer.parseInt(type.getAttribute("ID")); - Literal lc = new Literal("cow"); + Literal lc = new LiteralImpl("cow"); lc.addTerms(new NumberTermImpl( cowId ), new NumberTermImpl( absx), new NumberTermImpl(absy)); Structure stepannot = new Structure("step",1); stepannot.addTerm(new NumberTermImpl(step)); Modified: trunk/applications/jason-team/src/java/arch/CowboyArch.java =================================================================== --- trunk/applications/jason-team/src/java/arch/CowboyArch.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/applications/jason-team/src/java/arch/CowboyArch.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -7,6 +7,7 @@ import jason.asSemantics.Message; import jason.asSyntax.Atom; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTerm; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.Term; @@ -18,7 +19,6 @@ import java.util.logging.Level; import java.util.logging.Logger; -import jmoise.OrgAgent; import agent.SelectEvent; import env.ACViewer; import env.WorldModel; @@ -235,7 +235,7 @@ try { logger.info("** Arch adding restart for "+getAgName()); //getTS().getC().create(); // it is terrible for pending intentions of cowboys! - getTS().getC().addAchvGoal(new Literal("restart"), Intention.EmptyInt); + getTS().getC().addAchvGoal(new LiteralImpl("restart"), Intention.EmptyInt); lo2 = new Location(-1,-1); // to not restart again in the next cycle } catch (Exception e) { logger.info("Error in restart!"+ e); @@ -243,7 +243,7 @@ } public static Literal createCellPerception(int x, int y, Term obj) { - Literal l = new Literal("cell"); + Literal l = new LiteralImpl("cell"); l.addTerms(new NumberTermImpl(x), new NumberTermImpl(y), obj); @@ -358,7 +358,7 @@ if (acView != null) acView.getModel().setAgPos(agid, x, y); model.incVisited(x, y); //getTS().getAg().getLogger().info("ag pos "+getMinerId(m.getSender())+" = "+x+","+y); - Literal tAlly = new Literal("ally_pos"); + Literal tAlly = new LiteralImpl("ally_pos"); tAlly.addTerms(new Atom(m.getSender()), new NumberTermImpl(x), new NumberTermImpl(y)); getTS().getAg().addBel( tAlly ); } catch (Exception e) { Modified: trunk/build.xml =================================================================== --- trunk/build.xml 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/build.xml 2008-09-27 12:48:55 UTC (rev 1380) @@ -15,7 +15,7 @@ <property name="dist.properties" value="${basedir}/bin/dist.properties" /> <property name="version" value="1" /> - <property name="release" value="1.3" /> + <property name="release" value="2.0" /> <property name="distDir" value="${env.HOME}/tmp/x/Jason-${version}.${release}" /> <property name="distFile" value="${env.HOME}/Jason-${version}.${release}" /> Modified: trunk/demos/sync-environment/EnvSync.java =================================================================== --- trunk/demos/sync-environment/EnvSync.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/demos/sync-environment/EnvSync.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -1,6 +1,7 @@ // Environment code for project act-sync.mas2j import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.Structure; import jason.environment.SteppedEnvironment; @@ -24,7 +25,7 @@ @Override public boolean executeAction(String agName, Structure action) { actionCount++; - Literal p = new Literal("executed_actions"); + Literal p = new LiteralImpl("executed_actions"); p.addTerm(new NumberTermImpl(actionCount)); clearPercepts(); addPercept(p); Modified: trunk/examples/game-of-life/LifeEnvironment.java =================================================================== --- trunk/examples/game-of-life/LifeEnvironment.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/examples/game-of-life/LifeEnvironment.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -1,6 +1,7 @@ // Environment code for project game-of-life.mas2j import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.Structure; import jason.environment.grid.Location; @@ -43,7 +44,7 @@ @Override protected void stepStarted(int step) { //logger.info("start step "+step); - lstep = new Literal("step"); + lstep = new LiteralImpl("step"); lstep.addTerm(new NumberTermImpl(step+1)); } @@ -109,7 +110,7 @@ if (model.isAlive(l.x + 1, l.y - 1)) alive++; if (model.isAlive(l.x + 1, l.y)) alive++; if (model.isAlive(l.x + 1, l.y + 1)) alive++; - Literal lAlive = new Literal("alive_neighbors"); + Literal lAlive = new LiteralImpl("alive_neighbors"); lAlive.addTerm(new NumberTermImpl(alive)); addPercept(agName, lAlive); Modified: trunk/examples/gold-miners-II/arch/MinerArch.java =================================================================== --- trunk/examples/gold-miners-II/arch/MinerArch.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/examples/gold-miners-II/arch/MinerArch.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -5,6 +5,7 @@ import jason.architecture.AgArch; import jason.asSemantics.Message; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTerm; import jason.asSyntax.PredicateIndicator; import jason.environment.grid.Location; @@ -151,9 +152,9 @@ //logger.info("** Arch adding restart for "+getAgName()+", TS="+getTS().getCurrentTask()+", "+getTS().getC()); getTS().getC().create(); - getTS().getAg().getBB().abolish(new Literal("restart").getPredicateIndicator()); + getTS().getAg().getBB().abolish(new LiteralImpl("restart").getPredicateIndicator()); getTS().getAg().getBB().abolish(new PredicateIndicator("gold",2)); // tira os ouros - getTS().getAg().addBel(new Literal("restart")); + getTS().getAg().addBel(new LiteralImpl("restart")); lo2 = new Location(-1,-1); // to not restart again in the next cycle //getTS().stopCycle(); Modified: trunk/examples/gold-miners-II/env/MiningEnvironment.java =================================================================== --- trunk/examples/gold-miners-II/env/MiningEnvironment.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/examples/gold-miners-II/env/MiningEnvironment.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -3,6 +3,7 @@ import jason.asSyntax.Atom; import jason.asSyntax.DefaultTerm; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.Structure; import jason.asSyntax.Term; @@ -179,7 +180,7 @@ logger.warning("Error creating world "+e); } } - public static Literal aCAP = new Literal("container_has_space"); + public static Atom aCAP = new LiteralImpl("container_has_space"); public static Atom aOBSTACLE = new Atom("obstacle"); public static Atom aGOLD = new Atom("gold"); @@ -202,11 +203,11 @@ clearPercepts(agName); // its location Location l = model.getAgPos(ag); - Literal p = new Literal("pos"); + Literal p = new LiteralImpl("pos"); p.addTerms(new NumberTermImpl(l.x), new NumberTermImpl(l.y), new NumberTermImpl(getStep())); addPercept(agName, p); - Literal cg = new Literal("carrying_gold"); + Literal cg = new LiteralImpl("carrying_gold"); cg.addTerm(new NumberTermImpl(model.getGoldsWithAg(ag))); addPercept(agName, cg); @@ -255,7 +256,7 @@ } public static Literal createCellPerception(int x, int y, Atom obj) { - Literal l = new Literal("cell"); + Literal l = new LiteralImpl("cell"); l.addTerms(new NumberTermImpl(x), new NumberTermImpl(y), obj); Modified: trunk/examples/sniffer/comm/SnifferCentralised.java =================================================================== --- trunk/examples/sniffer/comm/SnifferCentralised.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/examples/sniffer/comm/SnifferCentralised.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -6,6 +6,7 @@ import jason.asSemantics.Message; import jason.asSyntax.Atom; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.StringTermImpl; import jason.asSyntax.Structure; @@ -39,7 +40,7 @@ // add a belief in the agent mind // format: msgSent(time(YY,MM,DD,HH,MM,SS),id,irt,ilf,sender,receiver,content) - Literal e = new Literal("msg_sent"); + Literal e = new LiteralImpl("msg_sent"); Calendar now = new GregorianCalendar(); Structure p = new Structure("time"); Modified: trunk/release-notes.txt =================================================================== --- trunk/release-notes.txt 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/release-notes.txt 2008-09-27 12:48:55 UTC (rev 1380) @@ -1,5 +1,5 @@ ------------- -version 1.1.3 +version 1.2.0 ------------- New features @@ -38,6 +38,18 @@ . .math.average: returns the average of a list of numbers +API changes +. the most significant change is in the Literal class, that + is abstract now. To create a new literal, the previous + method + Literal.parseLiteral(....) + still works, but + new Literal(...) + have to be written as + new LiteralImpl(....) + see API doc for more details. + see discussion about the Literal class in the + jason-developers list. ------------- version 1.1.2 Modified: trunk/src/jason/JasonException.java =================================================================== --- trunk/src/jason/JasonException.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/JasonException.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -38,7 +38,8 @@ private static final long serialVersionUID = 1L; - public static final Term WRONG_ARGS = new Atom("wrong_arguments"); + public static final Term WRONG_ARGS = new Atom("wrong_arguments"); + public static final Term UNKNOW_ERROR = new Atom("unknown"); private static final Term defaultError = new Atom("internal_action"); private Term error = defaultError; Modified: trunk/src/jason/asSemantics/ActionExec.java =================================================================== --- trunk/src/jason/asSemantics/ActionExec.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSemantics/ActionExec.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -24,6 +24,7 @@ package jason.asSemantics; +import jason.asSyntax.Literal; import jason.asSyntax.Pred; import jason.asSyntax.Structure; @@ -37,11 +38,11 @@ private static final long serialVersionUID = 1L; - private Structure action; + private Literal action; private Intention intention; private boolean result; - public ActionExec(Pred ac, Intention i) { + public ActionExec(Literal ac, Intention i) { action = ac; intention = i; result = false; @@ -61,7 +62,10 @@ } public Structure getActionTerm() { - return action; + if (action.isAtom()) + return new Structure(action.getFunctor()); + else + return (Structure)action; } public Intention getIntention() { Modified: trunk/src/jason/asSemantics/TransitionSystem.java =================================================================== --- trunk/src/jason/asSemantics/TransitionSystem.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSemantics/TransitionSystem.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -31,6 +31,7 @@ import jason.asSyntax.InternalActionLiteral; import jason.asSyntax.ListTermImpl; import jason.asSyntax.Literal; +import jason.asSyntax.LiteralImpl; import jason.asSyntax.LogicalFormula; import jason.asSyntax.NumberTermImpl; import jason.asSyntax.Plan; @@ -186,7 +187,7 @@ } else if (conf.ag.socAcc(m)) { // generate an event - Literal received = new Literal("kqml_received"); + Literal received = new LiteralImpl("kqml_received"); received.addTerms( new Atom(m.getSender()), new Atom(m.getIlForce()), @@ -863,10 +864,11 @@ return null; } + private static final Term aNOCODE = new Atom("no_code"); private static void setDefaultFailureAnnots(Event failEvent, Term body, List<Term> failAnnots) { // add default failure annots if (failAnnots == null) - failAnnots = JasonException.createBasicErrorAnnots("unknown", ""); + failAnnots = JasonException.createBasicErrorAnnots( JasonException.UNKNOW_ERROR, ""); // add failure annots in the event related to the code source Literal bodyterm = null; @@ -878,9 +880,8 @@ codeline = new NumberTermImpl(bodyterm.getSrcLine()); } else { bodyterm = new Atom("no_code"); - codesrc = new Atom("no_code"); - codeline = new Atom("no_code"); - + codesrc = aNOCODE; + codeline = aNOCODE; } // code Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSemantics/Unifier.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -23,6 +23,7 @@ package jason.asSemantics; +import jason.asSyntax.Atom; import jason.asSyntax.Literal; import jason.asSyntax.Pred; import jason.asSyntax.Structure; @@ -214,6 +215,14 @@ // both terms are not vars + // if the first is an Atom and the second pred, they must have the same functor + // and no terms in the pred + if (t1g.isAtom() && t2g.isPred()) { + Atom t1a = (Atom)t1g; + Pred t2p = (Pred)t2g; + return t2p.getArity() == 0 && t1a.getFunctor().equals(t2p.getFunctor()); + } + // if any of the terms is not a structure (is a number or a // string), they must be equal if (!t1g.isStructure() || !t2g.isStructure()) @@ -249,7 +258,7 @@ return false; // different functor - if (t1s.getFunctor() != null && !t1s.getFunctor().equals(t2s.getFunctor())) + if (!t1s.getFunctor().equals(t2s.getFunctor())) // t1a.getFunctor() != null && return false; // unify inner terms Modified: trunk/src/jason/asSyntax/ArithExpr.java =================================================================== --- trunk/src/jason/asSyntax/ArithExpr.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/ArithExpr.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -34,14 +34,16 @@ import org.w3c.dom.Element; /** - * Represents and solve arithmetic expressions like "10 + 30". + Represents and solve arithmetic expressions like "10 + 30". + + @navassoc - op - ArithmeticOp */ public class ArithExpr extends ArithFunctionTerm implements NumberTerm { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(ArithExpr.class.getName()); - - public enum ArithmeticOp { + + public enum ArithmeticOp { none { double eval(double x, double y) { return 0; @@ -121,23 +123,23 @@ private ArithmeticOp op = ArithmeticOp.none; public ArithExpr(NumberTerm t1, ArithmeticOp oper, NumberTerm t2) { - super(oper.toString(),2); - addTerms(t1, t2); + super(oper.toString(),2); + addTerms(t1, t2); op = oper; - if (t1 instanceof SourceInfo) setSrc((SourceInfo)t1); - else if (t2 instanceof SourceInfo) setSrc((SourceInfo)t2); + if (t1 instanceof SourceInfo) setSrc((SourceInfo)t1); + else if (t2 instanceof SourceInfo) setSrc((SourceInfo)t2); } public ArithExpr(ArithmeticOp oper, NumberTerm t1) { - super(oper.toString(),1); - addTerm(t1); + super(oper.toString(),1); + addTerm(t1); op = oper; - setSrc(t1); + setSrc(t1); } private ArithExpr(ArithExpr ae) { // for clone - super(ae); - op = ae.op; + super(ae); + op = ae.op; } /** returns some Term that can be evaluated as Number */ @@ -170,9 +172,9 @@ } @Override - public boolean checkArity(int a) { + public boolean checkArity(int a) { return a == 1 || a == 2; - } + } /** make a hard copy of the terms */ public NumberTerm clone() { Modified: trunk/src/jason/asSyntax/Atom.java =================================================================== --- trunk/src/jason/asSyntax/Atom.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/Atom.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -23,142 +23,102 @@ package jason.asSyntax; -import jason.JasonException; -import jason.asSemantics.Unifier; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + /** - * Represents an atom (a structure with no arguments, e.g. "tell", "a"), it is an - * immutable object. It extends Literal, so can be used in place of a - * Literal, but does not allow operations on terms/annots and can not be negated. + * Represents an atom (a positive literal with no arguments and no annotations, e.g. "tell", "a"). */ -public final class Atom extends Literal { +public class Atom extends Literal { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(Atom.class.getName()); + private final String functor; // immutable field + public Atom(String functor) { - super(functor, 0); + if (functor == null) + logger.log(Level.WARNING, "A structure functor should not be null!", new Exception()); + this.functor = functor; } - public Atom clone() { - return this; // since this object is immutable + public Atom(Literal l) { + this.functor = l.getFunctor(); + predicateIndicatorCache = l.predicateIndicatorCache; + hashCodeCache = l.hashCodeCache; + setSrc(l); } - - @Override - public boolean apply(Unifier u) { - return false; - } - // - // override structure methods - // - - @Override - public void addTerm(Term t) { - logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!")); + public String getFunctor() { + return functor; } - - @Override - public void addTerms(List<Term> l) { - logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!")); + + public Term clone() { + return this; // since this object is immutable } @Override - public void setTerms(List<Term> l) { - logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!")); - } - - @Override - public void setTerm(int i, Term t) { - logger.log(Level.SEVERE, "atom error!",new JasonException("atom has no terms!")); - } - - @Override - public int getArity() { - return 0; - } - - @Override public boolean isAtom() { return true; } - @Override - public boolean isGround() { - return true; - } - - @Override - public boolean hasTerm() { - return false; - } - - @Override - public boolean hasVar(VarTerm t) { - return false; - } - - @Override - public void countVars(Map<VarTerm, Integer> c) {} - - @Override - protected List<Term> getDeepCopyOfTerms() { - // this method exists to make the Structure(Structure) constructor to work with - // an Atom as parameter - return new ArrayList<Term>(2); - } - - @Override - public List<Term> getTerms() { - return emptyTermList; - } - - @Override - public Term[] getTermsArray() { - return emptyTermArray; - } - - @Override - public void setNegated(boolean b) { - logger.log(Level.SEVERE, "You should not negate the atom "+this+"\n",new Exception()); - super.setNegated(b); - } - @Override public boolean equals(Object o) { if (o == null) return false; if (o == this) return true; - if (o instanceof Structure) { - Structure s = (Structure)o; - return s.isAtom() && getFunctor().equals(s.getFunctor()); + if (o instanceof Atom) { + Atom a = (Atom)o; + //System.out.println(getFunctor() +" ==== " + a.getFunctor() + " is "+ (a.isAtom())); // && getFunctor().equals(a.getFunctor()))); + return a.isAtom() && getFunctor().equals(a.getFunctor()); } return false; } - @Override - public boolean addAnnot(Term t) { - logger.log(Level.SEVERE, "You should not add annot '"+t+"' in atom "+this+"\n",new Exception()); - return super.addAnnot(t); + public int compareTo(Term t) { + if (t.isNumeric()) return 1; + + // this is a list and the other not + if (isList() && !t.isList()) return 1; + + // this is not a list and the other is + if (!isList() && t.isList()) return -1; + + // both are lists, check the size + if (isList() && t.isList()) { + ListTerm l1 = (ListTerm)this; + ListTerm l2 = (ListTerm)t; + final int l1s = l1.size(); + final int l2s = l2.size(); + if (l1s > l2s) return 1; + if (l2s > l1s) return -1; + return 0; // need to check elements (in Structure class) + } + + if (t instanceof Atom) { + Atom tAsAtom = (Atom)t; + return getFunctor().compareTo(tAsAtom.getFunctor()); + } + + return super.compareTo(t); } @Override - public void addAnnots(List<Term> l) { - logger.log(Level.SEVERE, "You should not add annots '"+l+"' in atom "+this+"\n",new Exception()); - super.addAnnots(l); + protected int calcHashCode() { + return getFunctor().hashCode(); } - @Override public void makeTermsAnnon() { } - @Override public void makeVarsAnnon() { } - @Override public void makeVarsAnnon(Unifier un) { } - @Override - protected int calcHashCode() { - return getFunctor().hashCode(); + public String toString() { + return functor; } + + /** get as XML */ + public Element getAsDOM(Document document) { + Element u = (Element) document.createElement("structure"); + u.setAttribute("functor",getFunctor()); + return u; + } } Modified: trunk/src/jason/asSyntax/BinaryStructure.java =================================================================== --- trunk/src/jason/asSyntax/BinaryStructure.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/BinaryStructure.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -28,7 +28,11 @@ /** - * Represents a binary/unary logical/relational operator. + Represents a binary/unary logical/relational operator. + + @navassoc - left - Term + @navassoc - right - Term + */ public abstract class BinaryStructure extends Structure { Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java =================================================================== --- trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -39,38 +39,41 @@ /** - * A particular type of literal used to represent internal actions (has a "." in the functor). + A particular type of literal used to represent internal actions (has a "." in the functor). + + @navassoc - ia - InternalAction + */ -public class InternalActionLiteral extends Literal { +public class InternalActionLiteral extends LiteralImpl { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(InternalActionLiteral.class.getName()); private InternalAction ia = null; // reference to the object that implements the internal action - public InternalActionLiteral(String functor) { - super(functor); - } + public InternalActionLiteral(String functor) { + super(functor); + } - // used by clone - public InternalActionLiteral(InternalActionLiteral l) { - super((Literal) l); - this.ia = l.ia; - predicateIndicatorCache = l.predicateIndicatorCache; + // used by clone + public InternalActionLiteral(InternalActionLiteral l) { + super((LiteralImpl) l); + this.ia = l.ia; + predicateIndicatorCache = l.predicateIndicatorCache; hashCodeCache = l.hashCodeCache; - } + } - // used by the parser - public InternalActionLiteral(Pred p, Agent ag) throws Exception { + // used by the parser + public InternalActionLiteral(Pred p, Agent ag) throws Exception { super(true,p); if (ag != null) ia = ag.getIA(getFunctor()); } - + @Override - public boolean isInternalAction() { - return true; - } + public boolean isInternalAction() { + return true; + } @Override public boolean isAtom() { @@ -79,15 +82,15 @@ @Override public boolean canBeAddedInBB() { - return false; - } + return false; + } @Override public boolean apply(Unifier u) { - if (this.ia != null && (this.ia instanceof loop || this.ia instanceof foreach)) - return false; - else - return super.apply(u); + if (this.ia != null && (this.ia instanceof loop || this.ia instanceof foreach)) + return false; + else + return super.apply(u); } @Override @@ -110,14 +113,14 @@ public Iterator<Unifier> logicalConsequence(Agent ag, Unifier un) { if (ag.getTS().getUserAgArch().isRunning()) { try { - // clone terms array + // clone terms array Term[] clone = getTermsArray(); for (int i=0; i<clone.length; i++) { clone[i] = clone[i].clone(); clone[i].apply(un); } - // calls IA's execute method + // calls IA's execute method Object oresult = getIA(ag).execute(ag.getTS(), un, clone); if (oresult instanceof Boolean && (Boolean)oresult) { return LogExpr.createUnifIterator(un); @@ -125,7 +128,7 @@ return ((Iterator<Unifier>)oresult); } } catch (Exception e) { - logger.log(Level.SEVERE, getErrorMsg() + ": " + e.getMessage(), e); + logger.log(Level.SEVERE, getErrorMsg() + ": " + e.getMessage(), e); } } return LogExpr.EMPTY_UNIF_LIST.iterator(); // empty iterator for unifier @@ -139,13 +142,13 @@ @Override public String getErrorMsg() { - String line = (getSrcLine() >= 0 ? ":"+getSrcLine() : ""); - return "Error in internal action '"+this+"' ("+ getSrc() + line + ")"; + String line = (getSrcLine() >= 0 ? ":"+getSrcLine() : ""); + return "Error in internal action '"+this+"' ("+ getSrc() + line + ")"; } - public InternalActionLiteral clone() { + public InternalActionLiteral clone() { return new InternalActionLiteral(this); - } + } /** get as XML */ Modified: trunk/src/jason/asSyntax/ListTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/ListTermImpl.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -48,6 +48,9 @@ * The last ListTem is an empty ListTerm (term==null). * In lists terms with a tail ([a|X]), next is the Tail (next==X, term==a). * + * @navassoc - element - Term + * @navassoc - next - ListTerm + * * @author Jomi */ public class ListTermImpl extends Structure implements ListTerm { Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/Literal.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -31,18 +31,22 @@ import jason.asSyntax.parser.as2j; import java.io.StringReader; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - - /** - * A Literal is a Pred with strong negation (~). + This class represents an abstract literal (an Atom, Structure, Pred, and even LiteralImpl), is is mainly + the interface of a literal. The concrete implementation (that supports all operation) is LiteralImpl class. + + Maybe, in future releases this class will be transformed to a interface, for now it is an abstract class to + allow Literal.parseLiteral that is used a lot by users. + + @author jomi */ -public class Literal extends Pred implements LogicalFormula { +public abstract class Literal extends DefaultTerm implements LogicalFormula { private static final long serialVersionUID = 1L; private static Logger logger = Logger.getLogger(Literal.class.getName()); @@ -52,36 +56,8 @@ public static final Literal LTrue = new TrueLiteral(); public static final Literal LFalse = new FalseLiteral(); - private boolean type = LPos; - - /** creates a positive literal */ - public Literal(String functor) { - super(functor); - } - - /** to be used by atom */ - protected Literal(String functor, int termsSize) { - super(functor, termsSize); - } - - /** if pos == true, the literal is positive, otherwise it is negative */ - public Literal(boolean pos, String functor) { - super(functor); - type = pos; - } - - /** if pos == true, the literal is positive, otherwise it is negative */ - public Literal(boolean pos, Pred p) { - super(p); - type = pos; - } - - public Literal(Literal l) { - super((Pred) l); - type = l.type; - } - - + protected PredicateIndicator predicateIndicatorCache = null; // to not compute it all the time (is is called many many times) + public static Literal parseLiteral(String sLiteral) { try { as2j parser = new as2j(new StringReader(sLiteral)); @@ -96,30 +72,82 @@ return new as2j(new StringReader(sLiteral)).literal(); } + public Literal copy() { + return (Literal)clone(); // should call the clone, that is overridden in subclasses + } + + public abstract String getFunctor(); + @Override public boolean isLiteral() { return true; } + + /** returns functor symbol "/" arity */ + public PredicateIndicator getPredicateIndicator() { + if (predicateIndicatorCache == null) { + predicateIndicatorCache = new PredicateIndicator(getFunctor(),getArity()); + } + return predicateIndicatorCache; + } - @Override - public boolean isAtom() { - return super.isAtom() && !negated(); - } + /* default implementation of some methods */ + + public int getArity() { return 0; } + public boolean hasTerm() { return false; } // should use getArity to work for list/atom + public List<Term> getTerms() { return Structure.emptyTermList; } + public Term[] getTermsArray() { return getTerms().toArray(Structure.emptyTermArray); } + public List<VarTerm> getSingletonVars() { return new ArrayList<VarTerm>(); } + + + public void makeTermsAnnon() {} + public void makeVarsAnnon() {} + public void makeVarsAnnon(Unifier un) {} + + public ListTerm getAnnots() { return null; } + public boolean hasAnnot(Term t) { return false; } + public boolean hasAnnot() { return false; } + public boolean hasSubsetAnnot(Literal p) { return true; } + public boolean hasSubsetAnnot(Literal p, Unifier u) { return true; } + public void clearAnnots() { } + public ListTerm getAnnots(String functor) { return new ListTermImpl(); } + public ListTerm getSources() { return new ListTermImpl(); } + public boolean hasSource() { return false; } + public boolean hasSource(Term agName) { return false; } + + public boolean canBeAddedInBB() { return false; } + public boolean negated() { return false; } + + public boolean equalsAsStructure(Object p) { return false; } + + /* Not implemented methods */ - /** to be overridden by subclasses (as internal action) */ - public boolean canBeAddedInBB() { - return true; - } - - public boolean negated() { - return type == LNeg; - } + // structure + public void addTerm(Term t) { logger.log(Level.SEVERE, "addTerm is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public void delTerm(int index) { logger.log(Level.SEVERE, "delTerm is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public void addTerms(Term ... ts ) { logger.log(Level.SEVERE, "addTerms is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public void addTerms(List<Term> l) { logger.log(Level.SEVERE, "addTerms is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public Term getTerm(int i) { logger.log(Level.SEVERE, "getTerm(i) is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return null; } + public void setTerms(List<Term> l) { logger.log(Level.SEVERE, "setTerms is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public void setTerm(int i, Term t) { logger.log(Level.SEVERE, "setTerm is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } - public void setNegated(boolean b) { - type = b; - resetHashCodeCache(); - } + // pred + public void setAnnots(ListTerm l) { logger.log(Level.SEVERE, "setAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public boolean addAnnot(Term t) { logger.log(Level.SEVERE, "addAnnot is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; } + public void addAnnots(List<Term> l) { logger.log(Level.SEVERE, "addAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public void addAnnot(int index, Term t) { logger.log(Level.SEVERE, "addAnnot is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public void delAnnot(Term t) { logger.log(Level.SEVERE, "delAnnot is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public boolean delAnnots(List<Term> l) { logger.log(Level.SEVERE, "delAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; } + public boolean importAnnots(Literal p) { logger.log(Level.SEVERE, "importAnnots is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; } + public void addSource(Term agName) { logger.log(Level.SEVERE, "addSource is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + public boolean delSource(Term agName) { logger.log(Level.SEVERE, "delSource is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); return false; } + public void delSources() { logger.log(Level.SEVERE, "delSources is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + + // literal + public void setNegated(boolean b) { logger.log(Level.SEVERE, "setNegated is not implemented in the class "+this.getClass().getSimpleName(), new Exception()); } + + /** * logicalConsequence checks whether one particular predicate * is a logical consequence of the belief base. @@ -211,68 +239,11 @@ }; } - @Override - public boolean equals(Object o) { - if (o == null) return false; - if (o == this) return true; - - if (o instanceof Literal) { - final Literal l = (Literal) o; - return type == l.type && hashCode() == l.hashCode() && super.equals(l); - } else if (o instanceof Structure) { - return !negated() && super.equals(o); - } - return false; - } - - @Override - public String getErrorMsg() { - return "Error in '"+this+"' ("+ super.getErrorMsg() + ")"; - } - @Override - public int compareTo(Term t) { - if (t.isLiteral()) { - Literal tl = (Literal)t; - if (!negated() && tl.negated()) { - return -1; - } if (negated() && !tl.negated()) { - return 1; - } - } - int c = super.compareTo(t); - if (c != 0) return c; - return 0; - } - - public Term clone() { - return new Literal(this); - } - - public Literal copy() { - return (Literal)clone(); // should call the clone, that is overridden in subclasses - } - - - @Override - protected int calcHashCode() { - int result = super.calcHashCode(); - if (negated()) result += 3271; - return result; - } - - /** returns [~] super.getPredicateIndicator */ - @Override - public PredicateIndicator getPredicateIndicator() { - if (predicateIndicatorCache == null) - predicateIndicatorCache = new PredicateIndicator(((type == LPos) ? "" : "~")+getFunctor(),getArity()); - return predicateIndicatorCache; - } - /** returns this literal as a list with three elements: [functor, list of terms, list of annots] */ public ListTerm getAsListOfTerms() { ListTerm l = new ListTermImpl(); - l.add(new Literal(type, getFunctor())); + l.add(new LiteralImpl(!negated(), getFunctor())); ListTerm lt = new ListTermImpl(); lt.addAll(getTerms()); l.add(lt); @@ -296,7 +267,7 @@ pos = Literal.LNeg; } - Literal l = new Literal(pos,((Structure)tfunctor).getFunctor()); + Literal l = new LiteralImpl(pos,((Atom)tfunctor).getFunctor()); if (i.hasNext()) { l.setTerms(((ListTerm)i.next()).cloneLT()); @@ -310,27 +281,8 @@ } } - public String toString() { - if (type == LPos) - return super.toString(); - else - return "~" + super.toString(); - } - - /** get as XML */ - @Override - public Element getAsDOM(Document document) { - Element u = (Element) document.createElement("literal"); - if (negated()) { - u.setAttribute("negated", negated()+""); - } - u.appendChild(super.getAsDOM(document)); - return u; - } - - @SuppressWarnings("serial") - static final class TrueLiteral extends Literal { + static final class TrueLiteral extends LiteralImpl { public TrueLiteral() { super("true",0); } @@ -347,7 +299,7 @@ } @SuppressWarnings("serial") - static final class FalseLiteral extends Literal { + static final class FalseLiteral extends LiteralImpl { public FalseLiteral() { super("false",0); } @@ -362,5 +314,4 @@ return LogExpr.EMPTY_UNIF_LIST.iterator(); } } - } Modified: trunk/src/jason/asSyntax/LogExpr.java =================================================================== --- trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/LogExpr.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -40,7 +40,14 @@ /** - * Represents a logical formula with some logical operator ("&", "|", "not"). + Represents a logical formula with some logical operator ("&", "|", "not"). + + @navassoc - op - LogicalOp + + //@view + //@match class jason.asSyntax.Term + //@opt !hide + */ public class LogExpr extends BinaryStructure implements LogicalFormula { Modified: trunk/src/jason/asSyntax/NumberTermImpl.java =================================================================== --- trunk/src/jason/asSyntax/NumberTermImpl.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/NumberTermImpl.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -93,12 +93,14 @@ @Override public int compareTo(Term o) { - try { + if (o instanceof NumberTerm) { NumberTerm st = (NumberTerm)o; if (solve() > st.solve()) return 1; if (solve() < st.solve()) return -1; - } catch (Exception e) {} - return 0; + } + if (o instanceof Atom) + return -1; + return super.compareTo(o); } public String toString() { Modified: trunk/src/jason/asSyntax/Plan.java =================================================================== --- trunk/src/jason/asSyntax/Plan.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/Plan.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -38,17 +38,25 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; -/** Represents an AgentSpack plan */ +/** Represents an AgentSpack plan + + @navassoc - label - Pred + @navassoc - event - Trigger + @navassoc - context - LogicalFormula + @navassoc - body - PlanBody + + + */ public class Plan extends SourceInfo implements Cloneable, Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; private static final Term TAtomic = DefaultTerm.parse("atomic"); private static final Term TBreakPoint = DefaultTerm.parse("breakpoint"); private static final Term TAllUnifs = DefaultTerm.parse("all_unifs"); private static Logger logger = Logger.getLogger(Plan.class.getName()); - private Pred label = null; + private Pred label = null; private Trigger tevent = null; private LogicalFormula context; private PlanBody body; @@ -244,7 +252,7 @@ Element u = (Element) document.createElement("plan"); if (label != null) { Element l = (Element) document.createElement("label"); - l.appendChild(new Literal(Literal.LPos, label).getAsDOM(document)); + l.appendChild(new LiteralImpl(Literal.LPos, label).getAsDOM(document)); u.appendChild(l); } u.appendChild(tevent.getAsDOM(document)); Modified: trunk/src/jason/asSyntax/PlanBodyImpl.java =================================================================== --- trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/PlanBodyImpl.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -13,7 +13,11 @@ * A plan body like <code>a1; ?t; !g</code> is represented by the following structure * <code>(a1, (?t, (!g)))</code>. * - * @author Jomi + * + * @navassoc - next - PlanBody + * @navassoc - type - BodyType + * + * @author Jomi */ public class PlanBodyImpl extends Structure implements PlanBody, Iterable<PlanBody> { Modified: trunk/src/jason/asSyntax/PlanLibrary.java =================================================================== --- trunk/src/jason/asSyntax/PlanLibrary.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/PlanLibrary.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -41,7 +41,10 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; -/** Represents a set of plans used by an agent */ +/** Represents a set of plans used by an agent + + @has - plans 0..* Plan +*/ public class PlanLibrary implements Iterable<Plan> { /** a MAP from TE to a list of relevant plans */ @@ -72,7 +75,7 @@ * * returns the plan added, null if it does not work. */ - public Plan add(StringTerm stPlan, Structure tSource) { + public Plan add(StringTerm stPlan, Term tSource) { return add(stPlan, tSource, false); } @@ -88,7 +91,7 @@ * * returns the plan added, null if it does not work. */ - public Plan add(StringTerm stPlan, Structure tSource, boolean before) { + public Plan add(StringTerm stPlan, Term tSource, boolean before) { String sPlan = stPlan.getString(); try { // remove quotes \" -> " @@ -241,7 +244,7 @@ * Remove a plan represented by the label <i>pLabel</i>. * In case the plan has many sources, only the plan's source is removed. */ - public boolean remove(Structure pLabel, Structure source) { + public boolean remove(Atom pLabel, Term source) { // find the plan Plan p = get(pLabel.getFunctor()); if (p != null) { @@ -306,7 +309,7 @@ return l; } - public static final Trigger TE_IDLE = new Trigger(TEOperator.add, TEType.achieve, new Literal("idle")); + public static final Trigger TE_IDLE = new Trigger(TEOperator.add, TEType.achieve, new Atom("idle")); public List<Plan> getIdlePlans() { return relPlans.get(TE_IDLE.getPredicateIndicator()); Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/Pred.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -37,7 +37,7 @@ import org.w3c.dom.Element; /** - * A Pred is a Structure with annotations, e.g.: a(1)[an1,an2]. + * A Pred extends a Structure with annotations, e.g.: a(1)[an1,an2]. */ public class Pred extends Structure { @@ -46,25 +46,20 @@ private ListTerm annots; - public Pred(String ps) { - super(ps); + public Pred(String functor) { + super(functor); } - public Pred(Structure t) { - super(t); - } + public Pred(Literal l) { + super(l); - public Pred(Pred p) { - super(p); - - if (p.annots != null) { - annots = p.getAnnots().cloneLT(); + if (l.hasAnnot()) { + annots = l.getAnnots().cloneLT(); } else { annots = null; } } - /** to be used by atom */ public Pred(String functor, int termsSize) { super(functor, termsSize); } @@ -108,11 +103,13 @@ return r; } + @Override public void setAnnots(ListTerm l) { annots = l; if (annots != null && annots.isEmpty()) annots = null; } + @Override public boolean addAnnot(Term t) { if (annots == null) annots = new ListTermImpl(); if (!annots.contains(t)) { @@ -122,6 +119,7 @@ return false; } + @Override public void addAnnots(List<Term> l) { if (l == null || l.isEmpty()) return; ListTerm tail; @@ -137,29 +135,35 @@ } } + @Override public void addAnnot(int index, Term t) { if (annots == null) annots = new ListTermImpl(); if (!annots.contains(t)) annots.add(index, t); } + @Override public void delAnnot(Term t) { if (annots != null) annots.remove(t); } + @Override public void clearAnnots() { annots = null; } + @Override public ListTerm getAnnots() { return annots; } + @Override public boolean hasAnnot(Term t) { if (annots == null) return false; return annots.contains(t); } /** returns true if the pred has at least one annot */ + @Override public boolean hasAnnot() { return annots != null && !annots.isEmpty(); } @@ -193,7 +197,8 @@ * * @return true if some annot was imported. */ - public boolean importAnnots(Pred p) { + @Override + public boolean importAnnots(Literal p) { boolean imported = false; if (p.hasAnnot()) { if (annots == null) annots = new ListTermImpl(); @@ -216,13 +221,14 @@ } /** - * removes all annots in this pred that are in <i>p</i>. + * removes all annots in this pred that are in the list <i>l</i>. * @return true if some annot was removed. */ - public boolean delAnnot(Pred p) { + @Override + public boolean delAnnots(List<Term> l) { boolean removed = false; - if (p.hasAnnot() && this.hasAnnot()) { - for (Term t: p.getAnnots()) { + if (l != null && this.hasAnnot()) { + for (Term t: l) { boolean r = annots.remove(t); removed = removed || r; } @@ -236,6 +242,7 @@ * and functor "t", * it returns [t(a),t(b)] */ + @Override public ListTerm getAnnots(String functor) { ListTerm ls = new ListTermImpl(); if (annots != null) { @@ -252,9 +259,10 @@ } /** returns true if all this predicate annots are in p's annots */ - public boolean hasSubsetAnnot(Pred p) { + @Override + public boolean hasSubsetAnnot(Literal p) { if (annots == null) return true; - if (annots != null && p.getAnnots() == null) return false; + if (hasAnnot() && !p.hasAnnot()) return false; for (Term myAnnot : annots) { if (!p.hasAnnot(myAnnot)) { return false; @@ -277,11 +285,12 @@ * this[b|T] = p[x,y,b] * unifies and T is [x,y] (this will be a subset if T is [x,y]. */ - public boolean hasSubsetAnnot(Pred p, Unifier u) { + @Override + public boolean hasSubsetAnnot(Literal p, Unifier u) { //return getSubsetAnnots(p,u,null); if (annots == null) return true; - if (p.getAnnots() == null) return false; + if (!p.hasAnnot()) return false; // since p's annots will be changed, clone them ListTerm pannots = p.getAnnots().cloneLT(); @@ -328,12 +337,14 @@ /** * Adds a source annotation like "source(<i>agName</i>)". */ + @Override public void addSource(Term agName) { if (agName != null) addAnnot(createSource(agName)); } /** deletes "source(<i>agName</i>)" */ + @Override public boolean delSource(Term agName) { if (annots != null) return annots.remove(createSource(agName)); @@ -351,6 +362,7 @@ * returns the sources of this Pred as a new list. e.g.: from annots * [source(a), source(b)], it returns [a,b] */ + @Override public ListTerm getSources() { ListTerm ls = new ListTermImpl(); if (annots != null) { @@ -368,6 +380,7 @@ } /** deletes all sources annotations */ + @Override public void delSources() { if (annots != null) { Iterator<Term> i = annots.iterator(); @@ -382,6 +395,7 @@ } } + @Override public boolean hasSource() { if (annots != null) { for (Term ta : annots) { @@ -396,6 +410,7 @@ } /** returns true if this pred has a "source(<i>agName</i>)" */ + @Override public boolean hasSource(Term agName) { if (annots != null) { return annots.contains(createSource(agName)); @@ -443,7 +458,7 @@ if (o instanceof Pred) { final Pred p = (Pred) o; return super.equals(o) && this.hasSubsetAnnot(p) && p.hasSubsetAnnot(this); - } else if (o instanceof Structure) { + } else if (o instanceof Atom) { return !hasAnnot() && super.equals(o); } return false; Modified: trunk/src/jason/asSyntax/RelExpr.java =================================================================== --- trunk/src/jason/asSyntax/RelExpr.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/RelExpr.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -52,6 +52,8 @@ * X is [~p, [t1, t2], [a1,a2]] * </ul> * + * @navassoc - op - RelationalOp + * * @author Jomi */ public class RelExpr extends BinaryStructure implements LogicalFormula { Modified: trunk/src/jason/asSyntax/Rule.java =================================================================== --- trunk/src/jason/asSyntax/Rule.java 2008-09-27 08:16:20 UTC (rev 1379) +++ trunk/src/jason/asSyntax/Rule.java 2008-09-27 12:48:55 UTC (rev 1380) @@ -31,14 +31,16 @@ import org.w3c.dom.Element; /** - * A rule is a Literal (head) with an optional body, as in "a :- b & c". + A rule is a Literal (head) with an optional body, as in "a :- b & c". + + @navassoc - body - LogicalFormula */ -public class Rule extends Literal { +public class Rule extends LiteralImpl {... [truncated message content] |