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