Search in sources :

Example 6 with TemplateScalarModel

use of freemarker.template.TemplateScalarModel in project ofbiz-framework by apache.

the class OfbizAmountTransform method getArg.

private static String getArg(Map args, String key) {
    String result = "";
    Object o = args.get(key);
    if (o != null) {
        if (Debug.verboseOn())
            Debug.logVerbose("Arg Object : " + o.getClass().getName(), module);
        if (o instanceof TemplateScalarModel) {
            TemplateScalarModel s = (TemplateScalarModel) o;
            try {
                result = s.getAsString();
            } catch (TemplateModelException e) {
                Debug.logError(e, "Template Exception", module);
            }
        } else {
            result = o.toString();
        }
    }
    return result;
}
Also used : TemplateModelException(freemarker.template.TemplateModelException) TemplateScalarModel(freemarker.template.TemplateScalarModel)

Example 7 with TemplateScalarModel

use of freemarker.template.TemplateScalarModel in project ofbiz-framework by apache.

the class UrlRegexpTransform method getWriter.

public Writer getWriter(final Writer out, Map args) {
    final StringBuffer buf = new StringBuffer();
    final boolean fullPath = checkArg(args, "fullPath", false);
    final boolean secure = checkArg(args, "secure", false);
    final boolean encode = checkArg(args, "encode", true);
    return new Writer(out) {

        public void write(char[] cbuf, int off, int len) {
            buf.append(cbuf, off, len);
        }

        public void flush() throws IOException {
            out.flush();
        }

        public void close() throws IOException {
            try {
                Environment env = Environment.getCurrentEnvironment();
                BeanModel req = (BeanModel) env.getVariable("request");
                BeanModel res = (BeanModel) env.getVariable("response");
                Object prefix = env.getVariable("urlPrefix");
                if (req != null) {
                    HttpServletRequest request = (HttpServletRequest) req.getWrappedObject();
                    ServletContext ctx = (ServletContext) request.getAttribute("servletContext");
                    HttpServletResponse response = null;
                    if (res != null) {
                        response = (HttpServletResponse) res.getWrappedObject();
                    }
                    HttpSession session = request.getSession();
                    GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
                    // anonymous shoppers are not logged in
                    if (userLogin != null && "anonymous".equals(userLogin.getString("userLoginId"))) {
                        userLogin = null;
                    }
                    RequestHandler rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_");
                    out.write(seoUrl(rh.makeLink(request, response, buf.toString(), fullPath, secure || request.isSecure(), encode), userLogin == null));
                } else if (prefix != null) {
                    if (prefix instanceof TemplateScalarModel) {
                        TemplateScalarModel s = (TemplateScalarModel) prefix;
                        String prefixString = s.getAsString();
                        String bufString = buf.toString();
                        boolean prefixSlash = prefixString.endsWith("/");
                        boolean bufSlash = bufString.startsWith("/");
                        if (prefixSlash && bufSlash) {
                            bufString = bufString.substring(1);
                        } else if (!prefixSlash && !bufSlash) {
                            bufString = "/" + bufString;
                        }
                        out.write(prefixString + bufString);
                    }
                } else {
                    out.write(buf.toString());
                }
            } catch (IOException | TemplateModelException e) {
                throw new IOException(e.getMessage());
            }
        }
    };
}
Also used : GenericValue(org.apache.ofbiz.entity.GenericValue) TemplateModelException(freemarker.template.TemplateModelException) BeanModel(freemarker.ext.beans.BeanModel) HttpSession(javax.servlet.http.HttpSession) HttpServletResponse(javax.servlet.http.HttpServletResponse) IOException(java.io.IOException) HttpServletRequest(javax.servlet.http.HttpServletRequest) RequestHandler(org.apache.ofbiz.webapp.control.RequestHandler) Environment(freemarker.core.Environment) ServletContext(javax.servlet.ServletContext) TemplateScalarModel(freemarker.template.TemplateScalarModel) Writer(java.io.Writer)

Example 8 with TemplateScalarModel

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

the class PropertySetting method accept.

