001    /**
002     * Copyright (c) 2000-2013 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.portal.kernel.lar;
016    
017    import com.liferay.portal.kernel.util.LongWrapper;
018    import com.liferay.portal.kernel.util.MapUtil;
019    import com.liferay.portal.kernel.util.StringBundler;
020    import com.liferay.portal.kernel.util.StringPool;
021    import com.liferay.portal.kernel.util.Validator;
022    import com.liferay.portal.model.ClassedModel;
023    import com.liferay.portal.model.Portlet;
024    
025    import java.io.Serializable;
026    
027    import java.util.ArrayList;
028    import java.util.Collection;
029    import java.util.Date;
030    import java.util.HashMap;
031    import java.util.HashSet;
032    import java.util.List;
033    import java.util.Map;
034    import java.util.Set;
035    
036    /**
037     * @author Mate Thurzo
038     * @author Zsolt Berentey
039     */
040    public class ManifestSummary implements Serializable {
041    
042            public static String getManifestSummaryKey(
043                    String modelName, String referrerModelName) {
044    
045                    if (Validator.isNull(referrerModelName) ||
046                            modelName.equals(referrerModelName)) {
047    
048                            return modelName;
049                    }
050    
051                    return modelName.concat(StringPool.POUND).concat(referrerModelName);
052            }
053    
054            public void addConfigurationPortlet(Portlet portlet, String[] options) {
055                    String rootPortletId = portlet.getRootPortletId();
056    
057                    if (!_configurationPortletOptions.containsKey(rootPortletId)) {
058                            _configurationPortlets.add(portlet);
059                            _configurationPortletOptions.put(rootPortletId, options);
060                    }
061            }
062    
063            public void addDataPortlet(Portlet portlet) {
064                    String rootPortletId = portlet.getRootPortletId();
065    
066                    if (!_dataRootPortletIds.contains(rootPortletId)) {
067                            _dataPortlets.add(portlet);
068                            _dataRootPortletIds.add(rootPortletId);
069                    }
070            }
071    
072            public void addModelAdditionCount(
073                    StagedModelType stagedModelType, long count) {
074    
075                    addModelAdditionCount(stagedModelType.toString(), count);
076            }
077    
078            public void addModelAdditionCount(String manifestSummaryKey, long count) {
079                    LongWrapper modelAdditionCounter = _modelAdditionCounters.get(
080                            manifestSummaryKey);
081    
082                    if (modelAdditionCounter == null) {
083                            modelAdditionCounter = new LongWrapper();
084    
085                            _modelAdditionCounters.put(
086                                    manifestSummaryKey, modelAdditionCounter);
087                    }
088    
089                    modelAdditionCounter.setValue(count);
090    
091                    _manifestSummaryKeys.add(manifestSummaryKey);
092            }
093    
094            public void addModelDeletionCount(String manifestSummaryKey, long count) {
095                    LongWrapper modelDeletionCounter = _modelDeletionCounters.get(
096                            manifestSummaryKey);
097    
098                    if (modelDeletionCounter == null) {
099                            modelDeletionCounter = new LongWrapper();
100    
101                            _modelDeletionCounters.put(
102                                    manifestSummaryKey, modelDeletionCounter);
103                    }
104    
105                    modelDeletionCounter.setValue(count);
106    
107                    _manifestSummaryKeys.add(manifestSummaryKey);
108            }
109    
110            public String[] getConfigurationPortletOptions(String rootPortletId) {
111                    return _configurationPortletOptions.get(rootPortletId);
112            }
113    
114            public List<Portlet> getConfigurationPortlets() {
115                    return _configurationPortlets;
116            }
117    
118            public List<Portlet> getDataPortlets() {
119                    return _dataPortlets;
120            }
121    
122            public Date getExportDate() {
123                    return _exportDate;
124            }
125    
126            public Collection<String> getManifestSummaryKeys() {
127                    return _manifestSummaryKeys;
128            }
129    
130            public long getModelAdditionCount(Class<? extends ClassedModel> clazz) {
131                    return getModelAdditionCount(clazz, clazz);
132            }
133    
134            public long getModelAdditionCount(
135                    Class<? extends ClassedModel> clazz,
136                    Class<? extends ClassedModel> referrerClass) {
137    
138                    return getModelAdditionCount(clazz.getName(), referrerClass.getName());
139            }
140    
141            public long getModelAdditionCount(String manifestSummaryKey) {
142                    if (!_modelAdditionCounters.containsKey(manifestSummaryKey)) {
143                            return -1;
144                    }
145    
146                    LongWrapper modelAdditionCounter = _modelAdditionCounters.get(
147                            manifestSummaryKey);
148    
149                    return modelAdditionCounter.getValue();
150            }
151    
152            public long getModelAdditionCount(
153                    String className, String referrerClassName) {
154    
155                    String manifestSummaryKey = getManifestSummaryKey(
156                            className, referrerClassName);
157    
158                    return getModelAdditionCount(manifestSummaryKey);
159            }
160    
161            public Map<String, LongWrapper> getModelAdditionCounters() {
162                    return _modelAdditionCounters;
163            }
164    
165            public long getModelDeletionCount() {
166                    long modelDeletionCount = -1;
167    
168                    for (String manifestSummaryKey : _manifestSummaryKeys) {
169                            long manifestSummaryKeyModelDeletionCount = getModelDeletionCount(
170                                    manifestSummaryKey);
171    
172                            if (manifestSummaryKeyModelDeletionCount == -1) {
173                                    continue;
174                            }
175    
176                            if (modelDeletionCount == -1) {
177                                    modelDeletionCount = manifestSummaryKeyModelDeletionCount;
178                            }
179                            else {
180                                    modelDeletionCount += manifestSummaryKeyModelDeletionCount;
181                            }
182                    }
183    
184                    return modelDeletionCount;
185            }
186    
187            public long getModelDeletionCount(Class<? extends ClassedModel> clazz) {
188                    return getModelDeletionCount(clazz.getName());
189            }
190    
191            public long getModelDeletionCount(StagedModelType[] stagedModelTypes) {
192                    if (Validator.isNull(stagedModelTypes)) {
193                            return 0;
194                    }
195    
196                    long modelDeletionCount = -1;
197    
198                    for (StagedModelType stagedModelType : stagedModelTypes) {
199                            long stagedModelTypeModelDeletionCount = getModelDeletionCount(
200                                    stagedModelType.toString());
201    
202                            if (stagedModelTypeModelDeletionCount == -1) {
203                                    continue;
204                            }
205    
206                            if (modelDeletionCount == -1) {
207                                    modelDeletionCount = stagedModelTypeModelDeletionCount;
208                            }
209                            else {
210                                    modelDeletionCount += stagedModelTypeModelDeletionCount;
211                            }
212                    }
213    
214                    return modelDeletionCount;
215            }
216    
217            public long getModelDeletionCount(String modelName) {
218                    if (!_modelDeletionCounters.containsKey(modelName)) {
219                            return -1;
220                    }
221    
222                    LongWrapper modelDeletionCounter = _modelDeletionCounters.get(
223                            modelName);
224    
225                    return modelDeletionCounter.getValue();
226            }
227    
228            public Map<String, LongWrapper> getModelDeletionCounters() {
229                    return _modelDeletionCounters;
230            }
231    
232            public void incrementModelAdditionCount(StagedModelType stagedModelType) {
233                    String manifestSummaryKey = stagedModelType.toString();
234    
235                    if (!_modelAdditionCounters.containsKey(manifestSummaryKey)) {
236                            _modelAdditionCounters.put(manifestSummaryKey, new LongWrapper(1));
237    
238                            _manifestSummaryKeys.add(manifestSummaryKey);
239    
240                            return;
241                    }
242    
243                    LongWrapper modelAdditionCounter = _modelAdditionCounters.get(
244                            manifestSummaryKey);
245    
246                    modelAdditionCounter.increment();
247            }
248    
249            public void incrementModelDeletionCount(StagedModelType stagedModelType) {
250                    String manifestSummaryKey = stagedModelType.toString();
251    
252                    if (!_modelDeletionCounters.containsKey(manifestSummaryKey)) {
253                            _modelDeletionCounters.put(manifestSummaryKey, new LongWrapper(1));
254    
255                            _manifestSummaryKeys.add(manifestSummaryKey);
256    
257                            return;
258                    }
259    
260                    LongWrapper modelDeletionCounter = _modelDeletionCounters.get(
261                            manifestSummaryKey);
262    
263                    modelDeletionCounter.increment();
264            }
265    
266            public void setExportDate(Date exportDate) {
267                    _exportDate = exportDate;
268            }
269    
270            @Override
271            public String toString() {
272                    StringBundler sb = new StringBundler(5);
273    
274                    sb.append("{modelAdditionCounters=");
275                    sb.append(MapUtil.toString(_modelAdditionCounters));
276                    sb.append(", modelDeletionCounters=");
277                    sb.append(MapUtil.toString(_modelDeletionCounters));
278                    sb.append("}");
279    
280                    return sb.toString();
281            }
282    
283            private Map<String, String[]> _configurationPortletOptions =
284                    new HashMap<String, String[]>();
285            private List<Portlet> _configurationPortlets = new ArrayList<Portlet>();
286            private List<Portlet> _dataPortlets = new ArrayList<Portlet>();
287            private Set<String> _dataRootPortletIds = new HashSet<String>();
288            private Date _exportDate;
289            private Set<String> _manifestSummaryKeys = new HashSet<String>();
290            private Map<String, LongWrapper> _modelAdditionCounters =
291                    new HashMap<String, LongWrapper>();
292            private Map<String, LongWrapper> _modelDeletionCounters =
293                    new HashMap<String, LongWrapper>();
294    
295    }