Search in sources :

Example 11 with TemplateScalarModel

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

the class BeansWrapperSingletonsTest method exposesProperties.

private boolean exposesProperties(BeansWrapper bw) throws TemplateModelException {
    TemplateHashModel thm = (TemplateHashModel) bw.wrap(new C());
    TemplateScalarModel r = (TemplateScalarModel) thm.get("bar");
    if (r == null)
        return false;
    assertEquals("BAR", r.getAsString());
    return true;
}
Also used : TemplateHashModel(freemarker.template.TemplateHashModel) TemplateScalarModel(freemarker.template.TemplateScalarModel)

Example 12 with TemplateScalarModel

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

the class EnumModelsTest method modelCaching.

@Test
public void modelCaching() throws Exception {
    BeansWrapper bw = new BeansWrapper(Configuration.VERSION_2_3_21);
    TemplateHashModel enums = bw.getEnumModels();
    TemplateHashModel e = (TemplateHashModel) enums.get(E.class.getName());
    assertNotNull(e);
    assertNotNull(e.get("A"));
    assertNotNull(e.get("B"));
    assertNull(e.get("C"));
    try {
        enums.get("no.such.ClassExists");
        fail();
    } catch (TemplateModelException ex) {
        assertTrue(ex.getCause() instanceof ClassNotFoundException);
    }
    TemplateModel a = e.get("A");
    assertTrue(a instanceof TemplateScalarModel);
    assertTrue(a instanceof TemplateHashModel);
    assertEquals(((TemplateScalarModel) a).getAsString(), "ts:A");
    TemplateMethodModelEx nameMethod = (TemplateMethodModelEx) ((TemplateHashModel) a).get("name");
    assertEquals(((TemplateScalarModel) nameMethod.exec(new ArrayList())).getAsString(), "A");
    assertSame(e, enums.get(E.class.getName()));
    bw.clearClassIntrospecitonCache();
    TemplateHashModel eAfterClean = (TemplateHashModel) enums.get(E.class.getName());
    assertNotSame(e, eAfterClean);
    assertSame(eAfterClean, enums.get(E.class.getName()));
    assertNotNull(eAfterClean.get("A"));
    assertNotNull(eAfterClean.get("B"));
    assertNull(eAfterClean.get("C"));
}
Also used : TemplateModelException(freemarker.template.TemplateModelException) TemplateHashModel(freemarker.template.TemplateHashModel) TemplateMethodModelEx(freemarker.template.TemplateMethodModelEx) ArrayList(java.util.ArrayList) TemplateScalarModel(freemarker.template.TemplateScalarModel) TemplateModel(freemarker.template.TemplateModel) Test(org.junit.Test)

Example 13 with TemplateScalarModel

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

the class StringArraySequence method get.

public TemplateModel get(int index) {
    if (array == null) {
        array = new TemplateScalarModel[stringArray.length];
    }
    TemplateScalarModel result = array[index];
    if (result == null) {
        result = new SimpleScalar(stringArray[index]);
        array[index] = result;
    }
    return result;
}
Also used : TemplateScalarModel(freemarker.template.TemplateScalarModel) SimpleScalar(freemarker.template.SimpleScalar)

Example 14 with TemplateScalarModel

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

the class NodeListModel method get.

public TemplateModel get(String key) throws TemplateModelException {
    int size = size();
    if (size == 1) {
        NodeModel nm = (NodeModel) get(0);
        return nm.get(key);
    }
    if (key.startsWith("@@")) {
        if (key.equals(AtAtKey.MARKUP.getKey()) || key.equals(AtAtKey.NESTED_MARKUP.getKey()) || key.equals(AtAtKey.TEXT.getKey())) {
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < size; i++) {
                NodeModel nm = (NodeModel) get(i);
                TemplateScalarModel textModel = (TemplateScalarModel) nm.get(key);
                result.append(textModel.getAsString());
            }
            return new SimpleScalar(result.toString());
        } else if (key.length() != 2) /* to allow "@@" to fall through */
        {
            // As @@... would cause exception in the XPath engine, we throw a nicer exception now.
            if (AtAtKey.containsKey(key)) {
                throw new TemplateModelException("\"" + key + "\" is only applicable to a single XML node, but it was applied on " + (size != 0 ? size + " XML nodes (multiple matches)." : "an empty list of XML nodes (no matches)."));
            } else {
                throw new TemplateModelException("Unsupported @@ key: " + key);
            }
        }
    }
    if (DomStringUtil.isXMLNameLike(key) || ((key.startsWith("@") && (DomStringUtil.isXMLNameLike(key, 1) || key.equals("@@") || key.equals("@*")))) || key.equals("*") || key.equals("**")) {
        NodeListModel result = new NodeListModel(contextNode);
        for (int i = 0; i < size; i++) {
            NodeModel nm = (NodeModel) get(i);
            if (nm instanceof ElementModel) {
                TemplateSequenceModel tsm = (TemplateSequenceModel) ((ElementModel) nm).get(key);
                if (tsm != null) {
                    int tsmSize = tsm.size();
                    for (int j = 0; j < tsmSize; j++) {
                        result.add(tsm.get(j));
                    }
                }
            }
        }
        if (result.size() == 1) {
            return result.get(0);
        }
        return result;
    }
    XPathSupport xps = getXPathSupport();
    if (xps != null) {
        Object context = (size == 0) ? null : rawNodeList();
        return xps.executeQuery(context, key);
    } else {
        throw new TemplateModelException("Can't try to resolve the XML query key, because no XPath support is available. " + "This is either malformed or an XPath expression: " + key);
    }
}
Also used : TemplateModelException(freemarker.template.TemplateModelException) TemplateNodeModel(freemarker.template.TemplateNodeModel) TemplateSequenceModel(freemarker.template.TemplateSequenceModel) TemplateScalarModel(freemarker.template.TemplateScalarModel) SimpleScalar(freemarker.template.SimpleScalar)

