You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2013/03/03 13:00:14 UTC

svn commit: r1452030 [7/10] - in /ofbiz/branches/webhelp-2012-12-07: ./ applications/accounting/ applications/accounting/script/org/ofbiz/accounting/test/ applications/accounting/src/org/ofbiz/accounting/tax/ applications/accounting/testdef/ applicatio...

Modified: ofbiz/branches/webhelp-2012-12-07/applications/product/entitydef/entitymodel.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/applications/product/entitydef/entitymodel.xml?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/applications/product/entitydef/entitymodel.xml (original)
+++ ofbiz/branches/webhelp-2012-12-07/applications/product/entitydef/entitymodel.xml Sun Mar  3 12:00:12 2013
@@ -3758,6 +3758,7 @@ under the License.
       <field name="showTaxIsExempt" type="indicator"><description>default Y; if set to N do not show isExempt checkbox for PartyTaxAuthInfo, always force to N</description></field>
       <field name="vatTaxAuthGeoId" type="id"></field>
       <field name="vatTaxAuthPartyId" type="id"></field>
+      <field name="calcTaxAfterPromotion" type="indicator"><description>For execute promotions and price rules before running taxation rules</description></field>
       <field name="enableAutoSuggestionList" type="indicator"><description>The auto-suggestion list is a special ShoppingList that the addSuggestionsToShoppingList service will maintain for cross-sells of ordered items.</description></field>
       <field name="enableDigProdUpload" type="indicator"></field>
       <field name="prodSearchExcludeVariants" type="indicator"><description>default Y; if set to Y an additional constraint will of isVariant!=Y will be added to all product searches for the store</description></field>

Modified: ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/CatalogUrlFilter.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/CatalogUrlFilter.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/CatalogUrlFilter.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/CatalogUrlFilter.java Sun Mar  3 12:00:12 2013
@@ -35,9 +35,9 @@ import javolution.util.FastList;
 
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.StringUtil;
+import org.ofbiz.base.util.StringUtil.StringWrapper;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.base.util.StringUtil.StringWrapper;
 import org.ofbiz.common.UrlServletHelper;
 import org.ofbiz.entity.Delegator;
 import org.ofbiz.entity.GenericEntityException;
@@ -342,7 +342,7 @@ public class CatalogUrlFilter extends Co
             GenericValue productCategory = delegator.findOne("ProductCategory", UtilMisc.toMap("productCategoryId", productCategoryId), true);
             CategoryContentWrapper wrapper = new CategoryContentWrapper(productCategory, request);
             List<String> trail = CategoryWorker.getTrail(request);
