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