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.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  /**
33   * <a href="CMISObject.java.html"><b><i>View Source</i></b></a>
34   *
35   * @author Alexander Chow
36   */
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 }