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 2009/02/28 00:01:42 UTC

svn commit: r748732 [2/2] - in /ofbiz/trunk/framework: common/config/ security/config/ webtools/config/ webtools/servicedef/ webtools/src/org/ofbiz/webtools/labelmanager/ webtools/webapp/webtools/WEB-INF/ webtools/webapp/webtools/labelmanager/ webtools...

Modified: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java (original)
+++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java Fri Feb 27 23:01:41 2009
@@ -38,8 +38,11 @@
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.cache.UtilCache;
+import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.model.ModelReader;
 import org.ofbiz.service.DispatchContext;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.LocalDispatcher;
 import org.ofbiz.service.ServiceUtil;
 import org.w3c.dom.Comment;
 import org.w3c.dom.Document;
@@ -63,7 +66,7 @@
     protected static Map<String, Map<String, Integer>> references = null;
     protected static int duplicatedLocalesLabels = 0;
 
-    protected static String delegatorName;
+    protected static GenericDelegator delegator;
     protected static ModelReader entityModelReader;
     protected static DispatchContext dispatchContext;
 
@@ -73,7 +76,7 @@
         }
 
         LabelManagerFactory lmf = labelManagerFactoryCache.get(delegatorName);
-        
+
         if (lmf == null) {
             lmf = new LabelManagerFactory(delegatorName);
             labelManagerFactoryCache.put(delegatorName, lmf);
@@ -82,10 +85,9 @@
     }
 
     protected LabelManagerFactory(String delegatorName) throws GeneralException {
-        LabelManagerFactory.delegatorName = delegatorName;
-        LabelManagerFactory.entityModelReader = ModelReader.getModelReader(delegatorName);
-        LabelManagerFactory.dispatchContext = new DispatchContext("LabelManagerDispCtx", null, this.getClass().getClassLoader(), null);
-
+        delegator = GenericDelegator.getGenericDelegator(delegatorName);
+        entityModelReader = ModelReader.getModelReader(delegatorName);
+        dispatchContext = new DispatchContext("LabelManagerFactoryDispCtx", null, this.getClass().getClassLoader(), null);
         prepareAll();
     }
 
