1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.freemarker.models;
35
36 import freemarker.template.AdapterTemplateModel;
37 import freemarker.template.TemplateCollectionModel;
38 import freemarker.template.TemplateHashModelEx;
39 import freemarker.template.TemplateModel;
40 import freemarker.template.TemplateModelException;
41 import freemarker.template.TemplateScalarModel;
42 import info.magnolia.cms.beans.runtime.FileProperties;
43 import info.magnolia.cms.core.NodeData;
44 import org.apache.commons.lang.StringUtils;
45
46 import javax.jcr.RepositoryException;
47 import java.text.ParseException;
48 import java.text.SimpleDateFormat;
49 import java.util.ArrayList;
50 import java.util.Iterator;
51
52
53
54
55
56
57
58 public class BinaryNodeDataModel implements TemplateHashModelEx, TemplateScalarModel, AdapterTemplateModel {
59 private final NodeData binaryNodeData;
60 private final MagnoliaObjectWrapper wrapper;
61
62 BinaryNodeDataModel(NodeData binaryNodeData, MagnoliaObjectWrapper wrapper) {
63 this.binaryNodeData = binaryNodeData;
64 this.wrapper = wrapper;
65 }
66
67 public int size() throws TemplateModelException {
68 int result = 0;
69
70 try {
71 result = binaryNodeData.getAttributeNames().size();
72 } catch (RepositoryException e) {
73
74 }
75
76 return result;
77 }
78
79 public TemplateCollectionModel keys() throws TemplateModelException {
80 Iterator result = null;
81 try {
82 result = binaryNodeData.getAttributeNames().iterator();
83 } catch (RepositoryException e) {
84
85 }
86 return (TemplateCollectionModel) wrapper.wrap(result);
87 }
88
89 public TemplateCollectionModel values() throws TemplateModelException {
90 ArrayList result = new ArrayList();
91 try {
92 Iterator iter = binaryNodeData.getAttributeNames().iterator();
93 while (iter.hasNext()) {
94 result.add(iter.next());
95 }
96 } catch (RepositoryException e) {
97
98 }
99 return (TemplateCollectionModel) wrapper.wrap(result.iterator());
100 }
101
102 public TemplateModel get(String key) throws TemplateModelException {
103 Object result = null;
104
105 if (key.startsWith("@")) {
106 if (key.equals("@handle")) {
107 result = binaryNodeData.getHandle();
108 }
109 } else if (key.equals(FileProperties.CONTENT_TYPE)) {
110 result = binaryNodeData.getAttribute(FileProperties.PROPERTY_CONTENTTYPE);
111 } else if (key.equals(FileProperties.NAME)) {
112 String filename = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
113 String ext = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
114 result = filename + ((StringUtils.isEmpty(ext)) ? "" : "." + ext);
115 } else if (key.equals(FileProperties.PROPERTY_FILENAME)) {
116 result = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
117 } else if (key.equals(FileProperties.PROPERTY_EXTENSION)) {
118 result = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
119 } else if (key.equals(FileProperties.PROPERTY_LASTMODIFIED)) {
120 try {
121 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
122 result = format.parse(binaryNodeData.getAttribute(FileProperties.PROPERTY_LASTMODIFIED));
123 } catch (ParseException e) {
124
125 }
126 } else {
127 result = binaryNodeData.getAttribute(key);
128 }
129 return wrapper.wrap(result);
130 }
131
132 public boolean isEmpty() throws TemplateModelException {
133 return (size() == 0);
134 }
135
136
137 public String getAsString() throws TemplateModelException {
138 String handle = binaryNodeData.getHandle();
139 String filename = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
140 String ext = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
141 return handle + "/" + filename + ((StringUtils.isEmpty(ext)) ? "" : "." + ext);
142 }
143
144 public NodeData asNodeData() {
145 return this.binaryNodeData;
146 }
147
148 public Object getAdaptedObject(Class hint) {
149 return asNodeData();
150 }
151 }