|
From: <jom...@us...> - 2008-10-29 16:59:05
|
Revision: 1404
http://jason.svn.sourceforge.net/jason/?rev=1404&view=rev
Author: jomifred
Date: 2008-10-29 16:59:01 +0000 (Wed, 29 Oct 2008)
Log Message:
-----------
improve error messages in jason team (for AgentContest)
Modified Paths:
--------------
trunk/applications/jason-moise/src/jmoise/OrgAgent.java
trunk/applications/jason-team/src/asl/exploration.asl
trunk/applications/jason-team/src/asl/gaucho.asl
trunk/applications/jason-team/src/asl/herding.asl
trunk/src/jason/JasonException.java
trunk/src/jason/asSemantics/TransitionSystem.java
trunk/src/jason/asSyntax/DefaultTerm.java
trunk/src/jason/asSyntax/InternalActionLiteral.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/LiteralImpl.java
trunk/src/jason/asSyntax/SourceInfo.java
trunk/src/jason/asSyntax/StringTermImpl.java
trunk/src/jason/stdlib/fail.java
Modified: trunk/applications/jason-moise/src/jmoise/OrgAgent.java
===================================================================
--- trunk/applications/jason-moise/src/jmoise/OrgAgent.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/applications/jason-moise/src/jmoise/OrgAgent.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -1,6 +1,8 @@
package jmoise;
import static jason.asSyntax.ASSyntax.createLiteral;
+import static jason.asSyntax.ASSyntax.createNumber;
+import static jason.asSyntax.ASSyntax.createString;
import static jason.asSyntax.ASSyntax.createStructure;
import jason.JasonException;
import jason.RevisionFailedException;
@@ -222,7 +224,7 @@
if (sch.getOwner().equals(getMyOEAgent())) {
// update the number of players
getTS().getAg().delBel(createLiteral( "sch_players", new Atom(sch.getId()), new UnnamedVar()));
- getTS().getAg().addBel(createLiteral( "sch_players", new Atom(sch.getId()), ASSyntax.createNumber(sch.getPlayersQty())));
+ getTS().getAg().addBel(createLiteral( "sch_players", new Atom(sch.getId()), createNumber(sch.getPlayersQty())));
}
}
List<Literal> deleted = orgBUF(toAdd, schemeLiteral);
@@ -251,9 +253,7 @@
Set<Permission> obligations = new HashSet<Permission>();
List<Literal> toAdd = new ArrayList<Literal>();
toAdd = createObligation(obligations);
- //getTS().getLogger().info("** obliations "+toAdd);
- List<Literal> deleted = orgBUF(toAdd, obligationLiteral);
- //getTS().getLogger().info("** new obli "+toAdd+", deleted "+deleted);
+ orgBUF(toAdd, obligationLiteral);
toAdd.clear();
toAdd = createPermission(obligations);
orgBUF(toAdd, permissionLiteral);
@@ -323,8 +323,16 @@
if (content.startsWith("error")) {
// fail the IA
PlanBody pbody = pi.peek().getPlan().getBody();
- pbody.add(0, new PlanBodyImpl(BodyType.internalAction, new InternalActionLiteral(".fail")));
- getTS().getLogger().warning("Error in organisational action '"+body+"': "+content);
+ Literal fail = new InternalActionLiteral(".fail");
+ String msg = content.substring(7,content.length()-2);
+ fail.addTerm(createStructure("error_msg", createString(msg)));
+ fail.addTerm(createStructure("code", createString(body.toString())));
+ if (body.getSrcInfo() != null) {
+ fail.addTerm(createStructure("code_src", createString(body.getSrcInfo().getSrcFile())));
+ fail.addTerm(createStructure("code_line", createNumber(body.getSrcInfo().getBeginSrcLine())));
+ }
+ pbody.add(0, new PlanBodyImpl(BodyType.internalAction, fail));
+ //getTS().getLogger().warning("Error in organisational action '"+body+"': "+content);
} else {
// try to unify the return value
//System.out.println("answer is "+content+" or "+DefaultTerm.parse(content)+" with body "+body);
Modified: trunk/applications/jason-team/src/asl/exploration.asl
===================================================================
--- trunk/applications/jason-team/src/asl/exploration.asl 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/applications/jason-team/src/asl/exploration.asl 2008-10-29 16:59:01 UTC (rev 1404)
@@ -32,7 +32,7 @@
if( not group(exploration_grp,_)[owner(Me)] ) {
?group(team,TeamGroup); // get the team Id
jmoise.create_group(exploration_grp,TeamGroup,G);
- .print("ooo Group ",G," created")
+ .print("ooo Exploration group ",G," created")
} {
?group(exploration_grp,G)[owner(Me)]
};
@@ -153,7 +153,7 @@
!ask_all_cows(Leaders,LCows);
.findall(cow(ID,X,Y), cow(ID,X,Y), MyCows);
.intersection(MyCows, LCows, Common);
- //.print("xxx all cows in herding groups are ",LCows," my are ",MyCows," intersection is ",Common);
+ //.print("xxx all cows in herding groups are ",LCows," mine are ",MyCows," intersection is ",Common);
if ( Common == [] ) {
!!create_herding_gr
}{
Modified: trunk/applications/jason-team/src/asl/gaucho.asl
===================================================================
--- trunk/applications/jason-team/src/asl/gaucho.asl 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/applications/jason-team/src/asl/gaucho.asl 2008-10-29 16:59:01 UTC (rev 1404)
@@ -147,23 +147,25 @@
+!play_role(Role,Group)[source(Ag)]
<- .print("ooo Adopting role ",Role," in group ",Group,", as asked by ",Ag);
jmoise.adopt_role(Role, Group).
+-!play_role(_,_)[error_msg(M),code(C)]
+ <- .print("* Error in ",C,": ",M).
+!quit_all_missions_roles
<- .my_name(Me);
// if I play any other role, give it up
while( play(Me,R,OG) ) {
- .print("ooo removing my role ",R," in ",OG);
+ .print("ooo Removing my role ",R," in ",OG);
jmoise.remove_role(R,OG)
- }/*;
+ };
// give up all missions
while( commitment(Me,M,Sch) ) {
- .print("ooo removing my mission ",M," in ",Sch);
+ .print("ooo Removing my mission ",M," in ",Sch);
jmoise.remove_mission(M,Sch)
- }*/.
+ }.
+-!quit_all_missions_roles[error_msg(M),code(C)] <- .println("*** ",C," - ",M). // no problem if it fails, it is better to continue
-
// finish the scheme if it has no more players
// and it was created by me
Modified: trunk/applications/jason-team/src/asl/herding.asl
===================================================================
--- trunk/applications/jason-team/src/asl/herding.asl 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/applications/jason-team/src/asl/herding.asl 2008-10-29 16:59:01 UTC (rev 1404)
@@ -11,7 +11,7 @@
// create the new group
?group(team,TeamId);
jmoise.create_group(herding_grp, TeamId, HG);
- .print("ooo Group ",HG," created.");
+ .print("ooo Herding group ",HG," created.");
// store the list of scouter in my group
?play(Me,explorer,EG);
Modified: trunk/src/jason/JasonException.java
===================================================================
--- trunk/src/jason/JasonException.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/JasonException.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -26,11 +26,10 @@
import jason.asSemantics.DefaultInternalAction;
import jason.asSemantics.InternalAction;
+import jason.asSyntax.ASSyntax;
import jason.asSyntax.Atom;
import jason.asSyntax.ListTerm;
import jason.asSyntax.ListTermImpl;
-import jason.asSyntax.StringTermImpl;
-import jason.asSyntax.Structure;
import jason.asSyntax.Term;
@@ -44,6 +43,8 @@
private static final Term defaultError = new Atom("internal_action");
private Term error = defaultError;
+ private ListTerm errorAnnots = null;
+
/**
* Creates a new instance of <code>JasonException</code> without detail message.
*/
@@ -81,8 +82,17 @@
this.error = error;
}
+ public void addErrorAnnot(Term t) {
+ if (errorAnnots == null)
+ errorAnnots = new ListTermImpl();
+ errorAnnots.append(t);
+ }
+
public ListTerm getErrorTerms() {
- return createBasicErrorAnnots(error, getMessage());
+ ListTerm e = createBasicErrorAnnots(error, getMessage());
+ if (errorAnnots != null)
+ e.concat(errorAnnots.cloneLT());
+ return e;
}
@SuppressWarnings("unchecked")
@@ -107,6 +117,10 @@
return createBasicErrorAnnots(new Atom(id), msg);
}
public static ListTerm createBasicErrorAnnots(Term id, String msg) {
+ return ASSyntax.createList(
+ ASSyntax.createStructure("error", id),
+ ASSyntax.createStructure("error_msg", ASSyntax.createString(msg)));
+ /*
ListTerm failAnnots = new ListTermImpl();
Structure e = new Structure("error", 1);
e.addTerm(id);
@@ -115,5 +129,6 @@
m.addTerm(new StringTermImpl(msg));
failAnnots.add(m);
return failAnnots;
+ */
}
}
Modified: trunk/src/jason/asSemantics/TransitionSystem.java
===================================================================
--- trunk/src/jason/asSemantics/TransitionSystem.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSemantics/TransitionSystem.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -869,41 +869,39 @@
return null;
}
- private static final Term aNOCODE = new Atom("no_code");
+ private static final Atom 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( JasonException.UNKNOW_ERROR, "");
+
+ Literal eventLiteral = failEvent.getTrigger().getLiteral();
+ eventLiteral.addAnnots(failAnnots);
// add failure annots in the event related to the code source
- Literal bodyterm = null;
- Term codesrc = null;
- Term codeline = null;
+ Literal bodyterm = aNOCODE;
+ Term codesrc = aNOCODE;
+ Term codeline = aNOCODE;
if (body != null && body instanceof Literal) {
bodyterm = (Literal)body;
- codesrc = new StringTermImpl(bodyterm.getSrcFile());
- codeline = new NumberTermImpl(bodyterm.getSrcLine());
- } else {
- bodyterm = new Atom("no_code");
- codesrc = aNOCODE;
- codeline = aNOCODE;
+ if (bodyterm.getSrcInfo() != null) {
+ if (bodyterm.getSrcInfo().getSrcFile() != null)
+ codesrc = new StringTermImpl(bodyterm.getSrcInfo().getSrcFile());
+ codeline = new NumberTermImpl(bodyterm.getSrcInfo().getSrcLine());
+ }
}
// code
- Structure code = new Structure("code", 1);
- code.addTerm(bodyterm);
- failAnnots.add(code);
+ if (eventLiteral.getAnnots("code").isEmpty())
+ eventLiteral.addAnnot(ASSyntax.createStructure("code", bodyterm));
// ASL source
- Structure src = new Structure("code_src", 1);
- src.addTerm(codesrc);
- failAnnots.add(src);
+ if (eventLiteral.getAnnots("code_src").isEmpty())
+ eventLiteral.addAnnot(ASSyntax.createStructure("code_src", codesrc));
// line in the source
- Structure line = new Structure("code_line", 1);
- line.addTerm(codeline);
- failAnnots.add(line);
- failEvent.getTrigger().getLiteral().addAnnots(failAnnots);
+ if (eventLiteral.getAnnots("code_line").isEmpty())
+ eventLiteral.addAnnot(ASSyntax.createStructure("code_line", codeline));
}
public boolean canSleep() {
Modified: trunk/src/jason/asSyntax/DefaultTerm.java
===================================================================
--- trunk/src/jason/asSyntax/DefaultTerm.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSyntax/DefaultTerm.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -109,20 +109,6 @@
srcInfo = s;
}
- public String getSrcFile() {
- if (srcInfo == null)
- return null;
- else
- return srcInfo.getSrcFile();
- }
-
- public int getSrcLine() {
- if (srcInfo == null)
- return 0;
- else
- return srcInfo.getSrcLine();
- }
-
public String getErrorMsg() {
if (srcInfo == null)
return "";
Modified: trunk/src/jason/asSyntax/InternalActionLiteral.java
===================================================================
--- trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSyntax/InternalActionLiteral.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -142,8 +142,8 @@
@Override
public String getErrorMsg() {
- String line = (getSrcLine() >= 0 ? ":"+getSrcLine() : "");
- return "Error in internal action '"+this+"' ("+ getSrcFile() + line + ")";
+ String src = getSrcInfo() == null ? "" : " ("+ getSrcInfo().getErrorMsg() + ")";
+ return "Error in internal action '"+this+"'"+ src;
}
public InternalActionLiteral clone() {
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSyntax/Literal.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -164,6 +164,8 @@
* [t(a), t(b), source(tom)]
* and functor "t",
* it returns [t(a),t(b)]
+ *
+ * in case that there is no such an annot, it returns an empty list.
*/
public ListTerm getAnnots(String functor) { return new ListTermImpl(); }
/**
Modified: trunk/src/jason/asSyntax/LiteralImpl.java
===================================================================
--- trunk/src/jason/asSyntax/LiteralImpl.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSyntax/LiteralImpl.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -101,7 +101,8 @@
@Override
public String getErrorMsg() {
- return "Error in '"+this+"' ("+ super.getErrorMsg() + ")";
+ String src = getSrcInfo() == null ? "" : " ("+ getSrcInfo().getErrorMsg() + ")";
+ return "Error in '"+this+"'"+src;
}
@Override
Modified: trunk/src/jason/asSyntax/SourceInfo.java
===================================================================
--- trunk/src/jason/asSyntax/SourceInfo.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSyntax/SourceInfo.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -23,13 +23,16 @@
endSrcLine = endLine;
}
public SourceInfo(SourceInfo o) {
- source = o.source;
- beginSrcLine = o.beginSrcLine;
- endSrcLine = o.endSrcLine;
+ if (o == null) {
+ source = null;
+ beginSrcLine = 0;
+ endSrcLine = 0;
+ } else {
+ source = o.source;
+ beginSrcLine = o.beginSrcLine;
+ endSrcLine = o.endSrcLine;
+ }
}
- public SourceInfo(DefaultTerm o) {
- this(o.getSrcInfo());
- }
public SourceInfo clone() {
return this;
Modified: trunk/src/jason/asSyntax/StringTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/StringTermImpl.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/asSyntax/StringTermImpl.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -94,7 +94,10 @@
if (t != null && t instanceof StringTerm) {
StringTerm st = (StringTerm)t;
- return value.equals(st.getString());
+ if (value == null)
+ return st.getString() == null;
+ else
+ return value.equals(st.getString());
}
return false;
}
Modified: trunk/src/jason/stdlib/fail.java
===================================================================
--- trunk/src/jason/stdlib/fail.java 2008-10-29 12:54:13 UTC (rev 1403)
+++ trunk/src/jason/stdlib/fail.java 2008-10-29 16:59:01 UTC (rev 1404)
@@ -23,10 +23,13 @@
package jason.stdlib;
+import jason.JasonException;
import jason.asSemantics.DefaultInternalAction;
import jason.asSemantics.InternalAction;
import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
+import jason.asSyntax.StringTerm;
+import jason.asSyntax.Structure;
import jason.asSyntax.Term;
/**
@@ -52,12 +55,31 @@
return singleton;
}
- @Override public int getMinArgs() { return 0; }
- @Override public int getMaxArgs() { return 0; }
-
@Override
public Object execute(TransitionSystem ts, Unifier un, Term[] args) throws Exception {
- checkArguments(args);
+ if (args.length > 0) { // add all arguments as annotations in the exception
+ // find message
+ Term smsg = null;
+ String msg = "fail";
+ for (Term t: args) {
+ if (t.isStructure() && ((Structure)t).getFunctor().equals("error_msg")) {
+ smsg = t;
+ Term tm = ((Structure)t).getTerm(0);
+ if (tm.isString())
+ msg = ((StringTerm)tm).getString();
+ else
+ msg = tm.toString();
+ break;
+ }
+ }
+
+ JasonException e = new JasonException(msg);
+ for (Term t: args) {
+ if (t != smsg)
+ e.addErrorAnnot(t);
+ }
+ throw e;
+ }
return false;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|