From: <jom...@us...> - 2015-12-08 20:19:46
|
Revision: 1864 http://sourceforge.net/p/jason/svn/1864 Author: jomifred Date: 2015-12-08 20:19:43 +0000 (Tue, 08 Dec 2015) Log Message: ----------- update mind inspector to support name spaces Modified Paths: -------------- trunk/src/jason/asSemantics/Unifier.java trunk/src/jason/asSyntax/ASSyntax.java trunk/src/jason/asSyntax/Atom.java trunk/src/jason/asSyntax/Literal.java trunk/src/jason/asSyntax/LiteralImpl.java trunk/src/jason/asSyntax/Pred.java trunk/src/jason/asSyntax/VarTerm.java trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc trunk/src/jason/asSyntax/parser/as2j.java trunk/src/jason/bb/DefaultBeliefBase.java trunk/src/test/NSTest.java trunk/src/xml/agInspection.xsl Modified: trunk/src/jason/asSemantics/Unifier.java =================================================================== --- trunk/src/jason/asSemantics/Unifier.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSemantics/Unifier.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -362,7 +362,7 @@ Literal lvl = (Literal)vl; if (! unifiesNamespace(vt, lvl) ) return false; - if ( lvl.getNS() != Literal.DefaultNS) + if (lvl.getNS() != Literal.DefaultNS) vl = lvl.cloneNS(Literal.DefaultNS); } @@ -370,7 +370,7 @@ vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone()); } - function.put((VarTerm) vt.clone(), vl); + function.put((VarTerm) vt.cloneNS(Literal.DefaultNS), vl); return true; } Modified: trunk/src/jason/asSyntax/ASSyntax.java =================================================================== --- trunk/src/jason/asSyntax/ASSyntax.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/ASSyntax.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -66,6 +66,7 @@ static { keywords.add(new PredicateIndicator("atomic", 0)); + keywords.add(new PredicateIndicator("default", 0)); keywords.add(new PredicateIndicator("source", 0)); keywords.add(new PredicateIndicator("self", 0)); Modified: trunk/src/jason/asSyntax/Atom.java =================================================================== --- trunk/src/jason/asSyntax/Atom.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/Atom.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -64,7 +64,7 @@ public Atom(Atom namespace, Literal l) { this.functor = l.getFunctor(); if (namespace.functor.equals("default")) // in case namespace is an ordinary Atom with functor "default", we need to replace by the Default NS - this.ns = DefaultNS; + this.ns = DefaultNS; // TODO: not necessary, the parsers takes care of it else this.ns = namespace; predicateIndicatorCache = l.predicateIndicatorCache; @@ -172,7 +172,7 @@ public Element getAsDOM(Document document) { Element u = (Element) document.createElement("structure"); u.setAttribute("functor",getFunctor()); - //u.setAttribute("name-space", getNS().toString()); + u.setAttribute("name-space", getNS().getFunctor()); return u; } } Modified: trunk/src/jason/asSyntax/Literal.java =================================================================== --- trunk/src/jason/asSyntax/Literal.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/Literal.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -587,6 +587,16 @@ return this; } + @Override + public Literal cloneNS(Atom newnamespace) { + return this; + } + + @Override + public Atom getNS() { + return this; + } + public String toString() { return getFunctor(); }; Modified: trunk/src/jason/asSyntax/LiteralImpl.java =================================================================== --- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -63,7 +63,7 @@ // used by capply protected LiteralImpl(Literal l, Unifier u) { - super(l,u); + super(l, u); type = !l.negated(); } @@ -149,7 +149,7 @@ @Override public Term capply(Unifier u) { - return new LiteralImpl(this,u); + return new LiteralImpl(this, u); } public Literal cloneNS(Atom newNameSpace) { @@ -175,6 +175,7 @@ @Override public Element getAsDOM(Document document) { Element u = (Element) document.createElement("literal"); + u.setAttribute("name-space", getNS().getFunctor()); if (negated()) { u.setAttribute("negated", negated()+""); } Modified: trunk/src/jason/asSyntax/Pred.java =================================================================== --- trunk/src/jason/asSyntax/Pred.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/Pred.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -70,7 +70,7 @@ // used by capply protected Pred(Literal l, Unifier u) { - super(l,u); + super(l, u); if (l.hasAnnot()) { setAnnots( (ListTerm)l.getAnnots().capply(u) ); } else { Modified: trunk/src/jason/asSyntax/VarTerm.java =================================================================== --- trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -156,7 +156,7 @@ @Override public Literal cloneNS(Atom newNameSpace) { - return new VarTerm( newNameSpace, this); + return new VarTerm(newNameSpace, this); } public ListTerm cloneLT() { Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc =================================================================== --- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 20:19:43 UTC (rev 1864) @@ -603,7 +603,9 @@ ( ( // namespace [ LOOKAHEAD(10) - (tns = <ATOM> { if (!tns.image.equals("default")) + (tns = <ATOM> { if (tns.image.equals("default")) + NS = Literal.DefaultNS; + else NS = new Atom(tns.image); } | Modified: trunk/src/jason/asSyntax/parser/as2j.java =================================================================== --- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -902,7 +902,9 @@ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ATOM: tns = jj_consume_token(ATOM); - if (!tns.image.equals("default")) + if (tns.image.equals("default")) + NS = Literal.DefaultNS; + else NS = new Atom(tns.image); break; case VAR: @@ -1647,13 +1649,19 @@ return false; } + final private boolean jj_3R_61() { + if (jj_3R_66()) return true; + return false; + } + final private boolean jj_3R_114() { if (jj_3R_121()) return true; return false; } - final private boolean jj_3R_61() { - if (jj_3R_66()) return true; + final private boolean jj_3R_60() { + if (jj_scan_token(TK_NOT)) return true; + if (jj_3R_52()) return true; return false; } @@ -1682,12 +1690,6 @@ return false; } - final private boolean jj_3R_60() { - if (jj_scan_token(TK_NOT)) return true; - if (jj_3R_52()) return true; - return false; - } - final private boolean jj_3R_52() { Token xsp; xsp = jj_scanpos; @@ -1720,11 +1722,25 @@ return false; } + final private boolean jj_3R_53() { + if (jj_scan_token(52)) return true; + if (jj_3R_38()) return true; + return false; + } + final private boolean jj_3R_33() { if (jj_scan_token(36)) return true; return false; } + final private boolean jj_3R_38() { + if (jj_3R_52()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_53()) jj_scanpos = xsp; + return false; + } + final private boolean jj_3R_32() { Token xsp; xsp = jj_scanpos; @@ -1735,12 +1751,6 @@ return false; } - final private boolean jj_3R_53() { - if (jj_scan_token(52)) return true; - if (jj_3R_38()) return true; - return false; - } - final private boolean jj_3R_17() { if (jj_scan_token(35)) return true; if (jj_3R_20()) return true; @@ -1757,11 +1767,9 @@ return false; } - final private boolean jj_3R_38() { - if (jj_3R_52()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_53()) jj_scanpos = xsp; + final private boolean jj_3R_39() { + if (jj_scan_token(50)) return true; + if (jj_3R_20()) return true; return false; } @@ -1781,12 +1789,6 @@ return false; } - final private boolean jj_3R_39() { - if (jj_scan_token(50)) return true; - if (jj_3R_20()) return true; - return false; - } - final private boolean jj_3R_29() { if (jj_scan_token(37)) return true; return false; @@ -1804,6 +1806,14 @@ return false; } + final private boolean jj_3R_20() { + if (jj_3R_38()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_39()) jj_scanpos = xsp; + return false; + } + final private boolean jj_3R_16() { Token xsp; xsp = jj_scanpos; @@ -1820,14 +1830,6 @@ return false; } - final private boolean jj_3R_20() { - if (jj_3R_38()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_39()) jj_scanpos = xsp; - return false; - } - final private boolean jj_3R_67() { if (jj_scan_token(30)) return true; Token xsp; @@ -1902,14 +1904,6 @@ return false; } - final private boolean jj_3R_46() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_59()) jj_scanpos = xsp; - if (jj_3R_16()) return true; - return false; - } - final private boolean jj_3R_56() { if (jj_3R_42()) return true; return false; @@ -1929,6 +1923,14 @@ return false; } + final private boolean jj_3R_46() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_59()) jj_scanpos = xsp; + if (jj_3R_16()) return true; + return false; + } + final private boolean jj_3R_75() { if (jj_scan_token(48)) return true; if (jj_3R_65()) return true; @@ -1993,11 +1995,6 @@ return false; } - final private boolean jj_3R_45() { - if (jj_scan_token(34)) return true; - return false; - } - final private boolean jj_3R_57() { Token xsp; xsp = jj_scanpos; @@ -2011,6 +2008,11 @@ return false; } + final private boolean jj_3R_45() { + if (jj_scan_token(34)) return true; + return false; + } + final private boolean jj_3R_120() { if (jj_3R_19()) return true; return false; @@ -2021,16 +2023,6 @@ return false; } - final private boolean jj_3R_136() { - if (jj_scan_token(37)) return true; - return false; - } - - final private boolean jj_3R_127() { - if (jj_3R_67()) return true; - return false; - } - final private boolean jj_3R_79() { if (jj_scan_token(48)) return true; if (jj_3R_57()) return true; @@ -2042,11 +2034,16 @@ return false; } - final private boolean jj_3R_139() { - if (jj_scan_token(46)) return true; + final private boolean jj_3R_136() { + if (jj_scan_token(37)) return true; return false; } + final private boolean jj_3R_127() { + if (jj_3R_67()) return true; + return false; + } + final private boolean jj_3R_112() { if (jj_scan_token(42)) return true; if (jj_3R_20()) return true; @@ -2054,11 +2051,6 @@ return false; } - final private boolean jj_3R_138() { - if (jj_scan_token(45)) return true; - return false; - } - final private boolean jj_3R_41() { if (jj_3R_57()) return true; Token xsp; @@ -2069,6 +2061,16 @@ return false; } + final private boolean jj_3R_139() { + if (jj_scan_token(46)) return true; + return false; + } + + final private boolean jj_3R_138() { + if (jj_scan_token(45)) return true; + return false; + } + final private boolean jj_3R_137() { if (jj_scan_token(37)) return true; return false; @@ -2082,6 +2084,12 @@ return false; } + final private boolean jj_3R_111() { + if (jj_scan_token(37)) return true; + if (jj_3R_102()) return true; + return false; + } + final private boolean jj_3R_135() { Token xsp; xsp = jj_scanpos; @@ -2095,14 +2103,14 @@ return false; } - final private boolean jj_3R_111() { - if (jj_scan_token(37)) return true; - if (jj_3R_102()) return true; + final private boolean jj_3R_24() { + if (jj_3R_42()) return true; return false; } - final private boolean jj_3R_24() { - if (jj_3R_42()) return true; + final private boolean jj_3R_110() { + if (jj_scan_token(38)) return true; + if (jj_3R_102()) return true; return false; } @@ -2119,12 +2127,6 @@ return false; } - final private boolean jj_3R_110() { - if (jj_scan_token(38)) return true; - if (jj_3R_102()) return true; - return false; - } - final private boolean jj_3R_44() { if (jj_3R_19()) return true; return false; @@ -2171,18 +2173,6 @@ return false; } - final private boolean jj_3R_124() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_126()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_127()) { - jj_scanpos = xsp; - if (jj_3R_128()) return true; - } - return false; - } - final private boolean jj_3R_102() { Token xsp; xsp = jj_scanpos; @@ -2202,6 +2192,18 @@ return false; } + final private boolean jj_3R_124() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_126()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_127()) { + jj_scanpos = xsp; + if (jj_3R_128()) return true; + } + return false; + } + final private boolean jj_3R_13() { Token xsp; xsp = jj_scanpos; @@ -2322,6 +2324,11 @@ return false; } + final private boolean jj_3R_49() { + if (jj_scan_token(TK_NEG)) return true; + return false; + } + final private boolean jj_3R_122() { if (jj_scan_token(TK_FOR)) return true; if (jj_scan_token(42)) return true; @@ -2331,11 +2338,6 @@ return false; } - final private boolean jj_3R_49() { - if (jj_scan_token(TK_NEG)) return true; - return false; - } - final private boolean jj_3R_100() { if (jj_scan_token(38)) return true; return false; @@ -2362,11 +2364,6 @@ return false; } - final private boolean jj_3R_21() { - if (jj_scan_token(ATOM)) return true; - return false; - } - final private boolean jj_3R_77() { if (jj_3R_95()) return true; Token xsp; @@ -2377,6 +2374,11 @@ return false; } + final private boolean jj_3R_21() { + if (jj_scan_token(ATOM)) return true; + return false; + } + final private boolean jj_3_4() { Token xsp; xsp = jj_scanpos; @@ -2388,6 +2390,11 @@ return false; } + final private boolean jj_3R_91() { + if (jj_3R_67()) return true; + return false; + } + final private boolean jj_3R_35() { Token xsp; xsp = jj_scanpos; @@ -2402,11 +2409,16 @@ return false; } - final private boolean jj_3R_91() { - if (jj_3R_67()) return true; + final private boolean jj_3R_90() { + if (jj_3R_42()) return true; return false; } + final private boolean jj_3R_89() { + if (jj_3R_78()) return true; + return false; + } + final private boolean jj_3R_19() { Token xsp; xsp = jj_scanpos; @@ -2420,16 +2432,6 @@ return false; } - final private boolean jj_3R_90() { - if (jj_3R_42()) return true; - return false; - } - - final private boolean jj_3R_89() { - if (jj_3R_78()) return true; - return false; - } - final private boolean jj_3R_88() { if (jj_3R_77()) return true; return false; @@ -2440,6 +2442,11 @@ return false; } + final private boolean jj_3R_87() { + if (jj_scan_token(58)) return true; + return false; + } + final private boolean jj_3R_125() { Token xsp; xsp = jj_scanpos; @@ -2448,16 +2455,6 @@ return false; } - final private boolean jj_3R_87() { - if (jj_scan_token(58)) return true; - return false; - } - - final private boolean jj_3R_28() { - if (jj_3R_46()) return true; - return false; - } - final private boolean jj_3R_86() { if (jj_scan_token(57)) return true; return false; @@ -2468,6 +2465,11 @@ return false; } + final private boolean jj_3R_28() { + if (jj_3R_46()) return true; + return false; + } + final private boolean jj_3R_84() { if (jj_scan_token(55)) return true; return false; @@ -2483,6 +2485,16 @@ return false; } + final private boolean jj_3R_81() { + if (jj_scan_token(53)) return true; + return false; + } + + final private boolean jj_3R_80() { + if (jj_scan_token(45)) return true; + return false; + } + final private boolean jj_3R_27() { if (jj_3R_45()) return true; return false; @@ -2500,16 +2512,6 @@ return false; } - final private boolean jj_3R_81() { - if (jj_scan_token(53)) return true; - return false; - } - - final private boolean jj_3R_80() { - if (jj_scan_token(45)) return true; - return false; - } - final private boolean jj_3R_74() { Token xsp; xsp = jj_scanpos; @@ -2559,13 +2561,13 @@ return false; } - final private boolean jj_3R_25() { - if (jj_3R_43()) return true; + final private boolean jj_3R_72() { + if (jj_3R_77()) return true; return false; } - final private boolean jj_3R_72() { - if (jj_3R_77()) return true; + final private boolean jj_3R_25() { + if (jj_3R_43()) return true; return false; } Modified: trunk/src/jason/bb/DefaultBeliefBase.java =================================================================== --- trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -29,7 +29,6 @@ import jason.asSyntax.Literal; import jason.asSyntax.PredicateIndicator; -import java.util.ArrayList; import java.util.Deque; import java.util.HashSet; import java.util.Iterator; @@ -54,17 +53,17 @@ * belsMap is a table where the key is the bel.getFunctorArity and the value * is a list of literals with the same functorArity. */ - private Map<PredicateIndicator, BelEntry> belsMap = new ConcurrentHashMap<PredicateIndicator, BelEntry>(); + private Map<PredicateIndicator, BelEntry> belsMapDefaultNS = new ConcurrentHashMap<PredicateIndicator, BelEntry>(); + private Map<Atom, Map<PredicateIndicator, BelEntry>> nameSpaces = new ConcurrentHashMap<Atom, Map<PredicateIndicator,BelEntry>>(); + private int size = 0; /** set of beliefs with percept annot, used to improve performance of buf */ protected Set<Literal> percepts = new HashSet<Literal>(); - protected Set<Atom> nameSpaces = new HashSet<Atom>(); - public DefaultBeliefBase() { - nameSpaces.add(Literal.DefaultNS); + nameSpaces.put(Literal.DefaultNS, belsMapDefaultNS); } public void init(Agent ag, String[] args) { @@ -74,7 +73,7 @@ } public Set<Atom> getNameSpaces() { - return nameSpaces; + return nameSpaces.keySet(); } public void stop() { @@ -87,7 +86,9 @@ public void clear() { size = 0; percepts.clear(); - belsMap.clear(); + belsMapDefaultNS.clear(); + nameSpaces.clear(); + nameSpaces.put(Literal.DefaultNS, belsMapDefaultNS); } public Iterator<Literal> getPercepts() { @@ -148,12 +149,10 @@ return true; } } else { - BelEntry entry = belsMap.get(l.getPredicateIndicator()); - if (entry == null) { - entry = new BelEntry(); - belsMap.put(l.getPredicateIndicator(), entry); - } + // new bel + l = l.copy(); // we need to clone l for the consequent event to not have a ref to this bel (which may change before the event is processed); see bug from Viviana Marcardi + BelEntry entry = provideBelEntry(l); entry.add(l, addInEnd); // add it in the percepts list @@ -161,15 +160,29 @@ percepts.add(l); } - if (l.getNS() != Literal.DefaultNS) - nameSpaces.add(l.getNS()); - size++; return true; } return false; } + private BelEntry provideBelEntry(Literal l) { + Map<PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS; + if (l.getNS() != Literal.DefaultNS) { + belsMap = nameSpaces.get(l.getNS()); + if (belsMap == null) { + belsMap = new ConcurrentHashMap<PredicateIndicator, DefaultBeliefBase.BelEntry>(); + nameSpaces.put(l.getNS(), belsMap); + } + } + BelEntry entry = belsMap.get(l.getPredicateIndicator()); + if (entry == null) { + entry = new BelEntry(); + belsMap.put(l.getPredicateIndicator(), entry); + } + return entry; + } + public boolean remove(Literal l) { Literal bl = contains(l); if (bl != null) { @@ -181,8 +194,6 @@ boolean result = bl.delAnnots(l.getAnnots()); // note that l annots can be empty, in this case, nothing is deleted! return removeFromEntry(bl) || result; } - } else { - if (logger.isLoggable(Level.FINE)) logger.fine("Does not contain " + l + " in " + belsMap); } return false; } @@ -191,6 +202,7 @@ if (l.hasSource()) { return false; } else { + Map<PredicateIndicator, BelEntry> belsMap = l.getNS() == Literal.DefaultNS ? belsMapDefaultNS : nameSpaces.get(l.getNS()); PredicateIndicator key = l.getPredicateIndicator(); BelEntry entry = belsMap.get(key); entry.remove(l); @@ -203,36 +215,38 @@ } public Iterator<Literal> iterator() { - final Iterator<BelEntry> ibe = belsMap.values().iterator(); - if (ibe.hasNext()) { - return new Iterator<Literal>() { + final Iterator<Map<PredicateIndicator, BelEntry>> ins = nameSpaces.values().iterator(); + return new Iterator<Literal>() { + + Iterator<BelEntry> ibe = ins.next().values().iterator(); + Iterator<Literal> il = ibe.next().list.iterator(); + Literal l; + + public boolean hasNext() { + return il.hasNext(); + } - Iterator<Literal> il = ibe.next().list.iterator(); - Literal l; - - public boolean hasNext() { - return il.hasNext(); + public Literal next() { + l = il.next(); + while (!il.hasNext() && ibe.hasNext()) { + il = ibe.next().list.iterator(); } - - public Literal next() { - l = il.next(); - while (!il.hasNext() && ibe.hasNext()) { - il = ibe.next().list.iterator(); - } - return l; + while (!il.hasNext() && !ibe.hasNext() && ins.hasNext()) { + ibe = ins.next().values().iterator(); + il = ibe.next().list.iterator(); } + + return l; + } - public void remove() { - il.remove(); - if (l.hasAnnot(TPercept)) { - percepts.remove(l); - } - size--; + public void remove() { + il.remove(); + if (l.hasAnnot(TPercept)) { + percepts.remove(l); } - }; - } else { - return new ArrayList<Literal>(0).iterator(); - } + size--; + } + }; } /** @deprecated use iterator() instead of getAll */ @@ -241,7 +255,7 @@ } public boolean abolish(PredicateIndicator pi) { - BelEntry entry = belsMap.remove(pi); + BelEntry entry = belsMapDefaultNS.remove(pi); // TODO: consider other NS (?) this method is not used by jason if (entry != null) { size -= entry.size(); @@ -260,6 +274,9 @@ } public Literal contains(Literal l) { + Map<PredicateIndicator, BelEntry> belsMap = l.getNS() == Literal.DefaultNS ? belsMapDefaultNS : nameSpaces.get(l.getNS()); + if (belsMap == null) + return null; BelEntry entry = belsMap.get(l.getPredicateIndicator()); if (entry == null) { return null; @@ -270,7 +287,7 @@ } public Iterator<Literal> getCandidateBeliefs(PredicateIndicator pi) { - BelEntry entry = belsMap.get(pi); + BelEntry entry = belsMapDefaultNS.get(pi); // TODO: consider other NS ? this method is not used by jason if (entry != null) //return Collections.unmodifiableList(entry.list).iterator(); return entry.list.iterator(); @@ -283,10 +300,21 @@ // all bels are relevant return iterator(); } else { + Map<PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS; + if (l.getNS() != Literal.DefaultNS) { + Atom ns = l.getNS(); + if (ns.isVar()) + ns = (Atom)ns.capply(u); + if (ns.isVar()) { // still a var + return iterator(); + } + belsMap = nameSpaces.get(ns); + } + if (belsMap == null) + return null; BelEntry entry = belsMap.get(l.getPredicateIndicator()); if (entry != null) { - //return Collections.unmodifiableList(entry.list).iterator(); - //System.out.println(l+ " ==> " + entry.list); + //System.out.println(l.getNS() + "::::"+ l+ " ==> " + entry.list); return entry.list.iterator(); } else { return null; @@ -300,7 +328,7 @@ } public String toString() { - return belsMap.toString(); + return nameSpaces.toString(); } public BeliefBase clone() { @@ -315,8 +343,20 @@ int tries = 0; Element ebels = null; while (tries < 10) { // max 10 tries - ebels = (Element) document.createElement("beliefs"); - try { + try { + ebels = (Element) document.createElement("beliefs"); + Element enss = (Element) document.createElement("name-spaces"); + Element ens = (Element) document.createElement("name-space"); + ens.setAttribute("id", "default"); // to ensure default is the first + enss.appendChild(ens); + for (Atom ns: getNameSpaces()) { + if (ns == Literal.DefaultNS) + continue; + ens = (Element) document.createElement("name-space"); + ens.setAttribute("id", ns.getFunctor()); + enss.appendChild(ens); + } + ebels.appendChild(enss); for (Literal l: this) ebels.appendChild(l.getAsDOM(document)); break; // quit the loop Modified: trunk/src/test/NSTest.java =================================================================== --- trunk/src/test/NSTest.java 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/test/NSTest.java 2015-12-08 20:19:43 UTC (rev 1864) @@ -1,7 +1,5 @@ package test; -import java.io.StringReader; - import jason.JasonException; import jason.asSemantics.Agent; import jason.asSemantics.Unifier; @@ -12,6 +10,10 @@ import jason.asSyntax.VarTerm; import jason.asSyntax.parser.ParseException; import jason.asSyntax.parser.as2j; + +import java.io.StringReader; +import java.util.Iterator; + import junit.framework.TestCase; /** JUnit test case for syntax package */ @@ -134,7 +136,6 @@ u = new Unifier(); p6 = ASSyntax.parseLiteral("other::B"); u.unifies(p1, p6); - System.out.println(u); assertFalse(u.unifies(p1, p6)); } @@ -152,6 +153,14 @@ t = t.capply(u); assertEquals("ns::~bob(10)[a(20)]", t.toString()); + Literal l = ASSyntax.parseLiteral("f(default)"); + assertEquals(l.getTerm(0), Literal.DefaultNS); + assertTrue(l.getTerm(0) == Literal.DefaultNS); + Literal p = ASSyntax.parseLiteral("f(NS)"); + u = new Unifier(); + u.unifies(p, l); + p = (Literal)p.capply(u); + assertTrue(p.getTerm(0) == Literal.DefaultNS); } public void testConstants() throws ParseException { @@ -197,7 +206,8 @@ } public void testParserNS() throws ParseException, JasonException { - as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). !g(ok). +!g(X) <- .print(kk, 10, X). ")); + + as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). ns71::b(30). default::b(40). !g(ok). +!g(X) <- .print(kk, 10, X). ")); parser.setNS(new Atom("ns33")); Agent a = new Agent(); a.initAg(); @@ -210,6 +220,17 @@ assertTrue(a.getPL().toString().contains("!ns33::g(ns33::X) <- .print(ns33::kk,10,ns33::X)")); assertTrue(a.getInitialGoals().toString().equals("[ns33::g(ns33::ok)]")); + + // BB iterator + int i = 0; + Iterator<Literal> il = a.getBB().iterator(); + while (il.hasNext()) { + //Literal l = + il.next(); + i++; + } + assertEquals(5,i); + } } Modified: trunk/src/xml/agInspection.xsl =================================================================== --- trunk/src/xml/agInspection.xsl 2015-12-08 17:31:53 UTC (rev 1863) +++ trunk/src/xml/agInspection.xsl 2015-12-08 20:19:43 UTC (rev 1864) @@ -102,22 +102,28 @@ <xsl:with-param name="ds" select="'Beliefs'" /> </xsl:call-template> <xsl:if test="$show-bels='true'"> - <td style="{$td-style}"> - <hr/> - <table cellspacing="0" cellpadding="2"> - <xsl:for-each select="literal"> - <xsl:sort select="structure/@functor" /> - <tr style="{$trh-style}"> - <td style="text-align: left"> - <span style="color: {$bc}"> - <xsl:apply-templates select="." /> - </span> - <xsl:text>.</xsl:text> - </td> - </tr> - </xsl:for-each> - </table> - </td> + <td style="{$td-style}"> + <hr/> + <table cellspacing="0" cellpadding="2"> + <xsl:for-each select="name-spaces/name-space"> + <xsl:variable name="nsId" select="@id" /> + <xsl:for-each select="../../literal[@name-space=$nsId]"> + <xsl:sort select="structure/@functor" /> + <tr style="{$trh-style}"> + <td style="text-align: left"> + <xsl:if test="$nsId != 'default' and position()=1"> + <br/><b><xsl:value-of select="$nsId" /><xsl:text>::</xsl:text></b> <br/> + </xsl:if> + <span style="color: {$bc}"> + <xsl:apply-templates select="." /> + </span> + <xsl:text>.</xsl:text> + </td> + </tr> + </xsl:for-each> + </xsl:for-each> + </table> + </td> </xsl:if> </tr> </xsl:if> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |