details:   /erp/devel/pi/rev/0db5542af927
changeset: 8011:0db5542af927
user:      Asier Lostalé <asier.lostale <at> openbravo.com>
date:      Tue Aug 03 16:22:35 2010 +0200
summary:   fixed issue 14086: Identify 3.0 instances in about box and in 
heartbeat

  About box now shows information about 3.0 template in case it is installed
  this information is also send in the heartbeats.

diffstat:

 src-db/database/sourcedata/AD_TEXTINTERFACES.xml         |  88 ++++++++--------
 src/org/openbravo/erpCommon/ad_forms/About.html          |  40 +++---
 src/org/openbravo/erpCommon/ad_forms/About.java          |  88 +++++++++++++--
 src/org/openbravo/erpCommon/ad_forms/About.xml           |  14 +-
 src/org/openbravo/erpCommon/ad_forms/About_data.xsql     |  52 ---------
 src/org/openbravo/erpCommon/modules/ModuleTree_data.xsql |  22 ++-
 src/org/openbravo/erpCommon/utility/OBVersion.java       |  66 ++++++++++++
 src/org/openbravo/erpCommon/utility/SystemInfo.java      |   5 +-
 src/org/openbravo/erpCommon/utility/SystemInfo_data.xsql |  10 +-
 9 files changed, 232 insertions(+), 153 deletions(-)

diffs (truncated from 609 to 300 lines):

diff -r 38158faa4a84 -r 0db5542af927 
src-db/database/sourcedata/AD_TEXTINTERFACES.xml
--- a/src-db/database/sourcedata/AD_TEXTINTERFACES.xml  Tue Aug 03 14:54:55 
2010 +0200
+++ b/src-db/database/sourcedata/AD_TEXTINTERFACES.xml  Tue Aug 03 16:22:35 
2010 +0200
@@ -4247,17 +4247,6 @@
 <!--804325-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--804325--></AD_TEXTINTERFACES>
 
-<!--804326--><AD_TEXTINTERFACES>
-<!--804326-->  <AD_TEXTINTERFACES_ID><![CDATA[804326]]></AD_TEXTINTERFACES_ID>
-<!--804326-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--804326-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--804326-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--804326-->  <TEXT><![CDATA[For more information on our licensing, please 
consult]]></TEXT>
-<!--804326-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
-<!--804326-->  <ISUSED><![CDATA[Y]]></ISUSED>
-<!--804326-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--804326--></AD_TEXTINTERFACES>
-
 <!--804327--><AD_TEXTINTERFACES>
 <!--804327-->  <AD_TEXTINTERFACES_ID><![CDATA[804327]]></AD_TEXTINTERFACES_ID>
 <!--804327-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -4269,28 +4258,6 @@
 <!--804327-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--804327--></AD_TEXTINTERFACES>
 
-<!--804331--><AD_TEXTINTERFACES>
-<!--804331-->  <AD_TEXTINTERFACES_ID><![CDATA[804331]]></AD_TEXTINTERFACES_ID>
-<!--804331-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--804331-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--804331-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--804331-->  <TEXT><![CDATA[Translator]]></TEXT>
-<!--804331-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
-<!--804331-->  <ISUSED><![CDATA[Y]]></ISUSED>
-<!--804331-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--804331--></AD_TEXTINTERFACES>
-
-<!--804333--><AD_TEXTINTERFACES>
-<!--804333-->  <AD_TEXTINTERFACES_ID><![CDATA[804333]]></AD_TEXTINTERFACES_ID>
-<!--804333-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--804333-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--804333-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--804333-->  <TEXT><![CDATA[A special thanks to all those who translated 
Openbravo ERP:]]></TEXT>
-<!--804333-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
-<!--804333-->  <ISUSED><![CDATA[Y]]></ISUSED>
-<!--804333-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--804333--></AD_TEXTINTERFACES>
-
 <!--804382--><AD_TEXTINTERFACES>
 <!--804382-->  <AD_TEXTINTERFACES_ID><![CDATA[804382]]></AD_TEXTINTERFACES_ID>
 <!--804382-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -19413,17 +19380,6 @@
 <!--6E0B3322B52A14C6E040007F010136CA-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--6E0B3322B52A14C6E040007F010136CA--></AD_TEXTINTERFACES>
 
-<!--6E0B3322B52B14C6E040007F010136CA--><AD_TEXTINTERFACES>
-<!--6E0B3322B52B14C6E040007F010136CA-->  
<AD_TEXTINTERFACES_ID><![CDATA[6E0B3322B52B14C6E040007F010136CA]]></AD_TEXTINTERFACES_ID>
-<!--6E0B3322B52B14C6E040007F010136CA-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
-<!--6E0B3322B52B14C6E040007F010136CA-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
-<!--6E0B3322B52B14C6E040007F010136CA-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
-<!--6E0B3322B52B14C6E040007F010136CA-->  <TEXT><![CDATA[Revision ID:]]></TEXT>
-<!--6E0B3322B52B14C6E040007F010136CA-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
-<!--6E0B3322B52B14C6E040007F010136CA-->  <ISUSED><![CDATA[Y]]></ISUSED>
-<!--6E0B3322B52B14C6E040007F010136CA-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
-<!--6E0B3322B52B14C6E040007F010136CA--></AD_TEXTINTERFACES>
-
 <!--6E59421C5B32AB25E040007F01016FD1--><AD_TEXTINTERFACES>
 <!--6E59421C5B32AB25E040007F01016FD1-->  
<AD_TEXTINTERFACES_ID><![CDATA[6E59421C5B32AB25E040007F01016FD1]]></AD_TEXTINTERFACES_ID>
 <!--6E59421C5B32AB25E040007F01016FD1-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -21182,6 +21138,50 @@
 <!--8B6C738A9E948161E040007F010131B7-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--8B6C738A9E948161E040007F010131B7--></AD_TEXTINTERFACES>
 
+<!--8CEBE8DADEA59992E040007F01014AE9--><AD_TEXTINTERFACES>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  
<AD_TEXTINTERFACES_ID><![CDATA[8CEBE8DADEA59992E040007F01014AE9]]></AD_TEXTINTERFACES_ID>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  <TEXT><![CDATA[Core Revision 
ID:]]></TEXT>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  <ISUSED><![CDATA[Y]]></ISUSED>
+<!--8CEBE8DADEA59992E040007F01014AE9-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--8CEBE8DADEA59992E040007F01014AE9--></AD_TEXTINTERFACES>
+
+<!--8CEBE8DADEA89992E040007F01014AE9--><AD_TEXTINTERFACES>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  
<AD_TEXTINTERFACES_ID><![CDATA[8CEBE8DADEA89992E040007F01014AE9]]></AD_TEXTINTERFACES_ID>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  <TEXT><![CDATA[This instance includes 
the following modules:]]></TEXT>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  <ISUSED><![CDATA[Y]]></ISUSED>
+<!--8CEBE8DADEA89992E040007F01014AE9-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--8CEBE8DADEA89992E040007F01014AE9--></AD_TEXTINTERFACES>
+
+<!--8CEBE8DADEAB9992E040007F01014AE9--><AD_TEXTINTERFACES>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  
<AD_TEXTINTERFACES_ID><![CDATA[8CEBE8DADEAB9992E040007F01014AE9]]></AD_TEXTINTERFACES_ID>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  <TEXT><![CDATA[. Created by:]]></TEXT>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  <ISUSED><![CDATA[Y]]></ISUSED>
+<!--8CEBE8DADEAB9992E040007F01014AE9-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--8CEBE8DADEAB9992E040007F01014AE9--></AD_TEXTINTERFACES>
+
+<!--8CEBE8DADEAE9992E040007F01014AE9--><AD_TEXTINTERFACES>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  
<AD_TEXTINTERFACES_ID><![CDATA[8CEBE8DADEAE9992E040007F01014AE9]]></AD_TEXTINTERFACES_ID>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  <TEXT><![CDATA[For more information 
on our licensing, please consult ]]></TEXT>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  
<FILENAME><![CDATA[/org/openbravo/erpCommon/ad_forms/About.html]]></FILENAME>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  <ISUSED><![CDATA[Y]]></ISUSED>
+<!--8CEBE8DADEAE9992E040007F01014AE9-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--8CEBE8DADEAE9992E040007F01014AE9--></AD_TEXTINTERFACES>
+
 <!--8E2EEBC582974948836ACA2751E8A103--><AD_TEXTINTERFACES>
 <!--8E2EEBC582974948836ACA2751E8A103-->  
<AD_TEXTINTERFACES_ID><![CDATA[8E2EEBC582974948836ACA2751E8A103]]></AD_TEXTINTERFACES_ID>
 <!--8E2EEBC582974948836ACA2751E8A103-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 38158faa4a84 -r 0db5542af927 