@@ -99,53 +101,63 @@
         int duplicatedLocales = 0;
 
         try {
+            boolean sharkComponent = false;
             Collection<ComponentConfig> componentConfigs = ComponentConfig.getAllComponents();
 
             for (ComponentConfig componentConfig: componentConfigs) {
                 String componentName = componentConfig.getComponentName();
                 List<File> resourceFiles = FileUtil.findXmlFiles(componentConfig.getRootLocation(), null, "resource", null);
-
-                for (File resourceFile: resourceFiles) {
-                    String fileName = resourceFile.getName();
-                    Document resourceDocument = UtilXml.readXmlDocument(resourceFile.toURI().toURL());
-                    Element resourceElem = resourceDocument.getDocumentElement();
-                    String labelKeyComment = "";
-
-                    for (Node propertyNode: UtilXml.childNodeList(resourceElem.getFirstChild())) {
-                        if (propertyNode instanceof Element) {
-                            Element propertyElem = (Element)propertyNode;
-                            String labelKey = StringUtil.htmlSpecialChars(propertyElem.getAttribute("key"), true, true, false);
-                            String labelComment = "";
-
-                            for (Node valueNode: UtilXml.childNodeList(propertyElem.getFirstChild())) {
-                                if (valueNode instanceof Element) {
-                                    Element valueElem = (Element)valueNode;
-                                    String localeName = valueElem.getAttribute("xml:lang");
-                                    String labelValue = StringUtil.htmlSpecialChars(UtilXml.nodeValue(valueElem.getFirstChild()), true, true, false);
-                                    LabelInfo label = (LabelInfo)labels.get(labelKey + keySeparator + fileName);
-
-                                    if (UtilValidate.isEmpty(label)) {
-                                        label = new LabelInfo(labelKey, labelKeyComment, fileName, componentName, localeName, labelValue, labelComment);
-                                        labels.put(labelKey + keySeparator + fileName, label);
-                                    } else {
-                                        if (label.setLabelValue(localeName, labelValue, labelComment, false)) {
-                                            duplicatedLocales++;
+                boolean cycle = true;
+                while (cycle) {
+                    for (File resourceFile: resourceFiles) {
+                        String fileName = resourceFile.getName();
+                        Document resourceDocument = UtilXml.readXmlDocument(resourceFile.toURI().toURL());
+                        Element resourceElem = resourceDocument.getDocumentElement();
+                        String labelKeyComment = "";
+
+                        for (Node propertyNode: UtilXml.childNodeList(resourceElem.getFirstChild())) {
+                            if (propertyNode instanceof Element) {
+                                Element propertyElem = (Element)propertyNode;
+                                String labelKey = StringUtil.htmlSpecialChars(propertyElem.getAttribute("key"), true, true, false);
+                                String labelComment = "";
+
+                                for (Node valueNode: UtilXml.childNodeList(propertyElem.getFirstChild())) {
+                                    if (valueNode instanceof Element) {
+                                        Element valueElem = (Element)valueNode;
+                                        String localeName = valueElem.getAttribute("xml:lang");
+                                        String labelValue = StringUtil.htmlSpecialChars(UtilXml.nodeValue(valueElem.getFirstChild()), true, true, false);
+                                        LabelInfo label = (LabelInfo)labels.get(labelKey + keySeparator + fileName);
+
+                                        if (UtilValidate.isEmpty(label)) {
+                                            label = new LabelInfo(labelKey, labelKeyComment, fileName, componentName, localeName, labelValue, labelComment);
+                                            labels.put(labelKey + keySeparator + fileName, label);
+                                        } else {
+                                            if (label.setLabelValue(localeName, labelValue, labelComment, false)) {
+                                                duplicatedLocales++;
+                                            }
                                         }
+                                        localesFound.add(localeName);
+                                        componentNamesFound.add(componentName);
+                                        fileNamesFound.put(fileName, resourceFile.toURI().toString());
+                                        fileComponent.put(fileName, componentName);
+                                        labelComment = "";
+                                    } else if (valueNode instanceof Comment) {
+                                        labelComment = labelComment + StringUtil.htmlSpecialChars(valueNode.getNodeValue(), true, true, false);
                                     }
-                                    localesFound.add(localeName);
-                                    componentNamesFound.add(componentName);
-                                    fileNamesFound.put(fileName, resourceFile.toURI().toString());
-                                    fileComponent.put(fileName, componentName);
-                                    labelComment = "";
-                                } else if (valueNode instanceof Comment) {
-                                    labelComment = labelComment + StringUtil.htmlSpecialChars(valueNode.getNodeValue(), true, true, false);
                                 }
+                                labelKeyComment = "";
+                            } else if (propertyNode instanceof Comment) {
+                                labelKeyComment = labelKeyComment + StringUtil.htmlSpecialChars(propertyNode.getNodeValue(), true, true, false);
                             }
-                            labelKeyComment = "";
-                        } else if (propertyNode instanceof Comment) {
-                            labelKeyComment = labelKeyComment + StringUtil.htmlSpecialChars(propertyNode.getNodeValue(), true, true, false);
                         }
                     }
+                    if (!sharkComponent) {
+                        componentName = "shark";
+                        resourceFiles = FileUtil.findXmlFiles(System.getProperty("ofbiz.home") + "/specialpurpose/shark", null, "resource", null);
+                        sharkComponent = true;
+                    } else {
+                        cycle = false;
+                    }
                 }
             }
 
@@ -159,6 +171,18 @@
         duplicatedLocalesLabels = duplicatedLocales;
     }
 
+    public static GenericDelegator getDelegator() {
+        return delegator;
+    }
+
+    public static ModelReader getModelReader() {
+        return entityModelReader;
+    }
+
+    public static DispatchContext getDispatchContext() {
+        return dispatchContext;
+    }
+
     public static Map<String, LabelInfo> getLabels() {
         return labels;
     }
@@ -186,39 +210,43 @@
     public static Map<String, Map<String, Integer>> getReferences() {
         return references;
     }
-    
+
     public static Set<String> getLabelsList() {
         return labels.keySet();
     }
-    
+
     public static Set<String> getReferencesList() {
         return references.keySet();
     }
-    
+
     public static int getLabelReferenceFile(String key) {
         int refFile = 0;
         boolean keyFound = false;
-        
+
+        if (key == null) {
+            key = "";
+        }
+
         for (Map.Entry<String, String> e: fileNamesFound.entrySet()) {
             String keyToSearch = key + keySeparator + e.getKey();
-            
+
             if (labels.containsKey(keyToSearch)) {
                 keyFound = true;
                 break;
             }
         }
-        
+
         if (!keyFound) {
             Map<String, Integer> reference = references.get(key);
-            
+
             if (UtilValidate.isNotEmpty(reference)) {
                 refFile = reference.size();
             }
         }
-        
+
         return refFile;
     }
-    
+
     public static int getDuplicatedLocalesLabels() {
         return duplicatedLocalesLabels;
     }
@@ -266,6 +294,35 @@
         return ServiceUtil.returnSuccess();
     }
 
+    public static Map<String, Object> updateAndSaveLabelKey(DispatchContext dctx, Map<String, ? extends Object> context) {
+        String key = (String)context.get("key");
+        String keyComment = (String)context.get("keyComment");
+        String update_label = (String)context.get("update_label");
+        String fileName = (String)context.get("fileName");
+        String confirm = (String)context.get("confirm");
+        String removeLabel = (String)context.get("removeLabel");
+        List<String> localeNames = UtilGenerics.cast(context.get("localeNames"));
+        List<String> localeValues = UtilGenerics.cast(context.get("localeValues"));
+        List<String> localeComments = UtilGenerics.cast(context.get("localeComments"));
+        Locale locale = (Locale) context.get("locale");
+        LocalDispatcher dispatcher = dctx.getDispatcher();
+
+        Map<String, Object> contextInput = UtilMisc.toMap("key", key, "keyComment", keyComment, "update_label", update_label,
+                                                          "fileName", fileName, "confirm", confirm, "removeLabel", removeLabel,
+                                                          "localeNames", localeNames, "localeValues", localeValues, "localeComments", localeComments);
+        try {
+            Map<String, Object> updatedKey = dispatcher.runSync("updateLabelKey", contextInput);
+
+            if (ServiceUtil.isError(updatedKey)) {
+                return updatedKey;
+            } else {
+                return dispatcher.runSync("saveLabelsToXmlFile", UtilMisc.toMap("fileName", fileName));
+            }
+        } catch (GenericServiceException e) {
+            return ServiceUtil.returnError("error on saving label key :" + key);
+        }
+    }
+
     private static int updateLabelValue(List<String> localeNames, List<String> localeValues, List<String> localeComments, LabelInfo label, String key, String keyComment, String fileName) {
         int notEmptyLabels = 0;
         int i = 0;
@@ -295,3 +352,4 @@
         return notEmptyLabels;
     }
 }
+

Modified: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelReferences.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelReferences.java?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelReferences.java (original)
+++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelReferences.java Fri Feb 27 23:01:41 2009
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -23,7 +23,12 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.TreeMap;
+import java.util.TreeSet;
+
+import javolution.util.FastList;
+import javolution.util.FastMap;
 
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.FileUtil;
@@ -31,7 +36,14 @@
 import org.ofbiz.base.util.UtilFormatOut;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.entity.GenericDelegator;
 import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.condition.EntityComparisonOperator;
+import org.ofbiz.entity.condition.EntityCondition;
+import org.ofbiz.entity.condition.EntityConditionList;
+import org.ofbiz.entity.condition.EntityExpr;
+import org.ofbiz.entity.condition.EntityOperator;
 import org.ofbiz.entity.model.ModelEntity;
 import org.ofbiz.entity.model.ModelField;
 import org.ofbiz.service.ModelParam;
@@ -46,46 +58,55 @@
     private static final String uiLabelMapInLayoutSettings = "uiLabelMap.";
     private static final String formFieldTitle = "FormFieldTitle_";
     private static final String getMessage = "UtilProperties.getMessage";
+    private static final String getEntityLabel = ".get(\"";
+    private static final String startExpression = "${";
+    private static final String endExpression = "}";
     private static Map<String, Map<String, Integer>> references = null;
-    
+
     public static Map<String, Map<String, Integer>> getLabelReferences() throws GeneralException {
         references = new TreeMap<String, Map<String, Integer>>();
-        
+
         // get labels from FTL files
         getLabelsFromFtlFiles();
-        
+
         // get labels from java files
         getLabelsFromJavaFiles();
-        
+
         // get labels from simple method files
         getLabelsFromSimpleMethodFiles();
-        
+
         // get labels from form widgets files
         getLabelsFromFormWidgets();
-        
+
         // get labels from screen widgets files
         getLabelsFromScreenWidgets();
-        
+
         // get labels from menu widgets files
         getLabelsFromMenuWidgets();
-        
+
+        // get labels from tree widgets files
+        getLabelsFromTreeWidgets();
+
+        // get labels from Ofbiz components files
+        getLabelsFromOfbizComponents();
+
         return  references;
     }
-    
+
     private static void getLabelsFromFtlFiles() throws GeneralException {
         try {
             List<File> ftlFiles = FileUtil.findFiles("ftl", null, null, uiLabelMap);
-            
+
             for (File ftlFile: ftlFiles) {
                 String fileNameURI = ftlFile.toURI().toString();
                 String inFile = FileUtil.readString("UTF-8", ftlFile);
                 int pos = 0;
                 while (pos >= 0){
                     pos = inFile.indexOf(uiLabelMap, pos);
-                    
+
                     if (pos >= 0) {
                         int endLabel = inFile.indexOf("}", pos);
-                        
+
                         if (endLabel >= 0) {
                             String labelKey = inFile.substring(pos + uiLabelMap.length(), endLabel);
                             setLabelReference(labelKey, fileNameURI);
@@ -96,15 +117,22 @@
                     }
                 }
             }
+            /*
+            ftlFiles = FileUtil.findFiles("ftl", null, null, getEntityLabel);
+
+            for (File ftlFile: ftlFiles) {
+                getFtlEntityLabels(ftlFile, getEntityLabel);
+            }
+            */
         } catch(IOException ioe) {
             throw new GeneralException(ioe.getMessage());
         }
     }
-    
+
     private static void getLabelsFromJavaFiles() throws GeneralException {
         try {
             List<File> javaFiles = FileUtil.findFiles("java", null, null, getMessage);
-            
+
             for (File javaFile: javaFiles) {
                 getJavaLabels(javaFile, getMessage);
             }
@@ -112,7 +140,7 @@
             throw new GeneralException(ioe.getMessage());
         }
     }
-    
+
     private static void getJavaLabels(File javaFile, String message) throws GeneralException {
         try {
             String fileNameURI = javaFile.toURI().toString();
@@ -120,32 +148,32 @@
             int pos = 0;
             while (pos >= 0){
                 pos = inFile.indexOf(message, pos);
-                
+
                 if (pos >= 0) {
                     int offSet = (pos + 200 > inFile.length()) ? inFile.length() : pos + 200;
                     String searchComma = inFile.substring(pos, offSet);
                     int firstComma = searchComma.indexOf(",\"", 0);
-                    
+
                     if (firstComma < 0) {
                         firstComma = searchComma.indexOf(", \"", 0);
                         pos = pos + firstComma + 3;
                     } else {
                         pos = pos + firstComma + 2;
                     }
-                    
+
                     if (firstComma >= 0) {
                         offSet = (pos + 100 > inFile.length()) ? inFile.length() : pos + 100;
                         searchComma = inFile.substring(pos, offSet);
                         int secondComma = searchComma.indexOf("\",", 0);
                         int endString = pos;
-                        
+
                         if (secondComma < 0) {
                             secondComma = searchComma.indexOf("\" ,", 0);
                             endString = endString + secondComma + 1;
                         } else {
                             endString = endString + secondComma;
                         }
-                        
+
                         if (secondComma >= 0) {
                             setLabelReference(inFile.substring(pos, endString), fileNameURI);
                             pos = endString;
@@ -158,16 +186,50 @@
             throw new GeneralException(ioe.getMessage());
         }
     }
-    
+
+    private static void getFtlEntityLabels(File javaFile, String message) throws GeneralException {
+        try {
+            String fileNameURI = javaFile.toURI().toString();
+            String inFile = FileUtil.readString("UTF-8", javaFile);
+            int pos = 0;
+            while (pos >= 0){
+                pos = inFile.indexOf(message, pos);
+
+                if (pos >= 0) {
+                    int offSet = (pos + 200 > inFile.length()) ? inFile.length() : pos + 200;
+                    String searchDoubleQuote = inFile.substring(pos + 6, offSet);
+                    int firstComma = searchDoubleQuote.indexOf("\"", 0);
+
+                    if (firstComma >= 0) {
+                        offSet = (firstComma + 100 > inFile.length()) ? inFile.length() : firstComma + 100;
+                        String searchLocale = searchDoubleQuote.substring(firstComma, offSet);
+                        int endMethodName = searchLocale.indexOf(", locale)", 0);
+
+                        if (endMethodName < 0) {
+                            endMethodName = searchLocale.indexOf(",locale)", 0);
+                        }
+                        if (endMethodName >= 0) {
+                            setLabelReference(inFile.substring(pos + 6, pos + 6 + firstComma), fileNameURI);
+                            pos = pos + 6;
+                        }
+                    }
+                    pos += 1;
+                }
+            }
+        } catch(IOException ioe) {
+            throw new GeneralException(ioe.getMessage());
+        }
+    }
+
     private static void getLabelsFromSimpleMethodFiles() throws GeneralException {
         try {
             List<File> simpleMethodsFiles = FileUtil.findXmlFiles(null, null, "simple-methods", "http://ofbiz.apache.org/dtds/simple-methods.xsd");
-            
+
             for (File simpleMethodFile: simpleMethodsFiles) {
                 String fileNameURI = simpleMethodFile.toURI().toString();
                 Document simpleMethodDocument = UtilXml.readXmlDocument(simpleMethodFile.toURI().toURL());
                 Element rootElem = simpleMethodDocument.getDocumentElement();
-                
+
                 for (Element elem1: UtilXml.childElementList(rootElem)) {
                     checkSimpleMethodTag(elem1, fileNameURI);
                     for (Element elem2: UtilXml.childElementList(elem1)) {
@@ -193,41 +255,54 @@
             throw new GeneralException(e.getMessage());
         }
     }
-    
+
     private static void checkSimpleMethodTag(Element elem, String fileNameURI) throws GeneralException {
         // fail-property labels
         if ("fail-property".equals(elem.getTagName())) {
             getFailPropertyTag(elem, fileNameURI);
-        // property-to-field labels
-        } else if ("property-to-field".equals(elem.getTagName())) {
-            getPropertyToFieldTag(elem, fileNameURI);
         }
     }
-    
+
     private static void getLabelsFromFormWidgets() throws GeneralException {
         try {
             List<File> formsFiles = FileUtil.findXmlFiles(null, null, "forms", "http://ofbiz.apache.org/dtds/widget-form.xsd");
-            
+
             for (File formsFile: formsFiles) {
+                Map<String, String> autoFieldsEntity = FastMap.newInstance();
+                Map<String, String> autoFieldsService = FastMap.newInstance();
                 String fileNameURI = formsFile.toURI().toString();
                 Document formDocument = UtilXml.readXmlDocument(formsFile.toURI().toURL());
                 Element rootElem = formDocument.getDocumentElement();
-                
+
                 for (Element elem1: UtilXml.childElementList(rootElem)) {
-                    checkFormsTag(elem1, fileNameURI);
+                    checkFormsTag(elem1, fileNameURI, autoFieldsEntity, autoFieldsService);
                     for (Element elem2: UtilXml.childElementList(elem1)) {
-                        checkFormsTag(elem2, fileNameURI);
+                        checkFormsTag(elem2, fileNameURI, autoFieldsEntity, autoFieldsService);
                         for (Element elem3: UtilXml.childElementList(elem2)) {
-                            checkFormsTag(elem3, fileNameURI);
+                            checkFormsTag(elem3, fileNameURI, autoFieldsEntity, autoFieldsService);
                             for (Element elem4: UtilXml.childElementList(elem3)) {
-                                checkFormsTag(elem4, fileNameURI);
+                                checkFormsTag(elem4, fileNameURI, autoFieldsEntity, autoFieldsService);
                                 for (Element elem5: UtilXml.childElementList(elem4)) {
-                                    checkFormsTag(elem5, fileNameURI);
+                                    checkFormsTag(elem5, fileNameURI, autoFieldsEntity, autoFieldsService);
                                 }
                             }
                         }
                     }
                 }
+
+                for (Map.Entry<String, String> entry: autoFieldsEntity.entrySet()) {
+                    if ("N".equals(entry.getValue())) {
+                        String labelKey = formFieldTitle + entry.getKey();
+                        setLabelReference(labelKey, fileNameURI);
+                    }
+                }
+
+                for (Map.Entry<String, String> entry: autoFieldsService.entrySet()) {
+                    if ("N".equals(entry.getValue())) {
+                        String labelKey = formFieldTitle + entry.getKey();
+                        setLabelReference(labelKey, fileNameURI);
+                    }
+                }
             }
         } catch(IOException ioe) {
             throw new GeneralException(ioe.getMessage());
@@ -235,17 +310,17 @@
             throw new GeneralException(e.getMessage());
         }
     }
-    
-    private static void checkFormsTag(Element elem, String fileNameURI) throws GeneralException {
+
+    private static void checkFormsTag(Element elem, String fileNameURI, Map<String, String> autoFieldsEntity, Map<String, String> autoFieldsService) throws GeneralException {
         // auto fields entity labels
         if ("auto-fields-entity".equals(elem.getTagName())) {
-            getAutoFieldsEntityTag(elem, fileNameURI);
+            getAutoFieldsEntityTag(elem, fileNameURI, autoFieldsEntity);
         // auto fields service labels
         } else if ("auto-fields-service".equals(elem.getTagName())) {
-            getAutoFieldsServiceTag(elem, fileNameURI);
+            getAutoFieldsServiceTag(elem, fileNameURI, autoFieldsService);
         // field labels
         } else if ("field".equals(elem.getTagName())) {
-            getFieldTag(elem, fileNameURI);
+            getFieldTag(elem, fileNameURI, autoFieldsEntity, autoFieldsService);
         // option description labels
         } else if ("option".equals(elem.getTagName())) {
             getOptionTag(elem, fileNameURI);
@@ -253,18 +328,24 @@
         } else if ("hyperlink".equals(elem.getTagName()) ||
                    "sub-hyperlink".equals(elem.getTagName())) {
             getHyperlinkTag(elem, fileNameURI);
+        // entity-options labels
+        } else if ("entity-options".equals(elem.getTagName())) {
+            getEntityOptionsTag(elem, fileNameURI);
+        // display-entity labels
+        } else if ("display-entity".equals(elem.getTagName())) {
+            getDisplayEntityTag(elem, fileNameURI);
         }
     }
-    
+
     private static void getLabelsFromScreenWidgets() throws GeneralException {
         try {
             List<File> screensFiles = FileUtil.findXmlFiles(null, null, "screens", "http://ofbiz.apache.org/dtds/widget-screen.xsd");
-            
+
             for (File screensFile: screensFiles) {
                 String fileNameURI = screensFile.toURI().toString();
                 Document screenDocument = UtilXml.readXmlDocument(screensFile.toURI().toURL());
                 Element rootElem = screenDocument.getDocumentElement();
-                
+
                 for (Element elem1: UtilXml.childElementList(rootElem)) {
                     checkScreensTag(elem1, fileNameURI);
                     for (Element elem2: UtilXml.childElementList(elem1)) {
@@ -314,7 +395,7 @@
             throw new GeneralException(e.getMessage());
         }
     }
-    
+
     private static void checkScreensTag(Element elem, String fileNameURI) {
         // set labels
         if ("set".equals(elem.getTagName())) {
@@ -330,16 +411,16 @@
             getLinkTag(elem, fileNameURI);
         }
     }
-    
+
     private static void getLabelsFromMenuWidgets() throws GeneralException {
         try {
             List<File> menusFiles = FileUtil.findXmlFiles(null, null, "menus", "http://ofbiz.apache.org/dtds/widget-menu.xsd");
-            
+
             for (File menuFiles: menusFiles) {
                 String fileNameURI = menuFiles.toURI().toString();
                 Document menuDocument = UtilXml.readXmlDocument(menuFiles.toURI().toURL());
                 Element rootElem = menuDocument.getDocumentElement();
-                
+
                 for (Element elem1: UtilXml.childElementList(rootElem)) {
                     checkMenuTag(elem1, fileNameURI);
                     for (Element elem2: UtilXml.childElementList(elem1)) {
@@ -362,23 +443,92 @@
             throw new GeneralException(e.getMessage());
         }
     }
-    
+
     private static void checkMenuTag(Element elem, String fileNameURI) {
         // menu-item labels
         if ("menu-item".equals(elem.getTagName())) {
             getMenuItemTag(elem, fileNameURI);
         }
     }
-    
+
+    private static void getLabelsFromTreeWidgets() throws GeneralException {
+        try {
+            List<File> treeFiles = FileUtil.findXmlFiles(null, null, "menus", "http://ofbiz.apache.org/dtds/widget-tree.xsd");
+
+            for (File treeFile: treeFiles) {
+                String fileNameURI = treeFile.toURI().toString();
+                Document menuDocument = UtilXml.readXmlDocument(treeFile.toURI().toURL());
+                Element rootElem = menuDocument.getDocumentElement();
+
+                for (Element elem1: UtilXml.childElementList(rootElem)) {
+                    checkTreeTag(elem1, fileNameURI);
+                    for (Element elem2: UtilXml.childElementList(elem1)) {
+                        checkTreeTag(elem2, fileNameURI);
+                        for (Element elem3: UtilXml.childElementList(elem2)) {
+                            checkTreeTag(elem3, fileNameURI);
+                            for (Element elem4: UtilXml.childElementList(elem3)) {
+                                checkTreeTag(elem4, fileNameURI);
+                                for (Element elem5: UtilXml.childElementList(elem4)) {
+                                    checkTreeTag(elem5, fileNameURI);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        } catch(IOException ioe) {
+            throw new GeneralException(ioe.getMessage());
+        } catch(Exception e) {
+            throw new GeneralException(e.getMessage());
+        }
+    }
+
+    private static void checkTreeTag(Element elem, String fileNameURI) {
+        // link labels
+        if ("link".equals(elem.getTagName())) {
+            getLinkTag(elem, fileNameURI);
+        }
+    }
+
+    private static void getLabelsFromOfbizComponents() throws GeneralException {
+        try {
+            List<File> componentsFiles = FileUtil.findXmlFiles(null, null, "ofbiz-component", "http://ofbiz.apache.org/dtds/ofbiz-component.xsd");
+
+            for (File componentFile: componentsFiles) {
+                String fileNameURI = componentFile.toURI().toString();
+                Document menuDocument = UtilXml.readXmlDocument(componentFile.toURI().toURL());
+                Element rootElem = menuDocument.getDocumentElement();
+
+                for (Element elem1: UtilXml.childElementList(rootElem)) {
+                    checkOfbizComponentTag(elem1, fileNameURI);
+                    for (Element elem2: UtilXml.childElementList(elem1)) {
+                        checkOfbizComponentTag(elem2, fileNameURI);
+                    }
+                }
+            }
+        } catch(IOException ioe) {
+            throw new GeneralException(ioe.getMessage());
+        } catch(Exception e) {
+            throw new GeneralException(e.getMessage());
+        }
+    }
+
+    private static void checkOfbizComponentTag(Element elem, String fileNameURI) {
+        // webapp labels
+        if ("webapp".equals(elem.getTagName())) {
+            getWebappTag(elem, fileNameURI);
+        }
+    }
+
     private static void setLabelReference(String labelKey, String fileNameURI) {
         Map<String, Integer> reference = references.get(labelKey);
         if (UtilValidate.isEmpty(reference)) {
             reference = new TreeMap<String, Integer>();
             reference.put(fileNameURI, new Integer(1));
-            references.put(labelKey, reference); 
+            references.put(labelKey, reference);
         } else {
             Integer labelsInFile = reference.get(fileNameURI);
-            
+
             if (UtilValidate.isEmpty(labelsInFile)) {
                 labelsInFile = new Integer(1);
             }
@@ -388,19 +538,19 @@
             reference.put(fileNameURI, labelsInFile);
         }
     }
-    
+
     private static boolean getLabelFromTag(Element element, String fileNameURI, String attributeValue, String stringToSearch) {
         boolean stringFound = false;
-        
+
         if (UtilValidate.isNotEmpty(attributeValue)) {
             int pos = 0;
-            
+
             while (pos >= 0){
                 pos = attributeValue.indexOf(stringToSearch, pos);
-                
+
                 if (pos >= 0) {
                     int graph = attributeValue.indexOf("}", pos);
-                    
+
                     if (graph >= 0) {
                         String labelKey = attributeValue.substring(pos + stringToSearch.length(), graph);
                         setLabelReference(labelKey, fileNameURI);
@@ -413,12 +563,12 @@
         }
         return stringFound;
     }
-    
+
     private static void getSetTag(Element element, String fileNameURI) {
         String setField = UtilFormatOut.checkNull(element.getAttribute("field"));
         String setValue = UtilFormatOut.checkNull(element.getAttribute("value"));
         String fromField = UtilFormatOut.checkNull(element.getAttribute("from-field"));
-        
+
         if (UtilValidate.isNotEmpty(setField)) {
             if (UtilValidate.isNotEmpty(setValue) &&
                 ("applicationTitle".equals(setField) ||
@@ -426,7 +576,7 @@
                  "title".equals(setField))) {
                 // set field with hardcoded labels
                 if (!getLabelFromTag(element, fileNameURI, setValue, uiLabelMap)) {
-                    setLabelReference(setValue, fileNameURI);;
+                    setLabelReference(setValue, fileNameURI);
                 }
             } else if (UtilValidate.isNotEmpty(fromField) &&
                        ("layoutSettings.companyName".equals(setField) ||
@@ -441,71 +591,71 @@
             }
         }
     }
-    
+
     private static void getScreenletTag(Element element, String fileNameURI) {
         String screenTitle = UtilFormatOut.checkNull(element.getAttribute("title"));
-        
+
         if (UtilValidate.isNotEmpty(screenTitle)) {
             // screenlet title with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, screenTitle, uiLabelMap)) {
-                setLabelReference(screenTitle, fileNameURI);;
+                setLabelReference(screenTitle, fileNameURI);
             }
         }
     }
-    
-    private static void getAutoFieldsEntityTag(Element element, String fileNameURI) throws GeneralException {
+
+    private static void getAutoFieldsEntityTag(Element element, String fileNameURI, Map<String, String> autoFieldsEntity) throws GeneralException {
         try {
             String entityName = UtilFormatOut.checkNull(element.getAttribute("entity-name"));
             String defaultFieldType = UtilFormatOut.checkNull(element.getAttribute("default-field-type"));
-            
+
             if (UtilValidate.isNotEmpty(entityName) && UtilValidate.isNotEmpty(defaultFieldType) && (!("hidden".equals(defaultFieldType)))) {
-                ModelEntity entity = LabelManagerFactory.entityModelReader.getModelEntity(entityName);
-                
+                ModelEntity entity = LabelManagerFactory.getModelReader().getModelEntity(entityName);
+
                 for (Iterator<ModelField> f = entity.getFieldsIterator(); f.hasNext();) {
                     ModelField field = f.next();
-                    setLabelReference(formFieldTitle + field.getName(), fileNameURI);
+                    autoFieldsEntity.put(field.getName(), "N");
                 }
             }
         } catch(Exception e) {
             throw new GeneralException(e.getMessage());
         }
     }
-    
-    private static void getAutoFieldsServiceTag(Element element, String fileNameURI) throws GeneralException {
+
+    private static void getAutoFieldsServiceTag(Element element, String fileNameURI, Map<String, String> autoFieldsService) throws GeneralException {
         try {
             String serviceName = UtilFormatOut.checkNull(element.getAttribute("service-name"));
             String defaultFieldType = UtilFormatOut.checkNull(element.getAttribute("default-field-type"));
-            
+
             if (UtilValidate.isNotEmpty(serviceName) && (!("hidden".equals(defaultFieldType)))) {
-                ModelService modelService = LabelManagerFactory.dispatchContext.getModelService(serviceName);
+                ModelService modelService = LabelManagerFactory.getDispatchContext().getModelService(serviceName);
                 List<ModelParam> modelParams = modelService.getInModelParamList();
                 Iterator<ModelParam> modelParamIter = modelParams.iterator();
-                
+
                 while (modelParamIter.hasNext()) {
                     ModelParam modelParam = (ModelParam) modelParamIter.next();
                     // skip auto params that the service engine populates...
                     if ("userLogin".equals(modelParam.name) || "locale".equals(modelParam.name) || "timeZone".equals(modelParam.name)) {
                         continue;
                     }
-                    
+
                     if (modelParam.formDisplay) {
                         if (UtilValidate.isNotEmpty(modelParam.entityName) && UtilValidate.isNotEmpty(modelParam.fieldName)) {
                             ModelEntity modelEntity;
                             try {
-                                modelEntity = LabelManagerFactory.entityModelReader.getModelEntity(modelParam.entityName);
-                                
+                                modelEntity = LabelManagerFactory.getModelReader().getModelEntity(modelParam.entityName);
+
                                 if (modelEntity != null) {
                                     ModelField modelField = modelEntity.getField(modelParam.fieldName);
-                                    
+
                                     if (modelField != null) {
-                                        setLabelReference(formFieldTitle + modelField.getName(), fileNameURI);
+                                        autoFieldsService.put(modelField.getName(), "N");
                                     }
                                 }
                             } catch (GenericEntityException e) {
                                 Debug.logError(e, module);
                             }
                         }
-                        
+
                         setLabelReference(formFieldTitle + modelParam.name, fileNameURI);
                     }
                 }
@@ -514,25 +664,34 @@
             throw new GeneralException(e.getMessage());
         }
     }
-    
+
     private static void getHyperlinkTag(Element element, String fileNameURI) {
         String hyperlinkDescription = UtilFormatOut.checkNull(element.getAttribute("description"));
-        
+
         if (UtilValidate.isNotEmpty(hyperlinkDescription)) {
             // hyperlink description with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, hyperlinkDescription, uiLabelMap)) {
-                setLabelReference(hyperlinkDescription, fileNameURI);;
+                setLabelReference(hyperlinkDescription, fileNameURI);
             }
         }
     }
-    
-    private static void getFieldTag(Element element, String fileNameURI) {
-        String labelKey = UtilFormatOut.checkNull(element.getAttribute("name"));
-        labelKey = formFieldTitle + labelKey;
-        String fieldTitle =  UtilFormatOut.checkNull(element.getAttribute("title"));
-        String tooltip =  UtilFormatOut.checkNull(element.getAttribute("tooltip"));
-        boolean escludeField= false;
-        
+
+    private static void getFieldTag(Element element, String fileNameURI, Map<String, String> autoFieldsEntity, Map<String, String> autoFieldsService) {
+        String fieldName = UtilFormatOut.checkNull(element.getAttribute("name"));
+        String labelKey = formFieldTitle + fieldName;
+        String fieldTitle = UtilFormatOut.checkNull(element.getAttribute("title"));
+        String tooltip = UtilFormatOut.checkNull(element.getAttribute("tooltip"));
+
+        if (UtilValidate.isNotEmpty(autoFieldsEntity) && UtilValidate.isNotEmpty(autoFieldsEntity.get(fieldName))) {
+            autoFieldsEntity.put(fieldName, "Y");
+        }
+
+        if (UtilValidate.isNotEmpty(autoFieldsService) && UtilValidate.isNotEmpty(autoFieldsService.get(fieldName))) {
+            autoFieldsService.put(fieldName, "Y");
+        }
+
+        boolean escludeField = false;
+
         for (Element fieldTypeElem: UtilXml.childElementList(element)) {
             if ("hidden".equals(fieldTypeElem.getTagName())) {
                 escludeField = true;
@@ -540,7 +699,7 @@
                 escludeField = true;
             }
         }
-        
+
         if (!escludeField) {
             // field name labels
             if (UtilValidate.isEmpty(fieldTitle)) {
@@ -548,88 +707,278 @@
             } else {
                 // field title with hardcoded labels
                 if (!getLabelFromTag(element, fileNameURI, fieldTitle, uiLabelMap)) {
-                    setLabelReference(fieldTitle, fileNameURI);;
+                    setLabelReference(fieldTitle, fileNameURI);
                 }
             }
-            
+
             if (UtilValidate.isNotEmpty(tooltip)) {
                 // tooltip with hardcoded labels
                 if (!getLabelFromTag(element, fileNameURI, tooltip, uiLabelMap)) {
-                    setLabelReference(tooltip, fileNameURI);;
+                    setLabelReference(tooltip, fileNameURI);
                 }
             }
         }
     }
-    
+
     private static void getLabelTag(Element element, String fileNameURI) {
         String labelText = UtilFormatOut.checkNull(element.getAttribute("text"));
         String labelValue = UtilFormatOut.checkNull(UtilXml.elementValue(element));
-        
+
         // label text labels
         if (UtilValidate.isNotEmpty(labelText)) {
             // label text with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, labelText, uiLabelMap)) {
-                setLabelReference(labelText, fileNameURI);;
+                setLabelReference(labelText, fileNameURI);
             }
         // label value labels
         } else if (UtilValidate.isNotEmpty(labelValue)) {
             // label value with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, labelValue, uiLabelMap)) {
-                setLabelReference(labelValue, fileNameURI);;
+                setLabelReference(labelValue, fileNameURI);
             }
         }
     }
-    
+
     private static void getMenuItemTag(Element element, String fileNameURI) {
         String menuItemTitle = UtilFormatOut.checkNull(element.getAttribute("title"));
-        
+
         if (UtilValidate.isNotEmpty(menuItemTitle)) {
             // menu item title with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, menuItemTitle, uiLabelMap)) {
-                setLabelReference(menuItemTitle, fileNameURI);;
+                setLabelReference(menuItemTitle, fileNameURI);
             }
         }
     }
-    
+
     private static void getFailPropertyTag(Element element, String fileNameURI) {
         String propertyValue = UtilFormatOut.checkNull(element.getAttribute("property"));
-        
+
         if (UtilValidate.isNotEmpty(propertyValue)) {
             // fail-property labels
             setLabelReference(propertyValue, fileNameURI);
         }
     }
-    
+
     private static void getOptionTag(Element element, String fileNameURI) {
         String description = UtilFormatOut.checkNull(element.getAttribute("description"));
-        
+
         if (UtilValidate.isNotEmpty(description)) {
             // option description with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, description, uiLabelMap)) {
-                setLabelReference(description, fileNameURI);;
+                setLabelReference(description, fileNameURI);
             }
         }
     }
-    
+
     private static void getLinkTag(Element element, String fileNameURI) {
         String linkText = UtilFormatOut.checkNull(element.getAttribute("text"));
-        
+
         if (UtilValidate.isNotEmpty(linkText)) {
             // link text with hardcoded labels
             if (!getLabelFromTag(element, fileNameURI, linkText, uiLabelMap)) {
-                setLabelReference(linkText, fileNameURI);;
+                setLabelReference(linkText, fileNameURI);
             }
         }
     }
-    
-    private static void getPropertyToFieldTag(Element element, String fileNameURI) {
-        String property = UtilFormatOut.checkNull(element.getAttribute("property"));
-        
-        // property-to-field labels
-        if (UtilValidate.isNotEmpty(property)) {
-            setLabelReference(property, fileNameURI);
+
+    private static void getWebappTag(Element element, String fileNameURI) {
+        String title = UtilFormatOut.checkNull(element.getAttribute("title"));
+        String appBarDisplay = UtilFormatOut.checkNull(element.getAttribute("app-bar-display"));
+        
+        // title labels
+        if (UtilValidate.isNotEmpty(title) && UtilValidate.isNotEmpty(appBarDisplay) && "true".equalsIgnoreCase(appBarDisplay)) {
+            setLabelReference(title, fileNameURI);
         }
     }
-}
 
+    private static void getEntityOptionsTag(Element element, String fileNameURI) {
+        String entityName = UtilFormatOut.checkNull(element.getAttribute("entity-name"));
+        String description = UtilFormatOut.checkNull(element.getAttribute("description"));
+        Set<String> fields = new TreeSet<String>();
+        Set<String> pkFields = new TreeSet<String>();
 
+        try {
+
+            if (UtilValidate.isNotEmpty(entityName)) {
+                GenericDelegator delegator = LabelManagerFactory.getDelegator();
+                ModelEntity entity = delegator.getModelEntity(entityName);
+
+                if (UtilValidate.isNotEmpty(entity) && UtilValidate.isNotEmpty(entity.getDefaultResourceName())) {
+                    int pos = 0;
+                    while (pos >= 0){
+                        pos = description.indexOf(startExpression, pos);
+
+                        if (pos >= 0) {
+                            int endLabel = description.indexOf(endExpression, pos);
+
+                            if (endLabel >= 0) {
+                                String fieldName = description.substring(pos + startExpression.length(), endLabel);
+                                if (!fieldName.startsWith(uiLabelMapInLayoutSettings)) {
+                                    for (Map.Entry<String, LabelInfo> e: LabelManagerFactory.getLabels().entrySet()) {
+                                        String keyToSearch = entityName + "." + fieldName;
+                                        if (e.getKey().startsWith(keyToSearch)) {
+                                            fields.add(fieldName);
+                                        }
+                                    }
+                                }
+                                pos = endLabel;
+                            } else {
+                                pos = pos + startExpression.length();
+                            }
+                        }
+                    }
+
+                    // Search primary keys of entity
+                    Iterator<ModelField> iter = entity.getPksIterator();
+                    while (iter != null && iter.hasNext()) {
+                        ModelField curField = iter.next();
+                        pkFields.add(curField.getName());
+                    }
+                    Iterator<String> fieldsIt = fields.iterator();
+                    while (fieldsIt != null && fieldsIt.hasNext()) {
+                        String fieldName = fieldsIt.next();
+                        List<EntityExpr> exprs = FastList.newInstance();
+                        for (Element entityConstraintElem: UtilXml.childElementList(element)) {
+                            if ("entity-constraint".equals(entityConstraintElem.getTagName())) {
+                                String constraintName = UtilFormatOut.checkNull(entityConstraintElem.getAttribute("name"));
+                                String constraintOperator = UtilFormatOut.checkNull(entityConstraintElem.getAttribute("operator"));
+                                String constraintValue = UtilFormatOut.checkNull(entityConstraintElem.getAttribute("value"));
+
+                                EntityComparisonOperator operator = new EntityComparisonOperator(EntityOperator.ID_EQUALS, "=");
+                                if ("between".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_BETWEEN, "BETWEEN");
+                                } else if ("greater-equals".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_GREATER_THAN_EQUAL_TO, ">=");
+                                } else if ("greater".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_GREATER_THAN, ">");
+                                } else if ("in".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_IN, "IN");
+                                } else if ("less-equals".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_LESS_THAN_EQUAL_TO, "<=");
+                                } else if ("less".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_LESS_THAN, "<");
+                                } else if ("like".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_LIKE, "LIKE");
+                                } else if ("not-equals".equals(constraintValue)) {
+                                    operator = new EntityComparisonOperator(EntityOperator.ID_NOT_EQUAL, "<>");
+                                }
+
+                                exprs.add(EntityCondition.makeCondition(constraintName, operator, constraintValue));
+                            }
+                        }
+
+                        EntityConditionList<EntityExpr> ecl = null;
+                        if (exprs.size() > 0) {
+                            ecl = EntityCondition.makeCondition(exprs, EntityOperator.AND);
+                        }
+
+                        StringBuilder keyBuffer = new StringBuilder();
+                        keyBuffer.append(entityName);
+                        keyBuffer.append('.');
+                        keyBuffer.append(fieldName);
+                        List<GenericValue> entityRecords = delegator.findList(entityName, ecl, pkFields, null, null, false);
+
+                        for (GenericValue entityRecord: entityRecords) {
+                            boolean pkFound = false;
+                            StringBuilder pkBuffer = new StringBuilder(keyBuffer.toString());
+                            Iterator <String> itPkFields = pkFields.iterator();
+                            while (itPkFields != null && itPkFields.hasNext()) {
+                                String pkField = itPkFields.next();
+                                Object pkFieldValue = entityRecord.get(pkField);
+
+                                if (UtilValidate.isNotEmpty(pkFieldValue)) {
+                                    pkBuffer.append('.');
+                                    pkBuffer.append(pkFieldValue);
+                                    pkFound = true;
+                                }
+                            }
+                            if (pkFound) {
+                                setLabelReference(pkBuffer.toString(), fileNameURI);
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (GenericEntityException e) {
+            Debug.logError(e, "Problem getting records from " + entityName, module);
+        }
+    }
+
+    private static void getDisplayEntityTag(Element element, String fileNameURI) {
+        String entityName = UtilFormatOut.checkNull(element.getAttribute("entity-name"));
+        String description = UtilFormatOut.checkNull(element.getAttribute("description"));
+        Set<String> fields = new TreeSet<String>();
+        Set<String> pkFields = new TreeSet<String>();
+
+        try {
+
+            if (UtilValidate.isNotEmpty(entityName)) {
+                GenericDelegator delegator = LabelManagerFactory.getDelegator();
+                ModelEntity entity = delegator.getModelEntity(entityName);
+
+                if (UtilValidate.isNotEmpty(entity) && UtilValidate.isNotEmpty(entity.getDefaultResourceName())) {
+                    int pos = 0;
+                    while (pos >= 0){
+                        pos = description.indexOf(startExpression, pos);
+
+                        if (pos >= 0) {
+                            int endLabel = description.indexOf(endExpression, pos);
+
+                            if (endLabel >= 0) {
+                                String fieldName = description.substring(pos + startExpression.length(), endLabel);
+                                if (!fieldName.startsWith(uiLabelMapInLayoutSettings)) {
+                                    for (Map.Entry<String, LabelInfo> e: LabelManagerFactory.getLabels().entrySet()) {
+                                        String keyToSearch = entityName + "." + fieldName;
+                                        if (e.getKey().startsWith(keyToSearch)) {
+                                            fields.add(fieldName);
+                                        }
+                                    }
+                                }
+                                pos = endLabel;
+                            } else {
+                                pos = pos + startExpression.length();
+                            }
+                        }
+                    }
+
+                    // Search primary keys of entity
+                    Iterator<ModelField> iter = entity.getPksIterator();
+                    while (iter != null && iter.hasNext()) {
+                        ModelField curField = iter.next();
+                        pkFields.add(curField.getName());
+                    }
+                    Iterator<String> fieldsIt = fields.iterator();
+                    while (fieldsIt != null && fieldsIt.hasNext()) {
+                        String fieldName = fieldsIt.next();
+                        StringBuilder keyBuffer = new StringBuilder();
+                        keyBuffer.append(entityName);
+                        keyBuffer.append('.');
+                        keyBuffer.append(fieldName);
+                        List<GenericValue> entityRecords = delegator.findList(entityName, null, pkFields, null, null, false);
+
+                        for (GenericValue entityRecord: entityRecords) {
+                            boolean pkFound = false;
+                            StringBuilder pkBuffer = new StringBuilder(keyBuffer.toString());
+                            Iterator <String> itPkFields = pkFields.iterator();
+                            while (itPkFields != null && itPkFields.hasNext()) {
+                                String pkField = itPkFields.next();
+                                Object pkFieldValue = entityRecord.get(pkField);
+
+                                if (UtilValidate.isNotEmpty(pkFieldValue)) {
+                                    pkBuffer.append('.');
+                                    pkBuffer.append(pkFieldValue);
+                                    pkFound = true;
+                                }
+                            }
+                            if (pkFound) {
+                                setLabelReference(pkBuffer.toString(), fileNameURI);
+                            }
+                        }
+                    }
+                }
+            }
+        } catch (GenericEntityException e) {
+            Debug.logError(e, "Problem getting records from " + entityName, module);
+        }
+    }
+}

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml Fri Feb 27 23:01:41 2009
@@ -490,6 +490,13 @@
         <response name="error" type="view" value="UpdateLabel"/>
     </request-map>
     
+    <request-map uri="UpdateAndSaveLabelKey">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="UpdateAndSaveLabelKey"/>
+        <response name="success" type="view" value="SearchLabels"/>
+        <response name="error" type="view" value="UpdateLabel"/>
+    </request-map>
+    
     <request-map uri="ViewReferences">
         <security https="true" auth="true"/>
         <response name="success" type="view" value="ViewReferences"/>

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/SearchLabels.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/SearchLabels.ftl?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/SearchLabels.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/SearchLabels.ftl Fri Feb 27 23:01:41 2009
@@ -70,7 +70,12 @@
         </td>
       </tr>
       <tr>
-        <td colspan="2">&nbsp;</td>
+        <td align="right" class="label">
+          ${uiLabelMap.WebtoolsLabelManagerOnlyNotUsedLabels}
+        </td>
+        <td align="left">
+          <input type="checkbox" name="onlyNotUsedLabels" value="Y" <#if parameters.onlyNotUsedLabels?exists && parameters.onlyNotUsedLabels == "Y">checked</#if>>
+        </td>
         <td align="right" class="label">
           ${uiLabelMap.WebtoolsLabelManagerOnlyMissingTranslations}
         </td>

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/UpdateLabel.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/UpdateLabel.ftl?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/UpdateLabel.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/UpdateLabel.ftl Fri Feb 27 23:01:41 2009
@@ -30,7 +30,7 @@
                         <input type="hidden" name="key" value="${parameters.sourceKey}">
                         <input type="hidden" name="update_label" value="Y">
                     <#else>
-                        <input type="text" name="key" size="70" value="${parameters.key?if_exists}">
+                        <input type="text" name="key" size="70">
                         <input type="hidden" name="update_label" value="N">
                     </#if>
                 </td>

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewFile.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewFile.ftl?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewFile.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewFile.ftl Fri Feb 27 23:01:41 2009
@@ -19,6 +19,9 @@
 <div class="screenlet-body">
     <table class="basic-table" cellspacing="3">
         <tr>
+            <td colspan="2"><b>${uiLabelMap.WebtoolsLabelManagerKey}</b> ${parameters.sourceKey?if_exists}</td>
+        </tr>
+        <tr>
             <td colspan="2"><b>${uiLabelMap.WebtoolsLabelManagerFileName}</b> ${parameters.fileName?if_exists}</td>
         </tr>
         <tr>

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewLabels.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewLabels.ftl?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewLabels.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewLabels.ftl Fri Feb 27 23:01:41 2009
@@ -17,10 +17,8 @@
 under the License.
 -->
 <div class="screenlet-body">
-  <#if parameters.searchLabels?exists>
-    <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.WebtoolsLabelManagerAddNew}</a>
-    <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.WebtoolsLabelManagerUpdateFile}</a>
-  </#if>
+  <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.WebtoolsLabelManagerAddNew}</a>
+  <a href="<@o...@ofbizUrl>" class="buttontext">${uiLabelMap.WebtoolsLabelManagerUpdateFile}</a>
   <table class="basic-table hover-bar" cellspacing="3">
     <tr class="header-row">
       <td>${uiLabelMap.WebtoolsLabelManagerRow}</td>
@@ -55,6 +53,12 @@
       <#assign previousKey = "">
       <#list labelsList as labelList>
         <#assign label = labels.get(labelList)>
+        <#assign labelKey = label.labelKey>
+        <#assign referenceNum = 0>
+        <#assign reference = references.get(labelKey)?if_exists>
+        <#if reference?exists && reference?has_content>
+          <#assign referenceNum = reference.size()>
+        </#if>
         <#assign showLabel = true>
         <#if parameters.onlyMissingTranslations?exists && parameters.onlyMissingTranslations == "Y" &&
              parameters.labelLocaleName?exists && parameters.labelLocaleName != "">
@@ -66,6 +70,9 @@
             </#if>
           </#if>
         </#if>
+        <#if showLabel && parameters.onlyNotUsedLabels?exists && parameters.onlyNotUsedLabels == "Y" && (referenceNum > 0)>
+            <#assign showLabel = false>
+        </#if>
         <#if showLabel && parameters.labelKey?exists && parameters.labelKey != "" && parameters.labelKey != label.labelKey>
           <#assign showLabel = false>
         </#if>
@@ -76,16 +83,10 @@
           <#assign showLabel = false>
         </#if>
         <#if showLabel == true>
-          <#assign labelKey = label.labelKey>
           <tr <#if rowNum == "1">class="alternate-row"</#if>>
             <td>${rowNumber}</td>
             <td><a href="<@o...@ofbizUrl>" <#if previousKey == labelKey>class="submenutext"</#if>>${label.labelKey}</a></td>
             <td>${label.fileName}</td>
-            <#assign referenceNum = 0>
-            <#assign reference = references.get(labelKey)?if_exists>
-            <#if reference?exists && reference?has_content>
-                 <#assign referenceNum = reference.size()>
-            </#if>
             <td align="center"><#if (referenceNum > 0)><a href="<@o...@ofbizUrl>">${referenceNum}</a><#else>${referenceNum}</#if></td>
             <#list localesFound as localeFound>
               <#assign labelVal = label.getLabelValue(localeFound)?if_exists>

Modified: ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewReferences.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewReferences.ftl?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewReferences.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewReferences.ftl Fri Feb 27 23:01:41 2009
@@ -30,15 +30,16 @@
                 <td>${uiLabelMap.WebtoolsLabelManagerFileName}</td>
                 <td>${uiLabelMap.WebtoolsLabelManagerReferences}</td>
             </tr>
-            <#if parameters.sourceKey?exists>
+            <#if parameters.sourceKey?exists && parameters.sourceKey?has_content>
               <#assign rowNum = "2">
               <#assign rowNumber = 1>
-              <#assign reference = references.get(parameters.sourceKey)>
-              <#assign entries = reference.entrySet()>
-              <#list entries as entry>
+              <#assign reference = references.get(parameters.sourceKey)?if_exists>
+              <#if reference?exists &&  reference?has_content>
+                <#assign entries = reference.entrySet()>
+                <#list entries as entry>
                 <tr>
                     <td>${rowNumber}</td>
-                    <td><a href="<@o...@ofbizUrl>">${entry.getKey()}</a></td>
+                    <td><a href="<@o...@ofbizUrl>">${entry.getKey()}</a></td>
                     <td>${entry.getValue()}</td>
                 </tr>
                 <#if rowNum == "2">
@@ -47,7 +48,8 @@
                   <#assign rowNum = "2">
                 </#if>
                 <#assign rowNumber = rowNumber + 1>
-              </#list>
+                </#list>
+              </#if>
             </#if>
         </table>
     </form>

Modified: ofbiz/trunk/framework/webtools/widget/EntityScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/EntityScreens.xml?rev=748732&r1=748731&r2=748732&view=diff
==============================================================================
--- ofbiz/trunk/framework/webtools/widget/EntityScreens.xml (original)
+++ ofbiz/trunk/framework/webtools/widget/EntityScreens.xml Fri Feb 27 23:01:41 2009
@@ -373,7 +373,7 @@
             <actions>
                 <property-map resource="CommonUiLabels" map-name="uiLabelMap" global="true"/>
                 <property-map resource="WebtoolsUiLabels" map-name="uiLabelMap" global="true"/>
-                <set field="titleProperty" value="PageTitleEntitySQLProcessor___"/>
+                <set field="titleProperty" value="PageTitleEntityEoModelBundle"/>
                 <set field="tabButtonItem" value="entityEoModelBundle"/>
             </actions>
             <widgets>