Search in sources :

Example 1 with TemplateHashModelEx

use of freemarker.template.TemplateHashModelEx in project wombat by PLOS.

the class TemplateModelUtil method getAsMap.

static ImmutableMap<String, TemplateModel> getAsMap(TemplateModel value) throws TemplateModelException {
    if (value == null)
        return ImmutableMap.of();
    if (value instanceof TemplateHashModelEx) {
        TemplateHashModelEx ftlHash = (TemplateHashModelEx) value;
        ImmutableMap.Builder<String, TemplateModel> builder = ImmutableMap.builder();
        for (TemplateModelIterator iterator = ftlHash.keys().iterator(); iterator.hasNext(); ) {
            String key = iterator.next().toString();
            builder.put(key, ftlHash.get(key));
        }
        return builder.build();
    }
    throw new TemplateModelException("Hash type expected");
}
Also used : TemplateModelException(freemarker.template.TemplateModelException) TemplateModelIterator(freemarker.template.TemplateModelIterator) TemplateHashModelEx(freemarker.template.TemplateHashModelEx) TemplateModel(freemarker.template.TemplateModel) ImmutableMap(com.google.common.collect.ImmutableMap)

Example 2 with TemplateHashModelEx

use of freemarker.template.TemplateHashModelEx in project wombat by PLOS.

the class TemplateModelUtil method getAsMultimap.

static ImmutableListMultimap<String, TemplateModel> getAsMultimap(TemplateModel value) throws TemplateModelException {
    if (value == null)
        return ImmutableListMultimap.of();
    if (value instanceof TemplateHashModelEx) {
        TemplateHashModelEx ftlHash = (TemplateHashModelEx) value;
        ImmutableListMultimap.Builder<String, TemplateModel> builder = ImmutableListMultimap.builder();
        for (TemplateModelIterator iterator = ftlHash.keys().iterator(); iterator.hasNext(); ) {
            String key = iterator.next().toString();
            TemplateModel model = ftlHash.get(key);
            if (model instanceof TemplateSequenceModel) {
                TemplateSequenceModel sequenceModel = (TemplateSequenceModel) model;
                int size = sequenceModel.size();
                for (int i = 0; i < size; i++) {
                    builder.put(key, sequenceModel.get(i));
                }
            } else {
                builder.put(key, model);
            }
        }
        return builder.build();
    }
    throw new TemplateModelException("Hash type expected");
}
Also used : TemplateModelException(freemarker.template.TemplateModelException) TemplateSequenceModel(freemarker.template.TemplateSequenceModel) TemplateModelIterator(freemarker.template.TemplateModelIterator) TemplateHashModelEx(freemarker.template.TemplateHashModelEx) ImmutableListMultimap(com.google.common.collect.ImmutableListMultimap) TemplateModel(freemarker.template.TemplateModel)

Example 3 with TemplateHashModelEx

use of freemarker.template.TemplateHashModelEx in project freemarker by apache.

the class Environment method getKnownVariableNames.

/**
 * Returns a set of variable names that are known at the time of call. This includes names of all shared variables
 * in the {@link Configuration}, names of all global variables that were assigned during the template processing,
 * names of all variables in the current name-space, names of all local variables and loop variables. If the passed
 * root data model implements the {@link TemplateHashModelEx} interface, then all names it retrieves through a call
 * to {@link TemplateHashModelEx#keys()} method are returned as well. The method returns a new Set object on each
 * call that is completely disconnected from the Environment. That is, modifying the set will have no effect on the
 * Environment object.
 */
public Set getKnownVariableNames() throws TemplateModelException {
    // shared vars.
    Set set = configuration.getSharedVariableNames();
    // root hash
    if (rootDataModel instanceof TemplateHashModelEx) {
        TemplateModelIterator rootNames = ((TemplateHashModelEx) rootDataModel).keys().iterator();
        while (rootNames.hasNext()) {
            set.add(((TemplateScalarModel) rootNames.next()).getAsString());
        }
    }
    // globals
    for (TemplateModelIterator tmi = globalNamespace.keys().iterator(); tmi.hasNext(); ) {
        set.add(((TemplateScalarModel) tmi.next()).getAsString());
    }
    // current name-space
    for (TemplateModelIterator tmi = currentNamespace.keys().iterator(); tmi.hasNext(); ) {
        set.add(((TemplateScalarModel) tmi.next()).getAsString());
    }
    // locals and loop vars
    if (currentMacroContext != null) {
        set.addAll(currentMacroContext.getLocalVariableNames());
    }
    if (localContextStack != null) {
        for (int i = localContextStack.size() - 1; i >= 0; i--) {
            LocalContext lc = localContextStack.get(i);
            set.addAll(lc.getLocalVariableNames());
        }
    }
    return set;
}
Also used : Set(java.util.Set) TemplateModelIterator(freemarker.template.TemplateModelIterator) TemplateHashModelEx(freemarker.template.TemplateHashModelEx)

