Author: adrianc
Date: Thu May 21 07:26:22 2009 New Revision: 776988 URL: http://svn.apache.org/viewvc?rev=776988&view=rev Log: Refactored the Webtools Label Manager - due to a multitude of problems. Most notably: 1. Not thread safe. 2. Server files were being read/written without multi-user synchronization 3. Reads all UI labels into memory, then stores them in static memory, PLUS 4. Finds all references of those labels in project files and store those references in static memory (!!!) 5. Doesn't follow best practices for UI layout It's amazing the original code worked. Even more amazing is the fact that this code made it into the project. Added: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java (with props) ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/labelmanager/ViewReferences.groovy (with props) Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml ofbiz/trunk/framework/webtools/servicedef/services.xml ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelInfo.java ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelManagerFactory.java ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelReferences.java ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/SaveLabelsToXmlFile.java ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/labelmanager/LabelManager.groovy ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/labelmanager/UpdateManager.groovy ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/actions/labelmanager/ViewFile.groovy ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/SearchLabels.ftl ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/UpdateLabel.ftl ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewFile.ftl ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewHardcodedLabels.ftl ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewLabels.ftl ofbiz/trunk/framework/webtools/webapp/webtools/labelmanager/ViewReferences.ftl ofbiz/trunk/framework/webtools/widget/LabelManagerScreens.xml Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml?rev=776988&r1=776987&r2=776988&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml (original) +++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.xml Thu May 21 07:26:22 2009 @@ -1512,6 +1512,11 @@ <value xml:lang="fr">Nom de fichier</value> <value xml:lang="it">Nome File</value> </property> + <property key="WebtoolsLabelManagerFindLabels"> + <value xml:lang="en">Find Labels</value> + <value xml:lang="fr">Gestionnaire de traduction</value> + <value xml:lang="it">Gestione delle label</value> + </property> <property key="WebtoolsLabelManagerHardcoded"> <value xml:lang="en">Hardcoded labels</value> <value xml:lang="it">Label non traducibili</value> Modified: ofbiz/trunk/framework/webtools/servicedef/services.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/servicedef/services.xml?rev=776988&r1=776987&r2=776988&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/servicedef/services.xml (original) +++ ofbiz/trunk/framework/webtools/servicedef/services.xml Thu May 21 07:26:22 2009 @@ -123,27 +123,10 @@ <attribute name="eomodeldFullPath" type="java.lang.String" mode="IN" optional="false"/> <attribute name="serviceName" type="java.lang.String" mode="IN" optional="false"/> </service> + <service name="saveLabelsToXmlFile" engine="java" location="org.ofbiz.webtools.labelmanager.SaveLabelsToXmlFile" invoke="saveLabelsToXmlFile" auth="true" use-transaction="false"> <description>Save labels to xml file</description> - <attribute name="labelFileName" type="String" mode="IN" optional="true"/> - </service> - <service name="updateLabelKey" engine="java" location="org.ofbiz.webtools.labelmanager.LabelManagerFactory" - invoke="updateLabelKey" auth="true" use-transaction="false"> - <description>Update Label Key</description> - <attribute name="key" type="String" mode="IN" optional="true"/> - <attribute name="keyComment" type="String" mode="IN" optional="true"/> - <attribute name="update_label" type="String" mode="IN" optional="false"/> - <attribute name="fileName" type="String" mode="IN" optional="false"/> - <attribute name="confirm" type="String" mode="IN" optional="true"/> - <attribute name="removeLabel" type="String" mode="IN" optional="true"/> - <attribute name="localeNames" type="List" mode="IN" optional="true"/> - <attribute name="localeValues" type="List" mode="IN" optional="true"/> - <attribute name="localeComments" type="List" mode="IN" optional="true"/> - </service> - <service name="updateAndSaveLabelKey" engine="java" location="org.ofbiz.webtools.labelmanager.LabelManagerFactory" - invoke="updateAndSaveLabelKey" auth="true" use-transaction="false"> - <description>Update Label Key</description> <attribute name="key" type="String" mode="IN" optional="true"/> <attribute name="keyComment" type="String" mode="IN" optional="true"/> <attribute name="update_label" type="String" mode="IN" optional="false"/> Added: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java?rev=776988&view=auto ============================================================================== --- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java (added) +++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java Thu May 21 07:26:22 2009 @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * 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 + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.ofbiz.webtools.labelmanager; + +import java.io.File; + +public class LabelFile { + public static final String module = LabelFile.class.getName(); + + protected final boolean fileLoaded = false;; + protected final File file; + protected final String componentName; + + protected LabelFile(File file, String componentName) { + this.file = file; + this.componentName = componentName; + } + + public File getFile() { + return this.file; + } + + public String getFileName() { + return this.file.getName(); + } + + public String getFilePath() { + return this.file.getPath(); + } +} Propchange: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author URL Id" Propchange: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelFile.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelInfo.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelInfo.java?rev=776988&r1=776987&r2=776988&view=diff ============================================================================== --- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelInfo.java (original) +++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/labelmanager/LabelInfo.java Thu May 21 07:26:22 2009 @@ -33,14 +33,12 @@ protected String labelKey = ""; protected String labelKeyComment = ""; protected String fileName = ""; - protected String componentName = ""; protected Map<String, LabelValue> labelValues = FastMap.newInstance(); - public LabelInfo(String labelKey, String labelKeyComment, String fileName, String componentName, String localeStr, String labelValue, String labelComment) throws GeneralException { + public LabelInfo(String labelKey, String labelKeyComment, String fileName, String localeStr, String labelValue, String labelComment) throws GeneralException { this.labelKey = labelKey; this.labelKeyComment = labelKeyComment; this.fileName = fileName; - this.componentName = componentName; setLabelValue(localeStr, labelValue, labelComment, false); } @@ -60,10 +58,6 @@ return fileName; } - public String getComponentName() { - return componentName; - } - public LabelValue getLabelValue(String localeStr) { return (LabelValue)labelValues.get(localeStr); } 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=776988&r1=776987&r2=776988&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 Thu May 21 07:26:22 2009 @@ -20,331 +20,185 @@ import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; import java.util.Collection; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; +import javax.xml.parsers.ParserConfigurationException; + import javolution.util.FastList; import org.ofbiz.base.component.ComponentConfig; +import org.ofbiz.base.component.ComponentConfig.ClasspathInfo; +import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.FileUtil; import org.ofbiz.base.util.GeneralException; import org.ofbiz.base.util.StringUtil; -import org.ofbiz.base.util.UtilGenerics; -import org.ofbiz.base.util.UtilMisc; -import org.ofbiz.base.util.UtilProperties; 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.GenericValue; -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.owasp.esapi.errors.EncodingException; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; +import org.xml.sax.SAXException; public class LabelManagerFactory { public static final String module = LabelManagerFactory.class.getName(); public static final String resource = "WebtoolsUiLabels"; - public static final String keySeparator = "#"; - protected static UtilCache<String, LabelManagerFactory> labelManagerFactoryCache = new UtilCache<String, LabelManagerFactory>("LabelManagerFactory"); - - protected static Map<String, LabelInfo> labels = null; - protected static Map<String, String> fileNamesFound = null; - protected static Map<String, String> fileComponent = null; - protected static Set<String> localesFound = null; protected static Set<String> componentNamesFound = null; - protected static Map<String, Map<String, Integer>> references = null; - protected static List<LabelInfo> duplicatedLocalesLabelsList = null; - protected static int duplicatedLocalesLabels = 0; - - protected static GenericDelegator delegator; - protected static ModelReader entityModelReader; - protected static DispatchContext dispatchContext; - - public static LabelManagerFactory getLabelManagerFactory(String delegatorName) throws GeneralException { - if (UtilValidate.isEmpty(delegatorName)) { - delegatorName = "default"; - } + protected static Map<String, LabelFile> filesFound = null; - LabelManagerFactory lmf = labelManagerFactoryCache.get(delegatorName); + protected Map<String, LabelInfo> labels = new TreeMap<String, LabelInfo>(); + protected Set<String> localesFound = new TreeSet<String>(); + protected List<LabelInfo> duplicatedLocalesLabelsList = FastList.newInstance(); - if (lmf == null) { - lmf = new LabelManagerFactory(delegatorName); - labelManagerFactoryCache.put(delegatorName, lmf); + public static synchronized LabelManagerFactory getInstance() throws GeneralException, IOException { + if (componentNamesFound == null) { + loadComponentNames(); } - return lmf; + if (filesFound == null) { + loadLabelFiles(); + } + return new LabelManagerFactory(); } - protected LabelManagerFactory(String delegatorName) throws GeneralException { - delegator = GenericDelegator.getGenericDelegator(delegatorName); - entityModelReader = ModelReader.getModelReader(delegatorName); - dispatchContext = new DispatchContext("LabelManagerFactoryDispCtx", null, this.getClass().getClassLoader(), null); - prepareAll(); + protected LabelManagerFactory() { } - private static void prepareAll() throws GeneralException { - labels = new TreeMap<String, LabelInfo>(); - fileNamesFound = new TreeMap<String, String>(); - fileComponent = new TreeMap<String, String>(); - localesFound = new TreeSet<String>(); + protected static void loadComponentNames() { componentNamesFound = new TreeSet<String>(); - duplicatedLocalesLabelsList = FastList.newInstance(); - references = null; - 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); - 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.defaultWebEncoder.canonicalize(propertyElem.getAttribute("key")); - 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.defaultWebEncoder.canonicalize(UtilXml.nodeValue(valueElem.getFirstChild())); - LabelInfo label = 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)) { - duplicatedLocalesLabelsList.add(label); - 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.defaultWebEncoder.canonicalize(valueNode.getNodeValue()); - } + Collection<ComponentConfig> componentConfigs = ComponentConfig.getAllComponents(); + for (ComponentConfig componentConfig : componentConfigs) { + componentNamesFound.add(componentConfig.getComponentName()); + } + componentNamesFound.add("shark"); + } + + protected static void loadLabelFiles() throws IOException { + filesFound = new TreeMap<String, LabelFile>(); + List<ClasspathInfo> cpInfos = ComponentConfig.getAllClasspathInfos(); + for (ClasspathInfo cpi : cpInfos) { + if ("dir".equals(cpi.type)) { + String configRoot = cpi.componentConfig.getRootLocation(); + configRoot = configRoot.replace('\\', '/'); + if (!configRoot.endsWith("/")) { + configRoot = configRoot + "/"; + } + String location = cpi.location.replace('\\', '/'); + if (location.startsWith("/")) { + location = location.substring(1); + } + List<File> resourceFiles = FileUtil.findXmlFiles(configRoot + location, null, "resource", null); + for (File resourceFile : resourceFiles) { + filesFound.put(resourceFile.getName(), new LabelFile(resourceFile, cpi.componentConfig.getComponentName())); + } + } + } + List<File> resourceFiles = FileUtil.findXmlFiles(System.getProperty("ofbiz.home") + "/specialpurpose/shark/config", null, "resource", null); + for (File resourceFile : resourceFiles) { + filesFound.put(resourceFile.getName(), new LabelFile(resourceFile, "shark")); + } + } + + public void findMatchingLabels(String component, String fileName, String key, String locale) throws MalformedURLException, SAXException, ParserConfigurationException, IOException, EncodingException, GeneralException { + if (UtilValidate.isEmpty(component) && UtilValidate.isEmpty(fileName) && UtilValidate.isEmpty(key) && UtilValidate.isEmpty(locale)) { + // Important! Don't allow unparameterized queries - doing so will result in loading the entire project into memory + return; + } + for (LabelFile fileInfo : filesFound.values()) { + if (UtilValidate.isNotEmpty(component) && !component.equals(fileInfo.componentName)) { + continue; + } + if (UtilValidate.isNotEmpty(fileName) && !fileName.equals(fileInfo.getFileName())) { + continue; + } + Document resourceDocument = UtilXml.readXmlDocument(fileInfo.file.toURL(), false); + Element resourceElem = resourceDocument.getDocumentElement(); + String labelKeyComment = ""; + for (Node propertyNode : UtilXml.childNodeList(resourceElem.getFirstChild())) { + if (propertyNode instanceof Element) { + Element propertyElem = (Element) propertyNode; + String labelKey = StringUtil.defaultWebEncoder.canonicalize(propertyElem.getAttribute("key")); + 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.defaultWebEncoder.canonicalize(UtilXml.nodeValue(valueElem.getFirstChild())); + LabelInfo label = labels.get(labelKey + keySeparator + fileInfo.getFileName()); + + if (UtilValidate.isEmpty(label)) { + label = new LabelInfo(labelKey, labelKeyComment, fileInfo.getFileName(), localeName, labelValue, labelComment); + labels.put(labelKey + keySeparator + fileInfo.getFileName(), label); + } else { + if (label.setLabelValue(localeName, labelValue, labelComment, false)) { + duplicatedLocalesLabelsList.add(label); } - labelKeyComment = ""; - } else if (propertyNode instanceof Comment) { - labelKeyComment = labelKeyComment + StringUtil.defaultWebEncoder.canonicalize(propertyNode.getNodeValue()); } + localesFound.add(localeName); + labelComment = ""; + } else if (valueNode instanceof Comment) { + labelComment = labelComment + StringUtil.defaultWebEncoder.canonicalize(valueNode.getNodeValue()); } } - if (!sharkComponent) { - componentName = "shark"; - resourceFiles = FileUtil.findXmlFiles(System.getProperty("ofbiz.home") + "/specialpurpose/shark", null, "resource", null); - sharkComponent = true; - } else { - cycle = false; - } + labelKeyComment = ""; + } else if (propertyNode instanceof Comment) { + labelKeyComment = labelKeyComment + StringUtil.defaultWebEncoder.canonicalize(propertyNode.getNodeValue()); } } - - // get labels references from sources - references = LabelReferences.getLabelReferences(); - } catch (IOException ioe) { - throw new GeneralException(ioe.getMessage()); - } catch (Exception e) { - throw new GeneralException(e.getMessage()); } - duplicatedLocalesLabels = duplicatedLocales; - } - - public static GenericDelegator getDelegator() { - return delegator; } - public static ModelReader getModelReader() { - return entityModelReader; + public LabelFile getLabelFile(String fileName) { + return filesFound.get(fileName); } - public static DispatchContext getDispatchContext() { - return dispatchContext; - } - - public static Map<String, LabelInfo> getLabels() { + public Map<String, LabelInfo> getLabels() { return labels; } - public static Set<String> getLocalesFound() { + public Set<String> getLocalesFound() { return localesFound; } - public static Map<String, String> getFileNamesFound() { - return fileNamesFound; - } - - public static String getFileComponent(String fileName) { - String componentName = null; - if (UtilValidate.isNotEmpty(fileName)) { - componentName = fileComponent.get(fileName); - } - return componentName; + public static Collection<LabelFile> getFilesFound() { + return filesFound.values(); } public static Set<String> getComponentNamesFound() { return componentNamesFound; } - public static Map<String, Map<String, Integer>> getReferences() { - return references; - } - - public static Set<String> getLabelsList() { + public Set<String> getLabelsList() { return labels.keySet(); } - public static Set<String> getReferencesList() { - return references.keySet(); + public int getDuplicatedLocalesLabels() { + return duplicatedLocalesLabelsList.size(); } - 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; - } - - public static List<LabelInfo> getDuplicatedLocalesLabelsList() { + public List<LabelInfo> getDuplicatedLocalesLabelsList() { return duplicatedLocalesLabelsList; } - public static Map<String, Object> updateLabelKey(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"); - - // Remove a Label - if (UtilValidate.isNotEmpty(removeLabel)) { - labels.remove(key + keySeparator + fileName); - } else if (UtilValidate.isNotEmpty(confirm)) { - LabelInfo label = labels.get(key + keySeparator + fileName); - - // Update a Label - if (update_label.equalsIgnoreCase("Y")) { - if (UtilValidate.isNotEmpty(label)) { - updateLabelValue(localeNames, localeValues, localeComments, label, key, keyComment, fileName); - } - // Insert a new Label - } else { - if (UtilValidate.isNotEmpty(label)) { - return ServiceUtil.returnError(UtilProperties.getMessage(resource, "WebtoolsLabelManagerNewLabelExisting", UtilMisc.toMap("key", key, "fileName", fileName), locale)); - } else { - if (UtilValidate.isEmpty(key)) { - return ServiceUtil.returnError(UtilProperties.getMessage(resource, "WebtoolsLabelManagerNewLabelEmptyKey", locale)); - } else { - int notEmptyLabels = updateLabelValue(localeNames, localeValues, localeComments, null, key, keyComment, fileName); - if (notEmptyLabels == 0) { - return ServiceUtil.returnError(UtilProperties.getMessage(resource, "WebtoolsLabelManagerNewLabelEmpty", locale)); - } - } - } - } - } - - 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")); - GenericValue userLogin = (GenericValue) context.get("userLogin"); - 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, "userLogin", userLogin); - try { - Map<String, Object> updatedKey = dispatcher.runSync("updateLabelKey", contextInput); - - if (ServiceUtil.isError(updatedKey)) { - return updatedKey; - } else { - return dispatcher.runSync("saveLabelsToXmlFile", UtilMisc.toMap("labelFileName", fileName, "userLogin", userLogin)); - } - } 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) { + public 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; - while (i < localeNames.size()) { + for (int i = 0; i < localeNames.size(); i++) { String localeName = localeNames.get(i); String localeValue = localeValues.get(i); String localeComment = localeComments.get(i); - if (UtilValidate.isNotEmpty(localeValue) || UtilValidate.isNotEmpty(localeComment)) { if (label == null) { try { - String componentName = getFileComponent(fileName); - label = new LabelInfo(key, keyComment, fileName, componentName, localeName, localeValue, localeComment); + label = new LabelInfo(key, keyComment, fileName, localeName, localeValue, localeComment); labels.put(key + keySeparator + fileName, label); } catch (Exception e) { e.printStackTrace(); @@ -355,9 +209,7 @@ label.setLabelValue(localeName, localeValue, localeComment, true); notEmptyLabels++; } - i++; } - return notEmptyLabels; } } |
Free forum by Nabble | Edit this page |