001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.AccountNameException;
018 import com.liferay.portal.CompanyMxException;
019 import com.liferay.portal.CompanyVirtualHostException;
020 import com.liferay.portal.CompanyWebIdException;
021 import com.liferay.portal.LocaleException;
022 import com.liferay.portal.NoSuchShardException;
023 import com.liferay.portal.NoSuchVirtualHostException;
024 import com.liferay.portal.RequiredCompanyException;
025 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
026 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
027 import com.liferay.portal.kernel.dao.orm.Property;
028 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
029 import com.liferay.portal.kernel.exception.PortalException;
030 import com.liferay.portal.kernel.exception.SystemException;
031 import com.liferay.portal.kernel.language.LanguageUtil;
032 import com.liferay.portal.kernel.log.Log;
033 import com.liferay.portal.kernel.log.LogFactoryUtil;
034 import com.liferay.portal.kernel.search.FacetedSearcher;
035 import com.liferay.portal.kernel.search.Hits;
036 import com.liferay.portal.kernel.search.Indexer;
037 import com.liferay.portal.kernel.search.SearchContext;
038 import com.liferay.portal.kernel.search.SearchEngineUtil;
039 import com.liferay.portal.kernel.search.facet.AssetEntriesFacet;
040 import com.liferay.portal.kernel.search.facet.Facet;
041 import com.liferay.portal.kernel.search.facet.ScopeFacet;
042 import com.liferay.portal.kernel.transaction.TransactionCommitCallbackRegistryUtil;
043 import com.liferay.portal.kernel.util.ArrayUtil;
044 import com.liferay.portal.kernel.util.Base64;
045 import com.liferay.portal.kernel.util.LocaleUtil;
046 import com.liferay.portal.kernel.util.PropsKeys;
047 import com.liferay.portal.kernel.util.StringPool;
048 import com.liferay.portal.kernel.util.StringUtil;
049 import com.liferay.portal.kernel.util.TimeZoneUtil;
050 import com.liferay.portal.kernel.util.UnicodeProperties;
051 import com.liferay.portal.kernel.util.Validator;
052 import com.liferay.portal.kernel.workflow.WorkflowConstants;
053 import com.liferay.portal.liveusers.LiveUsers;
054 import com.liferay.portal.model.Account;
055 import com.liferay.portal.model.Company;
056 import com.liferay.portal.model.CompanyConstants;
057 import com.liferay.portal.model.Contact;
058 import com.liferay.portal.model.ContactConstants;
059 import com.liferay.portal.model.Group;
060 import com.liferay.portal.model.GroupConstants;
061 import com.liferay.portal.model.LayoutPrototype;
062 import com.liferay.portal.model.LayoutSetPrototype;
063 import com.liferay.portal.model.Organization;
064 import com.liferay.portal.model.OrganizationConstants;
065 import com.liferay.portal.model.PasswordPolicy;
066 import com.liferay.portal.model.PortalPreferences;
067 import com.liferay.portal.model.Portlet;
068 import com.liferay.portal.model.Role;
069 import com.liferay.portal.model.RoleConstants;
070 import com.liferay.portal.model.Shard;
071 import com.liferay.portal.model.User;
072 import com.liferay.portal.model.VirtualHost;
073 import com.liferay.portal.security.auth.CompanyThreadLocal;
074 import com.liferay.portal.service.base.CompanyLocalServiceBaseImpl;
075 import com.liferay.portal.util.Portal;
076 import com.liferay.portal.util.PortalInstances;
077 import com.liferay.portal.util.PortalUtil;
078 import com.liferay.portal.util.PortletKeys;
079 import com.liferay.portal.util.PrefsPropsUtil;
080 import com.liferay.portal.util.PropsUtil;
081 import com.liferay.portal.util.PropsValues;
082 import com.liferay.util.Encryptor;
083 import com.liferay.util.EncryptorException;
084
085 import java.io.File;
086 import java.io.IOException;
087 import java.io.InputStream;
088
089 import java.util.ArrayList;
090 import java.util.Date;
091 import java.util.List;
092 import java.util.Locale;
093 import java.util.Map;
094 import java.util.TimeZone;
095 import java.util.concurrent.Callable;
096
097 import javax.portlet.PortletException;
098 import javax.portlet.PortletPreferences;
099
100
107 public class CompanyLocalServiceImpl extends CompanyLocalServiceBaseImpl {
108
109
125 @Override
126 public Company addCompany(
127 String webId, String virtualHostname, String mx, String shardName,
128 boolean system, int maxUsers, boolean active)
129 throws PortalException {
130
131
132
133 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
134
135 if (Validator.isNull(webId) ||
136 webId.equals(PropsValues.COMPANY_DEFAULT_WEB_ID) ||
137 (companyPersistence.fetchByWebId(webId) != null)) {
138
139 throw new CompanyWebIdException();
140 }
141
142 validateVirtualHost(webId, virtualHostname);
143 validateMx(mx);
144
145 Company company = checkCompany(webId, mx, shardName);
146
147 company.setMx(mx);
148 company.setSystem(system);
149 company.setMaxUsers(maxUsers);
150 company.setActive(active);
151
152 companyPersistence.update(company);
153
154
155
156 updateVirtualHostname(company.getCompanyId(), virtualHostname);
157
158 return company;
159 }
160
161
171 @Override
172 public Company checkCompany(String webId) throws PortalException {
173 String mx = webId;
174
175 return companyLocalService.checkCompany(
176 webId, mx, PropsValues.SHARD_DEFAULT_NAME);
177 }
178
179
192 @Override
193 public Company checkCompany(String webId, String mx, String shardName)
194 throws PortalException {
195
196
197
198 Date now = new Date();
199
200 Company company = companyPersistence.fetchByWebId(webId);
201
202 if (company == null) {
203 long companyId = counterLocalService.increment();
204
205 company = companyPersistence.create(companyId);
206
207 try {
208 company.setKey(Base64.objectToString(Encryptor.generateKey()));
209 }
210 catch (EncryptorException ee) {
211 throw new SystemException(ee);
212 }
213
214 company.setWebId(webId);
215 company.setMx(mx);
216 company.setActive(true);
217
218 companyPersistence.update(company);
219
220
221
222 shardLocalService.addShard(
223 Company.class.getName(), companyId, shardName);
224
225
226
227 String name = webId;
228
229 if (webId.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
230 name = PropsValues.COMPANY_DEFAULT_NAME;
231 }
232
233 String legalName = null;
234 String legalId = null;
235 String legalType = null;
236 String sicCode = null;
237 String tickerSymbol = null;
238 String industry = null;
239 String type = null;
240 String size = null;
241
242 updateAccount(
243 company, name, legalName, legalId, legalType, sicCode,
244 tickerSymbol, industry, type, size);
245
246
247
248 if (webId.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
249 updateVirtualHostname(companyId, _DEFAULT_VIRTUAL_HOST);
250 }
251
252
253
254 if (webId.equals("liferay.net")) {
255 company = companyPersistence.findByWebId(webId);
256
257 updateVirtualHostname(companyId, "demo.liferay.net");
258
259 updateSecurity(
260 companyId, CompanyConstants.AUTH_TYPE_EA, true, true, true,
261 true, false, true);
262
263 PortletPreferences preferences = PrefsPropsUtil.getPreferences(
264 companyId);
265
266 try {
267 preferences.setValue(
268 PropsKeys.ADMIN_EMAIL_FROM_NAME, "Liferay Demo");
269 preferences.setValue(
270 PropsKeys.ADMIN_EMAIL_FROM_ADDRESS, "test@liferay.net");
271
272 preferences.store();
273 }
274 catch (IOException ioe) {
275 throw new SystemException(ioe);
276 }
277 catch (PortletException pe) {
278 throw new SystemException(pe);
279 }
280 }
281 }
282 else {
283 try {
284 shardLocalService.getShard(
285 Company.class.getName(), company.getCompanyId());
286 }
287 catch (NoSuchShardException nsse) {
288 shardLocalService.addShard(
289 Company.class.getName(), company.getCompanyId(), shardName);
290 }
291 }
292
293
294
295 long companyId = company.getCompanyId();
296
297 SearchEngineUtil.initialize(companyId);
298
299
300
301 checkCompanyKey(companyId);
302
303
304
305 User defaultUser = userPersistence.fetchByC_DU(companyId, true);
306
307 if (defaultUser != null) {
308 if (!defaultUser.isAgreedToTermsOfUse()) {
309 defaultUser.setAgreedToTermsOfUse(true);
310
311 userPersistence.update(defaultUser);
312 }
313 }
314 else {
315 long userId = counterLocalService.increment();
316
317 defaultUser = userPersistence.create(userId);
318
319 defaultUser.setCompanyId(companyId);
320 defaultUser.setCreateDate(now);
321 defaultUser.setModifiedDate(now);
322 defaultUser.setDefaultUser(true);
323 defaultUser.setContactId(counterLocalService.increment());
324 defaultUser.setPassword("password");
325 defaultUser.setScreenName(String.valueOf(defaultUser.getUserId()));
326 defaultUser.setEmailAddress("default@" + company.getMx());
327
328 if (Validator.isNotNull(PropsValues.COMPANY_DEFAULT_LOCALE)) {
329 defaultUser.setLanguageId(PropsValues.COMPANY_DEFAULT_LOCALE);
330 }
331 else {
332 Locale locale = LocaleUtil.getDefault();
333
334 defaultUser.setLanguageId(locale.toString());
335 }
336
337 if (Validator.isNotNull(PropsValues.COMPANY_DEFAULT_TIME_ZONE)) {
338 defaultUser.setTimeZoneId(
339 PropsValues.COMPANY_DEFAULT_TIME_ZONE);
340 }
341 else {
342 TimeZone timeZone = TimeZoneUtil.getDefault();
343
344 defaultUser.setTimeZoneId(timeZone.getID());
345 }
346
347 String greeting = LanguageUtil.format(
348 defaultUser.getLocale(), "welcome", null, false);
349
350 defaultUser.setGreeting(greeting + StringPool.EXCLAMATION);
351 defaultUser.setLoginDate(now);
352 defaultUser.setFailedLoginAttempts(0);
353 defaultUser.setAgreedToTermsOfUse(true);
354 defaultUser.setStatus(WorkflowConstants.STATUS_APPROVED);
355
356 userPersistence.update(defaultUser);
357
358
359
360 Contact defaultContact = contactPersistence.create(
361 defaultUser.getContactId());
362
363 defaultContact.setCompanyId(defaultUser.getCompanyId());
364 defaultContact.setUserId(defaultUser.getUserId());
365 defaultContact.setUserName(StringPool.BLANK);
366 defaultContact.setCreateDate(now);
367 defaultContact.setModifiedDate(now);
368 defaultContact.setClassName(User.class.getName());
369 defaultContact.setClassPK(defaultUser.getUserId());
370 defaultContact.setAccountId(company.getAccountId());
371 defaultContact.setParentContactId(
372 ContactConstants.DEFAULT_PARENT_CONTACT_ID);
373 defaultContact.setEmailAddress(defaultUser.getEmailAddress());
374 defaultContact.setFirstName(StringPool.BLANK);
375 defaultContact.setMiddleName(StringPool.BLANK);
376 defaultContact.setLastName(StringPool.BLANK);
377 defaultContact.setMale(true);
378 defaultContact.setBirthday(now);
379
380 contactPersistence.update(defaultContact);
381 }
382
383
384
385 roleLocalService.checkSystemRoles(companyId);
386
387
388
389 groupLocalService.checkSystemGroups(companyId);
390
391
392
393 groupLocalService.checkCompanyGroup(companyId);
394
395
396
397 passwordPolicyLocalService.checkDefaultPasswordPolicy(companyId);
398
399
400
401 Role guestRole = roleLocalService.getRole(
402 companyId, RoleConstants.GUEST);
403
404 roleLocalService.setUserRoles(
405 defaultUser.getUserId(), new long[] {guestRole.getRoleId()});
406
407
408
409 if (userPersistence.countByCompanyId(companyId) == 1) {
410 String emailAddress =
411 PropsValues.DEFAULT_ADMIN_EMAIL_ADDRESS_PREFIX + "@" + mx;
412
413 userLocalService.addDefaultAdminUser(
414 companyId, PropsValues.DEFAULT_ADMIN_SCREEN_NAME, emailAddress,
415 defaultUser.getLocale(), PropsValues.DEFAULT_ADMIN_FIRST_NAME,
416 PropsValues.DEFAULT_ADMIN_MIDDLE_NAME,
417 PropsValues.DEFAULT_ADMIN_LAST_NAME);
418 }
419
420
421
422 portletLocalService.checkPortlets(companyId);
423
424 return company;
425 }
426
427
435 @Override
436 public void checkCompanyKey(long companyId) throws PortalException {
437 Company company = companyPersistence.findByPrimaryKey(companyId);
438
439 if (company.getKeyObj() != null) {
440 return;
441 }
442
443 try {
444 company.setKey(Base64.objectToString(Encryptor.generateKey()));
445 }
446 catch (EncryptorException ee) {
447 throw new SystemException(ee);
448 }
449
450 companyPersistence.update(company);
451 }
452
453 @Override
454 public Company deleteCompany(Company company) throws PortalException {
455 return deleteCompany(company.getCompanyId());
456 }
457
458 @Override
459 public Company deleteCompany(long companyId) throws PortalException {
460 if (companyId == PortalInstances.getDefaultCompanyId()) {
461 throw new RequiredCompanyException();
462 }
463
464 Long currentCompanyId = CompanyThreadLocal.getCompanyId();
465 boolean deleteInProcess = CompanyThreadLocal.isDeleteInProcess();
466
467 try {
468 CompanyThreadLocal.setCompanyId(companyId);
469 CompanyThreadLocal.setDeleteInProcess(true);
470
471 return doDeleteCompany(companyId);
472 }
473 finally {
474 CompanyThreadLocal.setCompanyId(currentCompanyId);
475 CompanyThreadLocal.setDeleteInProcess(deleteInProcess);
476 }
477 }
478
479
487 @Override
488 public Company deleteLogo(long companyId) throws PortalException {
489 Company company = companyPersistence.findByPrimaryKey(companyId);
490
491 PortalUtil.updateImageId(company, false, null, "logoId", 0, 0, 0);
492
493 return company;
494 }
495
496
503 @Override
504 public Company fetchCompanyById(long companyId) {
505 return companyPersistence.fetchByPrimaryKey(companyId);
506 }
507
508
515 @Override
516 public Company fetchCompanyByVirtualHost(String virtualHostname) {
517 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
518
519 VirtualHost virtualHost = virtualHostPersistence.fetchByHostname(
520 virtualHostname);
521
522 if ((virtualHost == null) || (virtualHost.getLayoutSetId() != 0)) {
523 return null;
524 }
525
526 return companyPersistence.fetchByPrimaryKey(virtualHost.getCompanyId());
527 }
528
529
534 @Override
535 public List<Company> getCompanies() {
536 return companyPersistence.findAll();
537 }
538
539
546 @Override
547 public List<Company> getCompanies(boolean system) {
548 return companyPersistence.findBySystem(system);
549 }
550
551 @Override
552 public List<Company> getCompanies(boolean system, int start, int end) {
553 return companyPersistence.findBySystem(system, start, end);
554 }
555
556
563 @Override
564 public int getCompaniesCount(boolean system) {
565 return companyPersistence.countBySystem(system);
566 }
567
568
576 @Override
577 public Company getCompanyById(long companyId) throws PortalException {
578 return companyPersistence.findByPrimaryKey(companyId);
579 }
580
581
588 @Override
589 public Company getCompanyByLogoId(long logoId) throws PortalException {
590 return companyPersistence.findByLogoId(logoId);
591 }
592
593
601 @Override
602 public Company getCompanyByMx(String mx) throws PortalException {
603 return companyPersistence.findByMx(mx);
604 }
605
606
615 @Override
616 public Company getCompanyByVirtualHost(String virtualHostname)
617 throws PortalException {
618
619 try {
620 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
621
622 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
623 virtualHostname);
624
625 if (virtualHost.getLayoutSetId() != 0) {
626 throw new CompanyVirtualHostException(
627 "Virtual host is associated with layout set " +
628 virtualHost.getLayoutSetId());
629 }
630
631 return companyPersistence.findByPrimaryKey(
632 virtualHost.getCompanyId());
633 }
634 catch (NoSuchVirtualHostException nsvhe) {
635 throw new CompanyVirtualHostException(nsvhe);
636 }
637 }
638
639
647 @Override
648 public Company getCompanyByWebId(String webId) throws PortalException {
649 return companyPersistence.findByWebId(webId);
650 }
651
652
661 @Override
662 public long getCompanyIdByUserId(long userId) throws Exception {
663 long[] companyIds = PortalInstances.getCompanyIds();
664
665 long companyId = 0;
666
667 if (companyIds.length == 1) {
668 companyId = companyIds[0];
669 }
670 else if (companyIds.length > 1) {
671 try {
672 User user = userPersistence.findByPrimaryKey(userId);
673
674 companyId = user.getCompanyId();
675 }
676 catch (Exception e) {
677 if (_log.isWarnEnabled()) {
678 _log.warn(
679 "Unable to get the company id for user " + userId, e);
680 }
681 }
682 }
683
684 return companyId;
685 }
686
687
697 @Override
698 public void removePreferences(long companyId, String[] keys) {
699 PortletPreferences preferences = PrefsPropsUtil.getPreferences(
700 companyId);
701
702 try {
703 for (String key : keys) {
704 preferences.reset(key);
705 }
706
707 preferences.store();
708 }
709 catch (Exception e) {
710 throw new SystemException(e);
711 }
712 }
713
714
731 @Override
732 public Hits search(
733 long companyId, long userId, String keywords, int start, int end) {
734
735 return search(companyId, userId, null, 0, null, keywords, start, end);
736 }
737
738
756 @Override
757 public Hits search(
758 long companyId, long userId, String portletId, long groupId,
759 String type, String keywords, int start, int end) {
760
761 try {
762
763
764
765 SearchContext searchContext = new SearchContext();
766
767 searchContext.setCompanyId(companyId);
768 searchContext.setEnd(end);
769 searchContext.setEntryClassNames(
770 SearchEngineUtil.getEntryClassNames());
771
772 if (groupId > 0) {
773 searchContext.setGroupIds(new long[] {groupId});
774 }
775
776 searchContext.setKeywords(keywords);
777
778 if (Validator.isNotNull(portletId)) {
779 searchContext.setPortletIds(new String[] {portletId});
780 }
781
782 searchContext.setStart(start);
783 searchContext.setUserId(userId);
784
785
786
787
788 Facet assetEntriesFacet = new AssetEntriesFacet(searchContext);
789
790 assetEntriesFacet.setStatic(true);
791
792 searchContext.addFacet(assetEntriesFacet);
793
794 Facet scopeFacet = new ScopeFacet(searchContext);
795
796 scopeFacet.setStatic(true);
797
798 searchContext.addFacet(scopeFacet);
799
800
801
802 Indexer indexer = FacetedSearcher.getInstance();
803
804 return indexer.search(searchContext);
805 }
806 catch (Exception e) {
807 throw new SystemException(e);
808 }
809 }
810
811
824 @Override
825 public Company updateCompany(
826 long companyId, String virtualHostname, String mx, int maxUsers,
827 boolean active)
828 throws PortalException {
829
830
831
832 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
833
834 if (!active) {
835 if (companyId == PortalInstances.getDefaultCompanyId()) {
836 active = true;
837 }
838 }
839
840 Company company = companyPersistence.findByPrimaryKey(companyId);
841
842 validateVirtualHost(company.getWebId(), virtualHostname);
843
844 if (PropsValues.MAIL_MX_UPDATE) {
845 validateMx(mx);
846
847 company.setMx(mx);
848 }
849
850 company.setMaxUsers(maxUsers);
851 company.setActive(active);
852
853 companyPersistence.update(company);
854
855
856
857 updateVirtualHostname(companyId, virtualHostname);
858
859 return company;
860 }
861
862
890 @Override
891 public Company updateCompany(
892 long companyId, String virtualHostname, String mx, String homeURL,
893 boolean logo, byte[] logoBytes, String name, String legalName,
894 String legalId, String legalType, String sicCode,
895 String tickerSymbol, String industry, String type, String size)
896 throws PortalException {
897
898
899
900 virtualHostname = StringUtil.toLowerCase(virtualHostname.trim());
901
902 Company company = companyPersistence.findByPrimaryKey(companyId);
903
904 validateVirtualHost(company.getWebId(), virtualHostname);
905
906 if (PropsValues.MAIL_MX_UPDATE) {
907 validateMx(mx);
908 }
909
910 validateName(companyId, name);
911
912 if (PropsValues.MAIL_MX_UPDATE) {
913 company.setMx(mx);
914 }
915
916 company.setHomeURL(homeURL);
917
918 PortalUtil.updateImageId(company, logo, logoBytes, "logoId",0 ,0, 0);
919
920 companyPersistence.update(company);
921
922
923
924 updateAccount(
925 company, name, legalName, legalId, legalType, sicCode, tickerSymbol,
926 industry, type, size);
927
928
929
930 updateVirtualHostname(companyId, virtualHostname);
931
932 return company;
933 }
934
935
966 @Deprecated
967 @Override
968 public Company updateCompany(
969 long companyId, String virtualHostname, String mx, String homeURL,
970 String name, String legalName, String legalId, String legalType,
971 String sicCode, String tickerSymbol, String industry, String type,
972 String size)
973 throws PortalException {
974
975 return updateCompany(
976 companyId, virtualHostname, mx, homeURL, true, null, name,
977 legalName, legalId, legalType, sicCode, tickerSymbol, industry,
978 type, size);
979 }
980
981
989 @Override
990 public void updateDisplay(
991 long companyId, String languageId, String timeZoneId)
992 throws PortalException {
993
994 User user = userLocalService.getDefaultUser(companyId);
995
996 user.setLanguageId(languageId);
997 user.setTimeZoneId(timeZoneId);
998
999 userPersistence.update(user);
1000 }
1001
1002
1011 @Override
1012 public Company updateLogo(long companyId, byte[] bytes)
1013 throws PortalException {
1014
1015 Company company = checkLogo(companyId);
1016
1017 imageLocalService.updateImage(company.getLogoId(), bytes);
1018
1019 return company;
1020 }
1021
1022
1031 @Override
1032 public Company updateLogo(long companyId, File file)
1033 throws PortalException {
1034
1035 Company company = checkLogo(companyId);
1036
1037 imageLocalService.updateImage(company.getLogoId(), file);
1038
1039 return company;
1040 }
1041
1042
1051 @Override
1052 public Company updateLogo(long companyId, InputStream is)
1053 throws PortalException {
1054
1055 Company company = checkLogo(companyId);
1056
1057 imageLocalService.updateImage(company.getLogoId(), is);
1058
1059 return company;
1060 }
1061
1062
1072 @Override
1073 public void updatePreferences(long companyId, UnicodeProperties properties)
1074 throws PortalException {
1075
1076 PortletPreferences portletPreferences = PrefsPropsUtil.getPreferences(
1077 companyId);
1078
1079 try {
1080 String newLanguageIds = properties.getProperty(PropsKeys.LOCALES);
1081
1082 if (Validator.isNotNull(newLanguageIds)) {
1083 String oldLanguageIds = portletPreferences.getValue(
1084 PropsKeys.LOCALES, StringPool.BLANK);
1085
1086 if (!Validator.equals(oldLanguageIds, newLanguageIds)) {
1087 validateLanguageIds(newLanguageIds);
1088
1089 LanguageUtil.resetAvailableLocales(companyId);
1090
1091
1092
1093
1094 Date now = new Date();
1095
1096 for (LayoutSetPrototype layoutSetPrototype :
1097 layoutSetPrototypeLocalService.
1098 getLayoutSetPrototypes(companyId)) {
1099
1100 layoutSetPrototype.setModifiedDate(now);
1101
1102 layoutSetPrototypeLocalService.updateLayoutSetPrototype(
1103 layoutSetPrototype);
1104 }
1105 }
1106 }
1107
1108 List<String> resetKeys = new ArrayList<String>();
1109
1110 for (Map.Entry<String, String> entry : properties.entrySet()) {
1111 String key = entry.getKey();
1112 String value = entry.getValue();
1113
1114 if (value.equals(Portal.TEMP_OBFUSCATION_VALUE)) {
1115 continue;
1116 }
1117
1118 String propsUtilValue = PropsUtil.get(key);
1119
1120 if (!value.equals(propsUtilValue)) {
1121 portletPreferences.setValue(key, value);
1122 }
1123 else {
1124 String portletPreferencesValue =
1125 portletPreferences.getValue(key, null);
1126
1127 if (portletPreferencesValue != null) {
1128 resetKeys.add(key);
1129 }
1130 }
1131 }
1132
1133 for (String key : resetKeys) {
1134 portletPreferences.reset(key);
1135 }
1136
1137 portletPreferences.store();
1138 }
1139 catch (LocaleException le) {
1140 throw le;
1141 }
1142 catch (Exception e) {
1143 throw new SystemException(e);
1144 }
1145 }
1146
1147
1165 @Override
1166 public void updateSecurity(
1167 long companyId, String authType, boolean autoLogin,
1168 boolean sendPassword, boolean strangers, boolean strangersWithMx,
1169 boolean strangersVerify, boolean siteLogo) {
1170
1171 PortletPreferences preferences = PrefsPropsUtil.getPreferences(
1172 companyId);
1173
1174 try {
1175 preferences.setValue(
1176 PropsKeys.COMPANY_SECURITY_AUTH_TYPE, authType);
1177 preferences.setValue(
1178 PropsKeys.COMPANY_SECURITY_AUTO_LOGIN,
1179 String.valueOf(autoLogin));
1180 preferences.setValue(
1181 PropsKeys.COMPANY_SECURITY_SEND_PASSWORD,
1182 String.valueOf(sendPassword));
1183 preferences.setValue(
1184 PropsKeys.COMPANY_SECURITY_STRANGERS,
1185 String.valueOf(strangers));
1186 preferences.setValue(
1187 PropsKeys.COMPANY_SECURITY_STRANGERS_WITH_MX,
1188 String.valueOf(strangersWithMx));
1189 preferences.setValue(
1190 PropsKeys.COMPANY_SECURITY_STRANGERS_VERIFY,
1191 String.valueOf(strangersVerify));
1192 preferences.setValue(
1193 PropsKeys.COMPANY_SECURITY_SITE_LOGO, String.valueOf(siteLogo));
1194
1195 preferences.store();
1196 }
1197 catch (IOException ioe) {
1198 throw new SystemException(ioe);
1199 }
1200 catch (PortletException pe) {
1201 throw new SystemException(pe);
1202 }
1203 }
1204
1205 protected Company checkLogo(long companyId) throws PortalException {
1206 Company company = companyPersistence.findByPrimaryKey(companyId);
1207
1208 long logoId = company.getLogoId();
1209
1210 if (logoId <= 0) {
1211 logoId = counterLocalService.increment();
1212
1213 company.setLogoId(logoId);
1214
1215 company = companyPersistence.update(company);
1216 }
1217
1218 return company;
1219 }
1220
1221 protected Company doDeleteCompany(final long companyId)
1222 throws PortalException {
1223
1224
1225
1226 Company company = companyPersistence.remove(companyId);
1227
1228
1229
1230 accountLocalService.deleteAccount(company.getAccountId());
1231
1232
1233
1234 DeleteGroupActionableDynamicQuery deleteGroupActionableDynamicQuery =
1235 new DeleteGroupActionableDynamicQuery();
1236
1237 deleteGroupActionableDynamicQuery.setCompanyId(companyId);
1238
1239 deleteGroupActionableDynamicQuery.performActions();
1240
1241 String[] systemGroups = PortalUtil.getSystemGroups();
1242
1243 for (String groupName : systemGroups) {
1244 Group group = groupLocalService.getGroup(companyId, groupName);
1245
1246 deleteGroupActionableDynamicQuery.deleteGroup(group);
1247 }
1248
1249 Group companyGroup = groupLocalService.getCompanyGroup(companyId);
1250
1251 deleteGroupActionableDynamicQuery.deleteGroup(companyGroup);
1252
1253
1254
1255 ActionableDynamicQuery layoutPrototypeActionableDynamicQuery =
1256 layoutPrototypeLocalService.getActionableDynamicQuery();
1257
1258 layoutPrototypeActionableDynamicQuery.setCompanyId(companyId);
1259 layoutPrototypeActionableDynamicQuery.setPerformActionMethod(
1260 new ActionableDynamicQuery.PerformActionMethod() {
1261
1262 @Override
1263 public void performAction(Object object)
1264 throws PortalException {
1265
1266 LayoutPrototype layoutPrototype = (LayoutPrototype)object;
1267
1268 layoutPrototypeLocalService.deleteLayoutPrototype(
1269 layoutPrototype);
1270 }
1271
1272 });
1273
1274 layoutPrototypeActionableDynamicQuery.performActions();
1275
1276
1277
1278 ActionableDynamicQuery layoutSetPrototypeActionableDynamicQuery =
1279 layoutSetPrototypeLocalService.getActionableDynamicQuery();
1280
1281 layoutSetPrototypeActionableDynamicQuery.setCompanyId(companyId);
1282 layoutSetPrototypeActionableDynamicQuery.setPerformActionMethod(
1283 new ActionableDynamicQuery.PerformActionMethod() {
1284
1285 @Override
1286 public void performAction(Object object)
1287 throws PortalException {
1288
1289 LayoutSetPrototype layoutSetPrototype =
1290 (LayoutSetPrototype)object;
1291
1292 layoutSetPrototypeLocalService.deleteLayoutSetPrototype(
1293 layoutSetPrototype);
1294 }
1295
1296 });
1297
1298 layoutSetPrototypeActionableDynamicQuery.performActions();
1299
1300
1301
1302 DeleteOrganizationActionableDynamicQuery
1303 deleteOrganizationActionableDynamicQuery =
1304 new DeleteOrganizationActionableDynamicQuery();
1305
1306 deleteOrganizationActionableDynamicQuery.setCompanyId(companyId);
1307
1308 deleteOrganizationActionableDynamicQuery.performActions();
1309
1310
1311
1312 ActionableDynamicQuery roleActionableDynamicQuery =
1313 roleLocalService.getActionableDynamicQuery();
1314
1315 roleActionableDynamicQuery.setCompanyId(companyId);
1316 roleActionableDynamicQuery.setPerformActionMethod(
1317 new ActionableDynamicQuery.PerformActionMethod() {
1318
1319 @Override
1320 public void performAction(Object object)
1321 throws PortalException {
1322
1323 Role role = (Role)object;
1324
1325 roleLocalService.deleteRole(role);
1326 }
1327
1328 });
1329
1330 roleActionableDynamicQuery.performActions();
1331
1332
1333
1334 passwordPolicyLocalService.deleteNondefaultPasswordPolicies(companyId);
1335
1336 PasswordPolicy defaultPasswordPolicy =
1337 passwordPolicyLocalService.getDefaultPasswordPolicy(companyId);
1338
1339 passwordPolicyLocalService.deletePasswordPolicy(defaultPasswordPolicy);
1340
1341
1342
1343 PortalPreferences portalPreferences =
1344 portalPreferencesPersistence.findByO_O(
1345 companyId, PortletKeys.PREFS_OWNER_TYPE_COMPANY);
1346
1347 portalPreferencesLocalService.deletePortalPreferences(
1348 portalPreferences);
1349
1350
1351
1352 List<Portlet> portlets = portletPersistence.findByCompanyId(companyId);
1353
1354 for (Portlet portlet : portlets) {
1355 portletLocalService.deletePortlet(portlet.getId());
1356 }
1357
1358 portletLocalService.removeCompanyPortletsPool(companyId);
1359
1360
1361
1362 Shard shard = shardLocalService.getShard(
1363 Company.class.getName(), company.getCompanyId());
1364
1365 shardLocalService.deleteShard(shard);
1366
1367
1368
1369 ActionableDynamicQuery userActionableDynamicQuery =
1370 userLocalService.getActionableDynamicQuery();
1371
1372 userActionableDynamicQuery.setCompanyId(companyId);
1373 userActionableDynamicQuery.setPerformActionMethod(
1374 new ActionableDynamicQuery.PerformActionMethod() {
1375
1376 @Override
1377 public void performAction(Object object)
1378 throws PortalException {
1379
1380 User user = (User)object;
1381
1382 if (!user.isDefaultUser()) {
1383 userLocalService.deleteUser(user.getUserId());
1384 }
1385 }
1386
1387 });
1388
1389 userActionableDynamicQuery.performActions();
1390
1391 User defaultUser = userLocalService.getDefaultUser(companyId);
1392
1393 userLocalService.deleteUser(defaultUser);
1394
1395
1396
1397 VirtualHost companyVirtualHost =
1398 virtualHostLocalService.fetchVirtualHost(companyId, 0);
1399
1400 virtualHostLocalService.deleteVirtualHost(companyVirtualHost);
1401
1402
1403
1404 Callable<Void> callable = new Callable<Void>() {
1405
1406 @Override
1407 public Void call() throws Exception {
1408 PortalInstances.removeCompany(companyId);
1409
1410 return null;
1411 }
1412
1413 };
1414
1415 TransactionCommitCallbackRegistryUtil.registerCallback(callable);
1416
1417 return company;
1418 }
1419
1420 protected void updateAccount(
1421 Company company, String name, String legalName, String legalId,
1422 String legalType, String sicCode, String tickerSymbol, String industry,
1423 String type, String size) {
1424
1425 Date now = new Date();
1426
1427 Account account = accountPersistence.fetchByPrimaryKey(
1428 company.getAccountId());
1429
1430 if (account == null) {
1431 long accountId = counterLocalService.increment();
1432
1433 account = accountPersistence.create(accountId);
1434
1435 account.setCompanyId(company.getCompanyId());
1436 account.setCreateDate(now);
1437 account.setUserId(0);
1438 account.setUserName(StringPool.BLANK);
1439
1440 company.setAccountId(accountId);
1441
1442 companyPersistence.update(company);
1443 }
1444
1445 account.setModifiedDate(now);
1446 account.setName(name);
1447 account.setLegalName(legalName);
1448 account.setLegalId(legalId);
1449 account.setLegalType(legalType);
1450 account.setSicCode(sicCode);
1451 account.setTickerSymbol(tickerSymbol);
1452 account.setIndustry(industry);
1453 account.setType(type);
1454 account.setSize(size);
1455
1456 accountPersistence.update(account);
1457 }
1458
1459 protected void updateVirtualHostname(long companyId, String virtualHostname)
1460 throws CompanyVirtualHostException {
1461
1462 if (Validator.isNotNull(virtualHostname)) {
1463 VirtualHost virtualHost = virtualHostPersistence.fetchByHostname(
1464 virtualHostname);
1465
1466 if (virtualHost == null) {
1467 virtualHostLocalService.updateVirtualHost(
1468 companyId, 0, virtualHostname);
1469 }
1470 else {
1471 if ((virtualHost.getCompanyId() != companyId) ||
1472 (virtualHost.getLayoutSetId() != 0)) {
1473
1474 throw new CompanyVirtualHostException();
1475 }
1476 }
1477 }
1478 else {
1479 VirtualHost virtualHost = virtualHostPersistence.fetchByC_L(
1480 companyId, 0);
1481
1482 if (virtualHost != null) {
1483 virtualHostPersistence.remove(virtualHost);
1484 }
1485 }
1486 }
1487
1488 protected void validateLanguageIds(String languageIds)
1489 throws PortalException {
1490
1491 String[] languageIdsArray = StringUtil.split(
1492 languageIds, StringPool.COMMA);
1493
1494 for (String languageId : languageIdsArray) {
1495 if (!ArrayUtil.contains(PropsValues.LOCALES, languageId)) {
1496 LocaleException le = new LocaleException(
1497 LocaleException.TYPE_DISPLAY_SETTINGS);
1498
1499 le.setSourceAvailableLocales(
1500 LocaleUtil.fromLanguageIds(PropsValues.LOCALES));
1501 le.setTargetAvailableLocales(
1502 LocaleUtil.fromLanguageIds(languageIdsArray));
1503
1504 throw le;
1505 }
1506 }
1507 }
1508
1509 protected void validateMx(String mx) throws PortalException {
1510 if (Validator.isNull(mx) || !Validator.isDomain(mx)) {
1511 throw new CompanyMxException();
1512 }
1513 }
1514
1515 protected void validateName(long companyId, String name)
1516 throws PortalException {
1517
1518 Group group = groupLocalService.fetchGroup(companyId, name);
1519
1520 if ((group != null) || Validator.isNull(name)) {
1521 throw new AccountNameException();
1522 }
1523 }
1524
1525 protected void validateVirtualHost(String webId, String virtualHostname)
1526 throws PortalException {
1527
1528 if (Validator.isNull(virtualHostname)) {
1529 throw new CompanyVirtualHostException();
1530 }
1531 else if (virtualHostname.equals(_DEFAULT_VIRTUAL_HOST) &&
1532 !webId.equals(PropsValues.COMPANY_DEFAULT_WEB_ID)) {
1533
1534 throw new CompanyVirtualHostException();
1535 }
1536 else if (!Validator.isDomain(virtualHostname)) {
1537 throw new CompanyVirtualHostException();
1538 }
1539 else {
1540 try {
1541 VirtualHost virtualHost = virtualHostPersistence.findByHostname(
1542 virtualHostname);
1543
1544 long companyId = virtualHost.getCompanyId();
1545
1546 Company virtualHostnameCompany =
1547 companyPersistence.findByPrimaryKey(companyId);
1548
1549 if (!webId.equals(virtualHostnameCompany.getWebId())) {
1550 throw new CompanyVirtualHostException();
1551 }
1552 }
1553 catch (NoSuchVirtualHostException nsvhe) {
1554 }
1555 }
1556 }
1557
1558 protected class DeleteGroupActionableDynamicQuery {
1559
1560 protected DeleteGroupActionableDynamicQuery() {
1561 _actionableDynamicQuery =
1562 groupLocalService.getActionableDynamicQuery();
1563
1564 _actionableDynamicQuery.setAddCriteriaMethod(
1565 new ActionableDynamicQuery.AddCriteriaMethod() {
1566
1567 @Override
1568 public void addCriteria(DynamicQuery dynamicQuery) {
1569 Property parentGroupIdProperty =
1570 PropertyFactoryUtil.forName("parentGroupId");
1571
1572 dynamicQuery.add(
1573 parentGroupIdProperty.eq(_parentGroupId));
1574
1575 Property siteProperty = PropertyFactoryUtil.forName(
1576 "site");
1577
1578 dynamicQuery.add(siteProperty.eq(Boolean.TRUE));
1579 }
1580
1581 });
1582 _actionableDynamicQuery.setPerformActionMethod(
1583 new ActionableDynamicQuery.PerformActionMethod() {
1584
1585 @Override
1586 public void performAction(Object object)
1587 throws PortalException {
1588
1589 Group group = (Group)object;
1590
1591 if (!PortalUtil.isSystemGroup(group.getName()) &&
1592 !group.isCompany()) {
1593
1594 deleteGroup(group);
1595 }
1596 }
1597
1598 });
1599 }
1600
1601 protected void deleteGroup(Group group) throws PortalException {
1602 DeleteGroupActionableDynamicQuery
1603 deleteGroupActionableDynamicQuery =
1604 new DeleteGroupActionableDynamicQuery();
1605
1606 deleteGroupActionableDynamicQuery.setCompanyId(
1607 group.getCompanyId());
1608 deleteGroupActionableDynamicQuery.setParentGroupId(
1609 group.getGroupId());
1610
1611 deleteGroupActionableDynamicQuery.performActions();
1612
1613 groupLocalService.deleteGroup(group);
1614
1615 LiveUsers.deleteGroup(group.getCompanyId(), group.getGroupId());
1616 }
1617
1618 protected void performActions() throws PortalException {
1619 _actionableDynamicQuery.performActions();
1620 }
1621
1622 protected void setCompanyId(long companyId) {
1623 _actionableDynamicQuery.setCompanyId(companyId);
1624 }
1625
1626 protected void setParentGroupId(long parentGroupId) {
1627 _parentGroupId = parentGroupId;
1628 }
1629
1630 private ActionableDynamicQuery _actionableDynamicQuery;
1631 private long _parentGroupId = GroupConstants.DEFAULT_PARENT_GROUP_ID;
1632
1633 }
1634
1635 protected class DeleteOrganizationActionableDynamicQuery {
1636
1637 public void setParentOrganizationId(long parentOrganizationId) {
1638 _parentOrganizationId = parentOrganizationId;
1639 }
1640
1641 protected DeleteOrganizationActionableDynamicQuery() {
1642 _actionableDynamicQuery =
1643 organizationLocalService.getActionableDynamicQuery();
1644
1645 _actionableDynamicQuery.setAddCriteriaMethod(
1646 new ActionableDynamicQuery.AddCriteriaMethod() {
1647
1648 @Override
1649 public void addCriteria(DynamicQuery dynamicQuery) {
1650 Property property = PropertyFactoryUtil.forName(
1651 "parentOrganizationId");
1652
1653 dynamicQuery.add(property.eq(_parentOrganizationId));
1654 }
1655
1656 });
1657 _actionableDynamicQuery.setPerformActionMethod(
1658 new ActionableDynamicQuery.PerformActionMethod() {
1659
1660 @Override
1661 public void performAction(Object object)
1662 throws PortalException {
1663
1664 Organization organization = (Organization)object;
1665
1666 deleteOrganization(organization);
1667 }
1668
1669 });
1670 }
1671
1672 protected void deleteOrganization(Organization organization)
1673 throws PortalException {
1674
1675 DeleteOrganizationActionableDynamicQuery
1676 deleteOrganizationActionableDynamicQuery =
1677 new DeleteOrganizationActionableDynamicQuery();
1678
1679 deleteOrganizationActionableDynamicQuery.setCompanyId(
1680 organization.getCompanyId());
1681 deleteOrganizationActionableDynamicQuery.setParentOrganizationId(
1682 organization.getOrganizationId());
1683
1684 deleteOrganizationActionableDynamicQuery.performActions();
1685
1686 organizationLocalService.deleteOrganization(organization);
1687 }
1688
1689 protected void performActions() throws PortalException {
1690 _actionableDynamicQuery.performActions();
1691 }
1692
1693 protected void setCompanyId(long companyId) {
1694 _actionableDynamicQuery.setCompanyId(companyId);
1695 }
1696
1697 private ActionableDynamicQuery _actionableDynamicQuery;
1698 private long _parentOrganizationId =
1699 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID;
1700
1701 }
1702
1703 private static final String _DEFAULT_VIRTUAL_HOST = "localhost";
1704
1705 private static final Log _log = LogFactoryUtil.getLog(
1706 CompanyLocalServiceImpl.class);
1707
1708 }