Example 4 with TemplateHashModelEx

use of freemarker.template.TemplateHashModelEx in project freemarker by apache.

the class GetOptionalTemplateMethod method exec.

public Object exec(List args) throws TemplateModelException {
    final int argCnt = args.size();
    if (argCnt < 1 || argCnt > 2) {
        throw _MessageUtil.newArgCntError(methodName, argCnt, 1, 2);
    }
    final Environment env = Environment.getCurrentEnvironment();
    if (env == null) {
        throw new IllegalStateException("No freemarer.core.Environment is associated to the current thread.");
    }
    final String absTemplateName;
    {
        TemplateModel arg = (TemplateModel) args.get(0);
        if (!(arg instanceof TemplateScalarModel)) {
            throw _MessageUtil.newMethodArgMustBeStringException(methodName, 0, arg);
        }
        String templateName = EvalUtil.modelToString((TemplateScalarModel) arg, null, env);
        try {
            absTemplateName = env.toFullTemplateName(env.getCurrentTemplate().getName(), templateName);
        } catch (MalformedTemplateNameException e) {
            throw new _TemplateModelException(e, "Failed to convert template path to full path; see cause exception.");
        }
    }
    final TemplateHashModelEx options;
    if (argCnt > 1) {
        TemplateModel arg = (TemplateModel) args.get(1);
        if (!(arg instanceof TemplateHashModelEx)) {
            throw _MessageUtil.newMethodArgMustBeExtendedHashException(methodName, 1, arg);
        }
        options = (TemplateHashModelEx) arg;
    } else {
        options = null;
    }
    String encoding = null;
    boolean parse = true;
    if (options != null) {
        final KeyValuePairIterator kvpi = TemplateModelUtils.getKeyValuePairIterator(options);
        while (kvpi.hasNext()) {
            final KeyValuePair kvp = kvpi.next();
            final String optName;
            {
                TemplateModel optNameTM = kvp.getKey();
                if (!(optNameTM instanceof TemplateScalarModel)) {
                    throw _MessageUtil.newMethodArgInvalidValueException(methodName, 1, "All keys in the options hash must be strings, but found ", new _DelayedAOrAn(new _DelayedFTLTypeDescription(optNameTM)));
                }
                optName = ((TemplateScalarModel) optNameTM).getAsString();
            }
            final TemplateModel optValue = kvp.getValue();
            if (OPTION_ENCODING.equals(optName)) {
                encoding = getStringOption(OPTION_ENCODING, optValue);
            } else if (OPTION_PARSE.equals(optName)) {
                parse = getBooleanOption(OPTION_PARSE, optValue);
            } else {
                throw _MessageUtil.newMethodArgInvalidValueException(methodName, 1, "Unsupported option ", new _DelayedJQuote(optName), "; valid names are: ", new _DelayedJQuote(OPTION_ENCODING), ", ", new _DelayedJQuote(OPTION_PARSE), ".");
            }
        }
    }
    final Template template;
    try {
        template = env.getTemplateForInclusion(absTemplateName, encoding, parse, true);
    } catch (IOException e) {
        throw new _TemplateModelException(e, "I/O error when trying to load optional template ", new _DelayedJQuote(absTemplateName), "; see cause exception");
    }
    SimpleHash result = new SimpleHash(env.getObjectWrapper());
    result.put(RESULT_EXISTS, template != null);
    // conveniently provided like in <@optTemp.include!myDefaultMacro />.
    if (template != null) {
        result.put(RESULT_INCLUDE, new TemplateDirectiveModel() {

            public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException {
                if (!params.isEmpty()) {
                    throw new TemplateException("This directive supports no parameters.", env);
                }
                if (loopVars.length != 0) {
                    throw new TemplateException("This directive supports no loop variables.", env);
                }
                if (body != null) {
                    throw new TemplateException("This directive supports no nested content.", env);
                }
                env.include(template);
            }
        });
        result.put(RESULT_IMPORT, new TemplateMethodModelEx() {

            public Object exec(List args) throws TemplateModelException {
                if (!args.isEmpty()) {
                    throw new TemplateModelException("This method supports no parameters.");
                }
                try {
                    return env.importLib(template, null);
                } catch (IOException e) {
                    throw new _TemplateModelException(e, "Failed to import loaded template; see cause exception");
                } catch (TemplateException e) {
                    throw new _TemplateModelException(e, "Failed to import loaded template; see cause exception");
                }
            }
        });
    }
    return result;
}
Also used : TemplateModelException(freemarker.template.TemplateModelException) TemplateModel(freemarker.template.TemplateModel) MalformedTemplateNameException(freemarker.template.MalformedTemplateNameException) Template(freemarker.template.Template) TemplateMethodModelEx(freemarker.template.TemplateMethodModelEx) List(java.util.List) KeyValuePairIterator(freemarker.template.TemplateHashModelEx2.KeyValuePairIterator) KeyValuePair(freemarker.template.TemplateHashModelEx2.KeyValuePair) TemplateException(freemarker.template.TemplateException) IOException(java.io.IOException) TemplateDirectiveBody(freemarker.template.TemplateDirectiveBody) TemplateHashModelEx(freemarker.template.TemplateHashModelEx) SimpleHash(freemarker.template.SimpleHash) TemplateScalarModel(freemarker.template.TemplateScalarModel) Map(java.util.Map) TemplateDirectiveModel(freemarker.template.TemplateDirectiveModel)

