001
014
015 package com.liferay.portlet.usersadmin.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.MapUtil;
024 import com.liferay.portal.kernel.xml.Element;
025 import com.liferay.portal.model.Address;
026 import com.liferay.portal.model.EmailAddress;
027 import com.liferay.portal.model.Group;
028 import com.liferay.portal.model.OrgLabor;
029 import com.liferay.portal.model.Organization;
030 import com.liferay.portal.model.OrganizationConstants;
031 import com.liferay.portal.model.PasswordPolicy;
032 import com.liferay.portal.model.PasswordPolicyRel;
033 import com.liferay.portal.model.Phone;
034 import com.liferay.portal.model.Website;
035 import com.liferay.portal.service.AddressLocalServiceUtil;
036 import com.liferay.portal.service.EmailAddressLocalServiceUtil;
037 import com.liferay.portal.service.GroupLocalServiceUtil;
038 import com.liferay.portal.service.OrgLaborLocalServiceUtil;
039 import com.liferay.portal.service.OrganizationLocalServiceUtil;
040 import com.liferay.portal.service.PasswordPolicyLocalServiceUtil;
041 import com.liferay.portal.service.PasswordPolicyRelLocalServiceUtil;
042 import com.liferay.portal.service.PhoneLocalServiceUtil;
043 import com.liferay.portal.service.ServiceContext;
044 import com.liferay.portal.service.WebsiteLocalServiceUtil;
045 import com.liferay.portlet.usersadmin.util.UsersAdminUtil;
046
047 import java.util.ArrayList;
048 import java.util.LinkedList;
049 import java.util.List;
050 import java.util.Map;
051 import java.util.Queue;
052
053
056 public class OrganizationStagedModelDataHandler
057 extends BaseStagedModelDataHandler<Organization> {
058
059 public static final String[] CLASS_NAMES = {Organization.class.getName()};
060
061 @Override
062 public void deleteStagedModel(
063 String uuid, long groupId, String className, String extraData)
064 throws PortalException, SystemException {
065
066 Group group = GroupLocalServiceUtil.getGroup(groupId);
067
068 Organization organization =
069 OrganizationLocalServiceUtil.fetchOrganizationByUuidAndCompanyId(
070 uuid, group.getCompanyId());
071
072 if (organization != null) {
073 OrganizationLocalServiceUtil.deleteOrganization(organization);
074 }
075 }
076
077 @Override
078 public String[] getClassNames() {
079 return CLASS_NAMES;
080 }
081
082 @Override
083 public String getDisplayName(Organization organization) {
084 return organization.getName();
085 }
086
087 @Override
088 protected void doExportStagedModel(
089 PortletDataContext portletDataContext, Organization organization)
090 throws Exception {
091
092 Queue<Organization> organizations = new LinkedList<Organization>();
093
094 organizations.add(organization);
095
096 while (!organizations.isEmpty()) {
097 Organization exportedOrganization = organizations.remove();
098
099 if (organization.getParentOrganizationId() !=
100 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID) {
101
102 StagedModelDataHandlerUtil.exportReferenceStagedModel(
103 portletDataContext, organization,
104 organization.getParentOrganization(),
105 PortletDataContext.REFERENCE_TYPE_PARENT);
106 }
107
108 exportAddresses(portletDataContext, exportedOrganization);
109 exportEmailAddresses(portletDataContext, exportedOrganization);
110 exportOrgLabors(portletDataContext, exportedOrganization);
111 exportPasswordPolicyRel(portletDataContext, exportedOrganization);
112 exportPhones(portletDataContext, exportedOrganization);
113 exportWebsites(portletDataContext, exportedOrganization);
114
115 Element organizationElement =
116 portletDataContext.getExportDataElement(exportedOrganization);
117
118 portletDataContext.addClassedModel(
119 organizationElement,
120 ExportImportPathUtil.getModelPath(exportedOrganization),
121 exportedOrganization);
122
123 organizations.addAll(exportedOrganization.getSuborganizations());
124 }
125 }
126
127 @Override
128 protected void doImportStagedModel(
129 PortletDataContext portletDataContext, Organization organization)
130 throws Exception {
131
132 long userId = portletDataContext.getUserId(organization.getUserUuid());
133
134 if (organization.getParentOrganizationId() !=
135 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID) {
136
137 StagedModelDataHandlerUtil.importReferenceStagedModel(
138 portletDataContext, organization, Organization.class,
139 organization.getParentOrganizationId());
140 }
141
142 Map<Long, Long> organizationIds =
143 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
144 Organization.class);
145
146 long parentOrganizationId = MapUtil.getLong(
147 organizationIds, organization.getParentOrganizationId(),
148 organization.getParentOrganizationId());
149
150 ServiceContext serviceContext = portletDataContext.createServiceContext(
151 organization);
152
153 serviceContext.setUserId(userId);
154
155 Organization existingOrganization =
156 OrganizationLocalServiceUtil.fetchOrganizationByUuidAndCompanyId(
157 organization.getUuid(), portletDataContext.getCompanyId());
158
159 if (existingOrganization == null) {
160 existingOrganization =
161 OrganizationLocalServiceUtil.fetchOrganization(
162 portletDataContext.getCompanyId(), organization.getName());
163 }
164
165 Organization importedOrganization = null;
166
167 if (existingOrganization == null) {
168 serviceContext.setUuid(organization.getUuid());
169
170 importedOrganization =
171 OrganizationLocalServiceUtil.addOrganization(
172 userId, parentOrganizationId, organization.getName(),
173 organization.getType(), organization.getRegionId(),
174 organization.getCountryId(), organization.getStatusId(),
175 organization.getComments(), false, serviceContext);
176 }
177 else {
178 importedOrganization =
179 OrganizationLocalServiceUtil.updateOrganization(
180 portletDataContext.getCompanyId(),
181 existingOrganization.getOrganizationId(),
182 parentOrganizationId, organization.getName(),
183 organization.getType(), organization.getRegionId(),
184 organization.getCountryId(), organization.getStatusId(),
185 organization.getComments(), false, serviceContext);
186 }
187
188 importAddresses(portletDataContext, organization, importedOrganization);
189 importEmailAddresses(
190 portletDataContext, organization, importedOrganization);
191 importOrgLabors(portletDataContext, organization, importedOrganization);
192 importPasswordPolicyRel(
193 portletDataContext, organization, importedOrganization);
194 importPhones(portletDataContext, organization, importedOrganization);
195 importWebsites(portletDataContext, organization, importedOrganization);
196
197 portletDataContext.importClassedModel(
198 organization, importedOrganization);
199 }
200
201 protected void exportAddresses(
202 PortletDataContext portletDataContext, Organization organization)
203 throws PortalException, SystemException {
204
205 List<Address> addresses = AddressLocalServiceUtil.getAddresses(
206 organization.getCompanyId(), organization.getModelClassName(),
207 organization.getOrganizationId());
208
209 for (Address address : addresses) {
210 StagedModelDataHandlerUtil.exportReferenceStagedModel(
211 portletDataContext, organization, address,
212 PortletDataContext.REFERENCE_TYPE_EMBEDDED);
213 }
214 }
215
216 protected void exportEmailAddresses(
217 PortletDataContext portletDataContext, Organization organization)
218 throws PortalException, SystemException {
219
220 List<EmailAddress> emailAddresses =
221 EmailAddressLocalServiceUtil.getEmailAddresses(
222 organization.getCompanyId(), organization.getModelClassName(),
223 organization.getOrganizationId());
224
225 for (EmailAddress emailAddress : emailAddresses) {
226 StagedModelDataHandlerUtil.exportReferenceStagedModel(
227 portletDataContext, organization, emailAddress,
228 PortletDataContext.REFERENCE_TYPE_EMBEDDED);
229 }
230 }
231
232 protected void exportOrgLabors(
233 PortletDataContext portletDataContext, Organization organization)
234 throws SystemException {
235
236 List<OrgLabor> orgLabors = OrgLaborLocalServiceUtil.getOrgLabors(
237 organization.getOrganizationId());
238
239 String path = ExportImportPathUtil.getModelPath(
240 organization, OrgLabor.class.getSimpleName());
241
242 portletDataContext.addZipEntry(path, orgLabors);
243 }
244
245 protected void exportPasswordPolicyRel(
246 PortletDataContext portletDataContext, Organization organization)
247 throws PortalException, SystemException {
248
249 PasswordPolicyRel passwordPolicyRel =
250 PasswordPolicyRelLocalServiceUtil.fetchPasswordPolicyRel(
251 Organization.class.getName(), organization.getOrganizationId());
252
253 if (passwordPolicyRel == null) {
254 return;
255 }
256
257 PasswordPolicy passwordPolicy =
258 PasswordPolicyLocalServiceUtil.getPasswordPolicy(
259 passwordPolicyRel.getPasswordPolicyId());
260
261 StagedModelDataHandlerUtil.exportReferenceStagedModel(
262 portletDataContext, organization, passwordPolicy,
263 PortletDataContext.REFERENCE_TYPE_STRONG);
264 }
265
266 protected void exportPhones(
267 PortletDataContext portletDataContext, Organization organization)
268 throws PortalException, SystemException {
269
270 List<Phone> phones = PhoneLocalServiceUtil.getPhones(
271 organization.getCompanyId(), organization.getModelClassName(),
272 organization.getOrganizationId());
273
274 for (Phone phone : phones) {
275 StagedModelDataHandlerUtil.exportReferenceStagedModel(
276 portletDataContext, organization, phone,
277 PortletDataContext.REFERENCE_TYPE_EMBEDDED);
278 }
279 }
280
281 protected void exportWebsites(
282 PortletDataContext portletDataContext, Organization organization)
283 throws PortalException, SystemException {
284
285 List<Website> websites = WebsiteLocalServiceUtil.getWebsites(
286 organization.getCompanyId(), organization.getModelClassName(),
287 organization.getOrganizationId());
288
289 for (Website website : websites) {
290 StagedModelDataHandlerUtil.exportReferenceStagedModel(
291 portletDataContext, organization, website,
292 PortletDataContext.REFERENCE_TYPE_EMBEDDED);
293 }
294 }
295
296 protected void importAddresses(
297 PortletDataContext portletDataContext, Organization organization,
298 Organization importedOrganization)
299 throws PortalException, SystemException {
300
301 List<Element> addressElements =
302 portletDataContext.getReferenceDataElements(
303 organization, Address.class);
304
305 List<Address> addresses = new ArrayList<Address>(
306 addressElements.size());
307
308 for (Element addressElement : addressElements) {
309 String addressPath = addressElement.attributeValue("path");
310
311 Address address = (Address)portletDataContext.getZipEntryAsObject(
312 addressPath);
313
314 address.setClassPK(importedOrganization.getOrganizationId());
315
316 StagedModelDataHandlerUtil.importStagedModel(
317 portletDataContext, address);
318
319 Map<Long, Long> addressIds =
320 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
321 Address.class);
322
323 long addressId = addressIds.get(address.getPrimaryKey());
324
325 address.setAddressId(addressId);
326
327 addresses.add(address);
328 }
329
330 UsersAdminUtil.updateAddresses(
331 Organization.class.getName(),
332 importedOrganization.getOrganizationId(), addresses);
333 }
334
335 protected void importEmailAddresses(
336 PortletDataContext portletDataContext, Organization organization,
337 Organization importedOrganization)
338 throws PortalException, SystemException {
339
340 List<Element> emailAddressElements =
341 portletDataContext.getReferenceDataElements(
342 organization, EmailAddress.class);
343
344 List<EmailAddress> emailAddresses = new ArrayList<EmailAddress>(
345 emailAddressElements.size());
346
347 for (Element emailAddressElement : emailAddressElements) {
348 String emailAddressPath = emailAddressElement.attributeValue(
349 "path");
350
351 EmailAddress emailAddress =
352 (EmailAddress)portletDataContext.getZipEntryAsObject(
353 emailAddressPath);
354
355 emailAddress.setClassPK(importedOrganization.getOrganizationId());
356
357 StagedModelDataHandlerUtil.importStagedModel(
358 portletDataContext, emailAddress);
359
360 Map<Long, Long> emailAddressIds =
361 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
362 EmailAddress.class);
363
364 long emailAddressId = emailAddressIds.get(
365 emailAddress.getPrimaryKey());
366
367 emailAddress.setEmailAddressId(emailAddressId);
368
369 emailAddresses.add(emailAddress);
370 }
371
372 UsersAdminUtil.updateEmailAddresses(
373 Organization.class.getName(),
374 importedOrganization.getOrganizationId(), emailAddresses);
375 }
376
377 protected void importOrgLabors(
378 PortletDataContext portletDataContext, Organization organization,
379 Organization importedOrganization)
380 throws PortalException, SystemException {
381
382 String path = ExportImportPathUtil.getModelPath(
383 organization, OrgLabor.class.getSimpleName());
384
385 List<OrgLabor> orgLabors =
386 (List<OrgLabor>)portletDataContext.getZipEntryAsObject(path);
387
388 for (OrgLabor orgLabor : orgLabors) {
389 orgLabor.setOrgLaborId(0);
390 }
391
392 UsersAdminUtil.updateOrgLabors(
393 importedOrganization.getOrganizationId(), orgLabors);
394 }
395
396 protected void importPasswordPolicyRel(
397 PortletDataContext portletDataContext, Organization organization,
398 Organization importedOrganization)
399 throws PortalException, SystemException {
400
401 List<Element> passwordPolicyElements =
402 portletDataContext.getReferenceDataElements(
403 organization, PasswordPolicy.class);
404
405 if (passwordPolicyElements.isEmpty()) {
406 return;
407 }
408
409 Element passwordPolicyElement = passwordPolicyElements.get(0);
410
411 String passwordPolicyPath = passwordPolicyElement.attributeValue(
412 "path");
413
414 PasswordPolicy passwordPolicy =
415 (PasswordPolicy)portletDataContext.getZipEntryAsObject(
416 passwordPolicyPath);
417
418 StagedModelDataHandlerUtil.importStagedModel(
419 portletDataContext, passwordPolicy);
420
421 Map<Long, Long> passwordPolicyIds =
422 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
423 PasswordPolicy.class);
424
425 long passwordPolicyId = passwordPolicyIds.get(
426 passwordPolicy.getPrimaryKey());
427
428 OrganizationLocalServiceUtil.addPasswordPolicyOrganizations(
429 passwordPolicyId,
430 new long[] {importedOrganization.getOrganizationId()});
431 }
432
433 protected void importPhones(
434 PortletDataContext portletDataContext, Organization organization,
435 Organization importedOrganization)
436 throws PortalException, SystemException {
437
438 List<Element> phoneElements =
439 portletDataContext.getReferenceDataElements(
440 organization, Phone.class);
441
442 List<Phone> phones = new ArrayList<Phone>(phoneElements.size());
443
444 for (Element phoneElement : phoneElements) {
445 String phonePath = phoneElement.attributeValue("path");
446
447 Phone phone = (Phone)portletDataContext.getZipEntryAsObject
448 (phonePath);
449
450 phone.setClassPK(importedOrganization.getOrganizationId());
451
452 StagedModelDataHandlerUtil.importStagedModel(
453 portletDataContext, phone);
454
455 Map<Long, Long> phoneIds =
456 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
457 Phone.class);
458
459 long phoneId = phoneIds.get(phone.getPrimaryKey());
460
461 phone.setPhoneId(phoneId);
462
463 phones.add(phone);
464 }
465
466 UsersAdminUtil.updatePhones(
467 Organization.class.getName(),
468 importedOrganization.getOrganizationId(), phones);
469 }
470
471 protected void importWebsites(
472 PortletDataContext portletDataContext, Organization organization,
473 Organization importedOrganization)
474 throws PortalException, SystemException {
475
476 List<Element> websiteElements =
477 portletDataContext.getReferenceDataElements(
478 organization, Website.class);
479
480 List<Website> websites = new ArrayList<Website>(websiteElements.size());
481
482 for (Element websiteElement : websiteElements) {
483 String websitePath = websiteElement.attributeValue("path");
484
485 Website website = (Website)portletDataContext.getZipEntryAsObject(
486 websitePath);
487
488 website.setClassPK(importedOrganization.getOrganizationId());
489
490 StagedModelDataHandlerUtil.importStagedModel(
491 portletDataContext, website);
492
493 Map<Long, Long> websiteIds =
494 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
495 Website.class);
496
497 long websiteId = websiteIds.get(website.getPrimaryKey());
498
499 website.setWebsiteId(websiteId);
500
501 websites.add(website);
502 }
503
504 UsersAdminUtil.updateWebsites(
505 Organization.class.getName(),
506 importedOrganization.getOrganizationId(), websites);
507 }
508
509 @Override
510 protected boolean validateMissingReference(
511 String uuid, long companyId, long groupId)
512 throws Exception {
513
514 Organization organization =
515 OrganizationLocalServiceUtil.fetchOrganizationByUuidAndCompanyId(
516 uuid, companyId);
517
518 if (organization == null) {
519 return false;
520 }
521
522 return true;
523 }
524
525 }