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 info.magnolia.cms.beans.runtime.FileProperties;
37 import info.magnolia.cms.core.NodeData;
38
39 import java.text.ParseException;
40 import java.text.SimpleDateFormat;
41 import java.util.ArrayList;
42 import java.util.Iterator;
43
44 import javax.jcr.RepositoryException;
45
46 import org.apache.commons.lang3.StringUtils;
47
48 import freemarker.template.AdapterTemplateModel;
49 import freemarker.template.TemplateCollectionModel;
50 import freemarker.template.TemplateHashModelEx;
51 import freemarker.template.TemplateModel;
52 import freemarker.template.TemplateModelException;
53 import freemarker.template.TemplateScalarModel;
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 @Override
68 public int size() throws TemplateModelException {
69 int result = 0;
70
71 try {
72 result = binaryNodeData.getAttributeNames().size();
73 } catch (RepositoryException e) {
74
75 }
76
77 return result;
78 }
79
80 @Override
81 public TemplateCollectionModel keys() throws TemplateModelException {
82 Iterator<String> result = null;
83 try {
84 result = binaryNodeData.getAttributeNames().iterator();
85 } catch (RepositoryException e) {
86
87 }
88 return (TemplateCollectionModel) wrapper.wrap(result);
89 }
90
91 @Override
92 public TemplateCollectionModel values() throws TemplateModelException {
93 ArrayList<String> result = new ArrayList<String>();
94 try {
95 Iterator<String> iter = binaryNodeData.getAttributeNames().iterator();
96 while (iter.hasNext()) {
97 result.add(iter.next());
98 }
99 } catch (RepositoryException e) {
100
101 }
102 return (TemplateCollectionModel) wrapper.wrap(result.iterator());
103 }
104
105 @Override
106 public TemplateModel get(String key) throws TemplateModelException {
107 Object result = null;
108
109 if (key.startsWith("@")) {
110 if (key.equals("@handle")) {
111 result = binaryNodeData.getHandle();
112 }
113 } else if (key.equals(FileProperties.CONTENT_TYPE)) {
114 result = binaryNodeData.getAttribute(FileProperties.PROPERTY_CONTENTTYPE);
115 } else if (key.equals(FileProperties.NAME)) {
116 String filename = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
117 String ext = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
118 result = filename + ((StringUtils.isEmpty(ext)) ? "" : "." + ext);
119 } else if (key.equals(FileProperties.PROPERTY_FILENAME)) {
120 result = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
121 } else if (key.equals(FileProperties.PROPERTY_EXTENSION)) {
122 result = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
123 } else if (key.equals(FileProperties.PROPERTY_LASTMODIFIED)) {
124 try {
125 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
126 result = format.parse(binaryNodeData.getAttribute(FileProperties.PROPERTY_LASTMODIFIED));
127 } catch (ParseException e) {
128
129 }
130 } else {
131 result = binaryNodeData.getAttribute(key);
132 }
133 return wrapper.wrap(result);
134 }
135
136 @Override
137 public boolean isEmpty() throws TemplateModelException {
138 return (size() == 0);
139 }
140
141
142 @Override
143 public String getAsString() throws TemplateModelException {
144 String handle = binaryNodeData.getHandle();
145 String filename = binaryNodeData.getAttribute(FileProperties.PROPERTY_FILENAME);
146 String ext = binaryNodeData.getAttribute(FileProperties.PROPERTY_EXTENSION);
147 return handle + "/" + filename + ((StringUtils.isEmpty(ext)) ? "" : "." + ext);
148 }
149
150 public NodeData asNodeData() {
151 return this.binaryNodeData;
152 }
153
154 @Override
155 public Object getAdaptedObject(Class hint) {
156 return asNodeData();
157 }
158 }