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