Example 15 with TemplateScalarModel

use of freemarker.template.TemplateScalarModel in project alfresco-repository by Alfresco.

the class DateCompareMethod method exec.

/**
 * @see freemarker.template.TemplateMethodModel#exec(java.util.List)
 */
public Object exec(List args) throws TemplateModelException {
    int result = 0;
    if (args.size() >= 2) {
        Object arg0 = args.get(0);
        Object arg1 = args.get(1);
        long diff = 0;
        if (args.size() == 3) {
            Object arg2 = args.get(2);
            if (arg2 instanceof TemplateNumberModel) {
                Number number = ((TemplateNumberModel) arg2).getAsNumber();
                diff = number.longValue();
            }
        }
        String test = null;
        if (args.size() == 4) {
            Object arg3 = args.get(3);
            if (arg3 instanceof TemplateScalarModel) {
                test = ((TemplateScalarModel) arg3).getAsString();
            }
        }
        if (arg0 instanceof TemplateDateModel && arg1 instanceof TemplateDateModel) {
            Date dateA = (Date) (((TemplateDateModel) arg0).getAsDate()).clone();
            Date dateB = (Date) (((TemplateDateModel) arg1).getAsDate()).clone();
            switch(((TemplateDateModel) arg0).getDateType()) {
                case TemplateDateModel.DATE:
                    // clear time part
                    dateA.setHours(0);
                    dateA.setMinutes(0);
                    dateA.setSeconds(0);
                    dateA = new Date(dateA.getTime() / 1000L * 1000L);
                    break;
                case TemplateDateModel.TIME:
                    // clear date part
                    dateA.setDate(1);
                    dateA.setMonth(0);
                    dateA.setYear(0);
                    break;
            }
            switch(((TemplateDateModel) arg1).getDateType()) {
                case TemplateDateModel.DATE:
                    // clear time part
                    dateB.setHours(0);
                    dateB.setMinutes(0);
                    dateB.setSeconds(0);
                    dateB = new Date(dateB.getTime() / 1000L * 1000L);
                    break;
                case TemplateDateModel.TIME:
                    // clear date part
                    dateB.setDate(1);
                    dateB.setMonth(0);
                    dateB.setYear(0);
                    break;
            }
            if (test == null || test.equals(">")) {
                if (dateA.getTime() > (dateB.getTime() - diff)) {
                    result = 1;
                }
            } else if (test.equals("<")) {
                if (dateA.getTime() < (dateB.getTime() - diff)) {
                    result = 1;
                }
            } else if (test.equals("==")) {
                if (dateA.getTime() == (dateB.getTime() - diff)) {
                    result = 1;
                }
            }
        }
    }
    return result;
}
Also used : TemplateNumberModel(freemarker.template.TemplateNumberModel) TemplateScalarModel(freemarker.template.TemplateScalarModel) TemplateDateModel(freemarker.template.TemplateDateModel) Date(java.util.Date)

Aggregations

TemplateScalarModel (freemarker.template.TemplateScalarModel)41 TemplateModel (freemarker.template.TemplateModel)18 TemplateModelException (freemarker.template.TemplateModelException)18 TemplateHashModel (freemarker.template.TemplateHashModel)9 TemplateSequenceModel (freemarker.template.TemplateSequenceModel)9 IOException (java.io.IOException)9 TemplateNumberModel (freemarker.template.TemplateNumberModel)8 Environment (freemarker.core.Environment)7 BeanModel (freemarker.ext.beans.BeanModel)7 TemplateMethodModelEx (freemarker.template.TemplateMethodModelEx)7 SimpleScalar (freemarker.template.SimpleScalar)6 Test (org.junit.Test)6 SimpleSequence (freemarker.template.SimpleSequence)5 Template (freemarker.template.Template)5 TemplateNodeModel (freemarker.template.TemplateNodeModel)5 Writer (java.io.Writer)5 Map (java.util.Map)5 HttpServletRequest (javax.servlet.http.HttpServletRequest)5 TemplateBooleanModel (freemarker.template.TemplateBooleanModel)4 TemplateException (freemarker.template.TemplateException)3