001
014
015 package com.liferay.portal.cmis.model;
016
017 import com.liferay.portal.kernel.util.DateFormatFactoryUtil;
018 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
019 import com.liferay.portal.kernel.util.GetterUtil;
020
021 import java.io.Serializable;
022
023 import java.text.DateFormat;
024 import java.text.Format;
025
026 import java.util.ArrayList;
027 import java.util.Date;
028 import java.util.List;
029
030 import org.apache.abdera.factory.Factory;
031 import org.apache.abdera.model.Element;
032 import org.apache.abdera.model.ExtensibleElementWrapper;
033
034
037 public class CMISObject extends ExtensibleElementWrapper {
038
039 public CMISObject(Element element) {
040 super(element);
041
042 _cmisConstants = CMISConstants.getInstance();
043 }
044
045 public CMISObject(Factory factory) {
046 super(factory, CMISConstants.getInstance().OBJECT);
047
048 _cmisConstants = CMISConstants.getInstance();
049 }
050
051 public String getBaseType() {
052 return getPropertyValue(_cmisConstants.PROPERTY_NAME_BASETYPE);
053 }
054
055 public String getCheckinComment() {
056 return getPropertyValue(_cmisConstants.PROPERTY_NAME_CHECKIN_COMMENT);
057 }
058
059 public String getContentStreamFilename() {
060 return getPropertyValue(
061 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_FILENAME);
062 }
063
064 public int getContentStreamLength() {
065 String value = getPropertyValue(
066 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_LENGTH);
067
068 return GetterUtil.getInteger(value);
069 }
070
071 public String getContentStreamMimetype() {
072 return getPropertyValue(
073 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_MIMETYPE);
074 }
075
076 public String getContentStreamUri() {
077 return getPropertyValue(
078 _cmisConstants.PROPERTY_NAME_CONTENT_STREAM_URI);
079 }
080
081 public String getCreatedBy() {
082 return getPropertyValue(_cmisConstants.PROPERTY_NAME_CREATED_BY);
083 }
084
085 public Date getCreationDate() {
086 return getDate(_cmisConstants.PROPERTY_NAME_CREATION_DATE);
087 }
088
089 public Date getLastModificationDate() {
090 return getDate(_cmisConstants.PROPERTY_NAME_LAST_MODIFICATION_DATE);
091 }
092
093 public String getLastModifiedBy() {
094 return getPropertyValue(_cmisConstants.PROPERTY_NAME_LAST_MODIFIED_BY);
095 }
096
097 public String getName() {
098 return getPropertyValue(_cmisConstants.PROPERTY_NAME_NAME);
099 }
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(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 DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(
219 _DATE_FORMAT_PATTERN);
220
221 return dateFormat.parse(value);
222 }
223 catch (Exception e) {
224 return new Date();
225 }
226 }
227
228 protected List<String> getPropertyNames() {
229 List<String> propertyNames = new ArrayList<String>();
230
231 Element propertiesElement = getFirstChild(_cmisConstants.PROPERTIES);
232
233 for (Element propertyElement : propertiesElement.getElements()) {
234 String propertyName = propertyElement.getAttributeValue(
235 _cmisConstants.PROPERTY_NAME);
236
237 propertyNames.add(propertyName);
238 }
239
240 return propertyNames;
241 }
242
243 protected String getPropertyValue(String propertyName) {
244 String propertyValue = null;
245
246 Element propertiesElement = getFirstChild(_cmisConstants.PROPERTIES);
247
248 for (Element propertyElement : propertiesElement.getElements()) {
249 String curPropertyName = propertyElement.getAttributeValue(
250 _cmisConstants.PROPERTY_DEFINITION_ID);
251
252 if (propertyName.equals(curPropertyName)) {
253 Element propertyValueElement = propertyElement.getFirstChild(
254 _cmisConstants.PROPERTY_VALUE);
255
256 if (propertyValueElement != null) {
257 propertyValue = propertyValueElement.getText();
258 }
259
260 break;
261 }
262 }
263
264 return propertyValue;
265 }
266
267 private static final String _DATE_FORMAT_PATTERN =
268 "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
269
270 private static Format _dateFormat =
271 FastDateFormatFactoryUtil.getSimpleDateFormat(_DATE_FORMAT_PATTERN);
272
273 private CMISConstants _cmisConstants;
274
275 }