001
014
015 package com.liferay.portal.lar;
016
017 import com.liferay.portal.kernel.lar.ManifestSummary;
018 import com.liferay.portal.kernel.lar.PortletDataContext;
019 import com.liferay.portal.kernel.lar.PortletDataContextFactory;
020 import com.liferay.portal.kernel.lar.PortletDataException;
021 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
022 import com.liferay.portal.kernel.lar.UserIdStrategy;
023 import com.liferay.portal.kernel.util.MapUtil;
024 import com.liferay.portal.kernel.zip.ZipReader;
025 import com.liferay.portal.kernel.zip.ZipWriter;
026 import com.liferay.portal.model.Group;
027 import com.liferay.portal.model.Layout;
028 import com.liferay.portal.security.auth.CompanyThreadLocal;
029 import com.liferay.portal.service.GroupLocalServiceUtil;
030 import com.liferay.portal.theme.ThemeDisplay;
031
032 import java.util.ArrayList;
033 import java.util.Collections;
034 import java.util.Date;
035 import java.util.HashMap;
036 import java.util.Map;
037
038
041 public class PortletDataContextFactoryImpl
042 implements PortletDataContextFactory {
043
044 @Override
045 public PortletDataContext clonePortletDataContext(
046 PortletDataContext portletDataContext) {
047
048 PortletDataContext clonePortletDataContext =
049 new PortletDataContextImpl();
050
051 clonePortletDataContext.setCompanyId(portletDataContext.getCompanyId());
052 clonePortletDataContext.setCompanyGroupId(
053 portletDataContext.getCompanyGroupId());
054 clonePortletDataContext.setDataStrategy(
055 portletDataContext.getDataStrategy());
056 clonePortletDataContext.setEndDate(portletDataContext.getEndDate());
057 clonePortletDataContext.setGroupId(portletDataContext.getGroupId());
058
059 ManifestSummary manifestSummary =
060 portletDataContext.getManifestSummary();
061
062 clonePortletDataContext.setManifestSummary(
063 (ManifestSummary)manifestSummary.clone());
064
065 clonePortletDataContext.setNewLayouts(
066 portletDataContext.getNewLayouts());
067
068 Map<String, Map<?, ?>> newPrimaryKeysMaps =
069 portletDataContext.getNewPrimaryKeysMaps();
070
071 if ((newPrimaryKeysMaps != null) && !newPrimaryKeysMaps.isEmpty()) {
072 clonePortletDataContext.setNewPrimaryKeysMaps(
073 new HashMap<String, Map<?, ?>>(newPrimaryKeysMaps));
074 }
075
076 clonePortletDataContext.setParameterMap(
077 portletDataContext.getParameterMap());
078 clonePortletDataContext.setScopeGroupId(
079 portletDataContext.getScopeGroupId());
080 clonePortletDataContext.setStartDate(portletDataContext.getStartDate());
081 clonePortletDataContext.setUserIdStrategy(
082 portletDataContext.getUserIdStrategy());
083 clonePortletDataContext.setUserPersonalSiteGroupId(
084 portletDataContext.getUserPersonalSiteGroupId());
085
086 return clonePortletDataContext;
087 }
088
089 @Override
090 public PortletDataContext createExportPortletDataContext(
091 long companyId, long groupId, Map<String, String[]> parameterMap,
092 Date startDate, Date endDate, ZipWriter zipWriter)
093 throws PortletDataException {
094
095 validateDateRange(startDate, endDate);
096
097 PortletDataContext portletDataContext = createPortletDataContext(
098 companyId, groupId);
099
100 portletDataContext.setEndDate(endDate);
101 portletDataContext.setParameterMap(parameterMap);
102 portletDataContext.setStartDate(startDate);
103 portletDataContext.setZipWriter(zipWriter);
104
105 return portletDataContext;
106 }
107
108 @Override
109 public PortletDataContext createImportPortletDataContext(
110 long companyId, long groupId, Map<String, String[]> parameterMap,
111 UserIdStrategy userIdStrategy, ZipReader zipReader) {
112
113 PortletDataContext portletDataContext = createPortletDataContext(
114 companyId, groupId);
115
116 String dataStrategy = MapUtil.getString(
117 parameterMap, PortletDataHandlerKeys.DATA_STRATEGY,
118 PortletDataHandlerKeys.DATA_STRATEGY_MIRROR);
119
120 portletDataContext.setDataStrategy(dataStrategy);
121
122 portletDataContext.setNewLayouts(new ArrayList<Layout>());
123 portletDataContext.setParameterMap(parameterMap);
124 portletDataContext.setUserIdStrategy(userIdStrategy);
125 portletDataContext.setZipReader(zipReader);
126
127 return portletDataContext;
128 }
129
130 @Override
131 public PortletDataContext createPreparePortletDataContext(
132 long companyId, long groupId, Date startDate, Date endDate)
133 throws PortletDataException {
134
135 validateDateRange(startDate, endDate);
136
137 PortletDataContext portletDataContext = createPortletDataContext(
138 companyId, groupId);
139
140 portletDataContext.setEndDate(endDate);
141 portletDataContext.setParameterMap(
142 Collections.<String, String[]>emptyMap());
143 portletDataContext.setStartDate(startDate);
144
145 return portletDataContext;
146 }
147
148 @Override
149 public PortletDataContext createPreparePortletDataContext(
150 ThemeDisplay themeDisplay, Date startDate, Date endDate)
151 throws PortletDataException {
152
153 return createPreparePortletDataContext(
154 themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(),
155 startDate, endDate);
156 }
157
158 protected PortletDataContext createPortletDataContext(
159 long companyId, long groupId) {
160
161 PortletDataContext portletDataContext = new PortletDataContextImpl();
162
163 try {
164 Group companyGroup = GroupLocalServiceUtil.getCompanyGroup(
165 companyId);
166
167 portletDataContext.setCompanyGroupId(companyGroup.getGroupId());
168 }
169 catch (Exception e) {
170 if (!CompanyThreadLocal.isDeleteInProcess()) {
171 throw new IllegalStateException(e);
172 }
173 }
174
175 portletDataContext.setCompanyId(companyId);
176 portletDataContext.setGroupId(groupId);
177 portletDataContext.setScopeGroupId(groupId);
178
179 try {
180 Group userPersonalSiteGroup =
181 GroupLocalServiceUtil.getUserPersonalSiteGroup(companyId);
182
183 portletDataContext.setUserPersonalSiteGroupId(
184 userPersonalSiteGroup.getGroupId());
185 }
186 catch (Exception e) {
187 if (!CompanyThreadLocal.isDeleteInProcess()) {
188 throw new IllegalStateException(e);
189 }
190 }
191
192 return portletDataContext;
193 }
194
195 protected void validateDateRange(Date startDate, Date endDate)
196 throws PortletDataException {
197
198 if ((startDate == null) && (endDate != null)) {
199 throw new PortletDataException(
200 PortletDataException.END_DATE_IS_MISSING_START_DATE);
201 }
202 else if ((startDate != null) && (endDate == null)) {
203 throw new PortletDataException(
204 PortletDataException.START_DATE_IS_MISSING_END_DATE);
205 }
206
207 if (startDate != null) {
208 if (startDate.after(endDate) || startDate.equals(endDate)) {
209 throw new PortletDataException(
210 PortletDataException.START_DATE_AFTER_END_DATE);
211 }
212
213 Date now = new Date();
214
215 if (startDate.after(now)) {
216 throw new PortletDataException(
217 PortletDataException.FUTURE_START_DATE);
218 }
219
220 if (endDate.after(now)) {
221 throw new PortletDataException(
222 PortletDataException.FUTURE_END_DATE);
223 }
224 }
225 }
226
227 }