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 StagedModelDataHandlerUtil.exportStagedModel(
079 portletDataContext, ddmStructure);
080
081 Element referenceElement = portletDataContext.addReferenceElement(
082 fileEntryType, fileEntryTypeElement, ddmStructure,
083 PortletDataContext.REFERENCE_TYPE_STRONG, false);
084
085 referenceElement.addAttribute(
086 "structure-id",
087 StringUtil.valueOf(ddmStructure.getStructureId()));
088 }
089
090 portletDataContext.addClassedModel(
091 fileEntryTypeElement,
092 ExportImportPathUtil.getModelPath(fileEntryType), fileEntryType,
093 DLPortletDataHandler.NAMESPACE);
094 }
095
096 @Override
097 protected void doImportStagedModel(
098 PortletDataContext portletDataContext,
099 DLFileEntryType fileEntryType)
100 throws Exception {
101
102 long userId = portletDataContext.getUserId(fileEntryType.getUserUuid());
103
104 List<Element> ddmStructureElements =
105 portletDataContext.getReferenceDataElements(
106 fileEntryType, DDMStructure.class);
107
108 for (Element ddmStructureElement : ddmStructureElements) {
109 StagedModelDataHandlerUtil.importStagedModel(
110 portletDataContext, ddmStructureElement);
111 }
112
113 List<Element> ddmStructureReferenceElements =
114 portletDataContext.getReferenceElements(
115 fileEntryType, DDMStructure.class);
116
117 long[] ddmStructureIdsArray =
118 new long[ddmStructureReferenceElements.size()];
119
120 Map<Long, Long> ddmStructureIds =
121 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
122 DDMStructure.class);
123
124 for (int i = 0; i < ddmStructureReferenceElements.size(); i++) {
125 Element ddmStructureReferenceElement =
126 ddmStructureReferenceElements.get(i);
127
128 long ddmStructureId = GetterUtil.getLong(
129 ddmStructureReferenceElement.attributeValue("class-pk"));
130
131 ddmStructureIdsArray[i] = MapUtil.getLong(
132 ddmStructureIds, ddmStructureId);
133 }
134
135 ServiceContext serviceContext = portletDataContext.createServiceContext(
136 fileEntryType, DLPortletDataHandler.NAMESPACE);
137
138 DLFileEntryType importedDLFileEntryType = null;
139
140 if (portletDataContext.isDataStrategyMirror()) {
141 DLFileEntryType existingDLFileEntryType =
142 DLFileEntryTypeLocalServiceUtil.
143 fetchDLFileEntryTypeByUuidAndGroupId(
144 fileEntryType.getUuid(),
145 portletDataContext.getScopeGroupId());
146
147 if (existingDLFileEntryType == null) {
148 existingDLFileEntryType =
149 DLFileEntryTypeLocalServiceUtil.
150 fetchDLFileEntryTypeByUuidAndGroupId(
151 fileEntryType.getUuid(),
152 portletDataContext.getCompanyGroupId());
153 }
154
155 if (existingDLFileEntryType == null) {
156 serviceContext.setUuid(fileEntryType.getUuid());
157
158 importedDLFileEntryType =
159 DLFileEntryTypeLocalServiceUtil.addFileEntryType(
160 userId, portletDataContext.getScopeGroupId(),
161 fileEntryType.getFileEntryTypeKey(),
162 fileEntryType.getNameMap(),
163 fileEntryType.getDescriptionMap(), ddmStructureIdsArray,
164 serviceContext);
165 }
166 else if (portletDataContext.isCompanyStagedGroupedModel(
167 existingDLFileEntryType)) {
168
169 return;
170 }
171 else {
172 DLFileEntryTypeLocalServiceUtil.updateFileEntryType(
173 userId, existingDLFileEntryType.getFileEntryTypeId(),
174 fileEntryType.getNameMap(),
175 fileEntryType.getDescriptionMap(), ddmStructureIdsArray,
176 serviceContext);
177 }
178 }
179 else {
180 importedDLFileEntryType =
181 DLFileEntryTypeLocalServiceUtil.addFileEntryType(
182 userId, portletDataContext.getScopeGroupId(),
183 fileEntryType.getFileEntryTypeKey(),
184 fileEntryType.getNameMap(),
185 fileEntryType.getDescriptionMap(), ddmStructureIdsArray,
186 serviceContext);
187 }
188
189 portletDataContext.importClassedModel(
190 fileEntryType, importedDLFileEntryType,
191 DLPortletDataHandler.NAMESPACE);
192
193 String importedDLFileEntryDDMStructureKey = DLUtil.getDDMStructureKey(
194 importedDLFileEntryType);
195
196 List<DDMStructure> importedDDMStructures =
197 importedDLFileEntryType.getDDMStructures();
198
199 for (DDMStructure importedDDMStructure : importedDDMStructures) {
200 String ddmStructureKey = importedDDMStructure.getStructureKey();
201
202 if (!DLUtil.isAutoGeneratedDLFileEntryTypeDDMStructureKey(
203 ddmStructureKey)) {
204
205 continue;
206 }
207
208 if (ddmStructureKey.equals(importedDLFileEntryDDMStructureKey)) {
209 continue;
210 }
211
212 importedDDMStructure.setStructureKey(
213 importedDLFileEntryDDMStructureKey);
214
215 DDMStructureLocalServiceUtil.updateDDMStructure(
216 importedDDMStructure);
217 }
218 }
219
220 }