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;
}
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"));
}
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;
}
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);
}
}
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;
}
Aggregations