@Override
TemplateElement[] accept(Environment env) throws TemplateException {
    TemplateModel mval = value.eval(env);
    String strval;
    if (mval instanceof TemplateScalarModel) {
        strval = ((TemplateScalarModel) mval).getAsString();
    } else if (mval instanceof TemplateBooleanModel) {
        strval = ((TemplateBooleanModel) mval).getAsBoolean() ? "true" : "false";
    } else if (mval instanceof TemplateNumberModel) {
        strval = ((TemplateNumberModel) mval).getAsNumber().toString();
    } else {
        strval = value.evalAndCoerceToStringOrUnsupportedMarkup(env);
    }
    env.setSetting(key, strval);
    return null;
}
Also used : TemplateNumberModel(freemarker.template.TemplateNumberModel) TemplateScalarModel(freemarker.template.TemplateScalarModel) TemplateModel(freemarker.template.TemplateModel) TemplateBooleanModel(freemarker.template.TemplateBooleanModel)

Example 9 with TemplateScalarModel

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

the class Java8BeansWrapperTest method testDefaultMethodRecognized.

@Test
public void testDefaultMethodRecognized() throws TemplateModelException {
    BeansWrapperBuilder owb = new BeansWrapperBuilder(Configuration.VERSION_2_3_0);
    owb.setTreatDefaultMethodsAsBeanMembers(true);
    BeansWrapper ow = owb.build();
    TemplateHashModel wrappedBean = (TemplateHashModel) ow.wrap(new Java8DefaultMethodsBean());
    {
        TemplateScalarModel prop = (TemplateScalarModel) wrappedBean.get(Java8DefaultMethodsBean.NORMAL_PROP);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.NORMAL_PROP_VALUE, prop.getAsString());
    }
    {
        // This is overridden in the subclass, so it's visible even without default method support:
        TemplateScalarModel prop = (TemplateScalarModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_PROP_2);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.PROP_2_OVERRIDE_VALUE, prop.getAsString());
    }
    {
        TemplateScalarModel prop = (TemplateScalarModel) wrappedBean.get(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_PROP);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_PROP_VALUE, prop.getAsString());
    }
    {
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_INDEXED_PROP);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_INDEXED_PROP_VALUE, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // We see default method indexed read method, but it's invalidated by normal getter in the subclass
        TemplateNumberModel prop = (TemplateNumberModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.NOT_AN_INDEXED_PROP_VALUE, prop.getAsNumber());
    }
    {
        // The default method read method invalidates the indexed read method in the subclass
        TemplateScalarModel prop = (TemplateScalarModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP_2);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP_2_VALUE, prop.getAsString());
    }
    {
        // The default method read method invalidates the indexed read method in the subclass
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP_3);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP_3_VALUE_0, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // We see the default method indexed reader, which overrides the plain array reader in the subclass.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_INDEXED_PROP_2);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.DEFAULT_METHOD_INDEXED_PROP_2_VALUE_0, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // We do see the default method non-indexed reader, but the subclass has a matching indexed reader, so that
        // takes over.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_INDEXED_PROP_3);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.INDEXED_PROP_3_VALUE, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // Only present in the subclass.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.INDEXED_PROP_4);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.INDEXED_PROP_4_VALUE, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        TemplateMethodModelEx action = (TemplateMethodModelEx) wrappedBean.get(Java8DefaultMethodsBean.NORMAL_ACTION);
        assertNotNull(action);
        assertEquals(Java8DefaultMethodsBean.NORMAL_ACTION_RETURN_VALUE, ((TemplateScalarModel) action.exec(Collections.emptyList())).getAsString());
    }
    {
        TemplateMethodModelEx action = (TemplateMethodModelEx) wrappedBean.get(Java8DefaultMethodsBean.NORMAL_ACTION);
        assertNotNull(action);
        assertEquals(Java8DefaultMethodsBean.NORMAL_ACTION_RETURN_VALUE, ((TemplateScalarModel) action.exec(Collections.emptyList())).getAsString());
    }
    {
        TemplateMethodModelEx action = (TemplateMethodModelEx) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_ACTION);
        assertNotNull(action);
        assertEquals(Java8DefaultMethodsBean.DEFAULT_METHOD_ACTION_RETURN_VALUE, ((TemplateScalarModel) action.exec(Collections.emptyList())).getAsString());
    }
    {
        TemplateMethodModelEx action = (TemplateMethodModelEx) wrappedBean.get(Java8DefaultMethodsBean.OVERRIDDEN_DEFAULT_METHOD_ACTION);
        assertNotNull(action);
        assertEquals(Java8DefaultMethodsBean.OVERRIDDEN_DEFAULT_METHOD_ACTION_RETURN_VALUE, ((TemplateScalarModel) action.exec(Collections.emptyList())).getAsString());
    }
}
Also used : TemplateSequenceModel(freemarker.template.TemplateSequenceModel) TemplateHashModel(freemarker.template.TemplateHashModel) TemplateMethodModelEx(freemarker.template.TemplateMethodModelEx) TemplateNumberModel(freemarker.template.TemplateNumberModel) TemplateScalarModel(freemarker.template.TemplateScalarModel) Test(org.junit.Test)