-            return makeCategoryUrl(delegator, wrapper, trail, request.getSession().getServletContext().getContextPath(), previousCategoryId, productCategoryId, productId, viewSize, viewIndex, viewSort, searchString);
+            return makeCategoryUrl(delegator, wrapper, trail, request.getContextPath(), previousCategoryId, productCategoryId, productId, viewSize, viewIndex, viewSort, searchString);
         } catch (GenericEntityException e) {
             Debug.logWarning(e, "Cannot create category's URL for: " + productCategoryId, module);
             return redirectUrl;
@@ -417,7 +417,7 @@ public class CatalogUrlFilter extends Co
             GenericValue product = delegator.findOne("Product", UtilMisc.toMap("productId", productId), true);
             ProductContentWrapper wrapper = new ProductContentWrapper(product, request);
             List<String> trail = CategoryWorker.getTrail(request);
-            url = makeProductUrl(delegator, wrapper, trail, request.getSession().getServletContext().getContextPath(), previousCategoryId, productCategoryId, productId);
+            url = makeProductUrl(delegator, wrapper, trail, request.getContextPath(), previousCategoryId, productCategoryId, productId);
         } catch (GenericEntityException e) {
             Debug.logWarning(e, "Cannot create product's URL for: " + productId, module);
             return redirectUrl;

Modified: ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/OfbizCatalogUrlTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/OfbizCatalogUrlTransform.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/OfbizCatalogUrlTransform.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/applications/product/src/org/ofbiz/product/category/OfbizCatalogUrlTransform.java Sun Mar  3 12:00:12 2013
@@ -47,34 +47,33 @@ public class OfbizCatalogUrlTransform im
 
     @Override
     @SuppressWarnings("unchecked")
-    public Writer getWriter(final Writer out, final Map args)
-            throws TemplateModelException, IOException {
+    public Writer getWriter(final Writer out, final Map args) throws TemplateModelException, IOException {
         final StringBuilder buf = new StringBuilder();
         return new Writer(out) {
-            
+
             @Override
             public void write(char[] cbuf, int off, int len) throws IOException {
                 buf.append(cbuf, off, len);
             }
-            
+
             @Override
             public void flush() throws IOException {
                 out.flush();
             }
-            
+
             @Override
             public void close() throws IOException {
                 try {
-                Environment env = Environment.getCurrentEnvironment();
-                BeanModel req = (BeanModel) env.getVariable("request");
-                if (req != null) {
-                    String productId = getStringArg(args, "productId");
-                    String currentCategoryId = getStringArg(args, "currentCategoryId");
-                    String previousCategoryId = getStringArg(args, "previousCategoryId");
-                    HttpServletRequest request = (HttpServletRequest) req.getWrappedObject();
-                    String catalogUrl = CatalogUrlServlet.makeCatalogUrl(request, productId, currentCategoryId, previousCategoryId);
-                    out.write(catalogUrl);
-                }
+                    Environment env = Environment.getCurrentEnvironment();
+                    BeanModel req = (BeanModel) env.getVariable("request");
+                    if (req != null) {
+                        String productId = getStringArg(args, "productId");
+                        String currentCategoryId = getStringArg(args, "currentCategoryId");
+                        String previousCategoryId = getStringArg(args, "previousCategoryId");
+                        HttpServletRequest request = (HttpServletRequest) req.getWrappedObject();
+                        String catalogUrl = CatalogUrlServlet.makeCatalogUrl(request, productId, currentCategoryId, previousCategoryId);
+                        out.write(catalogUrl);
+                    }
                 } catch (TemplateModelException e) {
                     throw new IOException(e.getMessage());
                 }

Modified: ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/facility/EditContactMech.ftl
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/facility/EditContactMech.ftl?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/facility/EditContactMech.ftl (original)
+++ ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/facility/EditContactMech.ftl Sun Mar  3 12:00:12 2013
@@ -215,7 +215,7 @@ under the License.
     </tr>
     <tr>
       <td>&nbsp;</td>
-      <td>[${uiLabelMap.PartyCountryCode}] [${uiLabelMap.PartyAreaCode}] [${uiLabelMap.PartyContactNumber}] [${uiLabelMap.PartyExtension}]</td>
+      <td>[${uiLabelMap.CommonCountryCode}] [${uiLabelMap.PartyAreaCode}] [${uiLabelMap.PartyContactNumber}] [${uiLabelMap.PartyExtension}]</td>
     </tr>
   <#elseif "EMAIL_ADDRESS" = mechMap.contactMechTypeId?if_exists>
     <tr>

Modified: ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/shipment/EditShipmentRouteSegments.ftl
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/shipment/EditShipmentRouteSegments.ftl?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/shipment/EditShipmentRouteSegments.ftl (original)
+++ ofbiz/branches/webhelp-2012-12-07/applications/product/webapp/facility/shipment/EditShipmentRouteSegments.ftl Sun Mar  3 12:00:12 2013
@@ -35,7 +35,7 @@ under the License.
                 <div>${uiLabelMap.ProductOriginDestinationPhoneId}</div>
                 <div>${uiLabelMap.ProductShipmentThirdPartyAccountNumber}</div>
                 <div>${uiLabelMap.ProductShipmentThirdPartyPostalCode}</div>
-                <div>${uiLabelMap.ProductShipmentThirdPartyCountryCode}</div>
+                <div>${uiLabelMap.ProductShipmentThirdCommonCountryCode}</div>
             </td>
             <td valign="top">
                 <div>${uiLabelMap.ProductShipmentFedexHomeDeliveryTypeDate}</div>

Modified: ofbiz/branches/webhelp-2012-12-07/applications/product/widget/catalog/ProductStoreForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/applications/product/widget/catalog/ProductStoreForms.xml?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/applications/product/widget/catalog/ProductStoreForms.xml (original)
+++ ofbiz/branches/webhelp-2012-12-07/applications/product/widget/catalog/ProductStoreForms.xml Sun Mar  3 12:00:12 2013
@@ -276,6 +276,9 @@
         </field>
         <field name="vatTaxAuthGeoId"><lookup target-form-name="LookupGeo"/></field>
         <field name="vatTaxAuthPartyId"><lookup target-form-name="LookupPartyName"/></field>
+        <field name="calcTaxAfterPromotion">
+            <drop-down allow-empty="false" no-current-selected-key="N"><option key="Y" description="${uiLabelMap.CommonY}"/><option key="N" description="${uiLabelMap.CommonN}"/></drop-down>
+        </field>
         <field name="prodSearchExcludeVariants">
             <drop-down allow-empty="false" no-current-selected-key="Y"><option key="Y" description="${uiLabelMap.CommonY}"/><option key="N" description="${uiLabelMap.CommonN}"/></drop-down>
         </field>
@@ -402,6 +405,7 @@
                 <sort-field name="showTaxIsExempt"/>
                 <sort-field name="vatTaxAuthGeoId"/>
                 <sort-field name="vatTaxAuthPartyId"/>
+                <sort-field name="calcTaxAfterPromotion"/>
             </field-group>
             <field-group title="${uiLabelMap.CommonVisitors}" collapsible="true" initially-collapsed="true">
                 <sort-field name="autoApproveReviews"/>

Modified: ofbiz/branches/webhelp-2012-12-07/framework/common/config/CommonUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/common/config/CommonUiLabels.xml?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/common/config/CommonUiLabels.xml (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/common/config/CommonUiLabels.xml Sun Mar  3 12:00:12 2013
@@ -2071,6 +2071,56 @@
         <value xml:lang="zh-CN">国家</value>
         <value xml:lang="zh-TW">國家</value>
     </property>
+    <property key="CommonCountryCode">
+        <value xml:lang="cs">Mezinárodní předvolba</value>
+        <value xml:lang="de">Landesvorwahl</value>
+        <value xml:lang="en">Country Code</value>
+        <value xml:lang="es">Código de país</value>
+        <value xml:lang="fr">Code pays</value>
+        <value xml:lang="hi_IN">देश कोड</value>
+        <value xml:lang="it">Codice paese</value>
+        <value xml:lang="ja">国コード</value>
+        <value xml:lang="nl">Land Kode</value>
+        <value xml:lang="pt_BR">Código do país</value>
+        <value xml:lang="pt_PT">Código do País</value>
+        <value xml:lang="ro">Cod Tara</value>
+        <value xml:lang="ru">Код страны</value>
+        <value xml:lang="th">รหัสประเทศ</value>
+        <value xml:lang="vi">Mã nước</value>
+        <value xml:lang="zh">国家代码</value>
+        <value xml:lang="zh_TW">國碼</value>
+    </property>
+    <property key="CommonCountryCodeMissing">
+        <value xml:lang="de">Landesvorwahl fehlt</value>
+        <value xml:lang="en">Country code is Missing</value>
+        <value xml:lang="fr">Le code pays manque</value>
+        <value xml:lang="hi_IN">देश कोड गायब है</value>
+        <value xml:lang="it">Codice paese è mancante</value>
+        <value xml:lang="ja">国コードが正しくありません</value>
+        <value xml:lang="pt_BR">Código do país está em branco</value>
+        <value xml:lang="vi">Mã nước chưa được nhập</value>
+        <value xml:lang="zh">找不到国家代码</value>
+        <value xml:lang="zh_TW">沒有國碼</value>
+    </property>
+    <property key="CommonCountryMissing">
+        <value xml:lang="cs">Chybí země</value>
+        <value xml:lang="de">Land fehlt</value>
+        <value xml:lang="en">Country is Missing</value>
+        <value xml:lang="es">Falta el País</value>
+        <value xml:lang="fr">Pays absent</value>
+        <value xml:lang="hi_IN">देश नही है</value>
+        <value xml:lang="it">Paese mancante</value>
+        <value xml:lang="ja">国が正しくありません</value>
+        <value xml:lang="nl">Naam van het land mist</value>
+        <value xml:lang="pt_BR">País está em branco</value>
+        <value xml:lang="pt_PT">País em falta</value>
+        <value xml:lang="ro">Tara lipseste </value>
+        <value xml:lang="ru">Страна не указана</value>
+        <value xml:lang="th">ไม่ได้ใส่ประเทศ</value>
+        <value xml:lang="vi">Thông tin Đất nước chưa được nhập</value>
+        <value xml:lang="zh">找不到国家</value>
+        <value xml:lang="zh_TW">沒有國家</value>
+    </property>    
     <property key="CommonCounty">
         <value xml:lang="ar">ولاية</value>
         <value xml:lang="de">Kreis/Bezirk</value>

Modified: ofbiz/branches/webhelp-2012-12-07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java Sun Mar  3 12:00:12 2013
@@ -49,6 +49,7 @@ import org.ofbiz.entity.transaction.Gene
 import org.ofbiz.entity.transaction.TransactionUtil;
 import org.ofbiz.entity.util.EntityFindOptions;
 import org.ofbiz.entity.util.EntityListIterator;
+import org.ofbiz.entity.util.EntitySaxReader;
 
 public class EntityTestSuite extends EntityTestCase {
 
@@ -696,4 +697,121 @@ public class EntityTestSuite extends Ent
             Debug.logError(e, module);
         }
     }*/
+
+    /*
+     * Tests EntitySaxReader, verification loading data with tag create, create-update, create-replace, delete 
+     */
+    public void testEntitySaxReaderCreation() throws Exception {
+        String xmlContentLoad = 
+                "<TestingType testingTypeId=\"JUNIT-TEST\" description=\"junit test\"/>" +
+                "<create>" +
+                "    <TestingType testingTypeId=\"JUNIT-TEST2\" description=\"junit test\"/>" +
+                "    <Testing testingId=\"T1\" testingTypeId=\"JUNIT-TEST\" testingName=\"First test\" testingSize=\"10\" testingDate=\"2010-01-01 00:00:00\"/>" +
+                "</create>" +
+                "<Testing testingId=\"T2\" testingTypeId=\"JUNIT-TEST2\" testingName=\"Second test\" testingSize=\"20\" testingDate=\"2010-02-01 00:00:00\"/>";
+        EntitySaxReader reader = new EntitySaxReader(delegator);
+        long numberLoaded = reader.parse(xmlContentLoad);
+        assertEquals("Create Entity loaded ", numberLoaded, 4);
+        GenericValue t1 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T1"), false);
+        GenericValue t2 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T2"), true);
+        assertNotNull("Create Testing(T1)", t1);
+        assertEquals("Create Testing(T1).testingTypeId", "JUNIT-TEST", t1.getString("testingTypeId"));
+        assertEquals("Create Testing(T1).testingName", "First test", t1.getString("testingName"));
+        assertEquals("Create Testing(T1).testingSize", Long.valueOf(10), t1.getLong("testingSize"));
+        assertEquals("Create Testing(T1).testingDate", UtilDateTime.toTimestamp("01/01/2010 00:00:00"), t1.getTimestamp("testingDate"));
+
+        assertNotNull("Create Testing(T2)", t2);
+        assertEquals("Create Testing(T2).testingTypeId", "JUNIT-TEST2", t2.getString("testingTypeId"));
+        assertEquals("Create Testing(T2).testingName", "Second test", t2.getString("testingName"));
+        assertEquals("Create Testing(T2).testingSize", Long.valueOf(20), t2.getLong("testingSize"));
+        assertEquals("Create Testing(T2).testingDate", UtilDateTime.toTimestamp("02/01/2010 00:00:00"), t2.getTimestamp("testingDate"));
+    }
+
+    public void testEntitySaxReaderCreateSkip() throws Exception {
+        String xmlContentLoad =
+                "<create>" +
+                "    <Testing testingId=\"T1\" testingName=\"First test update\" testingSize=\"20\"/>" +
+                "</create>";
+        EntitySaxReader reader = new EntitySaxReader(delegator);
+        long numberLoaded = reader.parse(xmlContentLoad);
+        assertEquals("Create Skip Entity loaded ", numberLoaded, 1);
+        GenericValue t1 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T1"), false);
+        assertNotNull("Create Skip Testing(T1)", t1);
+        assertEquals("Create Skip Testing(T1).testingTypeId", "JUNIT-TEST", t1.getString("testingTypeId"));
+        assertEquals("Create Skip Testing(T1).testingName", "First test", t1.getString("testingName"));
+        assertEquals("Create Skip Testing(T1).testingSize", Long.valueOf(10), t1.getLong("testingSize"));
+        assertEquals("Create Skip Testing(T1).testingDate", UtilDateTime.toTimestamp("01/01/2010 00:00:00"), t1.getTimestamp("testingDate"));
+    }
+
+    public void testEntitySaxReaderUpdate() throws Exception {
+        String xmlContentLoad =
+                "<create-update>" +
+                "    <Testing testingId=\"T1\" testingName=\"First test update\" testingSize=\"20\"/>" +
+                "    <Testing testingId=\"T3\" testingTypeId=\"JUNIT-TEST\" testingName=\"Third test\" testingSize=\"30\" testingDate=\"2010-03-01 00:00:00\"/>" +
+                "</create-update>";
+        EntitySaxReader reader = new EntitySaxReader(delegator);
+        long numberLoaded = reader.parse(xmlContentLoad);
+        assertEquals("Update Entity loaded ", numberLoaded, 2);
+        GenericValue t1 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T1"), false);
+        GenericValue t3 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T3"), false);
+        assertNotNull("Update Testing(T1)", t1);
+        assertEquals("Update Testing(T1).testingTypeId", "JUNIT-TEST", t1.getString("testingTypeId"));
+        assertEquals("Update Testing(T1).testingName", "First test update", t1.getString("testingName"));
+        assertEquals("Update Testing(T1).testingSize", Long.valueOf(20), t1.getLong("testingSize"));
+        assertEquals("Update Testing(T1).testingDate", UtilDateTime.toTimestamp("01/01/2010 00:00:00"), t1.getTimestamp("testingDate"));
+
+        assertNotNull("Update Testing(T3)", t3);
+        assertEquals("Update Testing(T3).testingTypeId", "JUNIT-TEST", t3.getString("testingTypeId"));
+        assertEquals("Update Testing(T3).testingName", "Third test", t3.getString("testingName"));
+        assertEquals("Update Testing(T3).testingSize", Long.valueOf(30), t3.getLong("testingSize"));
+        assertEquals("Update Testing(T3).testingDate", UtilDateTime.toTimestamp("03/01/2010 00:00:00"), t3.getTimestamp("testingDate"));
+    }
+
+    public void testEntitySaxReaderReplace() throws Exception {
+        String xmlContentLoad =
+                "<create-replace>" +
+                "    <Testing testingTypeId=\"JUNIT-TEST\" testingId=\"T1\" testingName=\"First test replace\" />" +
+                "</create-replace>" +
+                "<Testing testingId=\"T2\" testingName=\"Second test update\"/>";
+        EntitySaxReader reader = new EntitySaxReader(delegator);
+        long numberLoaded = reader.parse(xmlContentLoad);
+        assertEquals("Replace Entity loaded ", numberLoaded, 2);
+        GenericValue t1 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T1"), false);
+        GenericValue t2 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T2"), false);
+        assertNotNull("Replace Testing(T1)", t1);
+        assertEquals("Replace Testing(T1).testingTypeId", "JUNIT-TEST", t1.getString("testingTypeId"));
+        assertEquals("Replace Testing(T1).testingName", "First test replace", t1.getString("testingName"));
+        assertNull("Replace Testing(T1).testingSize", t1.getLong("testingSize"));
+        assertNull("Replace Testing(T1).testingDate", t1.getTimestamp("testingDate"));
+
+        assertNotNull("Replace Testing(T2)", t2);
+        assertEquals("Replace Testing(T2).testingTypeId", "JUNIT-TEST2", t2.getString("testingTypeId"));
+        assertEquals("Replace Testing(T2).testingName", "Second test update", t2.getString("testingName"));
+        assertEquals("Replace Testing(T2).testingSize", Long.valueOf(20), t2.getLong("testingSize"));
+        assertEquals("Replace Testing(T2).testingDate", UtilDateTime.toTimestamp("02/01/2010 00:00:00"), t2.getTimestamp("testingDate"));
+    }
+
+    public void testEntitySaxReaderDelete() throws Exception {
+        String xmlContentLoad = 
+                        "<delete>" +
+                        "    <Testing testingId=\"T1\"/>" +
+                        "    <Testing testingId=\"T2\"/>" +
+                        "    <Testing testingId=\"T3\"/>" +
+                        "    <TestingType testingTypeId=\"JUNIT-TEST\"/>" +
+                        "    <TestingType testingTypeId=\"JUNIT-TEST2\"/>" +
+                        "</delete>";
+        EntitySaxReader reader = new EntitySaxReader(delegator);
+        long numberLoaded = reader.parse(xmlContentLoad);
+        assertEquals("Delete Entity loaded ", numberLoaded, 5);
+        GenericValue t1 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T1"), false);
+        GenericValue t2 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T2"), false);
+        GenericValue t3 = delegator.findOne("Testing", UtilMisc.toMap("testingId", "T2"), false);
+        assertNull("Delete Testing(T1)", t1);
+        assertNull("Delete Testing(T2)", t2);
+        assertNull("Delete Testing(T3)", t3);
+        GenericValue testType = delegator.findOne("TestingType", UtilMisc.toMap("testingTypeId", "JUNIT-TEST"), false);
+        assertNull("Delete TestingType 1", testType);
+        testType = delegator.findOne("TestingType", UtilMisc.toMap("testingTypeId", "JUNIT-TEST2"), false);
+        assertNull("Delete TestingType 2", testType);
+    }
 }

Modified: ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaAction.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaAction.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaAction.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaAction.java Sun Mar  3 12:00:12 2013
@@ -22,7 +22,6 @@ import java.util.Map;
 
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilMisc;
-import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.entity.GenericEntity;
 import org.ofbiz.entity.GenericEntityException;
 import org.ofbiz.entity.GenericValue;
@@ -38,19 +37,17 @@ import org.w3c.dom.Element;
  * EntityEcaAction
  */
 @SuppressWarnings("serial")
-public class EntityEcaAction implements java.io.Serializable {
+public final class EntityEcaAction implements java.io.Serializable {
     public static final String module = EntityEcaAction.class.getName();
 
-    protected String serviceName = null;
-    protected String serviceMode = null;
-    protected String runAsUser = null;
-    protected String valueAttr = null;
-    protected boolean resultToValue = true;
-    protected boolean abortOnError = false;
-    protected boolean rollbackOnError = false;
-    protected boolean persist = false;
-
-    protected EntityEcaAction() {}
+    private final String serviceName;
+    private final String serviceMode;
+    private final String runAsUser;
+    private final String valueAttr;
+    private final boolean resultToValue;
+    private final boolean abortOnError;
+    private final boolean rollbackOnError;
+    private final boolean persist;
 
     public EntityEcaAction(Element action) {
         this.serviceName = action.getAttribute("service");
@@ -65,14 +62,16 @@ public class EntityEcaAction implements 
         this.valueAttr = action.getAttribute("value-attr");
     }
 
-    public void runAction(DispatchContext dctx, Map<String, ? extends Object> context, GenericEntity newValue) throws GenericEntityException {
-        Map<String, Object> actionResult = null;
+    public String getServiceName() {
+        return this.serviceName;
+    }
 
+    public void runAction(DispatchContext dctx, Map<String, ? extends Object> context, GenericEntity newValue) throws GenericEntityException {
         try {
             // pull out context parameters needed for this service.
             Map<String, Object> actionContext = dctx.getModelService(serviceName).makeValid(context, ModelService.IN_PARAM);
             // if value-attr is specified, insert the value object in that attr name
-            if (UtilValidate.isNotEmpty(valueAttr)) {
+            if (!valueAttr.isEmpty()) {
                 actionContext.put(valueAttr, newValue);
             }
 
@@ -81,7 +80,7 @@ public class EntityEcaAction implements 
 
             // setup the run-as-user
             GenericValue userLoginToRunAs = null;
-            if (UtilValidate.isNotEmpty(this.runAsUser)) {
+            if (!this.runAsUser.isEmpty()) {
                 userLoginToRunAs = dctx.getDelegator().findOne("UserLogin", UtilMisc.toMap("userLoginId", this.runAsUser), true);
                 if (userLoginToRunAs != null) {
                     actionContext.put("userLogin", userLoginToRunAs);
@@ -90,10 +89,14 @@ public class EntityEcaAction implements 
 
             LocalDispatcher dispatcher = dctx.getDispatcher();
             if ("sync".equals(this.serviceMode)) {
-                actionResult = dispatcher.runSync(this.serviceName, actionContext);
+                Map<String, Object> actionResult = dispatcher.runSync(this.serviceName, actionContext);
                 if (ServiceUtil.isError(actionResult)) {
                     throw new GenericServiceException("Error running Entity ECA action service: " + ServiceUtil.getErrorMessage(actionResult));
                 }
+                // use the result to update the context fields.
+                if (resultToValue) {
+                    newValue.setNonPKFields(actionResult);
+                }
             } else if ("async".equals(this.serviceMode)) {
                 dispatcher.runAsync(serviceName, actionContext, persist);
             }
@@ -111,10 +114,5 @@ public class EntityEcaAction implements 
                 Debug.logError(e, "Error running Entity ECA action service", module);
             }
         }
-
-        // use the result to update the context fields.
-        if (resultToValue) {
-            newValue.setNonPKFields(actionResult);
-        }
     }
 }

Modified: ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaCondition.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaCondition.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaCondition.java Sun Mar  3 12:00:12 2013
@@ -33,36 +33,27 @@ import org.w3c.dom.Element;
  * EntityEcaCondition
  */
 @SuppressWarnings("serial")
-public class EntityEcaCondition implements java.io.Serializable {
+public final class EntityEcaCondition implements java.io.Serializable {
 
     public static final String module = EntityEcaCondition.class.getName();
 
-    protected String lhsValueName, rhsValueName;
-    protected String operator;
-    protected String compareType;
-    protected String format;
-    protected boolean constant = false;
-
-    protected EntityEcaCondition() {}
+    private final String lhsValueName, rhsValueName;
+    private final String operator;
+    private final String compareType;
+    private final String format;
+    private final boolean constant;
 
     public EntityEcaCondition(Element condition, boolean constant) {
         this.lhsValueName = condition.getAttribute("field-name");
-
         this.constant = constant;
         if (constant) {
             this.rhsValueName = condition.getAttribute("value");
         } else {
             this.rhsValueName = condition.getAttribute("to-field-name");
         }
-
         this.operator = condition.getAttribute("operator");
         this.compareType = condition.getAttribute("type");
         this.format = condition.getAttribute("format");
-
-        if (lhsValueName == null)
-            lhsValueName = "";
-        if (rhsValueName == null)
-            rhsValueName = "";
     }
 
     public boolean eval(DispatchContext dctx, GenericEntity value) throws GenericEntityException {
@@ -100,6 +91,21 @@ public class EntityEcaCondition implemen
         }
     }
 
+    public String getLValue() {
+        return this.lhsValueName;
+    }
+
+    public String getRValue() {
+        if (constant && !rhsValueName.isEmpty()) {
+            return "\"".concat(this.rhsValueName).concat("\"");
+        }
+        return this.rhsValueName;
+    }
+
+    public String getOperator() {
+        return this.operator;
+    }
+
     @Override
     public String toString() {
         StringBuilder buf = new StringBuilder();

Modified: ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaRule.java Sun Mar  3 12:00:12 2013
@@ -18,12 +18,12 @@
  *******************************************************************************/
 package org.ofbiz.entityext.eca;
 
-import java.util.HashSet;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import javolution.util.FastList;
 import javolution.util.FastMap;
 
 import org.ofbiz.base.util.Debug;
@@ -34,54 +34,47 @@ import org.ofbiz.service.DispatchContext
 import org.w3c.dom.Element;
 
 /**
- * EntityEcaRule
+ * Entity event-condition-action rule.
  */
 @SuppressWarnings("serial")
 public final class EntityEcaRule implements java.io.Serializable {
 
     public static final String module = EntityEcaRule.class.getName();
 
-    private static final Set<String> nameSet = new HashSet<String>(2);
-    static {
-        nameSet.add("set");
-        nameSet.add("action");
-    }
-
-    protected final String entityName;
-    protected final String operationName;
-    protected final String eventName;
-    protected final boolean runOnError;
-    protected final List<EntityEcaCondition> conditions = FastList.newInstance();
-    protected final List<Object> actionsAndSets = FastList.newInstance();
-    protected boolean enabled = true;
+    private final String entityName;
+    private final String operationName;
+    private final String eventName;
+    private final boolean runOnError;
+    private final List<EntityEcaCondition> conditions;
+    private final List<Object> actionsAndSets;
+    private boolean enabled = true;
 
     public EntityEcaRule(Element eca) {
         this.entityName = eca.getAttribute("entity");
         this.operationName = eca.getAttribute("operation");
         this.eventName = eca.getAttribute("event");
         this.runOnError = "true".equals(eca.getAttribute("run-on-error"));
-
-        for (Element element: UtilXml.childElementList(eca, "condition")) {
-            conditions.add(new EntityEcaCondition(element, true));
-        }
-
-        for (Element element: UtilXml.childElementList(eca, "condition-field")) {
-            conditions.add(new EntityEcaCondition(element, false));
-        }
-
-        if (Debug.verboseOn()) {
-            Debug.logVerbose("Conditions: " + conditions, module);
-        }
-
-        for (Element actionOrSetElement: UtilXml.childElementList(eca, nameSet)) {
-            if ("action".equals(actionOrSetElement.getNodeName())) {
-                this.actionsAndSets.add(new EntityEcaAction(actionOrSetElement));
+        ArrayList<EntityEcaCondition> conditions = new ArrayList<EntityEcaCondition>();
+        ArrayList<Object> actionsAndSets = new ArrayList<Object>();
+        for (Element element: UtilXml.childElementList(eca)) {
+            if ("condition".equals(element.getNodeName())) {
+                conditions.add(new EntityEcaCondition(element, true));
+            } else if ("condition-field".equals(element.getNodeName())) {
+                conditions.add(new EntityEcaCondition(element, false));
+            } else if ("action".equals(element.getNodeName())) {
+                actionsAndSets.add(new EntityEcaAction(element));
+            } else if ("set".equals(element.getNodeName())) {
+                actionsAndSets.add(new EntityEcaSetField(element));
             } else {
-                this.actionsAndSets.add(new EntityEcaSetField(actionOrSetElement));
+                Debug.logWarning("Invalid eca child element " + element.getNodeName(), module);
             }
         }
-
+        conditions.trimToSize();
+        this.conditions = Collections.unmodifiableList(conditions);
+        actionsAndSets.trimToSize();
+        this.actionsAndSets = Collections.unmodifiableList(actionsAndSets);
         if (Debug.verboseOn()) {
+            Debug.logVerbose("Conditions: " + conditions, module);
             Debug.logVerbose("actions and sets (intermixed): " + actionsAndSets, module);
         }
     }
@@ -102,6 +95,14 @@ public final class EntityEcaRule impleme
         return this.runOnError;
     }
 
+    public List<Object> getActionsAndSets() {
+        return this.actionsAndSets;
+    }
+
+    public List<EntityEcaCondition> getConditions() {
+        return this.conditions;
+    }
+
     public void eval(String currentOperation, DispatchContext dctx, GenericEntity value, boolean isError, Set<String> actionsRun) throws GenericEntityException {
         if (!enabled) {
             Debug.logInfo("Entity ECA [" + this.entityName + "] on [" + this.eventName + "] is disabled; not running.", module);
@@ -134,9 +135,9 @@ public final class EntityEcaRule impleme
                     EntityEcaAction ea = (EntityEcaAction) actionOrSet;
                     // in order to enable OR logic without multiple calls to the given service,
                     //only execute a given service name once per service call phase
-                    if (actionsRun.add(ea.serviceName)) {
+                    if (actionsRun.add(ea.getServiceName())) {
                         if (Debug.infoOn()) {
-                            Debug.logInfo("Running Entity ECA Service: " + ea.serviceName + ", triggered by rule on Entity: " + value.getEntityName(), module);
+                            Debug.logInfo("Running Entity ECA Service: " + ea.getServiceName() + ", triggered by rule on Entity: " + value.getEntityName(), module);
                         }
                         ea.runAction(dctx, context, value);
                     }
@@ -148,6 +149,10 @@ public final class EntityEcaRule impleme
         }
     }
 
+    /**
+     * @deprecated Not thread-safe, no replacement.
+     * @param enabled
+     */
     public void setEnabled(boolean enabled) {
         this.enabled = enabled;
     }

Modified: ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaSetField.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaSetField.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaSetField.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/entityext/src/org/ofbiz/entityext/eca/EntityEcaSetField.java Sun Mar  3 12:00:12 2013
@@ -30,14 +30,14 @@ import java.util.Map;
 /**
  * ServiceEcaSetField
  */
-public class EntityEcaSetField {
+public final class EntityEcaSetField {
 
     public static final String module = EntityEcaSetField.class.getName();
 
-    protected String fieldName = null;
-    protected String envName = null;
-    protected String value = null;
-    protected String format = null;
+    private final String fieldName;
+    private final String envName;
+    private final String value;
+    private final String format;
 
     public EntityEcaSetField(Element set) {
         this.fieldName = set.getAttribute("field-name");
@@ -47,29 +47,17 @@ public class EntityEcaSetField {
     }
 
     public void eval(Map<String, Object> context) {
-        if (fieldName != null) {
-            // try to expand the envName
-            if (UtilValidate.isEmpty(value)) {
-                if (UtilValidate.isNotEmpty(envName) && envName.startsWith("${")) {
-                    FlexibleStringExpander exp = FlexibleStringExpander.getInstance(envName);
-                    String s = exp.expandString(context);
-                    if (UtilValidate.isNotEmpty(s)) {
-                        value = s;
-                    }
-                    Debug.logInfo("Expanded String: " + s, module);
-                }
-            }
-
-            // process the context changes
-            if (UtilValidate.isNotEmpty(value)) {
-                context.put(fieldName, this.format(value, context));
-            } else if (UtilValidate.isNotEmpty(envName) && context.get(envName) != null) {
+        if (!fieldName.isEmpty()) {
+            String valueExpanded = FlexibleStringExpander.expandString(value, context);
+            if (!valueExpanded.isEmpty()) {
+                context.put(fieldName, this.format(valueExpanded, context));
+            } else if (!envName.isEmpty() && context.get(envName) != null) {
                 context.put(fieldName, this.format((String) context.get(envName), context));
             }
         }
     }
 
-    protected Object format(String s, Map<String, ? extends Object> c) {
+    private Object format(String s, Map<String, ? extends Object> c) {
         if (UtilValidate.isEmpty(s) || UtilValidate.isEmpty(format)) {
             return s;
         }
@@ -116,4 +104,15 @@ public class EntityEcaSetField {
         Debug.logWarning("Format function not found [" + format + "] return string unchanged - " + s, module);
         return s;
     }
+
+    public String getFieldName() {
+        return this.fieldName;
+    }
+
+    public String getRValue() {
+        if (!this.value.isEmpty()) {
+            return "\"".concat(this.value).concat("\"");
+        }
+        return this.envName;
+    }
 }

Modified: ofbiz/branches/webhelp-2012-12-07/framework/service/config/ServiceErrorUiLabels.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/service/config/ServiceErrorUiLabels.xml?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/service/config/ServiceErrorUiLabels.xml (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/service/config/ServiceErrorUiLabels.xml Sun Mar  3 12:00:12 2013
@@ -101,130 +101,156 @@
         <value xml:lang="en">Error doing entity-auto operation for entity ${entityName} in service ${serviceName}: ${errorString}</value>
         <value xml:lang="it">Errore mentre faceva l'operazione entity-auto per l'entità ${entityName} nel servizio ${serviceName}: ${errorString}</value>
         <value xml:lang="ja">サービス ${serviceName} で、エンティティ ${entityName} にエンティティ自動操作実行中にエラー: ${errorString}</value>
+        <value xml:lang="zh">进行实体自动操作时出错,实体 ${entityName}、服务 ${serviceName}:${errorString}</value>
     </property>
     <property key="ServiceParameterValueNotValid">
         <value xml:lang="en">The ID value in the parameter ${parameterName} was not valid: ${errorDetails}</value>
         <value xml:lang="it">Il valore ID nel parametro ${parameterName} non è valido: ${errorDetails}</value>
         <value xml:lang="ja">パラメータ ${parameterName} の中のIDが正しくありません: ${errorDetails}</value>
+        <value xml:lang="zh">参数 ${parameterName} 中的标识(ID)值无效:${errorDetails}</value>
     </property>
     <property key="ServiceTestDeadLockError">
         <value xml:lang="en">Error running deadlock test services: ${errorString}</value>
         <value xml:lang="it">Errore durante il test del servizio deadlock: ${errorString}</value>
         <value xml:lang="ja">デッドロックテストサービス実行中にエラー: ${errorString}</value>
+        <value xml:lang="zh">运行死锁测试服务时出错:${errorString}</value>
     </property>
     <property key="ServiceTestDeadLockRetry">
         <value xml:lang="en">Error(s) running sub-services in testServiceDeadLockRetry</value>
         <value xml:lang="it">Errore(i) durante l'esecuzione dei sotto-servizi in testServiceDeadLockRetry</value>
         <value xml:lang="ja">testServiceDeadLockRetryの中のサブサービス実行中にエラー</value>
+        <value xml:lang="zh">运行测试服务死锁重试(testServiceDeadLockRetry)中的子服务时出错</value>
     </property>
     <property key="ServiceTestDeadLockThreadA">
         <value xml:lang="en">Error running testServiceDeadLockRetryThreadA: ${errorString}</value>
         <value xml:lang="it">Errore durante l'esecuzione di testServiceDeadLockRetryThreadA: ${errorString}</value>
         <value xml:lang="ja">testServiceDeadLockRetryThreadAの実行中にエラー: ${errorString}</value>
+        <value xml:lang="zh">运行测试服务死锁重试线程A(testServiceDeadLockRetryThreadA)时出错:${errorString}</value>
     </property>
     <property key="ServiceTestDeadLockThreadB">
         <value xml:lang="en">Error running testServiceDeadLockRetryThreadB: ${errorString}</value>
         <value xml:lang="it">Errore durante l'esecuzione di testServiceDeadLockRetryThreadB: ${errorString}</value>
         <value xml:lang="ja">testServiceDeadLockRetryThreadBの実行中にエラー: ${errorString}</value>
+        <value xml:lang="zh">运行测试服务死锁重试线程B(testServiceDeadLockRetryThreadB)时出错:${errorString}</value>
     </property>
     <property key="ServiceTestEntityEngineError">
         <value xml:lang="en">Entity Engine Exception: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine: ${errorString}</value>
         <value xml:lang="ja">エンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">实体引擎出现异常:${errorString}</value>
     </property>
     <property key="ServiceTestEntityEngineExceptionThreadA">
         <value xml:lang="en">Entity Engine Exception running dead lock test thread A: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine durante l'esecuzione del test dead lock thread A: ${errorString}</value>
         <value xml:lang="ja">デッドロックテストスレッドA実行中にエンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">运行死锁测试线程A时发生实体引擎异常:${errorString}</value>
     </property>
     <property key="ServiceTestEntityEngineExceptionThreadB">
         <value xml:lang="en">Entity Engine Exception running dead lock test thread B: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine durante l'esecuzione del test dead lock thread B: ${errorString}</value>
         <value xml:lang="ja">デッドロックテストスレッドB実行中にエンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">运行死锁测试线程B时发生实体引擎异常:${errorString}</value>
     </property>
     <property key="ServiceTestEntityEngineWaitInterruptedExceptionThreadA">
         <value xml:lang="en">Entity Engine Exception running dead lock test thread A: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine durante l'esecuzione del test dead lock thread A: ${errorString}</value>
         <value xml:lang="ja">デッドロックテストスレッドA実行中にエンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">运行死锁测试线程A时发生实体引擎异常:${errorString}</value>
     </property>
     <property key="ServiceTestEntityEngineWaitInterruptedExceptionThreadB">
         <value xml:lang="en">Entity Engine Exception running dead lock test thread B: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine durante l'esecuzione del test dead lock thread B: ${errorString}</value>
         <value xml:lang="ja">デッドロックテストスレッドB実行中にエンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">运行死锁测试线程B时发生实体引擎异常:${errorString}</value>
     </property>
     <property key="ServiceTestLockWaitTimeoutRetry">
         <value xml:lang="en">Error(s) running sub-services in testServiceLockWaitTimeoutRetry</value>
         <value xml:lang="it">Errore(i) durante l'esecuzione dei sotto-servizi in testServiceLockWaitTimeoutRetry</value>
         <value xml:lang="ja">testServiceLockWaitTimeoutRetryの中のサブサービス実行中にエラー</value>
+        <value xml:lang="zh">运行测试服务锁等待超时重试(testServiceLockWaitTimeoutRetry)服务时出错</value>
     </property>
     <property key="ServiceTestLockWaitTimeoutRetryGrabber">
         <value xml:lang="en">Entity Engine Exception running lock wait timeout test Grabber thread: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine durante l'esecuzione del lock wait timeout test Grabber thread: ${errorString}</value>
         <value xml:lang="ja">ロック待タイムアウトテスト獲得スレッド実行中にエンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">运行锁等待超时测试采集程序线程时发生实体引擎意外:${errorString}</value>
     </property>
     <property key="ServiceTestLockWaitTimeoutRetryWaiter">
         <value xml:lang="en">Entity Engine Exception running lock wait timeout test Grabber thread: ${errorString}</value>
         <value xml:lang="it">Eccezione Entity Engine durante l'esecuzione del lock wait timeout test Grabber thread: ${errorString}</value>
         <value xml:lang="ja">ロック待タイムアウトテスト待機スレッド実行中にエンティティエンジン例外: ${errorString}</value>
+        <value xml:lang="zh">运行锁等待超时测试采集程序线程时发生实体引擎意外:${errorString}</value>
     </property>
     <property key="ServiceTestLockInterruptedExceptionRetryGrabber">
         <value xml:lang="en">Wait Interrupted Exception running lock wait timeout test Grabber thread: ${errorString}</value>
         <value xml:lang="it">Eccezione Wait Interrupted Exception durante l'esecuzione del lock wait timeout test Grabber thread: ${errorString}</value>
         <value xml:lang="ja">ロック待タイムアウトテスト獲得スレッド実行中にウェイト割込例外: ${errorString}</value>
+        <value xml:lang="zh">运行锁等待超时测试采集程序线程时发生等待中断意外:${errorString}</value>
     </property>
     <property key="ServiceTestLockInterruptedExceptionRetryWaiter">
         <value xml:lang="en">Wait Interrupted Exception running lock wait timeout test Waiter thread: ${errorString}</value>
         <value xml:lang="it">Eccezione Wait Interrupted Exception durante l'esecuzione del lock wait timeout test Waiter thread: ${errorString}</value>
         <value xml:lang="ja">ロック待タイムアウトテスト待機スレッド実行中にウェイト割込例外: ${errorString}</value>
+        <value xml:lang="zh">运行锁等待超时测试等待程序线程时发生等待中断意外:${errorString}</value>
     </property>
     <property key="ServiceTestLockWaitTimeoutRetryCantRecoverWaiter">
         <value xml:lang="en">Error running testServiceLockWaitTimeoutRetryCantRecoverWaiter</value>
         <value xml:lang="it">Errore durante l'esecuzione di testServiceLockWaitTimeoutRetryCantRecoverWaiter</value>
         <value xml:lang="ja">testServiceLockWaitTimeoutRetryCantRecoverWaiter実行中にエラー</value>
+        <value xml:lang="zh">运行测试服务锁等待程序超时重试不能恢复等待(testServiceLockWaitTimeoutRetryCantRecoverWaiter)时出错</value>
     </property>
     <property key="ServiceTestOwnTxError">
         <value xml:lang="en">Error running sub-service with own tx: ${errorString}</value>
         <value xml:lang="it">Errore durante l'esecuzione del sotto-servizio con proprie transazione: ${errorString}</value>
         <value xml:lang="ja">自Txでサブサービス実行中にエラー: ${errorString}</value>
+        <value xml:lang="zh">运行带有事务处理的子服务时出错:${errorString}</value>
     </property>
     <property key="ServiceTestOwnTxSubServiceAfterSetRollbackOnlyInParentErrorCatchWrapper">
         <value xml:lang="en">Error running ServiceTestOwnTxSubServiceAfterSetRollbackOnlyInParentErrorCatchWrapper</value>
         <value xml:lang="it">Errore durante l'esecuzione di ServiceTestOwnTxSubServiceAfterSetRollbackOnlyInParentErrorCatchWrapper</value>
         <value xml:lang="ja">ServiceTestOwnTxSubServiceAfterSetRollbackOnlyInParentErrorCatchWrapper実行中にエラー</value>
+        <value xml:lang="zh">运行在上级错误捕获程序中在设置了仅回滚后的带有事务处理子服务的服务测试(ServiceTestOwnTxSubServiceAfterSetRollbackOnlyInParentErrorCatchWrapper)时出错</value>
     </property>
     <property key="ServiceTestOwnTxSubServiceAfterSetRollbackOnlyInParent">
         <value xml:lang="en">Error running sub-service in testServiceOwnTxSubServiceAfterSetRollbackOnlyInParent</value>
         <value xml:lang="it">Errore durante l'esecuzione di testServiceOwnTxSubServiceAfterSetRollbackOnlyInParent</value>
         <value xml:lang="ja">testServiceOwnTxSubServiceAfterSetRollbackOnlyInParentの中のサブサービス実行中にエラー</value>
+        <value xml:lang="zh">运行在上级服务中设置了仅回滚后的带有事务处理子服务的测试服务(testServiceOwnTxSubServiceAfterSetRollbackOnlyInParent)中的子服务时出错</value>
     </property>
     <property key="ServiceTestRollback">
         <value xml:lang="en">Intentional rollback to test global-rollback</value>
         <value xml:lang="it">Rollback intenzionale per testare il global-rollback</value>
         <value xml:lang="ja">グローバル・ロールバックのテストのため意図的なロールバック</value>
+        <value xml:lang="zh">故意回滚以测试全局回滚</value>
     </property>
     <property key="ServiceTestSubServiceError">
         <value xml:lang="en">Error calling sub-service, it should return an error but not throw an exception, so something went wrong: ${errorString}</value>
         <value xml:lang="it">Errore durante l'esecuzione del sotto-servizio, dovrebbe restituire un'errore ma non generare un'eccezione, così qualcosa è andato male: ${errorString}</value>
         <value xml:lang="ja">サブサービス呼び出し中にエラー。エラーを戻しましたが例外がスローされませんでした。なにか誤りがあります: ${errorString}</value>
+        <value xml:lang="zh">调用子服务时出错,它应该返回一个错误,而不是抛出一个意外,因此发生了错误:${errorString}</value>
     </property>
     <property key="ServiceTestXmlRpcCalculationOK">
         <value xml:lang="en">adding integer 125 to 365 yields </value>
         <value xml:lang="it">aggiungere intero 125 a 365 yields </value>
         <value xml:lang="ja">整数 125 ~ 365 の加算が生じます </value>
+        <value xml:lang="zh">把整数125加到365,生成</value>
     </property>
     <property key="ServiceTestXmlRpcCalculationKO">
         <value xml:lang="en">calcul is wrong ! Why ?</value>
         <value xml:lang="it">calcolo è errato ! Perchè ?</value>
         <value xml:lang="ja">計算に誤りがあります!なぜ?</value>
+        <value xml:lang="zh">计算错误!为什么?</value>
     </property>
     <property key="ServiceTestXmlRpcMissingParameters">
         <value xml:lang="en">missing parameters</value>
         <value xml:lang="it">parametri mancanti</value>
         <value xml:lang="ja">パラメータが正しくありません</value>
+        <value xml:lang="zh">缺少参数</value>
     </property>
     <property key="ServiceValueNotFound">
         <value xml:lang="en">Value not found, cannot update</value>
         <value xml:lang="it">Valore non troavato, non è possibile aggiornare</value>
         <value xml:lang="ja">値が見つかりません。更新できません</value>
+        <value xml:lang="zh">没有找到值,无法更新</value>
     </property>
 </resource>

Modified: ofbiz/branches/webhelp-2012-12-07/framework/service/src/org/ofbiz/service/ServiceUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/service/src/org/ofbiz/service/ServiceUtil.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/service/src/org/ofbiz/service/ServiceUtil.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/service/src/org/ofbiz/service/ServiceUtil.java Sun Mar  3 12:00:12 2013
@@ -20,11 +20,11 @@ package org.ofbiz.service;
 
 import java.math.BigDecimal;
 import java.sql.Timestamp;
-import com.ibm.icu.util.Calendar;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.TimeZone;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.transaction.Transaction;
@@ -51,6 +51,8 @@ import org.ofbiz.entity.util.EntityListI
 import org.ofbiz.security.Security;
 import org.ofbiz.service.config.ServiceConfigUtil;
 
+import com.ibm.icu.util.Calendar;
+
 /**
  * Generic Service Utility Class
  */
@@ -466,7 +468,7 @@ public class ServiceUtil {
                     noMoreResults = true;
                 }
             }
-            
+
             // Now JobSandbox data is cleaned up. Now process Runtime data and remove the whole data in single shot that is of no need.
             boolean beganTx3 = false;
             GenericValue runtimeData = null;
@@ -476,7 +478,7 @@ public class ServiceUtil {
             try {
                 // begin this transaction
                 beganTx3 = TransactionUtil.begin();
-                
+
                 runTimeDataIt = delegator.find("RuntimeData", null, null, UtilMisc.toSet("runtimeDataId"), null, null);
                 try {
                     while ((runtimeData = runTimeDataIt.next()) != null) {
@@ -685,4 +687,40 @@ public class ServiceUtil {
 
         return ServiceUtil.returnSuccess();
     }
+
+    /**
+     * Checks all incoming service attributes and look for fields with the same
+     * name in the incoming map and copy those onto the outgoing map. Also
+     * includes a userLogin if service requires one.
+     *
+     * @param dispatcher
+     * @param serviceName
+     * @param fromMap
+     * @param userLogin
+     *            (optional) - will be added to the map if is required
+     * @param timeZone
+     * @param locale
+     * @return filled Map or null on error
+     * @throws GeneralServiceException
+     */
+    public static Map<String, Object> setServiceFields(LocalDispatcher dispatcher, String serviceName, Map<String, Object> fromMap, GenericValue userLogin,
+            TimeZone timeZone, Locale locale) throws GeneralServiceException {
+        Map<String, Object> outMap = FastMap.newInstance();
+
+        ModelService modelService = null;
+        try {
+            modelService = dispatcher.getDispatchContext().getModelService(serviceName);
+        } catch (GenericServiceException e) {
+            String errMsg = "Could not get service definition for service name [" + serviceName + "]: ";
+            Debug.logError(e, errMsg, module);
+            throw new GeneralServiceException(e);
+        }
+        outMap.putAll(modelService.makeValid(fromMap, "IN", true, null, timeZone, locale));
+
+        if (userLogin != null && modelService.auth) {
+            outMap.put("userLogin", userLogin);
+        }
+
+        return outMap;
+    }
 }

Modified: ofbiz/branches/webhelp-2012-12-07/framework/start/src/org/ofbiz/base/start/both.properties
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/start/src/org/ofbiz/base/start/both.properties?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/start/src/org/ofbiz/base/start/both.properties (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/start/src/org/ofbiz/base/start/both.properties Sun Mar  3 12:00:12 2013
@@ -39,7 +39,7 @@
 #ofbiz.log.dir=runtime/logs
 
 # --- Location (relative to ofbiz.home) for (normal) container configuration
-ofbiz.container.config=framework/base/config/both-containers.xml
+#ofbiz.container.config=framework/base/config/ofbiz-containers.xml
 
 # -- StartupLoader implementation for Splash Screen
 ofbiz.start.loader1=org.ofbiz.base.splash.SplashLoader

Modified: ofbiz/branches/webhelp-2012-12-07/framework/webapp/src/org/ofbiz/webapp/view/ApacheFopWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/webhelp-2012-12-07/framework/webapp/src/org/ofbiz/webapp/view/ApacheFopWorker.java?rev=1452030&r1=1452029&r2=1452030&view=diff
==============================================================================
--- ofbiz/branches/webhelp-2012-12-07/framework/webapp/src/org/ofbiz/webapp/view/ApacheFopWorker.java (original)
+++ ofbiz/branches/webhelp-2012-12-07/framework/webapp/src/org/ofbiz/webapp/view/ApacheFopWorker.java Sun Mar  3 12:00:12 2013
@@ -43,10 +43,8 @@ import org.apache.fop.apps.MimeConstants
 import org.ofbiz.base.location.FlexibleLocation;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.FileUtil;
+import org.ofbiz.base.util.UtilProperties;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.entity.Delegator;
-import org.ofbiz.entity.DelegatorFactory;
-import org.ofbiz.entity.util.EntityUtilProperties;
 
 /**
  * Apache FOP worker class.
@@ -67,16 +65,6 @@ public class ApacheFopWorker {
      * @return FopFactory The FopFactory instance
      */
     public static FopFactory getFactoryInstance() {
-        Delegator delegator = DelegatorFactory.getDelegator("default");
-        return getFactoryInstance(delegator);
-    }
-
-    /** Returns an instance of the FopFactory class. FOP documentation recommends
-     * the reuse of the factory instance because of the startup time.
-     * @param delegator the delegator
-     * @return FopFactory The FopFactory instance
-     */
-    public static FopFactory getFactoryInstance(Delegator delegator) {
         if (fopFactory == null) {
             synchronized (ApacheFopWorker.class) {
                 if (fopFactory != null) {
@@ -89,15 +77,24 @@ public class ApacheFopWorker {
                 fopFactory.setStrictValidation(false);
 
                 try {
-                    String fopPath = EntityUtilProperties.getPropertyValue("url.properties", "fop.path", delegator);
+                    String ofbizHome = System.getProperty("ofbiz.home");
+                    String fopPath = UtilProperties.getPropertyValue("fop.properties", "fop.path", ofbizHome + "/framework/webapp/config");
                     File userConfigFile = FileUtil.getFile(fopPath + "/fop.xconf");
-                    fopFactory.setUserConfig(userConfigFile);
-                    String fopFontBasePath = EntityUtilProperties.getPropertyValue("url.properties", "fop.font.base.path", delegator);
-                    File fopFontBasePathFile = new File(fopFontBasePath);
-                    URL fopFontBaseUrl = FlexibleLocation.resolveLocation(fopFontBasePathFile.toString());
-                    fopFactory.getFontManager().setFontBaseURL(fopFontBaseUrl.toString());
+                    if (userConfigFile.exists()) {
+                        fopFactory.setUserConfig(userConfigFile);
+                    } else {
+                        Debug.logWarning("FOP configuration file not found: " + userConfigFile, module);
+                    }
+                    String fopFontBaseProperty = UtilProperties.getPropertyValue("fop.properties", "fop.font.base.url", ofbizHome + "/framework/webapp/config/");
+                    File fontBaseFile = FileUtil.getFile(fopFontBaseProperty);
+                    if (fontBaseFile.isDirectory()) {
+                        fopFactory.getFontManager().setFontBaseURL(fontBaseFile.toURI().toURL().toString());
+                    } else {
+                        Debug.logWarning("FOP font base URL not found: " + fontBaseFile, module);
+                    }
+                    Debug.logInfo("FOP FontBaseURL: " + fopFactory.getFontManager().getFontBaseURL(), module);
                 } catch (Exception e) {
-                    Debug.logWarning("Error reading FOP configuration", module);
+                    Debug.logWarning(e, "Error reading FOP configuration: ", module);
                 }
             }
         }