From 5609135257e830b7349ae39f1c50f23719dbf387 Mon Sep 17 00:00:00 2001 From: administrateur Date: Tue, 23 Jan 2007 18:43:32 +0100 Subject: [PATCH] New core for datas. --- build.xml | 24 +- build.xml~ | 53 ++- build/classes/xid/Presenter.class | Bin 15660 -> 16481 bytes build/classes/xid/TagData.class | Bin 1269 -> 1623 bytes build/classes/xid/TagsData.class | Bin 895 -> 361 bytes build_test/classes/xid/Test.class | Bin 524 -> 0 bytes build_test/classes/xid/test/Test.class | Bin 534 -> 5551 bytes dist/test.jar | Bin 25173 -> 29147 bytes dist/xid.jar | Bin 37488 -> 39575 bytes src/xid/Presenter.java | 444 ++++++++++-------- src/xid/TagData.java | 56 ++- src/xid/TagsData.java | 31 +- src/xid/TextTagData.java | 91 ---- test/xid/test/Test.java | 236 ++++++++-- test/xid/test/Test.java~ | 118 ++++- webapp-examples/WEB-INF/classes/xid/Test.java | 29 -- webapp-examples/WEB-INF/lib/xid.jar | Bin 37488 -> 37491 bytes 17 files changed, 666 insertions(+), 416 deletions(-) delete mode 100644 build_test/classes/xid/Test.class delete mode 100644 src/xid/TextTagData.java diff --git a/build.xml b/build.xml index a03ea2e..4c8c533 100644 --- a/build.xml +++ b/build.xml @@ -11,7 +11,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -33,8 +33,8 @@ - - + + @@ -43,27 +43,31 @@ - + + - - + + + + - + + @@ -72,7 +76,7 @@ - + @@ -95,7 +99,7 @@ - + diff --git a/build.xml~ b/build.xml~ index 783c08a..fd7ab0f 100644 --- a/build.xml~ +++ b/build.xml~ @@ -11,18 +11,20 @@ - + + - - + + + @@ -30,17 +32,51 @@ - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -63,7 +99,7 @@ - + @@ -75,6 +111,7 @@ + diff --git a/build/classes/xid/Presenter.class b/build/classes/xid/Presenter.class index 98297a0b983b4b1dcb9a60d163d54d7c1649c9c0..29d02fabfd15d739c580debe473a78b133ddeca7 100644 GIT binary patch literal 16481 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 A?f?J) literal 15660 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 XvJ5~~TnyYmnhD4Uk-Q9iV45EQ{IW7t literal 895 zcmZva%Wl&^6o&ta<2ZGlmIeqd*QTW*P74u&1yZVRK!{5Mi&RBoH%Y8?D&s`HAb1p> zfGuo_!~(JAp%DMrE=rqh=FGYH`_DO^KYxGz0`L&74GTAIlyFNQxAk$y!ls3~g)M>7 zz6w-)AYe4zBZ1=6$;cB}?W(|glYAI>;h`M(j8wamq4bYrsI;F4i}A6F1XjAA)Tn(Z z$I&wx%Z`83vkr z#(khCbWp~UgKgY(u!Dw!duR$Q=WEfU3OKV%5?D(&Gus3I!8Bp3PiE(OJ2>%%ac8Ez zJmSuWs5qPiu~b3y+WRbUbpgnIPZ=&yps^@B4@I3X#^PH73T(9ZAiJ7! z%eagyROGOz<=iQK&0TNpp2GNoRc(vEVfMbl6urG~%w@gSVDi3A-VTWkl3Y^mr<$#F c0t44lK575e*K_q6DOt9_tY&VoUu|#v1LUT-3;+NC diff --git a/build_test/classes/xid/Test.class b/build_test/classes/xid/Test.class deleted file mode 100644 index 85e2637b4cceaee75238bd250b524b8774ff0fcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 524 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 G48j2J?;PR) diff --git a/dist/test.jar b/dist/test.jar index 57e9a7e52249847f9f2ce6884130bc0ef90519cb..4b04cf10840a6548c8709f93887011b008b31f59 100644 GIT binary patch delta 4513 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 E1v0W$yZ`_I diff --git a/src/xid/Presenter.java b/src/xid/Presenter.java index db7a98b..f4bfb9e 100644 --- a/src/xid/Presenter.java +++ b/src/xid/Presenter.java @@ -1,10 +1,9 @@ -/* - * - */ package xid; + import java.util.*; import java.io.*; import javax.xml.parsers.*; +import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import org.xml.sax.*; import org.w3c.dom.*; @@ -91,7 +90,7 @@ public class Presenter /* * */ - public StringBuffer doXid (TagsData datas, StringBuffer errorOutput) + public StringBuffer doXid (TagsDataById datas, StringBuffer errorOutput) { StringBuffer result; @@ -135,7 +134,7 @@ public class Presenter /* - * + * Xid a file without data. */ static public StringBuffer doXid (String fileName, String webappPath, StringBuffer errorOutput) { @@ -160,28 +159,71 @@ public class Presenter /* - * + * Xid a string with html in. */ - static public StringBuffer doXid (Document doc, TagsData datas, String webappPath, StringBuffer errorOutput) + static public StringBuffer doXid (String html, TagsDataById datas, String webappPath, StringBuffer errorOutput) { StringBuffer result; - result = Presenter.process (doc, datas, webappPath, errorOutput); + String htmlSource; + if ((html.startsWith ("")) || + (html.startsWith (""))) + { + htmlSource = html; + } + else + { + htmlSource = "\n" + html + ""; + } + + Document doc = null; + + // StringBufferInputStream is deprecated so we use another solution. + // (see http://www.developpez.net/forums/archive/index.php/t-14101.html). + doc = buildTree (new ByteArrayInputStream (htmlSource.getBytes ()), errorOutput); + + StringBuffer htmlTarget; + htmlTarget = Presenter.process (doc, datas, webappPath, errorOutput); + + if (htmlTarget == null) + { + result = null; + } + else if ((html.startsWith ("")) || + (html.startsWith (""))) + { + result = htmlTarget; + } + else + { + String bodyContent = extractBodyContent (htmlTarget); + + if (bodyContent == null) + { + result = null; + } + else + { + result = new StringBuffer (bodyContent); + } + } // return (result); } + /* - * + * Xid a file with data. */ - static public StringBuffer doXid (String html, TagsData datas, String webappPath, StringBuffer errorOutput) + static public StringBuffer doXid (Document doc, TagsDataById datas, String webappPath, StringBuffer errorOutput) { StringBuffer result; - Document doc = null; - - result = Presenter.process (doc, datas, webappPath, errorOutput); // @@ -223,7 +265,7 @@ public class Presenter /* * */ - static protected StringBuffer processChildren (Node node, TagsData datas, String webappPath, StringBuffer errorOutput) + static protected StringBuffer processChildren (Node node, TagsDataById datas, String webappPath, StringBuffer errorOutput) { StringBuffer result; @@ -258,7 +300,7 @@ public class Presenter * @param attrMap * @param idAttr */ - static protected StringBuffer processObjectTag (Node node, NamedNodeMap attrMap, Node idAttr, TagsData datas, String webappPath, StringBuffer errorOutput) + static protected StringBuffer processObjectTag (Node node, NamedNodeMap attrMap, Node idAttr, TagsDataById datas, String webappPath, StringBuffer errorOutput) { StringBuffer result; @@ -291,7 +333,7 @@ public class Presenter } else { - log.info ("object action"); + log.debug ("object action"); result.append (""); // Build the file name. @@ -307,7 +349,7 @@ public class Presenter catch (Exception ex) { result.append ("unable to build the file tree"); - log.info ("unable to build the file tree"); + log.debug ("unable to build the file tree"); } // Extract the 'body' section. @@ -319,7 +361,7 @@ public class Presenter if (nodes.getLength () == 0) { result.append ("no body tag in include html"); - log.info ("no body tag in include html"); + log.debug ("no body tag in include html"); } else { @@ -329,7 +371,7 @@ public class Presenter catch (Exception e) { result.append ("error getting child"); - log.info ("error getting child"); + log.debug ("error getting child"); } // Process the body child as part of the primary tree. @@ -347,7 +389,7 @@ public class Presenter // result.append (""); } - log.info ("end of object action"); + log.debug ("end of object action"); // return (result); } @@ -368,7 +410,7 @@ public class Presenter static protected StringBuffer processElementWithId (Node node, NamedNodeMap attrs, Node idAttr, - TagsData datas, + TagsDataById datas, String webappPath, StringBuffer errorOutput) { @@ -378,104 +420,82 @@ public class Presenter String tag = node.getNodeName(); String idValue = idAttr.getNodeValue(); - log.info ("tag=" + tag); + log.debug ("tag=" + tag); // Get data of this id. - TagData data = datas.get (idAttr.getNodeValue ()); - String theClass; - if (data == null) - { - theClass = null; - } - else - { - theClass = data.getAttributes ().getAttribute ("class"); - } + TagDataCore dataCore = datas.get (idAttr.getNodeValue ()); - if ((theClass == null) || - (!theClass.equals ("xid:nodisplay"))) + if (dataCore == null) { - if ((tag.equals ("a")) || - (tag.equals ("b")) || - (tag.equals ("div")) || - (tag.equals ("em")) || - (tag.equals ("p")) || - (tag.equals ("span"))) + result.append (Presenter.processElementBasically (node, datas, webappPath, errorOutput)); + } + else if (dataCore instanceof TagData) + { + TagData data = (TagData) dataCore; + + String theClass; + if (data == null) { - // Open the tag. - result.append ('<'); - result.append (node.getNodeName()); - - // Build the tag attributes. - result.append (processAttributes (attrs, data)); - //result.append (attributesFromNode (attrs)); - //result.append (attributesFromTagData (data)); - - result.append ('>'); - - // Insert data. - if ((data == null) || - (data.display ().equals (""))) - { - result.append (processChildren (node, datas, webappPath, errorOutput)); - } - else - { - result.append (data.display ()); - } - - // Close the tag. - result.append ("'); + theClass = null; } - else if (tag.equals("img")) + else + { + theClass = data.getAttributes ().getAttribute ("class"); + } + + if ((theClass == null) || + (!theClass.equals ("xid:nodisplay"))) { - // Possibility to merge with previous case if
is a correct tag. - // Open the tag. result.append ("<"); result.append (node.getNodeName()); - // Build the tag attributes. + // Build attributes. result.append (processAttributes (attrs, data)); - //result.append (attributesFromNode (attrs)); - //result.append (attributesFromTagData (data)); - result.append ("/>"); - } - else if (tag.equals("textarea")) - { - result.append ("[textarea]"); - } - else if (tag.equals("select")) - { - result.append ("[select]"); - } - else if (tag.equals("input")) - { - result.append ("[input]"); - } - else if (tag.equals("table")) - { - result.append ("[table]"); - } - else if (tag.equals("tbody")) - { - result.append ("[tbody]"); - } - else if (tag.equals("object")) - { - result.append (processObjectTag (node, attrs, idAttr, datas, webappPath, errorOutput)); - } - else - { - log.info ("Id on <" + tag + "> not supported."); + if ((node.getChildNodes () == null) && + ((data == null) || data.display ().equals (""))) + { + // Close the tag. + result.append (" />"); + } + else + { + result.append ('>'); + + // Insert data. + if ((data == null) || + (data.display ().equals (""))) + { + result.append (processChildren (node, datas, webappPath, errorOutput)); + } + else + { + result.append (data.display ()); + } + + // Close the tag. + result.append ("'); + } } } + else if (dataCore instanceof TagsData) + { + TagsData data = (TagsData) dataCore; + } + else if (dataCore instanceof TagsDataById) + { + TagsDataById data = (TagsDataById) dataCore; + } + else + { + log.warn ("Unknow type of TagDataId"); + } // - log.info ("Exit"); + log.debug ("Exit"); return (result); } @@ -485,9 +505,9 @@ public class Presenter * Recursive method that processes a node and any child nodes. * */ - static protected StringBuffer process (Node node, TagsData datas, String webappPath, StringBuffer errorOutput) + static protected StringBuffer process (Node node, TagsDataById datas, String webappPath, StringBuffer errorOutput) { - log.info ("Enter"); + log.debug ("Enter"); String TRANSITIONAL_DTD = "xhtml1-transitional.dtd"; String TRANSITIONAL_DOCTYPE = "\n"; @@ -498,7 +518,7 @@ public class Presenter // Is there anything to do? if (node != null) { - log.info ("nodeName=" + node.getNodeName ()); + log.debug ("nodeName=" + node.getNodeName ()); // Find the name attribute value. String name; @@ -513,27 +533,31 @@ public class Presenter { case Node.DOCUMENT_NODE: { - log.info ("case Node.DOCUMENT_NODE"); + log.debug ("case Node.DOCUMENT_NODE"); DocumentType dt = ((Document) node).getDoctype(); - String publicId = dt.getPublicId(); - String systemId = dt.getSystemId(); - - if (systemId.equals(TRANSITIONAL_DTD)) + + if (dt != null) { - result.append(TRANSITIONAL_DOCTYPE); + String publicId = dt.getPublicId(); + String systemId = dt.getSystemId(); + + if (systemId.equals(TRANSITIONAL_DTD)) + { + result.append(TRANSITIONAL_DOCTYPE); + } + + // Log.write(Log.TRACE,"publicId = " + publicId); + // Log.write(Log.TRACE,"systemId = " + systemId); } - - // Log.write(Log.TRACE,"publicId = " + publicId); - // Log.write(Log.TRACE,"systemId = " + systemId); - + result.append (Presenter.process (((Document) node).getDocumentElement(), datas, webappPath, errorOutput)); - + break; } case Node.ELEMENT_NODE: { - log.info ("case Node.ELEMENT_NODE"); + log.debug ("case Node.ELEMENT_NODE"); NamedNodeMap attrs = node.getAttributes (); Node idAttr = attrs.getNamedItem ("id"); @@ -553,7 +577,7 @@ public class Presenter // handle entity reference nodes case Node.ENTITY_REFERENCE_NODE: { - log.info ("case Node.ENTITY_REFERENCE_NODE"); + log.debug ("case Node.ENTITY_REFERENCE_NODE"); result.append ('&'); result.append (node.getNodeName()); @@ -564,7 +588,7 @@ public class Presenter // print cdata sections case Node.CDATA_SECTION_NODE: { - log.info ("case Node.CDATA_SECTION_NODE"); + log.debug ("case Node.CDATA_SECTION_NODE"); result.append (""); + int endBody = dataLowerCase.indexOf (""); + + // Note: as failed search is improbable, no care about complexity + // in failed search case. + if ((startBody == -1) || (endBody == -1)) + { + result = null; + } + else + { + result = data.substring (startBody + 6, endBody).trim (); + } + + // + return (result); + } } diff --git a/src/xid/TagData.java b/src/xid/TagData.java index 8e85d37..8bdd109 100644 --- a/src/xid/TagData.java +++ b/src/xid/TagData.java @@ -15,7 +15,7 @@ import java.io.*; * application may also implement it's own TagData classes. * */ -public abstract class TagData implements Serializable +public class TagData implements Serializable, TagDataCore { public enum MODE {REPLACE, APPEND, IGNORE}; @@ -23,22 +23,60 @@ public abstract class TagData implements Serializable protected boolean excludeSection; protected MODE displayMode = MODE.REPLACE; + String content; /* * */ public TagData () { - attributes = null; - excludeSection = false; - displayMode = MODE.REPLACE; + this.attributes = null; + this.excludeSection = false; + this.displayMode = MODE.REPLACE; + this.content = ""; } /* * */ - public abstract String display(); + public TagData (String text) + { + this.attributes = null; + this.excludeSection = false; + this.displayMode = MODE.REPLACE; + this.content = text; + } + + + /* + * + */ + public String display () + { + String result; + + if (this.content == null) + { + result = ""; + } + else + { + result = this.content; + } + + // + return (result); + } + + + /* + * + */ + public void setContent (String text) + { + this.content = text; + } /* @@ -62,14 +100,6 @@ public abstract class TagData implements Serializable return (result); } - /* - * ?? - */ - public String getValue() - { - return display(); - } - /* * diff --git a/src/xid/TagsData.java b/src/xid/TagsData.java index 5cb5ee7..1191821 100644 --- a/src/xid/TagsData.java +++ b/src/xid/TagsData.java @@ -6,7 +6,7 @@ import java.io.*; /* * */ -public class TagsData extends HashMap +public class TagsData extends Vector implements TagDataCore { /** * @@ -15,33 +15,4 @@ public class TagsData extends HashMap { super (); } - - - /* - * - */ - public void setId (String id, TagData data) - { - this.put (id, data); - } - - /* - * - */ - public TagData getId (String id) - { - TagData result; - - if (this.containsKey (id)) - { - result = this.get (id); - } - else - { - result = null; - } - - // - return (result); - } } diff --git a/src/xid/TextTagData.java b/src/xid/TextTagData.java deleted file mode 100644 index 3bc920a..0000000 --- a/src/xid/TextTagData.java +++ /dev/null @@ -1,91 +0,0 @@ -package xid; - -import java.io.*; - -/** - * This class can be used to set up text for display. - * - */ -public class TextTagData extends TagData implements Serializable -{ - private static final long serialVersionUID = -4117726979708043231L; - - protected String text; - - /** - * Constructs a TextTagData with the text supplied. - * - * @param text The text to be displayed. - */ - public TextTagData (String text) - { - super (); - this.text = text; - } - - - /* - * - */ - public TextTagData() - { - super(); - this.text = ""; - this.displayMode = MODE.IGNORE; - } - - - /** - * This method will be called by the View when it encounters - * an id for a TextTagData object. - */ - public String display () - { - String result; - - if (text == null) - { - result = ""; - } - else - { - result = this.text; - } - - // - return (result); - } - - - /** - * Allows the text content to be changed. - * @param text - */ - public void setText (String text) - { - this.text = text; - } - - - /** - * Returns the value as an int. - * - * @return The users input as an int or -1 if not a valid number. - */ - public int getValueAsInt() - { - int result; - - try - { - result = Integer.parseInt(text); - } - catch (NumberFormatException e) - { - result = -1; - } - - // - return (result); - } -} diff --git a/test/xid/test/Test.java b/test/xid/test/Test.java index d0e792c..86d1cef 100644 --- a/test/xid/test/Test.java +++ b/test/xid/test/Test.java @@ -1,73 +1,227 @@ -package xid; +package xid.test; import java.util.*; import java.io.*; import xid.*; +interface TTagDataCore +{ +} + +class TTagData implements TTagDataCore +{ + public String a; +} + +class TTagsDataById extends HashMap implements TTagDataCore +{ +} + +class TTagsData extends Vector implements TTagDataCore +{ +} + +class TTagsMatrix extends TTagsDataById +{ +} /** * */ class Test { + + public static void test () + { + System.out.println ("doing a test"); + + + TTagsDataById tags = new TTagsDataById (); + + TTagData tag = new TTagData (); + tag.a = "label a1"; + tags.put ("id1", tag); + + tag = new TTagData (); + tag.a = "label a2"; + tags.put ("id2", tag); + + TTagsData tag2 = new TTagsData (); + tags.put ("id3", tag2); + + TTagsDataById tag3 = new TTagsDataById (); + tags.put ("id4", tag3); + + TTagsMatrix tag4 = new TTagsMatrix (); + tags.put ("id5", tag4); + + System.out.println ("tags=" + tags); + + Set keys = tags.keySet (); + Iterator it = keys.iterator (); + while (it.hasNext ()) + { + String key = (String) it.next (); + Object obj = tags.get (key); + + StringBuffer comment = new StringBuffer (); + comment.append ("(" + key + "=> " + obj + "-> "); + + if (obj instanceof TTagData) + { + comment.append ("class TTagData"); + } + else if (obj instanceof TTagsData) + { + comment.append ("class TTagsData"); + } + else if (obj instanceof TTagsDataById) + { + comment.append ("class TTagsDataById"); + } + + if (obj instanceof TTagDataCore) + { + comment.append (" TTagDataCore"); + } + + comment.append (")"); + System.out.println (comment); + } + } + + + static private org.apache.log4j.Logger log; + + static + { + // Initialize log. + org.apache.log4j.Logger log = null; + + org.apache.log4j.BasicConfigurator.configure (); + + + log = org.apache.log4j.Logger.getRootLogger (); + //log.setLevel (org.apache.log4j.Level.INFO); + log.setLevel (org.apache.log4j.Level.INFO); + + log.info ("Enter"); + + // + log.info ("Set the log file format..."); + + + // log = org.apache.log4j.Category.getInstance(Application.class.getName()); + log.info ("... done."); + + log.debug ("Exit"); + log = org.apache.log4j.Logger.getLogger (Test.class.getName ()); + } + + + /** + * + */ public static void main(String[] args) { System.out.println("Hello World!"); - Presenter xid = new Presenter (getServletContext ().getRealPath ("/"), "testXid.html"); + //test (); // - TagsData datas = new TagsData (); - TextTagData text; + TagsDataById datas; + TagData tag; + - // Populate attributes of Test 03. - text = new TextTagData (); - datas.put ("test03", text); - text.setText ("mummy"); - text.getAttributes ().appendAttribute ("style", "background: blue;"); - text.getAttributes ().appendAttribute ("style", "foreground: red;"); - text.getAttributes ().setAttribute ("class", "totoClass"); StringBuffer html; StringBuffer errorMessage; + // Populate attributes of Test 03. + datas = new TagsDataById (); + tag = new TagData (); + tag.setContent ("Superman"); + datas.put ("name", tag); + errorMessage = new StringBuffer (); - html = xid.doXid (datas, errorMessage); + html = Presenter.doXid ("
a name
", datas, "", errorMessage); + System.out.println ("----------------------------"); + System.out.println ("datas = new TagsDataId ();"); + System.out.println ("tag = new TagData ();"); + System.out.println ("tag.setContent (\"Superman\");"); + System.out.println ("datas.put (\"name\", tag););"); + System.out.println ("+"); + System.out.println ("
a name
"); + System.out.println ("=>"); + System.out.println (html); - // Display page. - response.setContentType ("text/html"); - PrintWriter out = response.getWriter(); - out.println (""); - out.println (""); - out.println ("XID TEST"); - out.println (""); - out.println (""); + // Populate attributes of Test 03. + datas = new TagsDataById (); + datas.setContent ("name", "Superman"); - out.println ("
"); - out.println ("XID TEST
"); - - if (errorMessage.length () != 0) - { - out.println ("An error occured in Xid treatment.
"); - out.println ("
");
-	out.println (errorMessage);
-	out.println ("
"); - out.println ("
"); - out.println ("
" + Presenter.restoreEntities (html) + "
"); - out.println ("
"); - } - else - { - out.println ("
" + Presenter.restoreEntities (html) + "
"); - } + errorMessage = new StringBuffer (); + html = Presenter.doXid ("
a name
", datas, "", errorMessage); - out.println (""); - out.println (""); - - log.info ("Exit"); + System.out.println ("----------------------------"); + System.out.println ("datas = new TagsDataId ();"); + System.out.println ("datas.setContent (\"name\", \"Superman\");"); + System.out.println ("+"); + System.out.println ("
a name
"); + System.out.println ("=>"); + System.out.println (html); + + // Populate attributes of Test 03. + datas = new TagsDataById (); + tag = new TagData (); + tag.setContent ("Spiderman"); + tag.getAttributes ().appendAttribute ("style", "background: blue;"); + tag.getAttributes ().appendAttribute ("style", "foreground: red;"); + tag.getAttributes ().setAttribute ("class", "nameClass"); + datas.put ("lastname", tag); + + + errorMessage = new StringBuffer (); + html = Presenter.doXid ("
a last name
", datas, "", errorMessage); + + System.out.println ("----------------------------"); + System.out.println ("datas = new TagsDataId ();"); + System.out.println ("tag = new TagData ();"); + System.out.println ("tag.getAttributes ().setAttribute (\"class\", \"lastnameClass\");"); + System.out.println ("tag.getAttributes ().appendAttribute (\"style\", \"background: blue;\");"); + System.out.println ("tag.getAttributes ().appendAttribute (\"style\", \"foreground: red;\");"); + System.out.println ("tag.setContent (\"Spiderman\");"); + System.out.println ("datas.put (\"lastname\", tag););"); + System.out.println ("+"); + System.out.println ("
a last name
"); + System.out.println ("=>"); + System.out.println (html); + + + // Populate attributes of Test 03. + datas = new TagsDataById (); + datas.setContent ("lastname", "Spiderman"); + datas.appendAttribute ("lastname", "style", "background: blue;"); + datas.appendAttribute ("lastname", "style", "foreground: red;"); + datas.setAttribute ("lastname", "class", "nameClass"); + + + errorMessage = new StringBuffer (); + html = Presenter.doXid ("
a last name
", datas, "", errorMessage); + + System.out.println ("----------------------------"); + System.out.println ("datas = new TagsDataId ();"); + System.out.println ("datas.setContent (\"lastname\", \"Spiderman\");"); + System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"foreground: red;\");"); + System.out.println ("datas.appendAttribute (\"lastname\", \"style\", \"foreground: red;\""); + System.out.println ("datas.setAttribute (\"lastname\", \"class\", \"nameClass\");"); + System.out.println ("+"); + System.out.println ("
a last name
"); + System.out.println ("=>"); + System.out.println (html); + System.out.println ("----------------------------"); } } diff --git a/test/xid/test/Test.java~ b/test/xid/test/Test.java~ index a55f3fe..8d5d95c 100644 --- a/test/xid/test/Test.java~ +++ b/test/xid/test/Test.java~ @@ -1,16 +1,132 @@ -package xid; +package xid.test; import java.util.*; import java.io.*; +import xid.*; +interface TTagDataCore +{ +} + +class TTagData implements TTagDataCore +{ + public String a; +} + +class TTagsDataById extends HashMap implements TTagDataCore +{ +} + +class TTagsData extends Vector implements TTagDataCore +{ +} + +class TTagsMatrix extends TTagsDataById +{ +} /** * */ class Test { + + public static void test () + { + System.out.println ("doing a test"); + + + TTagsDataById tags = new TTagsDataById (); + + TTagData tag = new TTagData (); + tag.a = "label a1"; + tags.put ("id1", tag); + + tag = new TTagData (); + tag.a = "label a2"; + tags.put ("id2", tag); + + TTagsData tag2 = new TTagsData (); + tags.put ("id3", tag2); + + TTagsDataById tag3 = new TTagsDataById (); + tags.put ("id4", tag3); + + TTagsMatrix tag4 = new TTagsMatrix (); + tags.put ("id5", tag4); + + System.out.println ("tags=" + tags); + + Set keys = tags.keySet (); + Iterator it = keys.iterator (); + while (it.hasNext ()) + { + String key = (String) it.next (); + Object obj = tags.get (key); + + StringBuffer comment = new StringBuffer (); + comment.append ("(" + key + "=> " + obj + "-> "); + + if (obj instanceof TTagData) + { + comment.append ("class TTagData"); + } + else if (obj instanceof TTagsData) + { + comment.append ("class TTagsData"); + } + else if (obj instanceof TTagsDataById) + { + comment.append ("class TTagsDataById"); + } + + if (obj instanceof TTagDataCore) + { + comment.append (" TTagDataCore"); + } + + comment.append (")"); + System.out.println (comment); + } + } + + static private org.apache.log4j.Logger log; + + static + { + log = org.apache.log4j.Logger.getLogger (Test.class.getName ()); + } + + + /** + * + */ public static void main(String[] args) { System.out.println("Hello World!"); + + //test (); + + // + TagsDataById datas = new TagsDataById (); + TagData tag; + + // Populate attributes of Test 03. + tag = new TagData (); + tag.setContent ("hello"); + tag.getAttributes ().appendAttribute ("style", "background: blue;"); + tag.getAttributes ().appendAttribute ("style", "foreground: red;"); + tag.getAttributes ().setAttribute ("class", "totoClass"); + datas.put ("test03", tag); + + StringBuffer html; + StringBuffer errorMessage; + + errorMessage = new StringBuffer (); + html = Presenter.doXid ("bla", datas, "", errorMessage); + + System.out.println ("----------------------------"); + System.out.println (html); + System.out.println ("----------------------------"); } } diff --git a/webapp-examples/WEB-INF/classes/xid/Test.java b/webapp-examples/WEB-INF/classes/xid/Test.java index b9818ee..20c2945 100644 --- a/webapp-examples/WEB-INF/classes/xid/Test.java +++ b/webapp-examples/WEB-INF/classes/xid/Test.java @@ -131,35 +131,6 @@ public class Test extends HttpServlet log.info ("Exit"); } - - - /* - * - */ - static public String extractBody (StringBuffer data) - { - String result = null; - - // Extraire le contenu du body. - String dataLowerCase = data.toString ().toLowerCase (); - - int startBody = dataLowerCase.indexOf ("") + 6; - int endBody = dataLowerCase.indexOf (""); - - // Note: as failed search is improbable, no care about complexity - // in failed search case. - if ((startBody == -1) || (endBody == -1)) - { - result = null; - } - else - { - result = data.substring (startBody, endBody).trim (); - } - - // - return (result); - } } // //////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/webapp-examples/WEB-INF/lib/xid.jar b/webapp-examples/WEB-INF/lib/xid.jar index 9fb73b72affb179cb1447848f232f46eee0376d0..0235c4376407eb50d1c8be4cf89f9b1872526f22 100644 GIT binary patch delta 8309 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 delta 8249 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