Example 10 with TemplateScalarModel

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

the class Java8BeansWrapperTest method testDefaultMethodNotRecognized.

@Test
public void testDefaultMethodNotRecognized() throws TemplateModelException {
    BeansWrapperBuilder owb = new BeansWrapperBuilder(Configuration.VERSION_2_3_0);
    // owb.setTreatDefaultMethodsAsBeanMembers(false);
    BeansWrapper ow = owb.build();
    TemplateHashModel wrappedBean = (TemplateHashModel) ow.wrap(new Java8DefaultMethodsBean());
    {
        TemplateScalarModel prop = (TemplateScalarModel) wrappedBean.get(Java8DefaultMethodsBean.NORMAL_PROP);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.NORMAL_PROP_VALUE, prop.getAsString());
    }
    {
        // This is overridden in the subclass, so it's visible even without default method support:
        TemplateScalarModel prop = (TemplateScalarModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_PROP_2);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.PROP_2_OVERRIDE_VALUE, prop.getAsString());
    }
    assertNull(wrappedBean.get(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_PROP));
    assertNull(wrappedBean.get(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_INDEXED_PROP));
    {
        // We don't see the default method indexed reader, but see the plain reader method in the subclass.
        TemplateNumberModel prop = (TemplateNumberModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.NOT_AN_INDEXED_PROP_VALUE, prop.getAsNumber());
    }
    {
        // We don't see the default method non-indexed reader that would spoil the indexed reader in the subclass.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP_2);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.NOT_AN_INDEXED_PROP_2_VALUE, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // We don't see the default method non-indexed reader that would spoil the indexed reader in the subclass.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_NOT_AN_INDEXED_PROP_3);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.NOT_AN_INDEXED_PROP_3_VALUE, ((TemplateNumberModel) prop.get(0)).getAsNumber());
    }
    {
        // We don't see the default method indexed reader, but see the plain array reader in the subclass.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_INDEXED_PROP_2);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.ARRAY_PROP_2_VALUE_0, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // Only present in the subclass.
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.INDEXED_PROP_4);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.INDEXED_PROP_4_VALUE, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        // We don't see the default method non-indexed reader
        TemplateSequenceModel prop = (TemplateSequenceModel) wrappedBean.get(Java8DefaultMethodsBean.DEFAULT_METHOD_INDEXED_PROP_3);
        assertNotNull(prop);
        assertEquals(Java8DefaultMethodsBean.INDEXED_PROP_3_VALUE, ((TemplateScalarModel) prop.get(0)).getAsString());
    }
    {
        TemplateMethodModelEx action = (TemplateMethodModelEx) wrappedBean.get(Java8DefaultMethodsBean.NORMAL_ACTION);
        assertNotNull(action);
        assertEquals(Java8DefaultMethodsBean.NORMAL_ACTION_RETURN_VALUE, ((TemplateScalarModel) action.exec(Collections.emptyList())).getAsString());
    }
    assertNull(wrappedBean.get(Java8DefaultMethodsBeanBase.DEFAULT_METHOD_ACTION));
    {
        TemplateMethodModelEx action = (TemplateMethodModelEx) wrappedBean.get(Java8DefaultMethodsBean.OVERRIDDEN_DEFAULT_METHOD_ACTION);
        assertNotNull(action);
        assertEquals(Java8DefaultMethodsBean.OVERRIDDEN_DEFAULT_METHOD_ACTION_RETURN_VALUE, ((TemplateScalarModel) action.exec(Collections.emptyList())).getAsString());
    }
}
Also used : TemplateSequenceModel(freemarker.template.TemplateSequenceModel) TemplateHashModel(freemarker.template.TemplateHashModel) TemplateMethodModelEx(freemarker.template.TemplateMethodModelEx) TemplateNumberModel(freemarker.template.TemplateNumberModel) TemplateScalarModel(freemarker.template.TemplateScalarModel) Test(org.junit.Test)

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