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