001
014
015 package com.liferay.portlet.documentlibrary.lar;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.lar.BaseStagedModelDataHandler;
020 import com.liferay.portal.kernel.lar.ExportImportPathUtil;
021 import com.liferay.portal.kernel.lar.PortletDataContext;
022 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.MapUtil;
025 import com.liferay.portal.kernel.util.StringUtil;
026 import com.liferay.portal.kernel.xml.Element;
027 import com.liferay.portal.service.ServiceContext;
028 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
029 import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;
030 import com.liferay.portlet.documentlibrary.util.DLUtil;
031 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
032 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
033
034 import java.util.List;
035 import java.util.Map;
036
037
040 public class DLFileEntryTypeStagedModelDataHandler
041 extends BaseStagedModelDataHandler<DLFileEntryType> {
042
043 public static final String[] CLASS_NAMES =
044 {DLFileEntryType.class.getName()};
045
046 @Override
047 public void deleteStagedModel(
048 String uuid, long groupId, String className, String extraData)
049 throws PortalException, SystemException {
050
051 DLFileEntryType dlFileEntryType =
052 DLFileEntryTypeLocalServiceUtil.
053 fetchDLFileEntryTypeByUuidAndGroupId(uuid, groupId);
054
055 if (dlFileEntryType != null) {
056 DLFileEntryTypeLocalServiceUtil.deleteFileEntryType(
057 dlFileEntryType);
058 }
059 }
060
061 @Override
062 public String[] getClassNames() {
063 return CLASS_NAMES;
064 }
065
066 @Override
067 protected void doExportStagedModel(
068 PortletDataContext portletDataContext,
069 DLFileEntryType fileEntryType)
070 throws Exception {
071
072 Element fileEntryTypeElement = portletDataContext.getExportDataElement(
073 fileEntryType);
074
075 List<DDMStructure> ddmStructures = fileEntryType.getDDMStructures();
076
077 for (DDMStructure ddmStructure : ddmStructures) {
078 Element referenceElement =
079 StagedModelDataHandlerUtil.exportReferenceStagedModel(
080 portletDataContext, fileEntryType, ddmStructure,
081 PortletDataContext.REFERENCE_TYPE_STRONG);
082
083 referenceElement.addAttribute(
084 "structure-id",
085 StringUtil.valueOf(ddmStructure.getStructureId()));
086 }
087
088 portletDataContext.addClassedModel(
089 fileEntryTypeElement,
090 ExportImportPathUtil.getModelPath(fileEntryType), fileEntryType,
091 DLPortletDataHandler.NAMESPACE);
092 }
093
094 @Override
095 protected void doImportStagedModel(
096 PortletDataContext portletDataContext,
097 DLFileEntryType fileEntryType)
098 throws Exception {
099
100 long userId = portletDataContext.getUserId(fileEntryType.getUserUuid());
101
102 List<Element> ddmStructureElements =
103 portletDataContext.getReferenceDataElements(
104 fileEntryType, DDMStructure.class);
105
106 for (Element ddmStructureElement : ddmStructureElements) {
107 StagedModelDataHandlerUtil.importStagedModel(
108 portletDataContext, ddmStructureElement);
109 }
110
111 List<Element> ddmStructureReferenceElements =
112 portletDataContext.getReferenceElements(
113 fileEntryType, DDMStructure.class);
114
115 long[] ddmStructureIdsArray =
116 new long[ddmStructureReferenceElements.size()];
117
118 Map<Long, Long> ddmStructureIds =
119 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
120 DDMStructure.class);
121
122 for (int i = 0; i < ddmStructureReferenceElements.size(); i++) {
123 Element ddmStructureReferenceElement =
124 ddmStructureReferenceElements.get(i);
125
126 long ddmStructureId = GetterUtil.getLong(
127 ddmStructureReferenceElement.attributeValue("class-pk"));
128
129 ddmStructureIdsArray[i] = MapUtil.getLong(
130 ddmStructureIds, ddmStructureId);
131 }
132
133 ServiceContext serviceContext = portletDataContext.createServiceContext(
134 fileEntryType, DLPortletDataHandler.NAMESPACE);
135
136 DLFileEntryType importedDLFileEntryType = null;
137
138 if (portletDataContext.isDataStrategyMirror()) {
139 DLFileEntryType existingDLFileEntryType =
140 DLFileEntryTypeLocalServiceUtil.
141 fetchDLFileEntryTypeByUuidAndGroupId(
142 fileEntryType.getUuid(),
143 portletDataContext.getScopeGroupId());
144
145 if (existingDLFileEntryType == null) {
146 existingDLFileEntryType =
147 DLFileEntryTypeLocalServiceUtil.
148 fetchDLFileEntryTypeByUuidAndGroupId(
149 fileEntryType.getUuid(),
150 portletDataContext.getCompanyGroupId());
151 }
152
153 if (existingDLFileEntryType == null) {
154 serviceContext.setUuid(fileEntryType.getUuid());
155
156 importedDLFileEntryType =
157 DLFileEntryTypeLocalServiceUtil.addFileEntryType(
158 userId, portletDataContext.getScopeGroupId(),
159 fileEntryType.getFileEntryTypeKey(),
160 fileEntryType.getNameMap(),
161 fileEntryType.getDescriptionMap(), ddmStructureIdsArray,
162 serviceContext);
163 }
164 else if (portletDataContext.isCompanyStagedGroupedModel(
165 existingDLFileEntryType)) {
166
167 return;
168 }
169 else {
170 DLFileEntryTypeLocalServiceUtil.updateFileEntryType(
171 userId, existingDLFileEntryType.getFileEntryTypeId(),
172 fileEntryType.getNameMap(),
173 fileEntryType.getDescriptionMap(), ddmStructureIdsArray,
174 serviceContext);
175 }
176 }
177 else {
178 importedDLFileEntryType =
179 DLFileEntryTypeLocalServiceUtil.addFileEntryType(
180 userId, portletDataContext.getScopeGroupId(),
181 fileEntryType.getFileEntryTypeKey(),
182 fileEntryType.getNameMap(),
183 fileEntryType.getDescriptionMap(), ddmStructureIdsArray,
184 serviceContext);
185 }
186
187 portletDataContext.importClassedModel(
188 fileEntryType, importedDLFileEntryType,
189 DLPortletDataHandler.NAMESPACE);
190
191 String importedDLFileEntryDDMStructureKey = DLUtil.getDDMStructureKey(
192 importedDLFileEntryType);
193
194 List<DDMStructure> importedDDMStructures =
195 importedDLFileEntryType.getDDMStructures();
196
197 for (DDMStructure importedDDMStructure : importedDDMStructures) {
198 String ddmStructureKey = importedDDMStructure.getStructureKey();
199
200 if (!DLUtil.isAutoGeneratedDLFileEntryTypeDDMStructureKey(
201 ddmStructureKey)) {
202
203 continue;
204 }
205
206 if (ddmStructureKey.equals(importedDLFileEntryDDMStructureKey)) {
207 continue;
208 }
209
210 importedDDMStructure.setStructureKey(
211 importedDLFileEntryDDMStructureKey);
212
213 DDMStructureLocalServiceUtil.updateDDMStructure(
214 importedDDMStructure);
215 }
216 }
217
218 }