src/org/openbravo/erpCommon/ad_forms/About.html
--- a/src/org/openbravo/erpCommon/ad_forms/About.html   Tue Aug 03 14:54:55 
2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/About.html   Tue Aug 03 16:22:35 
2010 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2009 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2010 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -100,7 +100,7 @@
                   <td>Version number:</td><td>&nbsp;<td><td 
id="versionNo">xx2.50.111</td>
                 </tr>
                 <tr>
-                  <td>Revision ID:</td><td>&nbsp;<td><td 
id="versionId">xxaaaabbbc</td>
+                  <td>Core Revision ID:</td><td>&nbsp;<td><td 
id="versionId">xxaaaabbbc</td>
                 <tr>
                 <tr id="paramOPSInfo">
                   <td>Instance Purpose:</td><td>&nbsp;<td><td 
id="paraOPSPurpose">xx</td>
@@ -115,6 +115,24 @@
             <td>
               <p class="Wide_Paragraph">Copyright&nbsp;&copy;&nbsp;Openbravo, 
S.L.U.&nbsp;2001-2010</p>
               <p class="Wide_Paragraph">This product has been created by 
Openbravo S.L.U. and is distributed under the&nbsp;<span class="LabelText"><a 
class="LabelLink_noicon" href="http://www.openbravo.com/legal/license.html"; 
target="_blank">Openbravo Public 
License</a></span>&nbsp;(http://www.openbravo.com/legal/license.html)</p>
+            </td>
+          </tr>
+          <tr>
+            <td>
+              <p class="Wide_Paragraph">This instance includes the following 
modules:</p>
+              <div id="installedModulesDetail">
+                <div class="Regular_Paragraph">
+                  <span 
id="modTab">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>-&nbsp;</span>
+                  <span id="moduleName">xxModule a</span>
+                  <span id="moduleVersion">xx1.0.0</span>
+                  <span>. Created by: </span>
+                  <span id="moduleAuthor">xxAuthor</span>
+                </div>
+              </div>
+            </td>
+          </tr>
+          <tr>
+            <td>
               <p class="Wide_Paragraph">This product incorporates software 
created by third parties and distributed under free software licenses, 
including:</p>
               <p 
class="Regular_Paragraph">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;ComPiere
 Inc.</p>
               <p 
class="Regular_Paragraph">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;The
 Apache Foundation</p>
@@ -126,24 +144,8 @@
               <p 
class="Regular_Paragraph">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;Dynarch</p>
               <p 
class="Regular_Paragraph">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;DHTMLGoodies</p>
               <p class="Wide_Paragraph">Openbravo and the openbravo logo are 
trademarks of Openbravo S.L.U. Names and distinctive signs of other parties are 
trademarks of their respective owners.</p>
-              <p class="Wide_Paragraph">For more information on our licensing, 
please consult <span class="LabelText"><a class="LabelLink_noicon" 
href="http://www.openbravo.com/legal/license.html"; 
target="_blank"></span>www.openbravo.com/legal/license.html</a></p>
+              <p class="Wide_Paragraph">For more information on our licensing, 
please consult&nbsp;<span class="LabelText"><a class="LabelLink_noicon" 
href="http://www.openbravo.com/legal/license.html"; 
target="_blank">www.openbravo.com/legal/license.html</a></span></p>
               <p class="Regular_Paragraph">Thank you to all contributors.</p>
-              <div id="discard">
-              <p class="Regular_Paragraph">A special thanks to all those who 
translated Openbravo ERP:</p>
-                <table>
-                 <tr>
-                   <td class="Regular_Paragraph">Language</td>
-                   <td class="Regular_Paragraph">Translator</td>
-                 </tr>
-                 <div id="sectionDetail">
-                   <tr>
-                     <td class="Regular_Paragraph" id="fieldLang">xxLA_la</td>
-                     <td class="Regular_Paragraph" 
id="fieldTranslator">xxyyxx</td>
-                   </tr>
-                 </div>
-                </table>
-              </div>
-
             </td>
           </tr>
 
diff -r 38158faa4a84 -r 0db5542af927 
src/org/openbravo/erpCommon/ad_forms/About.java
--- a/src/org/openbravo/erpCommon/ad_forms/About.java   Tue Aug 03 14:54:55 
2010 +0200
+++ b/src/org/openbravo/erpCommon/ad_forms/About.java   Tue Aug 03 16:22:35 
2010 +0200
@@ -11,7 +11,7 @@
  * under the License. 
  * The Original Code is Openbravo ERP. 
  * The Initial Developer of the Original Code is Openbravo SLU 
- * All portions are Copyright (C) 2001-2009 Openbravo SLU 
+ * All portions are Copyright (C) 2001-2010 Openbravo SLU 
  * All Rights Reserved. 
  * Contributor(s):  ______________________________________.
  ************************************************************************
@@ -21,6 +21,9 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -29,7 +32,11 @@
 import org.openbravo.base.secureApp.HttpSecureAppServlet;
 import org.openbravo.base.secureApp.VariablesSecureApp;
 import org.openbravo.dal.core.OBContext;
+import org.openbravo.data.FieldProvider;
+import org.openbravo.erpCommon.modules.ModuleTreeData;
 import org.openbravo.erpCommon.obps.ActivationKey;
+import org.openbravo.erpCommon.utility.FieldProviderFactory;
+import org.openbravo.erpCommon.utility.OBVersion;
 import org.openbravo.erpCommon.utility.Utility;
 import org.openbravo.xmlEngine.XmlDocument;
 
@@ -56,14 +63,9 @@
       ActivationKey ak = new ActivationKey();
       response.setContentType("text/html; charset=UTF-8");
       PrintWriter out = response.getWriter();
-      String discard[] = { "", "" };
-      AboutData[] data = AboutData.selectTranslators(this);
-      AboutData ver = AboutData.select(this);
+      String discard[] = { "" };
       XmlDocument xmlDocument = null;
-      if (data.length == 0) {
-        discard[0] = "discard";
-        data = AboutData.set();
-      }
+
       String licenseInfo = "";
       if (ActivationKey.isActiveInstance()) {
         licenseInfo = Utility.messageBD(this, "OPSLicensedTo", 
vars.getLanguage()) + " "
@@ -71,22 +73,21 @@
       } else {
         licenseInfo = Utility.messageBD(this, "OPSCommunityEdition", 
vars.getLanguage());
 
-        discard[1] = "paramOPSInfo";
+        discard[0] = "paramOPSInfo";
       }
       xmlDocument = 
xmlEngine.readXmlTemplate("org/openbravo/erpCommon/ad_forms/About", discard)
           .createXmlDocument();
 
-      String version = ver.version.substring(0, ver.version.lastIndexOf(".")) 
+ " "
-          + ver.versionLabel;
+      OBVersion version = new OBVersion();
 
       xmlDocument.setParameter("directory", "var baseDirectory = \"" + 
strReplaceWith + "/\";\n");
       xmlDocument.setParameter("language", "defaultLang=\"" + 
vars.getLanguage() + "\";");
       xmlDocument.setParameter("theme", vars.getTheme());
       xmlDocument.setParameter("paramLicensedTo", licenseInfo);
-      xmlDocument.setData("structure1", data);
-      xmlDocument.setParameter("ver", version);
-      xmlDocument.setParameter("versionId", ver.versionId);
-      xmlDocument.setParameter("versionNo", ver.version);
+      xmlDocument.setParameter("ver", version.getMajorVersion() + " " + 
version.getMP());
+      xmlDocument.setParameter("versionId", version.getVersionId());
+      xmlDocument.setParameter("versionNo", version.getVersionNumber());
+      xmlDocument.setData("installedModules", getInstalledModules());
 
       if (ActivationKey.isActiveInstance()) {
         xmlDocument.setParameter("paraOPSPurpose", 
ak.getPurpose(vars.getLanguage()));
@@ -101,6 +102,63 @@
 
   }
 
+  /**
+   * Obtains a list of all modules installed in the instance.
+   * 
+   * @return
+   */
+  private FieldProvider[] getInstalledModules() {
+    List<HashMap<String, String>> installedModules = new 
ArrayList<HashMap<String, String>>();
+    try {
+      ModuleTreeData[] rootNodes = ModuleTreeData.select(this, "");
+      for (ModuleTreeData module : rootNodes) {
+        installedModules.add(getModuleHashMap(module, 1));
+        installedModules.addAll(getSubTree(module, 2));
+      }
+    } catch (ServletException e) {
+      log4j.error("Error obtaining installed modules", e);
+    }
+    return FieldProviderFactory.getFieldProviderArray(installedModules);
+  }
+
+  /**
+   * Obtains the list of the child modules for a parent module. This method is 
called from
+   * getInstalledModules and it composes a tree of inclusions.
+   */
+  private List<HashMap<String, String>> getSubTree(ModuleTreeData 
parentModule, int level) {
+    List<HashMap<String, String>> installedModules = new 
ArrayList<HashMap<String, String>>();

------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to