1
14
15 package com.liferay.portal.cmis.model;
16
17 import com.liferay.portal.kernel.util.DateFormatFactoryUtil;
18 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
19 import com.liferay.portal.kernel.util.GetterUtil;
20
21 import java.io.Serializable;
22
23 import java.text.DateFormat;
24 import java.text.Format;
25
26 import java.util.ArrayList;
27 import java.util.Date;
28 import java.util.List;
29
30 import org.apache.abdera.factory.Factory;
31 import org.apache.abdera.model.Element;
32 import org.apache.abdera.model.ExtensibleElementWrapper;
33
34
39 public class CMISObject extends ExtensibleElementWrapper {
40
41 public CMISObject(Element element) {
42 super(element);
43
44 _cmisConstants = CMISConstants.getInstance();
45 }
46
47 public CMISObject(Factory factory) {
48 super(factory, CMISConstants.getInstance().OBJECT);
49
50 _cmisConstants = CMISConstants.getInstance();
51 }
52
53 public String getBaseType() {
54 return getPropertyValue(_cmisConstants.PROPERTY_NAME_BASETYPE);
55 }
56
57 public String getCheckinComment() {
58 return getPropertyValue(_cmisConstants.PROPERTY_NAME_CHECKIN_COMMENT);
59 }
60
61 public String getContentStreamFilename() {
62 return getPropertyValue(
63 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_FILENAME);
64 }
65
66 public int getContentStreamLength() {
67 String value = getPropertyValue(
68 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_LENGTH);
69
70 return GetterUtil.getInteger(value);
71 }
72
73 public String getContentStreamMimetype() {
74 return getPropertyValue(
75 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_MIMETYPE);
76 }
77
78 public String getContentStreamUri() {
79 return getPropertyValue(
80 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_URI);
81 }
82
83 public String getCreatedBy() {
84 return getPropertyValue(_cmisConstants.PROPERTY_NAME_CREATED_BY);
85 }
86
87 public Date getCreationDate() {
88 return getDate(_cmisConstants.PROPERTY_NAME_CREATION_DATE);
89 }
90
91 public Date getLastModificationDate() {
92 return getDate(_cmisConstants.PROPERTY_NAME_LAST_MODIFICATION_DATE);
93 }
94
95 public String getLastModifiedBy() {
96 return getPropertyValue(_cmisConstants.PROPERTY_NAME_LAST_MODIFIED_BY);
97 }
98
99 public String getName() {
100 return getPropertyValue(_cmisConstants.PROPERTY_NAME_NAME);
101 }
102
103 public String getObjectId() {
104 return getPropertyValue(_cmisConstants.PROPERTY_NAME_OBJECT_ID);
105 }
106
107 public String getObjectTypeId() {
108 return getPropertyValue(_cmisConstants.PROPERTY_NAME_OBJECT_TYPE_ID);
109 }
110
111 public String getSourceId() {
112 return getPropertyValue(_cmisConstants.PROPERTY_NAME_SOURCE_ID);
113 }
114
115 public String getTargetId() {
116 return getPropertyValue(_cmisConstants.PROPERTY_NAME_TARGET_ID);
117 }
118
119 public String getVersionLabel() {
120 return getPropertyValue(_cmisConstants.PROPERTY_NAME_VERSION_LABEL);
121 }
122
123 public String getVersionSeriesCheckedOutBy() {
124 return getPropertyValue(
125 _cmisConstants.PROPERTY_NAME_VERSION_SERIES_CHECKED_OUT_BY);
126 }
127
128 public String getVersionSeriesCheckedOutId() {
129 return getPropertyValue(
130 _cmisConstants.PROPERTY_NAME_VERSION_SERIES_CHECKED_OUT_ID);
131 }
132
133 public String getVersionSeriesId() {
134 return getPropertyValue(
135 _cmisConstants.PROPERTY_NAME_VERSION_SERIES_ID);
136 }
137
138 public boolean isImmutable() {
139 return GetterUtil.getBoolean(
140 getPropertyValue(_cmisConstants.PROPERTY_NAME_IS_IMMUTABLE));
141 }
142
143 public boolean isLatestMajorVersion() {
144 return GetterUtil.getBoolean(
145 getPropertyValue(
146 _cmisConstants.PROPERTY_NAME_IS_LATEST_MAJOR_VERSION));
147 }
148
149 public boolean isLatestVersion() {
150 return GetterUtil.getBoolean(
151 getPropertyValue(_cmisConstants.PROPERTY_NAME_IS_LATEST_VERSION));
152 }
153
154 public boolean isMajorVersion() {
155 return GetterUtil.getBoolean(
156 getPropertyValue(_cmisConstants.PROPERTY_NAME_IS_MAJOR_VERSION));
157 }
158
159 public boolean isVersionSeriesCheckedOut() {
160 return GetterUtil.getBoolean(
161 getPropertyValue(
162 _cmisConstants.PROPERTY_NAME_IS_VERSION_SERIES_CHECKED_OUT));
163 }
164
165 public void setValue(String propertyName, Serializable propertyValue) {
166 Factory factory = getFactory();
167
168 Element propertiesElement = getFirstChild(_cmisConstants.PROPERTIES);
169
170 if (propertiesElement == null) {
171 propertiesElement = factory.newElement(_cmisConstants.PROPERTIES);
172
173 addExtension(propertiesElement);
174 }
175
176 Element propertyElement = null;
177
178 if (propertyValue instanceof Date) {
179 propertyElement = factory.newElement(
180 _cmisConstants.PROPERTY_TYPE_DATETIME, propertiesElement);
181
182 propertyValue = _dateFormat.format(propertyValue);
183 }
184 else if (propertyValue instanceof Double) {
185 propertyElement = factory.newElement(
186 _cmisConstants.PROPERTY_TYPE_DECIMAL, propertiesElement);
187 }
188 else if (propertyValue instanceof Integer) {
189 propertyElement = factory.newElement(
190 _cmisConstants.PROPERTY_TYPE_INTEGER, propertiesElement);
191 }
192 else if ((propertyValue.toString()).startsWith("http")) {
193 propertyElement = factory.newElement(
194 _cmisConstants.PROPERTY_TYPE_URI, propertiesElement);
195 }
196 else {
197 propertyElement = factory.newElement(
198 _cmisConstants.PROPERTY_TYPE_STRING, propertiesElement);
199 }
200
201 if (_cmisConstants instanceof CMISConstants_1_0_0) {
202 propertyElement.setAttributeValue(
203 _cmisConstants.PROPERTY_DEFINITION_ID, propertyName);
204 }
205 else {
206 propertyElement.setAttributeValue(
207 _cmisConstants.PROPERTY_NAME, propertyName);
208 }
209
210 Element valueElement = factory.newElement(
211 _cmisConstants.PROPERTY_VALUE, propertyElement);
212
213 valueElement.setText(propertyValue.toString());
214 }
215
216 protected Date getDate(String propertyName) {
217 try {
218 String value = getPropertyValue(propertyName);
219
220 DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(
221 _DATE_FORMAT_PATTERN);
222
223 return dateFormat.parse(value);
224 }
225 catch (Exception e) {
226 return new Date();
227 }
228 }
229
230 protected List<String> getPropertyNames() {
231 List<String> propertyNames = new ArrayList<String>();
232
233 Element propertiesElement = getFirstChild(_cmisConstants.PROPERTIES);
234
235 for (Element propertyElement : propertiesElement.getElements()) {
236 String propertyName = propertyElement.getAttributeValue(
237 _cmisConstants.PROPERTY_NAME);
238
239 propertyNames.add(propertyName);
240 }
241
242 return propertyNames;
243 }
244
245 protected String getPropertyValue(String propertyName) {
246 String propertyValue = null;
247
248 Element propertiesElement = getFirstChild(_cmisConstants.PROPERTIES);
249
250 for (Element propertyElement : propertiesElement.getElements()) {
251 String curPropertyName = propertyElement.getAttributeValue(
252 _cmisConstants.PROPERTY_DEFINITION_ID);
253
254 if (propertyName.equals(curPropertyName)) {
255 Element propertyValueElement = propertyElement.getFirstChild(
256 _cmisConstants.PROPERTY_VALUE);
257
258 if (propertyValueElement != null) {
259 propertyValue = propertyValueElement.getText();
260 }
261
262 break;
263 }
264 }
265
266 return propertyValue;
267 }
268
269 private static final String _DATE_FORMAT_PATTERN =
270 "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
271
272 private static Format _dateFormat =
273 FastDateFormatFactoryUtil.getSimpleDateFormat(_DATE_FORMAT_PATTERN);
274
275 private CMISConstants _cmisConstants;
276
277 }