001
014
015 package com.liferay.portlet.dynamicdatalists.lar;
016
017 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
018 import com.liferay.portal.kernel.lar.PortletDataContext;
019 import com.liferay.portal.kernel.util.MapUtil;
020 import com.liferay.portal.kernel.util.StringBundler;
021 import com.liferay.portal.kernel.xml.Document;
022 import com.liferay.portal.kernel.xml.Element;
023 import com.liferay.portal.kernel.xml.SAXReaderUtil;
024 import com.liferay.portal.service.ServiceContext;
025 import com.liferay.portal.util.PortletKeys;
026 import com.liferay.portlet.dynamicdatalists.model.DDLRecordSet;
027 import com.liferay.portlet.dynamicdatalists.service.DDLRecordSetLocalServiceUtil;
028 import com.liferay.portlet.dynamicdatalists.service.persistence.DDLRecordSetUtil;
029 import com.liferay.portlet.dynamicdatamapping.lar.DDMPortletDataHandlerImpl;
030 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
031 import com.liferay.portlet.dynamicdatamapping.model.DDMTemplate;
032
033 import java.util.List;
034 import java.util.Map;
035
036 import javax.portlet.PortletPreferences;
037
038
041 public class DDLPortletDataHandlerImpl
042 extends BasePortletDataHandler implements DDLPortletDataHandler {
043
044 @Override
045 public void exportRecordSet(
046 PortletDataContext portletDataContext, Element recordSetsElement,
047 DDLRecordSet recordSet)
048 throws Exception {
049
050 String path = getRecordSetPath(portletDataContext, recordSet);
051
052 if (!portletDataContext.isPathNotProcessed(path)) {
053 return;
054 }
055
056 Element recordSetElement = recordSetsElement.addElement("record-set");
057
058 portletDataContext.addClassedModel(
059 recordSetElement, path, recordSet, _NAMESPACE);
060
061 Element ddmStructuresElement = recordSetElement.addElement(
062 "ddm-structures");
063
064 DDMStructure ddmStructure = recordSet.getDDMStructure();
065
066 DDMPortletDataHandlerImpl.exportStructure(
067 portletDataContext, ddmStructuresElement, ddmStructure);
068
069 Element ddmTemplatesElement = recordSetElement.addElement(
070 "ddm-templates");
071
072 List<DDMTemplate> ddmTemplates = ddmStructure.getTemplates();
073
074 for (DDMTemplate ddmTemplate : ddmTemplates) {
075 DDMPortletDataHandlerImpl.exportTemplate(
076 portletDataContext, ddmTemplatesElement, ddmTemplate);
077 }
078 }
079
080 @Override
081 public void importRecordSet(
082 PortletDataContext portletDataContext, Element recordSetElement)
083 throws Exception {
084
085 Element ddmStructuresElement = recordSetElement.element(
086 "ddm-structures");
087
088 if (ddmStructuresElement != null) {
089 importDDMStructures(portletDataContext, ddmStructuresElement);
090 }
091
092 Element ddmTemplatesElement = recordSetElement.element("ddm-templates");
093
094 if (ddmTemplatesElement != null) {
095 importDDMTemplates(portletDataContext, ddmTemplatesElement);
096 }
097
098 String path = recordSetElement.attributeValue("path");
099
100 if (!portletDataContext.isPathNotProcessed(path)) {
101 return;
102 }
103
104 DDLRecordSet recordSet =
105 (DDLRecordSet)portletDataContext.getZipEntryAsObject(path);
106
107 long userId = portletDataContext.getUserId(recordSet.getUserUuid());
108
109 Map<Long, Long> structureIds =
110 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
111 DDMStructure.class);
112
113 long structureId = MapUtil.getLong(
114 structureIds, recordSet.getDDMStructureId(),
115 recordSet.getDDMStructureId());
116
117 ServiceContext serviceContext = portletDataContext.createServiceContext(
118 recordSetElement, recordSet, _NAMESPACE);
119
120 DDLRecordSet importedRecordSet = null;
121
122 if (portletDataContext.isDataStrategyMirror()) {
123 DDLRecordSet existingRecordSet = DDLRecordSetUtil.fetchByUUID_G(
124 recordSet.getUuid(), portletDataContext.getScopeGroupId());
125
126 if (existingRecordSet == null) {
127 serviceContext.setUuid(recordSet.getUuid());
128
129 importedRecordSet = DDLRecordSetLocalServiceUtil.addRecordSet(
130 userId, portletDataContext.getScopeGroupId(), structureId,
131 recordSet.getRecordSetKey(), recordSet.getNameMap(),
132 recordSet.getDescriptionMap(),
133 recordSet.getMinDisplayRows(), recordSet.getScope(),
134 serviceContext);
135 }
136 else {
137 importedRecordSet =
138 DDLRecordSetLocalServiceUtil.updateRecordSet(
139 existingRecordSet.getRecordSetId(), structureId,
140 recordSet.getNameMap(), recordSet.getDescriptionMap(),
141 recordSet.getMinDisplayRows(), serviceContext);
142 }
143 }
144 else {
145 importedRecordSet = DDLRecordSetLocalServiceUtil.addRecordSet(
146 userId, portletDataContext.getScopeGroupId(), structureId,
147 recordSet.getRecordSetKey(), recordSet.getNameMap(),
148 recordSet.getDescriptionMap(), recordSet.getMinDisplayRows(),
149 recordSet.getScope(), serviceContext);
150 }
151
152 portletDataContext.importClassedModel(
153 recordSet, importedRecordSet, _NAMESPACE);
154 }
155
156 @Override
157 public boolean isAlwaysExportable() {
158 return _ALWAYS_EXPORTABLE;
159 }
160
161 @Override
162 public boolean isDataLocalized() {
163 return _DATA_LOCALIZED;
164 }
165
166 @Override
167 protected PortletPreferences doDeleteData(
168 PortletDataContext portletDataContext, String portletId,
169 PortletPreferences portletPreferences)
170 throws Exception {
171
172 if (!portletDataContext.addPrimaryKey(
173 DDLPortletDataHandlerImpl.class, "deleteData")) {
174
175 DDLRecordSetLocalServiceUtil.deleteRecordSets(
176 portletDataContext.getScopeGroupId());
177 }
178
179 return portletPreferences;
180 }
181
182 @Override
183 protected String doExportData(
184 PortletDataContext portletDataContext, String portletId,
185 PortletPreferences portletPreferences)
186 throws Exception {
187
188 portletDataContext.addPermissions(
189 "com.liferay.portlet.dynamicdatalist",
190 portletDataContext.getScopeGroupId());
191
192 Document document = SAXReaderUtil.createDocument();
193
194 Element rootElement = document.addElement("ddl-data");
195
196 Element recordSetsElement = rootElement.addElement("record-sets");
197
198 List<DDLRecordSet> recordSets =
199 DDLRecordSetLocalServiceUtil.getRecordSets(
200 portletDataContext.getScopeGroupId());
201
202 for (DDLRecordSet recordSet : recordSets) {
203 if (portletDataContext.isWithinDateRange(
204 recordSet.getModifiedDate())) {
205
206 exportRecordSet(
207 portletDataContext, recordSetsElement, recordSet);
208 }
209 }
210
211 return document.formattedString();
212 }
213
214 @Override
215 protected PortletPreferences doImportData(
216 PortletDataContext portletDataContext, String portletId,
217 PortletPreferences portletPreferences, String data)
218 throws Exception {
219
220 portletDataContext.importPermissions(
221 "com.liferay.portlet.dynamicdatalist",
222 portletDataContext.getSourceGroupId(),
223 portletDataContext.getScopeGroupId());
224
225 Document document = SAXReaderUtil.read(data);
226
227 Element rootElement = document.getRootElement();
228
229 Element recordSetsElement = rootElement.element("record-sets");
230
231 List<Element> recordSetElements = recordSetsElement.elements(
232 "record-set");
233
234 for (Element recordSetElement : recordSetElements) {
235 importRecordSet(portletDataContext, recordSetElement);
236 }
237
238 return portletPreferences;
239 }
240
241 protected String getRecordSetPath(
242 PortletDataContext portletDataContext, DDLRecordSet recordSet) {
243
244 StringBundler sb = new StringBundler(4);
245
246 sb.append(
247 portletDataContext.getPortletPath(PortletKeys.DYNAMIC_DATA_LISTS));
248 sb.append("/record-sets/");
249 sb.append(recordSet.getRecordSetId());
250 sb.append(".xml");
251
252 return sb.toString();
253 }
254
255 protected void importDDMStructures(
256 PortletDataContext portletDataContext,
257 Element ddmStructureReferencesElement)
258 throws Exception {
259
260 List<Element> ddmStructureElements =
261 ddmStructureReferencesElement.elements("structure");
262
263 for (Element ddmStructureElement : ddmStructureElements) {
264 DDMPortletDataHandlerImpl.importStructure(
265 portletDataContext, ddmStructureElement);
266 }
267 }
268
269 protected void importDDMTemplates(
270 PortletDataContext portletDataContext,
271 Element ddmTemplateReferencesElement)
272 throws Exception {
273
274 List<Element> ddmTemplateElements =
275 ddmTemplateReferencesElement.elements("template");
276
277 for (Element ddmTemplateElement : ddmTemplateElements) {
278 DDMPortletDataHandlerImpl.importTemplate(
279 portletDataContext, ddmTemplateElement);
280 }
281 }
282
283 private static final boolean _ALWAYS_EXPORTABLE = true;
284
285 private static final boolean _DATA_LOCALIZED = true;
286
287 private static final String _NAMESPACE = "ddl";
288
289 }