|
Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/StringToList.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/StringToList.java?rev=1349646&r1=1349645&r2=1349646&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/StringToList.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/StringToList.java Wed Jun 13 06:04:49 2012 @@ -23,43 +23,52 @@ import java.util.List; import javolution.util.FastList; -import org.ofbiz.base.util.Debug; import org.ofbiz.base.util.MessageString; import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; +import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangRuntimeException; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; -import org.ofbiz.minilang.method.ContextAccessor; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Appends the specified String to a List + * Implements the <string-to-list> element. */ -public class StringToList extends MethodOperation { +public final class StringToList extends MethodOperation { - public static final String module = StringToList.class.getName(); - - ContextAccessor<List<? extends Object>> argListAcsr; - ContextAccessor<List<Object>> listAcsr; - String messageFieldName; - String string; + private final FlexibleMapAccessor<List<? extends Object>> argListFma; + private final FlexibleMapAccessor<List<Object>> listFma; + private final String messageFieldName; + private final FlexibleStringExpander stringFse; public StringToList(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - string = element.getAttribute("string"); - listAcsr = new ContextAccessor<List<Object>>(element.getAttribute("list"), element.getAttribute("list-name")); - argListAcsr = new ContextAccessor<List<? extends Object>>(element.getAttribute("arg-list"), element.getAttribute("arg-list-name")); - messageFieldName = UtilValidate.isNotEmpty(element.getAttribute("message-field")) ? element.getAttribute("message-field") : element.getAttribute("message-field-name"); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.handleError("<string-to-list> element is deprecated (use <set>)", simpleMethod, element); + MiniLangValidate.attributeNames(simpleMethod, element, "list", "arg-list", "string", "message-field"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "list", "string"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "list", "arg-list"); + MiniLangValidate.noChildElements(simpleMethod, element); + } + stringFse = FlexibleStringExpander.getInstance(element.getAttribute("string")); + listFma = FlexibleMapAccessor.getInstance(element.getAttribute("list")); + argListFma = FlexibleMapAccessor.getInstance(element.getAttribute("arg-list")); + messageFieldName = element.getAttribute("message-field"); } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - String valueStr = methodContext.expandString(string); - if (!argListAcsr.isEmpty()) { - List<? extends Object> argList = argListAcsr.get(methodContext); - if (UtilValidate.isNotEmpty(argList)) { + String valueStr = stringFse.expandString(methodContext.getEnvMap()); + List<? extends Object> argList = argListFma.get(methodContext.getEnvMap()); + if (argList != null) { + try { valueStr = MessageFormat.format(valueStr, argList.toArray()); + } catch (IllegalArgumentException e) { + throw new MiniLangRuntimeException("Exception thrown while formatting the string attribute: " + e.getMessage(), this); } } Object value; @@ -68,12 +77,10 @@ public class StringToList extends Method } else { value = valueStr; } - List<Object> toList = listAcsr.get(methodContext); + List<Object> toList = listFma.get(methodContext.getEnvMap()); if (toList == null) { - if (Debug.verboseOn()) - Debug.logVerbose("List not found with name " + listAcsr + ", creating new List", module); toList = FastList.newInstance(); - listAcsr.put(methodContext, toList); + listFma.put(methodContext.getEnvMap(), toList); } toList.add(value); return true; @@ -81,21 +88,39 @@ public class StringToList extends Method @Override public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); + return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap()); } @Override public String rawString() { - // TODO: something more than the empty tag - return "<string-to-list string=\"" + this.string + "\" list-name=\"" + this.listAcsr + "\"/>"; + return toString(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("<string-to-list "); + sb.append("string=\"").append(this.stringFse).append("\" "); + sb.append("list=\"").append(this.listFma).append("\" "); + if (!this.argListFma.isEmpty()) { + sb.append("arg-list=\"").append(this.argListFma).append("\" "); + } + if (!this.messageFieldName.isEmpty()) { + sb.append("message-field=\"").append(this.messageFieldName).append("\" "); + } + sb.append("/>"); + return sb.toString(); } + /** + * A factory for the <string-to-list> element. + */ public static final class StringToListFactory implements Factory<StringToList> { + @Override public StringToList createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new StringToList(element, simpleMethod); } + @Override public String getName() { return "string-to-list"; } Modified: ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/ToString.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/ToString.java?rev=1349646&r1=1349645&r2=1349646&view=diff ============================================================================== --- ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/ToString.java (original) +++ ofbiz/trunk/framework/minilang/src/org/ofbiz/minilang/method/envops/ToString.java Wed Jun 13 06:04:49 2012 @@ -18,111 +18,106 @@ *******************************************************************************/ package org.ofbiz.minilang.method.envops; -import java.util.Map; - -import javolution.util.FastMap; - -import org.ofbiz.base.util.Debug; -import org.ofbiz.base.util.GeneralException; -import org.ofbiz.base.util.ObjectType; import org.ofbiz.base.util.StringUtil; -import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.collections.FlexibleMapAccessor; +import org.ofbiz.base.util.string.FlexibleStringExpander; import org.ofbiz.minilang.MiniLangException; +import org.ofbiz.minilang.MiniLangRuntimeException; import org.ofbiz.minilang.MiniLangUtil; +import org.ofbiz.minilang.MiniLangValidate; import org.ofbiz.minilang.SimpleMethod; -import org.ofbiz.minilang.method.ContextAccessor; import org.ofbiz.minilang.method.MethodContext; import org.ofbiz.minilang.method.MethodOperation; import org.w3c.dom.Element; /** - * Converts the specified field to a String, using toString() + * Implements the <to-string> element. */ -public class ToString extends MethodOperation { +public final class ToString extends MethodOperation { - public static final String module = ToString.class.getName(); - - ContextAccessor<Object> fieldAcsr; - String format; - ContextAccessor<Map<String, Object>> mapAcsr; - Integer numericPadding; + private final FlexibleMapAccessor<Object> fieldFma; + private final String format; + private final Integer numericPadding; public ToString(Element element, SimpleMethod simpleMethod) throws MiniLangException { super(element, simpleMethod); - // the schema for this element now just has the "field" attribute, though the old "field-name" and "map-name" pair is still supported - fieldAcsr = new ContextAccessor<Object>(element.getAttribute("field"), element.getAttribute("field-name")); - mapAcsr = new ContextAccessor<Map<String, Object>>(element.getAttribute("map-name")); + if (MiniLangValidate.validationOn()) { + MiniLangValidate.handleError("<to-string> element is deprecated (use <set>)", simpleMethod, element); + MiniLangValidate.attributeNames(simpleMethod, element, "field", "format", "numeric-padding"); + MiniLangValidate.requiredAttributes(simpleMethod, element, "field"); + MiniLangValidate.constantAttributes(simpleMethod, element, "format", "numeric-padding"); + MiniLangValidate.expressionAttributes(simpleMethod, element, "field"); + MiniLangValidate.noChildElements(simpleMethod, element); + } + fieldFma = FlexibleMapAccessor.getInstance(element.getAttribute("field")); format = element.getAttribute("format"); - String npStr = element.getAttribute("numeric-padding"); - if (UtilValidate.isNotEmpty(npStr)) { + Integer numericPadding = null; + String npAttribute = element.getAttribute("numeric-padding"); + if (!npAttribute.isEmpty()) { try { - this.numericPadding = Integer.valueOf(npStr); + numericPadding = Integer.valueOf(npAttribute); } catch (Exception e) { - Debug.logError(e, "Error parsing numeric-padding attribute value on the to-string element", module); + MiniLangValidate.handleError("Exception thrown while parsing numeric-padding attribute: " + e.getMessage(), simpleMethod, element); } } - } - - public String doToString(Object obj, MethodContext methodContext) { - String outStr = null; - try { - if (UtilValidate.isNotEmpty(format)) { - outStr = (String) MiniLangUtil.convertType(obj, String.class, methodContext.getLocale(), methodContext.getTimeZone(), format); - } else { - outStr = obj.toString(); - } - } catch (Exception e) { - Debug.logError(e, "", module); - outStr = obj.toString(); - } - if (this.numericPadding != null) { - outStr = StringUtil.padNumberString(outStr, this.numericPadding.intValue()); - } - return outStr; + this.numericPadding = numericPadding; } @Override public boolean exec(MethodContext methodContext) throws MiniLangException { - if (!mapAcsr.isEmpty()) { - Map<String, Object> toMap = mapAcsr.get(methodContext); - if (toMap == null) { - // it seems silly to create a new map, but necessary since whenever - // an env field like a Map or List is referenced it should be created, even if empty - if (Debug.verboseOn()) - Debug.logVerbose("Map not found with name " + mapAcsr + ", creating new map", module); - toMap = FastMap.newInstance(); - mapAcsr.put(methodContext, toMap); - } - Object obj = fieldAcsr.get(toMap, methodContext); - if (obj != null) { - fieldAcsr.put(toMap, doToString(obj, methodContext), methodContext); + Object value = fieldFma.get(methodContext.getEnvMap()); + if (value != null) { + try { + if (!format.isEmpty()) { + value = MiniLangUtil.convertType(value, String.class, methodContext.getLocale(), methodContext.getTimeZone(), format); + } else { + value = value.toString(); + } + } catch (Exception e) { + throw new MiniLangRuntimeException("Exception thrown while converting field to a string: " + e.getMessage(), this); } - } else { - Object obj = fieldAcsr.get(methodContext); - if (obj != null) { - fieldAcsr.put(methodContext, doToString(obj, methodContext)); + if (this.numericPadding != null) { + value = StringUtil.padNumberString(value.toString(), this.numericPadding.intValue()); } + fieldFma.put(methodContext.getEnvMap(), value); } return true; } @Override public String expandedString(MethodContext methodContext) { - // TODO: something more than a stub/dummy - return this.rawString(); + return FlexibleStringExpander.expandString(toString(), methodContext.getEnvMap()); } @Override public String rawString() { - // TODO: something more than the empty tag - return "<to-string field-name=\"" + this.fieldAcsr + "\" map-name=\"" + this.mapAcsr + "\"/>"; + return toString(); } + @Override + public String toString() { + StringBuilder sb = new StringBuilder("<to-string "); + sb.append("field=\"").append(this.fieldFma).append("\" "); + if (!this.format.isEmpty()) { + sb.append("format=\"").append(this.format).append("\" "); + } + if (numericPadding != null) { + sb.append("numeric-padding=\"").append(this.numericPadding).append("\" "); + } + sb.append("/>"); + return sb.toString(); + } + + /** + * A factory for the <to-string> element. + */ public static final class ToStringFactory implements Factory<ToString> { + @Override public ToString createMethodOperation(Element element, SimpleMethod simpleMethod) throws MiniLangException { return new ToString(element, simpleMethod); } + @Override public String getName() { return "to-string"; } |
| Free forum by Nabble | Edit this page |
