001    /**
002     * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.expando.model.impl;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.util.GetterUtil;
020    import com.liferay.portal.kernel.util.StringBundler;
021    import com.liferay.portal.kernel.util.StringUtil;
022    import com.liferay.portlet.expando.ValueDataException;
023    import com.liferay.portlet.expando.model.ExpandoColumn;
024    import com.liferay.portlet.expando.model.ExpandoColumnConstants;
025    import com.liferay.portlet.expando.model.ExpandoValue;
026    import com.liferay.portlet.expando.service.ExpandoColumnLocalServiceUtil;
027    
028    import java.util.Date;
029    
030    /**
031     * @author Raymond Augé
032     * @author Brian Wing Shun Chan
033     */
034    public class ExpandoValueImpl
035            extends ExpandoValueModelImpl implements ExpandoValue {
036    
037            public ExpandoValueImpl() {
038            }
039    
040            public boolean getBoolean() throws PortalException, SystemException {
041                    validate(ExpandoColumnConstants.BOOLEAN);
042    
043                    return GetterUtil.getBoolean(getData());
044            }
045    
046            public boolean[] getBooleanArray() throws PortalException, SystemException {
047                    validate(ExpandoColumnConstants.BOOLEAN_ARRAY);
048    
049                    return GetterUtil.getBooleanValues(StringUtil.split(getData()));
050            }
051    
052            public Date getDate() throws PortalException, SystemException {
053                    validate(ExpandoColumnConstants.DATE);
054    
055                    return new Date(GetterUtil.getLong(getData()));
056            }
057    
058            public Date[] getDateArray() throws PortalException, SystemException {
059                    validate(ExpandoColumnConstants.DATE_ARRAY);
060    
061                    String[] data = StringUtil.split(getData());
062    
063                    Date[] dateArray = new Date[data.length];
064    
065                    for (int i = 0; i < data.length; i++) {
066                            dateArray[i] = new Date(GetterUtil.getLong(data[i]));
067                    }
068    
069                    return dateArray;
070            }
071    
072            public double getDouble() throws PortalException, SystemException {
073                    validate(ExpandoColumnConstants.DOUBLE);
074    
075                    return GetterUtil.getDouble(getData());
076            }
077    
078            public double[] getDoubleArray() throws PortalException, SystemException {
079                    validate(ExpandoColumnConstants.DOUBLE_ARRAY);
080    
081                    return GetterUtil.getDoubleValues(StringUtil.split(getData()));
082            }
083    
084            public float getFloat() throws PortalException, SystemException {
085                    validate(ExpandoColumnConstants.FLOAT);
086    
087                    return GetterUtil.getFloat(getData());
088            }
089    
090            public float[] getFloatArray() throws PortalException, SystemException {
091                    validate(ExpandoColumnConstants.FLOAT_ARRAY);
092    
093                    return GetterUtil.getFloatValues(StringUtil.split(getData()));
094            }
095    
096            public int getInteger() throws PortalException, SystemException {
097                    validate(ExpandoColumnConstants.INTEGER);
098    
099                    return GetterUtil.getInteger(getData());
100            }
101    
102            public int[] getIntegerArray() throws PortalException, SystemException {
103                    validate(ExpandoColumnConstants.INTEGER_ARRAY);
104    
105                    return GetterUtil.getIntegerValues(StringUtil.split(getData()));
106            }
107    
108            public long getLong() throws PortalException, SystemException {
109                    validate(ExpandoColumnConstants.LONG);
110    
111                    return GetterUtil.getLong(getData());
112            }
113    
114            public long[] getLongArray() throws PortalException, SystemException {
115                    validate(ExpandoColumnConstants.LONG_ARRAY);
116    
117                    return GetterUtil.getLongValues(StringUtil.split(getData()));
118            }
119    
120            public short getShort() throws PortalException, SystemException {
121                    validate(ExpandoColumnConstants.SHORT);
122    
123                    return GetterUtil.getShort(getData());
124            }
125    
126            public short[] getShortArray() throws PortalException, SystemException {
127                    validate(ExpandoColumnConstants.SHORT_ARRAY);
128    
129                    return GetterUtil.getShortValues(StringUtil.split(getData()));
130            }
131    
132            public String getString() throws PortalException, SystemException {
133                    validate(ExpandoColumnConstants.STRING);
134    
135                    return getData();
136            }
137    
138            public String[] getStringArray() throws PortalException, SystemException {
139                    validate(ExpandoColumnConstants.STRING_ARRAY);
140    
141                    return StringUtil.split(getData());
142            }
143    
144            public void setBoolean(boolean data)
145                    throws PortalException, SystemException {
146    
147                    validate(ExpandoColumnConstants.BOOLEAN);
148    
149                    setData(String.valueOf(data));
150            }
151    
152            public void setBooleanArray(boolean[] data)
153                    throws PortalException, SystemException {
154    
155                    validate(ExpandoColumnConstants.BOOLEAN_ARRAY);
156    
157                    setData(StringUtil.merge(data));
158            }
159    
160            public void setDate(Date data) throws PortalException, SystemException {
161                    validate(ExpandoColumnConstants.DATE);
162    
163                    setData(String.valueOf(data.getTime()));
164            }
165    
166            public void setDateArray(Date[] data)
167                    throws PortalException, SystemException {
168    
169                    validate(ExpandoColumnConstants.DATE_ARRAY);
170    
171                    setData(StringUtil.merge(data));
172            }
173    
174            public void setDouble(double data) throws PortalException, SystemException {
175                    validate(ExpandoColumnConstants.DOUBLE);
176    
177                    setData(String.valueOf(data));
178            }
179    
180            public void setDoubleArray(double[] data)
181                    throws PortalException, SystemException {
182    
183                    validate(ExpandoColumnConstants.DOUBLE_ARRAY);
184    
185                    setData(StringUtil.merge(data));
186            }
187    
188            public void setFloat(float data) throws PortalException, SystemException {
189                    validate(ExpandoColumnConstants.FLOAT);
190    
191                    setData(String.valueOf(data));
192            }
193    
194            public void setFloatArray(float[] data)
195                    throws PortalException, SystemException {
196    
197                    validate(ExpandoColumnConstants.FLOAT_ARRAY);
198    
199                    setData(StringUtil.merge(data));
200            }
201    
202            public void setInteger(int data) throws PortalException, SystemException {
203                    validate(ExpandoColumnConstants.INTEGER);
204    
205                    setData(String.valueOf(data));
206            }
207    
208            public void setIntegerArray(int[] data)
209                    throws PortalException, SystemException {
210    
211                    validate(ExpandoColumnConstants.INTEGER_ARRAY);
212    
213                    setData(StringUtil.merge(data));
214            }
215    
216            public void setLong(long data) throws PortalException, SystemException {
217                    validate(ExpandoColumnConstants.LONG);
218    
219                    setData(String.valueOf(data));
220            }
221    
222            public void setLongArray(long[] data)
223                    throws PortalException, SystemException {
224    
225                    validate(ExpandoColumnConstants.LONG_ARRAY);
226    
227                    setData(StringUtil.merge(data));
228            }
229    
230            public void setShort(short data) throws PortalException, SystemException {
231                    validate(ExpandoColumnConstants.SHORT);
232    
233                    setData(String.valueOf(data));
234            }
235    
236            public void setShortArray(short[] data)
237                    throws PortalException, SystemException {
238    
239                    validate(ExpandoColumnConstants.SHORT_ARRAY);
240    
241                    setData(StringUtil.merge(data));
242            }
243    
244            public void setString(String data) throws PortalException, SystemException {
245                    validate(ExpandoColumnConstants.STRING);
246    
247                    setData(data);
248            }
249    
250            public void setStringArray(String[] data)
251                    throws PortalException, SystemException {
252    
253                    validate(ExpandoColumnConstants.STRING_ARRAY);
254    
255                    setData(StringUtil.merge(data));
256            }
257    
258            protected void validate(int type) throws PortalException, SystemException {
259                    long columnId = getColumnId();
260    
261                    if (columnId <= 0) {
262                            return;
263                    }
264    
265                    ExpandoColumn column = ExpandoColumnLocalServiceUtil.getColumn(
266                            columnId);
267    
268                    if (column.getType() == type) {
269                            return;
270                    }
271    
272                    StringBundler sb = new StringBundler(6);
273    
274                    sb.append("Column ");
275                    sb.append(columnId);
276                    sb.append(" has type ");
277                    sb.append(ExpandoColumnConstants.getTypeLabel(column.getType()));
278                    sb.append(" and is not compatible with type ");
279                    sb.append(ExpandoColumnConstants.getTypeLabel(type));
280    
281                    throw new ValueDataException(sb.toString());
282            }
283    
284    }