| /* |
| * 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.apache.myfaces.buildtools.maven2.plugin.faces.generator.taglib; |
| |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.generator.GeneratorHelper; |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.io.PrettyWriter; |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.parse.ComponentBean; |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.parse.MethodSignatureBean; |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.parse.PropertyBean; |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.util.FilteredIterator; |
| import org.apache.myfaces.buildtools.maven2.plugin.faces.util.Util; |
| |
| import java.io.IOException; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.Set; |
| |
| /** |
| * TODO: comment this! |
| * |
| * @author Bruno Aranda (latest modification by $Author$) |
| * @version $Revision$ $Date$ |
| */ |
| public class TrinidadComponentTagGenerator extends AbstractComponentTagGenerator |
| { |
| private boolean _is12; |
| |
| public TrinidadComponentTagGenerator(boolean is12) |
| { |
| _is12 = is12; |
| } |
| |
| protected boolean is12() |
| { |
| return _is12; |
| } |
| |
| protected void addSpecificImports(Set imports, |
| ComponentBean component) |
| { |
| imports.add("org.apache.myfaces.trinidad.bean.FacesBean"); |
| |
| if (_is12) |
| { |
| imports.add("javax.el.ValueExpression"); |
| } |
| |
| Iterator properties = component.properties(); |
| properties = new FilteredIterator(properties, new TagAttributeFilter()); |
| |
| while (properties.hasNext()) |
| { |
| PropertyBean property = (PropertyBean) properties.next(); |
| String propertyClass = property.getPropertyClass(); |
| String[] propertyClassParams = property.getPropertyClassParameters(); |
| |
| imports.add(component.getComponentClass()); |
| |
| if (GeneratorHelper.isKeyStroke(propertyClass)) |
| { |
| if (_is12) |
| imports.add("javax.el.ValueExpression"); |
| else |
| imports.add("javax.faces.el.ValueBinding"); |
| imports.add("javax.swing.KeyStroke"); |
| } |
| else if (GeneratorHelper.isAWTKeyStroke(propertyClass)) |
| { |
| if (_is12) |
| imports.add("javax.el.ValueExpression"); |
| else |
| imports.add("javax.faces.el.ValueBinding"); |
| imports.add("java.awt.AWTKeyStroke"); |
| } |
| else if (GeneratorHelper.isConverter(propertyClass)) |
| { |
| if (_is12) |
| imports.add("javax.el.ValueExpression"); |
| else |
| imports.add("javax.faces.el.ValueBinding"); |
| imports.add("javax.faces.convert.Converter"); |
| } |
| else if (property.isVirtual()) |
| { |
| if (_is12) |
| imports.add("javax.el.ValueExpression"); |
| else |
| imports.add("javax.faces.el.ValueBinding"); |
| imports.add("org.apache.myfaces.trinidadinternal.taglib.util.VirtualAttributeUtils"); |
| } |
| else if (GeneratorHelper.isColorList(propertyClass, propertyClassParams) || |
| GeneratorHelper.isColor(propertyClass)) |
| { |
| if (_is12) |
| imports.add("javax.el.ValueExpression"); |
| else |
| imports.add("javax.faces.el.ValueBinding"); |
| imports.add("java.text.ParseException"); |
| imports.add("org.apache.myfaces.trinidadinternal.taglib.util.TagUtils"); |
| } |
| else if (property.isMethodBinding()) |
| { |
| if (_is12) |
| { |
| imports.add("javax.el.MethodExpression"); |
| imports.add("org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding"); |
| } |
| else |
| { |
| imports.add("javax.faces.el.MethodBinding"); |
| } |
| } |
| else if (property.isMethodExpression()) |
| { |
| imports.add("javax.el.MethodExpression"); |
| } |
| else if (property.isEnum()) |
| { |
| imports.add(propertyClass); |
| } |
| } |
| } |
| |
| |
| protected void writePropertyDeclaration(PrettyWriter out, |
| PropertyBean property) throws IOException |
| { |
| String propName = property.getPropertyName(); |
| String fieldPropName = "_" + propName; |
| String jspPropType = GeneratorHelper.getJspPropertyType(property, _is12); |
| |
| out.println(); |
| out.println("private " + jspPropType + " " + fieldPropName + ";"); |
| } |
| |
| protected void writePropertySetter(PrettyWriter out, |
| PropertyBean property) throws IOException |
| { |
| String propName = property.getPropertyName(); |
| String fieldPropName = "_" + propName; |
| String jspPropName = property.getJspPropertyName(); |
| String propVar = Util.getVariableFromName(propName); |
| String setMethod = Util.getPrefixedPropertyName("set", jspPropName); |
| String jspPropType = GeneratorHelper.getJspPropertyType(property, _is12); |
| |
| out.print("final "); |
| out.println("public void " + setMethod + "(" + jspPropType + " " + propVar + ")"); |
| out.println("{"); |
| out.indent(); |
| out.println(fieldPropName + " = " + propVar + ";"); |
| out.unindent(); |
| out.println("}"); |
| } |
| |
| public void writeSetPropertiesMethod(PrettyWriter out, |
| String componentClass, |
| ComponentBean component) throws IOException |
| { |
| Collection components = new HashSet(); |
| components.add(component); |
| writeSetPropertiesMethod(out, componentClass, components); |
| } |
| |
| |
| public void writeSetPropertiesMethod(PrettyWriter out, String componentClass, Collection components) |
| throws IOException |
| { |
| Collection all = new HashSet(); |
| for (Iterator lIterator = components.iterator(); lIterator.hasNext();) |
| { |
| ComponentBean component = (ComponentBean) lIterator.next(); |
| Iterator prop = component.properties(); |
| while (prop.hasNext()) |
| { |
| all.add(prop.next()); |
| } |
| } |
| |
| Iterator properties = all.iterator(); |
| properties = new FilteredIterator(properties, new TagAttributeFilter()); |
| |
| if (properties.hasNext()) |
| { |
| out.println(); |
| out.println("@Override"); |
| out.println("protected void setProperties("); |
| out.indent(); |
| out.println("FacesBean bean)"); |
| out.unindent(); |
| out.println("{"); |
| out.indent(); |
| |
| writeSetPropertyMethodBody(out, componentClass, properties); |
| out.unindent(); |
| out.println("}"); |
| } |
| } |
| |
| protected void writeSetPropertyMethodBody(PrettyWriter out, |
| String componentClass, |
| Iterator properties) throws IOException |
| { |
| |
| out.println("super.setProperties(bean);"); |
| |
| while (properties.hasNext()) |
| { |
| PropertyBean property = (PropertyBean) properties.next(); |
| _writeSetPropertiesCase(out, componentClass, property); |
| } |
| } |
| |
| private void _writeSetPropertiesCase( |
| PrettyWriter out, |
| String componentClass, |
| PropertyBean property) throws IOException |
| { |
| String propName = property.getPropertyName(); |
| String propClass = property.getPropertyClass(); |
| String propVar = "_" + propName; |
| |
| if (property.isVirtual()) |
| { |
| _writeVirtualSetMethod(out, componentClass, propName); |
| } |
| else if (property.isMethodBinding()) |
| { |
| _writeSetMethodBinding(out, componentClass, property); |
| } |
| else if (property.isMethodExpression()) |
| { |
| _writeSetMethodExpression(out, componentClass, property); |
| } |
| else if (property.isEnum()) |
| { |
| _writeSetEnum(out, componentClass, property); |
| } |
| else if (GeneratorHelper.isKeyStroke(propClass)) |
| { |
| _writeSetKeyStroke(out, componentClass, propName); |
| } |
| else if (GeneratorHelper.isAWTKeyStroke(propClass)) |
| { |
| _writeSetAWTKeyStroke(out, componentClass, propName); |
| } |
| else if (GeneratorHelper.isColorList(propClass, property.getPropertyClassParameters())) |
| { |
| _writeSetColor(out, componentClass, propName, true); |
| } |
| else if (GeneratorHelper.isColor(propClass)) |
| { |
| _writeSetColor(out, componentClass, propName, false); |
| } |
| else if (GeneratorHelper.isConverter(propClass)) |
| { |
| _writeSetConverter(out, componentClass, propName); |
| } |
| else if (property.isLiteralOnly()) |
| { |
| _writeSetLiteral(out, componentClass, propName, propClass, propVar); |
| } |
| else if ("java.util.Date".equals(propClass)) |
| { |
| _writeSetDate(out, componentClass, propName, propClass, propVar, property.getUseMaxTime()); |
| } |
| else //if (_hasPropertySetter(property)) |
| { |
| _writeSetProperty(out, componentClass, propName, propClass, propVar); |
| } |
| // else |
| // { |
| // _writeSetValueBinding(out, componentClass, propName, propVar); |
| // } |
| } |
| |
| private void _writeSetLiteral( |
| PrettyWriter out, |
| String componentClass, |
| String propName, |
| String propFullClass, |
| String propVar) |
| { |
| String propClass = Util.getClassFromFullClass(propFullClass); |
| String boxedClass = Util.getBoxedClass(propClass); |
| if ((!_is12 && !boxedClass.equals(propClass)) || |
| "java.util.Date".equals(propFullClass) || |
| (boxedClass.indexOf("[]") != -1)) |
| { |
| // TODO: reject value binding expressions for literal-only |
| _writeSetProperty(out, componentClass, propName, propFullClass, propVar); |
| } |
| else |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| out.println("bean.setProperty(" + |
| componentClass + "." + propKey + ", " + |
| propVar + ");"); |
| } |
| } |
| |
| private void _writeSetDate( |
| PrettyWriter out, |
| String componentClass, |
| String propName, |
| String propFullClass, |
| String propVar, |
| boolean useMaxTime) |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propClass = Util.getClassFromFullClass(propFullClass); |
| String boxedClass = Util.getBoxedClass(propClass); |
| String setProperty = "setProperty"; |
| String propType = boxedClass.replaceAll("\\[\\]", "Array"); |
| if (useMaxTime) |
| { |
| setProperty = Util.getPrefixedPropertyName("setMax", propType + "Property"); |
| } |
| else |
| { |
| setProperty = Util.getPrefixedPropertyName("set", propType + "Property"); |
| } |
| |
| out.println(setProperty + "(bean, " + |
| componentClass + "." + propKey + ", " + |
| propVar + ");"); |
| } |
| |
| private void _writeSetProperty( |
| PrettyWriter out, |
| String componentClass, |
| String propName, |
| String propFullClass, |
| String propVar) |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propClass = Util.getClassFromFullClass(propFullClass); |
| String boxedClass = Util.getBoxedClass(propClass); |
| String setProperty = "setProperty"; |
| if ((!_is12 && !boxedClass.equals(propClass)) || |
| GeneratorHelper.isNumber(propFullClass) || |
| "java.util.Date".equals(propFullClass) || |
| (boxedClass.indexOf("[]") != -1)) |
| { |
| String propType = boxedClass.replaceAll("\\[\\]", "Array"); |
| setProperty = Util.getPrefixedPropertyName("set", propType + "Property"); |
| } |
| |
| out.println(setProperty + "(bean, " + |
| componentClass + "." + propKey + ", " + |
| propVar + ");"); |
| } |
| |
| private String[] _getAccessKeyPropertyKeys( |
| String componentClass, |
| String propName) |
| { |
| String[] propKeys = new String[2]; |
| |
| int offset = propName.indexOf("AndAccessKey"); |
| if (offset != -1) |
| { |
| String mainProp = propName.substring(0, offset); |
| propKeys[0] = componentClass + "." + |
| Util.getConstantNameFromProperty(mainProp, "_KEY"); |
| propKeys[1] = componentClass + "." + |
| Util.getConstantNameFromProperty("accessKey", "_KEY"); |
| } |
| |
| return propKeys; |
| } |
| |
| private void _writeSetValueBinding( |
| PrettyWriter out, |
| String componentClass, |
| String propName, |
| String propVar) |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", " + |
| "createValueBinding(" + propVar + "));"); |
| } |
| |
| private void _writeVirtualSetMethod( |
| PrettyWriter out, |
| String componentClass, |
| String propName) throws IOException |
| { |
| String[] propKeys = _getAccessKeyPropertyKeys(componentClass, propName); |
| |
| String propVar = "_" + propName; |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| |
| if (_is12) |
| { |
| out.println("if (!" + propVar + ".isLiteralText())"); |
| out.println("{"); |
| out.indent(); |
| out.println("VirtualAttributeUtils.setAccessKeyAttribute("); |
| out.indent(); |
| out.println("bean,"); |
| out.println(propVar + ","); |
| out.println(propKeys[0] + ","); |
| out.println(propKeys[1] + ");"); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("String s = " + propVar + ".getExpressionString();"); |
| out.println("if (s != null)"); |
| out.indent(); |
| out.println("VirtualAttributeUtils.setAccessKeyAttribute("); |
| out.indent(); |
| out.println("bean,"); |
| out.println("s,"); |
| out.println(propKeys[0] + ","); |
| out.println(propKeys[1] + ");"); |
| out.unindent(); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| } |
| else |
| { |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.println("{"); |
| out.indent(); |
| out.println("ValueBinding vb = createValueBinding(" + propVar + ");"); |
| out.println("VirtualAttributeUtils.setAccessKeyAttribute("); |
| out.indent(); |
| out.println("bean,"); |
| out.println("vb,"); |
| out.println(propKeys[0] + ","); |
| out.println(propKeys[1] + ");"); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("VirtualAttributeUtils.setAccessKeyAttribute("); |
| out.indent(); |
| out.println("bean,"); |
| out.println(propVar + ","); |
| out.println(propKeys[0] + ","); |
| out.println(propKeys[1] + ");"); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| } |
| |
| out.unindent(); |
| out.println("}"); |
| } |
| |
| private void _writeSetMethodBinding( |
| PrettyWriter out, |
| String componentClass, |
| PropertyBean property) throws IOException |
| { |
| String propName = property.getPropertyName(); |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| |
| if (_is12) |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ", " + |
| "new MethodExpressionMethodBinding(" + propVar + "));"); |
| out.unindent(); |
| } |
| else |
| { |
| MethodSignatureBean signature = property.getMethodBindingSignature(); |
| String[] paramTypes = (signature != null) ? signature.getParameterTypes() : null; |
| |
| String classArray; |
| |
| if (paramTypes == null || paramTypes.length == 0) |
| { |
| classArray = "new Class[0]"; |
| } |
| else |
| { |
| StringBuffer sb = new StringBuffer(); |
| sb.append("new Class[]{"); |
| for (int i = 0; i < paramTypes.length; i++) |
| { |
| if (i > 0) |
| sb.append(','); |
| sb.append(paramTypes[i]); |
| sb.append(".class"); |
| } |
| |
| // TODO: remove trailing comma |
| sb.append(','); |
| |
| sb.append('}'); |
| classArray = sb.toString(); |
| } |
| |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| |
| if (isStringMethodBindingReturnType(signature)) |
| { |
| out.println("MethodBinding mb;"); |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.indent(); |
| out.println("mb = createMethodBinding(" + propVar + ", " + classArray + ");"); |
| out.unindent(); |
| out.println("else"); |
| out.indent(); |
| out.println("mb = new org.apache.myfaces.trinidadinternal.taglib.ConstantMethodBinding(" + propVar + ");"); |
| out.unindent(); |
| } |
| else |
| { |
| // never a literal, no need for ConstantMethodBinding |
| out.println("MethodBinding mb = createMethodBinding(" + propVar + ", " + |
| classArray + ");"); |
| } |
| |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ", mb);"); |
| out.unindent(); |
| out.println("}"); |
| } |
| } |
| |
| private void _writeSetMethodExpression( |
| PrettyWriter out, |
| String componentClass, |
| PropertyBean property) throws IOException |
| { |
| String propName = property.getPropertyName(); |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ", " + |
| propVar + ");"); |
| } |
| |
| private void _writeSetEnum( |
| PrettyWriter out, |
| String componentClass, |
| PropertyBean property) throws IOException |
| { |
| String propName = property.getPropertyName(); |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| String propClass = Util.getClassFromFullClass(property.getPropertyClass()); |
| |
| if (_is12) |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| out.println("if (!" + propVar + ".isLiteralText())"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("String s = " + propVar + ".getExpressionString();"); |
| out.println("if (s != null)"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| out.println("Enum.valueOf(" + propClass + ".class,s));"); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| else |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.println("{"); |
| out.indent(); |
| out.println("ValueBinding vb = createValueBinding(" + propVar + ");"); |
| out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| out.println("Enum.valueOf(" + propClass + ".class," + propVar + "));"); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| } |
| |
| |
| private void _writeSetKeyStroke( |
| PrettyWriter out, |
| String componentClass, |
| String propName) throws IOException |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| |
| |
| if (_is12) |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| out.println("if (!" + propVar + ".isLiteralText())"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("String val = " + propVar + ".getExpressionString();"); |
| out.println("if (val != null)"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| out.println("\tKeyStroke.getKeyStroke(val));"); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| else |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.println("{"); |
| out.indent(); |
| out.println("ValueBinding vb = createValueBinding(" + propVar + ");"); |
| out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| out.println("\tKeyStroke.getKeyStroke(" + propVar + "));"); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| } |
| |
| |
| private void _writeSetAWTKeyStroke( |
| PrettyWriter out, |
| String componentClass, |
| String propName) throws IOException |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| |
| if (_is12) |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| out.println("if (!" + propVar + ".isLiteralText())"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("String val = " + propVar + ".getExpressionString();"); |
| out.println("if (val != null)"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| out.println("\tAWTKeyStroke.getAWTKeyStroke(val));"); |
| out.unindent(); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| else |
| { |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.println("{"); |
| out.indent(); |
| out.println("ValueBinding vb = createValueBinding(" + propVar + ");"); |
| out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| out.println("\tAWTKeyStroke.getAWTKeyStroke(" + propVar + "));"); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| } |
| |
| |
| private void _writeSetColor( |
| PrettyWriter out, |
| String componentClass, |
| String propName, |
| boolean isList) throws IOException |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| if (_is12) |
| { |
| out.println("if (!" + propVar + ".isLiteralText())"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("String s = " + propVar + ".getExpressionString();"); |
| out.println("if (s != null)"); |
| out.indent(); |
| out.println("{"); |
| out.println("try"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| if (isList) |
| out.println(" TagUtils.getColorList(s));"); |
| else |
| { |
| out.println(" TagUtils.getColor(s));"); |
| } |
| out.unindent(); |
| out.println("}"); |
| out.println("catch (ParseException pe)"); |
| out.println("{"); |
| out.indent(); |
| out.println("setValidationError("); |
| out.println(" pe.getMessage() + \": \" + \"Position \" + pe.getErrorOffset());"); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| else |
| { |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.println("{"); |
| out.indent(); |
| out.println("ValueBinding vb = createValueBinding(" + propVar + ");"); |
| out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("try"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ","); |
| if (isList) |
| out.println(" TagUtils.getColorList(" + propVar + "));"); |
| else |
| out.println(" TagUtils.getColor(" + propVar + "));"); |
| out.unindent(); |
| out.println("}"); |
| out.println("catch (ParseException pe)"); |
| out.println("{"); |
| out.indent(); |
| out.println("setValidationError("); |
| out.println(" pe.getMessage() + \": \" + \"Position \" + pe.getErrorOffset());"); |
| out.unindent(); |
| out.println("}"); |
| out.unindent(); |
| out.println("}"); |
| } |
| out.unindent(); |
| out.println("}"); |
| } |
| |
| |
| private void _writeSetConverter( |
| PrettyWriter out, |
| String componentClass, |
| String propName) throws IOException |
| { |
| String propKey = Util.getConstantNameFromProperty(propName, "_KEY"); |
| String propVar = "_" + propName; |
| |
| out.println("if (" + propVar + " != null)"); |
| out.println("{"); |
| out.indent(); |
| if (_is12) |
| { |
| out.println("if (!" + propVar + ".isLiteralText())"); |
| out.println("{"); |
| out.indent(); |
| out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("String s = " + propVar + ".getExpressionString();"); |
| out.println("if (s != null)"); |
| out.println("{"); |
| |
| out.indent(); |
| out.println("Converter converter = getFacesContext().getApplication()."); |
| out.indent(); |
| out.println("createConverter(s);"); |
| out.unindent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ", converter);"); |
| |
| out.unindent(); |
| out.println("}"); |
| |
| out.unindent(); |
| out.println("}"); |
| } |
| else |
| { |
| out.println("if (isValueReference(" + propVar + "))"); |
| out.println("{"); |
| out.indent(); |
| out.println("ValueBinding vb = createValueBinding(" + propVar + ");"); |
| out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);"); |
| out.unindent(); |
| out.println("}"); |
| out.println("else"); |
| out.println("{"); |
| out.indent(); |
| out.println("Converter converter = getFacesContext().getApplication()."); |
| out.indent(); |
| out.println("createConverter(" + propVar + ");"); |
| out.unindent(); |
| out.println("bean.setProperty(" + componentClass + "." + propKey + ", converter);"); |
| out.unindent(); |
| out.println("}"); |
| } |
| out.unindent(); |
| out.println("}"); |
| } |
| |
| private boolean isStringMethodBindingReturnType( |
| MethodSignatureBean sig) |
| { |
| return (sig != null && "java.lang.String".equals(sig.getReturnType())); |
| } |
| |
| } |