Example 5 with TemplateHashModelEx

use of freemarker.template.TemplateHashModelEx in project be5 by DevelopmentOnTheEdge.

the class Environment method getKnownVariableNames.

/**
 * Returns a set of variable names that are known at the time of call. This
 * includes names of all shared variables in the {@link Configuration},
 * names of all global variables that were assigned during the template processing,
 * names of all variables in the current name-space, names of all local variables
 * and loop variables. If the passed root data model implements the
 * {@link TemplateHashModelEx} interface, then all names it retrieves through a call to
 * {@link TemplateHashModelEx#keys()} method are returned as well.
 * The method returns a new Set object on each call that is completely
 * disconnected from the Environment. That is, modifying the set will have
 * no effect on the Environment object.
 */
public Set getKnownVariableNames() throws TemplateModelException {
    // shared vars.
    Set set = getConfiguration().getSharedVariableNames();
    // root hash
    if (rootDataModel instanceof TemplateHashModelEx) {
        TemplateModelIterator rootNames = ((TemplateHashModelEx) rootDataModel).keys().iterator();
        while (rootNames.hasNext()) {
            set.add(((TemplateScalarModel) rootNames.next()).getAsString());
        }
    }
    // globals
    for (TemplateModelIterator tmi = globalNamespace.keys().iterator(); tmi.hasNext(); ) {
        set.add(((TemplateScalarModel) tmi.next()).getAsString());
    }
    // current name-space
    for (TemplateModelIterator tmi = currentNamespace.keys().iterator(); tmi.hasNext(); ) {
        set.add(((TemplateScalarModel) tmi.next()).getAsString());
    }
    // locals and loop vars
    if (currentMacroContext != null) {
        set.addAll(currentMacroContext.getLocalVariableNames());
    }
    if (localContextStack != null) {
        for (int i = localContextStack.size() - 1; i >= 0; i--) {
            LocalContext lc = (LocalContext) localContextStack.get(i);
            set.addAll(lc.getLocalVariableNames());
        }
    }
    return set;
}
Also used : Set(java.util.Set) TemplateModelIterator(freemarker.template.TemplateModelIterator) TemplateHashModelEx(freemarker.template.TemplateHashModelEx)

Aggregations

TemplateHashModelEx (freemarker.template.TemplateHashModelEx)10 TemplateModelIterator (freemarker.template.TemplateModelIterator)6 TemplateModelException (freemarker.template.TemplateModelException)5 TemplateModel (freemarker.template.TemplateModel)3 ArrayList (java.util.ArrayList)2 LinkedHashMap (java.util.LinkedHashMap)2 List (java.util.List)2 Set (java.util.Set)2 Test (org.junit.Test)2 ImmutableListMultimap (com.google.common.collect.ImmutableListMultimap)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 DefaultObjectWrapperBuilder (freemarker.template.DefaultObjectWrapperBuilder)1 MalformedTemplateNameException (freemarker.template.MalformedTemplateNameException)1 SimpleHash (freemarker.template.SimpleHash)1 Template (freemarker.template.Template)1 TemplateDirectiveBody (freemarker.template.TemplateDirectiveBody)1 TemplateDirectiveModel (freemarker.template.TemplateDirectiveModel)1 TemplateException (freemarker.template.TemplateException)1 KeyValuePair (freemarker.template.TemplateHashModelEx2.KeyValuePair)1 KeyValuePairIterator (freemarker.template.TemplateHashModelEx2.KeyValuePairIterator)1