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            public String[] getConfigurationPortletOptions(String rootPortletId) {
115                    return _configurationPortletOptions.get(rootPortletId);
116            }
117    
118            public List<Portlet> getConfigurationPortlets() {
119                    return _configurationPortlets;
120            }
121    
122            public List<Portlet> getDataPortlets() {
123                    return _dataPortlets;
124            }
125    
126            public Date getExportDate() {
127                    return _exportDate;
128            }
129    
130            public Collection<String> getManifestSummaryKeys() {
131                    return _manifestSummaryKeys;
132            }
133    
134            public long getModelAdditionCount(Class<? extends ClassedModel> clazz) {
135                    return getModelAdditionCount(clazz, clazz);
136            }
137    
138            public long getModelAdditionCount(
139                    Class<? extends ClassedModel> clazz,
140                    Class<? extends ClassedModel> referrerClass) {
141    
142                    return getModelAdditionCount(clazz.getName(), referrerClass.getName());
143            }
144    
145            public long getModelAdditionCount(String manifestSummaryKey) {
146                    if (!_modelAdditionCounters.containsKey(manifestSummaryKey)) {
147                            return -1;
148                    }
149    
150                    LongWrapper modelAdditionCounter = _modelAdditionCounters.get(
151                            manifestSummaryKey);
152    
153                    return modelAdditionCounter.getValue();
154            }
155    
156            public long getModelAdditionCount(
157                    String className, String referrerClassName) {
158    
159                    String manifestSummaryKey = getManifestSummaryKey(
160                            className, referrerClassName);
161    
162                    return getModelAdditionCount(manifestSummaryKey);
163            }
164    
165            public Map<String, LongWrapper> getModelAdditionCounters() {
166                    return _modelAdditionCounters;
167            }
168    
169            public long getModelDeletionCount() {
170                    long modelDeletionCount = -1;
171    
172                    for (String manifestSummaryKey : _manifestSummaryKeys) {
173                            long manifestSummaryKeyModelDeletionCount = getModelDeletionCount(
174                                    manifestSummaryKey);
175    
176                            if (manifestSummaryKeyModelDeletionCount == -1) {
177                                    continue;
178                            }
179    
180                            if (modelDeletionCount == -1) {
181                                    modelDeletionCount = manifestSummaryKeyModelDeletionCount;
182                            }
183                            else {
184                                    modelDeletionCount += manifestSummaryKeyModelDeletionCount;
185                            }
186                    }
187    
188                    return modelDeletionCount;
189            }
190    
191            public long getModelDeletionCount(Class<? extends ClassedModel> clazz) {
192                    return getModelDeletionCount(clazz.getName());
193            }
194    
195            public long getModelDeletionCount(StagedModelType[] stagedModelTypes) {
196                    if (ArrayUtil.isEmpty(stagedModelTypes)) {
197                            return 0;
198                    }
199    
200                    long modelDeletionCount = -1;
201    
202                    for (StagedModelType stagedModelType : stagedModelTypes) {
203                            long stagedModelTypeModelDeletionCount = getModelDeletionCount(
204                                    stagedModelType.toString());
205    
206                            if (stagedModelTypeModelDeletionCount == -1) {
207                                    continue;
208                            }
209    
210                            if (modelDeletionCount == -1) {
211                                    modelDeletionCount = stagedModelTypeModelDeletionCount;
212                            }
213                            else {
214                                    modelDeletionCount += stagedModelTypeModelDeletionCount;
215                            }
216                    }
217    
218                    return modelDeletionCount;
219            }
220    
221            public long getModelDeletionCount(String modelName) {
222                    if (!_modelDeletionCounters.containsKey(modelName)) {
223                            return -1;
224                    }
225    
226                    LongWrapper modelDeletionCounter = _modelDeletionCounters.get(
227                            modelName);
228    
229                    return modelDeletionCounter.getValue();
230            }
231    
232            public Map<String, LongWrapper> getModelDeletionCounters() {
233                    return _modelDeletionCounters;
234            }
235    
236            public void incrementModelAdditionCount(StagedModelType stagedModelType) {
237                    String manifestSummaryKey = stagedModelType.toString();
238    
239                    if (!_modelAdditionCounters.containsKey(manifestSummaryKey)) {
240                            _modelAdditionCounters.put(manifestSummaryKey, new LongWrapper(1));
241    
242                            _manifestSummaryKeys.add(manifestSummaryKey);
243    
244                            return;
245                    }
246    
247                    LongWrapper modelAdditionCounter = _modelAdditionCounters.get(
248                            manifestSummaryKey);
249    
250                    modelAdditionCounter.increment();
251            }
252    
253            public void incrementModelDeletionCount(StagedModelType stagedModelType) {
254                    String manifestSummaryKey = stagedModelType.toString();
255    
256                    if (!_modelDeletionCounters.containsKey(manifestSummaryKey)) {
257                            _modelDeletionCounters.put(manifestSummaryKey, new LongWrapper(1));
258    
259                            _manifestSummaryKeys.add(manifestSummaryKey);
260    
261                            return;
262                    }
263    
264                    LongWrapper modelDeletionCounter = _modelDeletionCounters.get(
265                            manifestSummaryKey);
266    
267                    modelDeletionCounter.increment();
268            }
269    
270            public void setExportDate(Date exportDate) {
271                    _exportDate = exportDate;
272            }
273    
274            @Override
275            public String toString() {
276                    StringBundler sb = new StringBundler(5);
277    
278                    sb.append("{modelAdditionCounters=");
279                    sb.append(MapUtil.toString(_modelAdditionCounters));
280                    sb.append(", modelDeletionCounters=");
281                    sb.append(MapUtil.toString(_modelDeletionCounters));
282                    sb.append("}");
283    
284                    return sb.toString();
285            }
286    
287            private Map<String, String[]> _configurationPortletOptions =
288                    new HashMap<String, String[]>();
289            private List<Portlet> _configurationPortlets = new ArrayList<Portlet>();
290            private List<Portlet> _dataPortlets = new ArrayList<Portlet>();
291            private Set<String> _dataRootPortletIds = new HashSet<String>();
292            private Date _exportDate;
293            private Set<String> _manifestSummaryKeys = new HashSet<String>();
294            private Map<String, LongWrapper> _modelAdditionCounters =
295                    new HashMap<String, LongWrapper>();
296            private Map<String, LongWrapper> _modelDeletionCounters =
297                    new HashMap<String, LongWrapper>();
298    
299    }