1 52 53 package freemarker.core; 54 55 import freemarker.template.Template; 56 import freemarker.template.TemplateBooleanModel; 57 import freemarker.template.TemplateException; 58 import freemarker.template.TemplateModel; 59 import freemarker.template.TemplateNumberModel; 60 import freemarker.template.TemplateScalarModel; 61 62 66 final class PropertySetting extends TemplateElement { 67 68 private final String key; 69 private final Expression value; 70 71 PropertySetting(String key, Expression value) { 72 this.key = key; 73 this.value = value; 74 } 75 76 void setLocation(Template template, int beginColumn, int beginLine, int endColumn, int endLine) 77 throws 78 ParseException 79 { 80 super.setLocation(template, beginColumn, beginLine, endColumn, endLine); 81 if (!key.equals(Configurable.LOCALE_KEY) && 82 !key.equals(Configurable.NUMBER_FORMAT_KEY) && 83 !key.equals(Configurable.TIME_FORMAT_KEY) && 84 !key.equals(Configurable.DATE_FORMAT_KEY) && 85 !key.equals(Configurable.DATETIME_FORMAT_KEY) && 86 !key.equals(Configurable.TIME_ZONE_KEY) && 87 !key.equals(Configurable.BOOLEAN_FORMAT_KEY) && 88 !key.equals(Configurable.CLASSIC_COMPATIBLE_KEY) && 89 !key.equals(Configurable.URL_ESCAPING_CHARSET_KEY)) 90 { 91 throw new ParseException( 92 "Error " + getStartLocation() 93 + "\nInvalid setting name, or it is not allowed to change " 94 + "the value of the setting with FTL: " 95 + key, 96 beginLine, beginColumn); 97 } 98 } 99 100 void accept(Environment env) throws TemplateException { 101 TemplateModel mval = value.getAsTemplateModel(env); 102 String strval; 103 if (mval instanceof TemplateScalarModel) { 104 strval = ((TemplateScalarModel) mval).getAsString(); 105 } else if (mval instanceof TemplateBooleanModel) { 106 strval = ((TemplateBooleanModel) mval).getAsBoolean() ? "true" : "false"; 107 } else if (mval instanceof TemplateNumberModel) { 108 strval = ((TemplateNumberModel) mval).getAsNumber().toString(); 109 } else { 110 strval = value.getStringValue(env); 111 } 112 env.setSetting(key, strval); 113 } 114 115 public String getCanonicalForm() { 116 return "<#setting " + key + "=" + value.getCanonicalForm() + "/>"; 117 } 118 119 public String getDescription() { 120 return "setting " + key + " set to " + "\"" + value + "\" " 121 + "[" + getStartLocation() + "]"; 122 } 123 } 124 | Popular Tags |