From 9e69e8c4f31343abc53cc0459e1dd8654bb8cc8f Mon Sep 17 00:00:00 2001 From: hg <none@none> Date: Fri, 20 Mar 2015 08:27:09 +0100 Subject: [PATCH] OO-1483: additional methods to access info in form containers, more use of concat, cache locale key --- .../editor/htmleditor/WysiwygFactory.java | 2 +- .../gui/components/AbstractComponent.java | 10 ++-- .../form/flexible/FormItemContainer.java | 5 ++ .../components/form/flexible/impl/Form.java | 14 +++--- .../flexible/impl/FormBaseComponentImpl.java | 2 +- .../flexible/impl/FormBasicController.java | 6 +-- .../form/flexible/impl/FormDecorator.java | 6 +-- .../form/flexible/impl/FormItemImpl.java | 2 +- .../flexible/impl/FormLayoutContainer.java | 16 ++++--- .../activity/UserActivityLoggerImpl.java | 2 +- .../org/olat/core/util/i18n/I18nManager.java | 46 +++++++++++-------- 11 files changed, 64 insertions(+), 47 deletions(-) diff --git a/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java b/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java index 1df36fb6cac..3acb6a177f0 100644 --- a/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java +++ b/src/main/java/org/olat/core/commons/editor/htmleditor/WysiwygFactory.java @@ -141,7 +141,7 @@ public class WysiwygFactory { * @return XHTML page */ public static String createXHtmlFileContent(String bodyMarkup, String title) { - StringBuffer fileContent = new StringBuffer(); + StringBuilder fileContent = new StringBuilder(); fileContent.append(HTMLEditorController.DOCTYPE).append(HTMLEditorController.OPEN_HTML).append(HTMLEditorController.OPEN_HEAD); fileContent.append(HTMLEditorController.GENERATOR_META).append(HTMLEditorController.UTF8CHARSET); fileContent.append(HTMLEditorController.OPEN_TITLE).append(title).append(HTMLEditorController.CLOSE_TITLE); diff --git a/src/main/java/org/olat/core/gui/components/AbstractComponent.java b/src/main/java/org/olat/core/gui/components/AbstractComponent.java index 45d432acfea..e9165df8895 100644 --- a/src/main/java/org/olat/core/gui/components/AbstractComponent.java +++ b/src/main/java/org/olat/core/gui/components/AbstractComponent.java @@ -57,6 +57,7 @@ public abstract class AbstractComponent implements Component { private String elementCssClass; private long timestamp = 1l; + private String timestampID = "1"; private boolean staticCmp = true; private boolean visible = true; @@ -140,7 +141,9 @@ public abstract class AbstractComponent implements Component { * @return a valid JS variableName */ private static String secureJSVarName(String id) { - if(StringUtils.isBlank(id)) return "o_"+Long.toString(CodeHelper.getRAMUniqueID()); + if(StringUtils.isBlank(id)) { + return "o_" + Long.toString(CodeHelper.getRAMUniqueID()); + } id = id.replace("-", "_"); // no - id = id.replace(".", "_"); // no dots @@ -202,12 +205,13 @@ public abstract class AbstractComponent implements Component { * (e.g. for CPComponent, so that the browser loads images correctly). only * called when the component is visible */ + @Override public void validate(UserRequest ureq, ValidationResult vr) { if (this.dirty) { if(!staticCmp) { timestamp++; + timestampID = Long.toString(timestamp); } - if ( log_.isDebug() ) log_.debug("increment component.timestamp new value=" + timestamp + " ureq=" + ureq + " component=" + this); } } @@ -458,7 +462,7 @@ public abstract class AbstractComponent implements Component { if(staticCmp) { return "1"; } - return Long.toString(timestamp); + return timestampID; } } \ No newline at end of file diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/FormItemContainer.java b/src/main/java/org/olat/core/gui/components/form/flexible/FormItemContainer.java index b9bf3c86b84..7ef17d1255c 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/FormItemContainer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/FormItemContainer.java @@ -88,6 +88,11 @@ public interface FormItemContainer extends FormItem, FormItemCollection { */ public Map<String, FormItem> getFormComponents(); + /** + * @return True if the container manages this item. + */ + public boolean hasFormComponent(FormItem item); + /** * * @param name diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java index 4ddd5c6f489..140c93369f6 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java @@ -701,7 +701,7 @@ public class Form extends LogDelegator { public boolean visit(FormItem comp, UserRequest ureq) { if (comp instanceof FormItemContainer) { FormItemContainer new_name = (FormItemContainer) comp; - if(new_name.getFormComponents().containsValue(child)){ + if(new_name.hasFormComponent(child)){ parentContainer = (FormItemContainer)comp; return false; } @@ -717,13 +717,13 @@ public class Form extends LogDelegator { public boolean visit(FormItem comp, UserRequest ureq) { if (comp instanceof FormItemContainer) { FormItemContainer fic = (FormItemContainer)comp; - Map<String, FormItem> pairs = fic.getFormComponents(); + Iterable<FormItem> pairs = fic.getFormItems(); //go to next container if no elements inside - if(pairs == null || pairs.size()==0) return true; - //otherwise iterate overall elements and evaluate dependency rules - Iterable<FormItem> elms= pairs.values(); - for (FormItem item : elms) { - fic.evalDependencyRuleSetFor(ureq, item); + if(pairs != null) { + //otherwise iterate overall elements and evaluate dependency rules + for (FormItem item : pairs) { + fic.evalDependencyRuleSetFor(ureq, item); + } } } return true; diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBaseComponentImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBaseComponentImpl.java index 2553dc69364..111d722ce15 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBaseComponentImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBaseComponentImpl.java @@ -59,7 +59,7 @@ public abstract class FormBaseComponentImpl extends AbstractComponent implements } public String getFormDispatchId(){ - return DISPPREFIX+super.getDispatchID(); + return DISPPREFIX.concat(super.getDispatchID()); } @Override diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBasicController.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBasicController.java index adbff34c9b5..552784937ef 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBasicController.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormBasicController.java @@ -25,8 +25,6 @@ */ package org.olat.core.gui.components.form.flexible.impl; -import java.util.Map; - import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.FormItem; @@ -625,8 +623,8 @@ public abstract class FormBasicController extends BasicController { public void run() { // Dispose also disposable form items (such as file uploads that needs to // cleanup temporary files) - Map<String, FormItem> formItems = FormBasicController.this.flc.getFormComponents(); - for (FormItem formItem : formItems.values()) { + Iterable<FormItem> formItems = FormBasicController.this.flc.getFormItems(); + for (FormItem formItem : formItems) { if (formItem instanceof Disposable) { Disposable disposableFormItem = (Disposable) formItem; disposableFormItem.dispose(); diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java index 412684fefb8..8c7bc7efe2a 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormDecorator.java @@ -25,8 +25,6 @@ */ package org.olat.core.gui.components.form.flexible.impl; -import java.util.Map; - import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.SpacerElement; @@ -152,9 +150,7 @@ public class FormDecorator { * @return */ private FormItem getFormItem(String formItemName) { - Map<String, FormItem> comps = container.getFormComponents(); - FormItem foco = comps.get(formItemName); - return foco; + return container.getFormComponent(formItemName); } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java index a67ef4fd603..91525a6b634 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormItemImpl.java @@ -515,7 +515,7 @@ public abstract class FormItemImpl implements FormItem, InlineElement { return ((FormBaseComponentIdProvider)comp).getFormDispatchId(); } else { //do the same as the FormBaseComponentIdProvider would do - return DISPPREFIX+comp.getDispatchID(); + return DISPPREFIX.concat(comp.getDispatchID()); } } diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java index b6480cfad0e..e9df3ee88db 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/FormLayoutContainer.java @@ -345,12 +345,19 @@ public class FormLayoutContainer extends FormItemImpl implements FormItemContain return merged; } + @Override public Map<String, FormItem> getFormComponents() { Map<String,FormItem> merged = new HashMap<String, FormItem>(formComponents); merged.putAll(listeningOnlyFormComponents); return Collections.unmodifiableMap(merged); } + @Override + public boolean hasFormComponent(FormItem item) { + return formComponents.containsValue(item) + || listeningOnlyFormComponents.containsValue(item); + } + public FormItem getFormComponent(String name){ if(formComponents.containsKey(name)) { return formComponents.get(name); @@ -496,9 +503,7 @@ public class FormLayoutContainer extends FormItemImpl implements FormItemContain //enable / disable this super.setEnabled(isEnabled); //iterate over all components and disable / enable them - Collection<FormItem> formItems = getFormComponents().values(); - for (Iterator<FormItem> iter = formItems.iterator(); iter.hasNext();) { - FormItem element = iter.next(); + for (FormItem element : getFormItems()) { element.setEnabled(isEnabled); } } @@ -657,16 +662,15 @@ public class FormLayoutContainer extends FormItemImpl implements FormItemContain * * @see org.olat.core.gui.control.Disposable#dispose() */ + @Override public void dispose() { // Dispose also disposable form items (such as file uploads that needs to // cleanup temporary files) - Map<String, FormItem> formItems = this.getFormComponents(); - for (FormItem formItem : formItems.values()) { + for (FormItem formItem : getFormItems()) { if (formItem instanceof Disposable) { Disposable disposableFormItem = (Disposable) formItem; disposableFormItem.dispose(); } } } - } diff --git a/src/main/java/org/olat/core/logging/activity/UserActivityLoggerImpl.java b/src/main/java/org/olat/core/logging/activity/UserActivityLoggerImpl.java index 67185a79b92..69ea60032ec 100644 --- a/src/main/java/org/olat/core/logging/activity/UserActivityLoggerImpl.java +++ b/src/main/java/org/olat/core/logging/activity/UserActivityLoggerImpl.java @@ -849,7 +849,7 @@ public class UserActivityLoggerImpl implements IUserActivityLogger { /** toString for debug **/ private String convertLoggingResourceableListToString(List<ILoggingResourceable> resourceInfos) { - StringBuffer loggingResourceableListToString = new StringBuffer("[LoggingResourceables: "); + StringBuilder loggingResourceableListToString = new StringBuilder("[LoggingResourceables: "); loggingResourceableListToString.append(resourceInfos.size()); for (Iterator<ILoggingResourceable> iterator = resourceInfos.iterator(); iterator.hasNext();) { ILoggingResourceable loggingResourceable = iterator.next(); diff --git a/src/main/java/org/olat/core/util/i18n/I18nManager.java b/src/main/java/org/olat/core/util/i18n/I18nManager.java index 733e1a4b48d..ca766fee3d3 100644 --- a/src/main/java/org/olat/core/util/i18n/I18nManager.java +++ b/src/main/java/org/olat/core/util/i18n/I18nManager.java @@ -139,6 +139,7 @@ public class I18nManager extends BasicManager { private ConcurrentMap<String, Properties> cachedBundles = new ConcurrentHashMap<String, Properties>(); private ConcurrentMap<String, String> cachedJSTranslatorData = new ConcurrentHashMap<String, String>(); private ConcurrentMap<String, Deque<String>> referencingBundlesIndex = new ConcurrentHashMap<String, Deque<String>>(); + private static final ConcurrentMap<Locale,String> localeToLocaleKey = new ConcurrentHashMap<>(); private boolean cachingEnabled = true; private static FilenameFilter i18nFileFilter = new FilenameFilter() { @@ -1689,26 +1690,35 @@ public class I18nManager extends BasicManager { * @return */ public String getLocaleKey(Locale locale) { - String langKey = locale.getLanguage(); - String country = locale.getCountry(); - // Only add country when available - in case of an overlay country is - // set to - // an empty value - if (StringHelper.containsNonWhitespace(country)) { - langKey = langKey + "_" + country; - } - String variant = locale.getVariant(); - // Only add the _ separator if the variant contains something in - // addition to - // the overlay, otherways use the __ only - if (StringHelper.containsNonWhitespace(variant)) { - if (variant.startsWith("__" + I18nModule.getOverlayName())) { - langKey += variant; - } else { - langKey = langKey + "_" + variant; + String key = localeToLocaleKey.get(locale); + if(key == null) { + String langKey = locale.getLanguage(); + String country = locale.getCountry(); + // Only add country when available - in case of an overlay country is + // set to + // an empty value + if (StringHelper.containsNonWhitespace(country)) { + langKey = langKey + "_" + country; + } + String variant = locale.getVariant(); + // Only add the _ separator if the variant contains something in + // addition to + // the overlay, otherways use the __ only + if (StringHelper.containsNonWhitespace(variant)) { + if (variant.startsWith("__" + I18nModule.getOverlayName())) { + langKey += variant; + } else { + langKey = langKey + "_" + variant; + } + } + + key = localeToLocaleKey.putIfAbsent(locale, langKey); + if(key == null) { + key = langKey; } + } - return langKey; + return key; } /** -- GitLab