diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/StringEvaluator.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/StringEvaluator.java | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/StringEvaluator.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/StringEvaluator.java new file mode 100644 index 000000000..c1c8073c0 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/StringEvaluator.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * 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 com.android.ide.eclipse.adt.internal.wizards.templates; + +import static com.android.tools.lint.detector.api.LintUtils.assertionsEnabled; + +import com.android.annotations.NonNull; +import com.android.annotations.Nullable; +import com.android.ide.eclipse.adt.AdtPlugin; + +import freemarker.cache.TemplateLoader; +import freemarker.template.Configuration; +import freemarker.template.DefaultObjectWrapper; +import freemarker.template.Template; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.List; +import java.util.Map; + +/** + * A template handler which can evaluate simple strings. Used to evaluate + * parameter constraints during UI wizard value editing. + * <p> + * Unlike the more general {@link TemplateHandler} which is used to instantiate + * full template files (from resources, merging into existing files etc) this + * evaluator supports only simple strings, referencing only values from the + * provided map (and builtin functions). + */ +class StringEvaluator implements TemplateLoader { + private Map<String, Object> mParameters; + private Configuration mFreemarker; + private String mCurrentExpression; + + StringEvaluator() { + mParameters = TemplateHandler.createBuiltinMap(); + + mFreemarker = new Configuration(); + mFreemarker.setObjectWrapper(new DefaultObjectWrapper()); + mFreemarker.setTemplateLoader(this); + } + + /** Evaluates the given expression, with the given set of parameters */ + @Nullable + String evaluate(@NonNull String expression, @NonNull List<Parameter> parameters) { + // Render the instruction list template. + for (Parameter parameter : parameters) { + mParameters.put(parameter.id, parameter.value); + } + try { + mCurrentExpression = expression; + Template inputsTemplate = mFreemarker.getTemplate(expression); + StringWriter out = new StringWriter(); + inputsTemplate.process(mParameters, out); + out.flush(); + return out.toString(); + } catch (Exception e) { + if (assertionsEnabled()) { + AdtPlugin.log(e, null); + } + return null; + } + } + + // ---- Implements TemplateLoader ---- + + @Override + public Object findTemplateSource(String name) throws IOException { + return mCurrentExpression; + } + + @Override + public long getLastModified(Object templateSource) { + return 0; + } + + @Override + public Reader getReader(Object templateSource, String encoding) throws IOException { + return new StringReader(mCurrentExpression); + } + + @Override + public void closeTemplateSource(Object templateSource) throws IOException { + } +} |