1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
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  /**
35   * <a href="CMISObject.java.html"><b><i>View Source</i></b></a>
36   *
37   * @author Alexander Chow
38   */
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 }