001
014
015 package com.liferay.portal.setup;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.language.LanguageUtil;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.model.Account;
022 import com.liferay.portal.kernel.model.Company;
023 import com.liferay.portal.kernel.model.Contact;
024 import com.liferay.portal.kernel.model.Layout;
025 import com.liferay.portal.kernel.model.LayoutConstants;
026 import com.liferay.portal.kernel.model.ListTypeConstants;
027 import com.liferay.portal.kernel.model.Organization;
028 import com.liferay.portal.kernel.model.OrganizationConstants;
029 import com.liferay.portal.kernel.model.User;
030 import com.liferay.portal.kernel.security.auth.FullNameGenerator;
031 import com.liferay.portal.kernel.security.auth.FullNameGeneratorFactory;
032 import com.liferay.portal.kernel.security.auth.ScreenNameGenerator;
033 import com.liferay.portal.kernel.service.AccountLocalServiceUtil;
034 import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
035 import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
036 import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
037 import com.liferay.portal.kernel.service.OrganizationLocalServiceUtil;
038 import com.liferay.portal.kernel.service.ServiceContext;
039 import com.liferay.portal.kernel.service.UserLocalServiceUtil;
040 import com.liferay.portal.kernel.util.CalendarFactoryUtil;
041 import com.liferay.portal.kernel.util.FriendlyURLNormalizerUtil;
042 import com.liferay.portal.kernel.util.GetterUtil;
043 import com.liferay.portal.kernel.util.LocaleUtil;
044 import com.liferay.portal.kernel.util.StringBundler;
045 import com.liferay.portal.kernel.util.StringPool;
046 import com.liferay.portal.kernel.workflow.WorkflowConstants;
047 import com.liferay.portal.security.auth.ScreenNameGeneratorFactory;
048 import com.liferay.portal.util.PropsValues;
049
050 import java.util.Calendar;
051 import java.util.Locale;
052
053 import org.apache.commons.lang.time.StopWatch;
054
055
058 public class SetupWizardSampleDataUtil {
059
060 public static void addSampleData(long companyId) throws Exception {
061 addSampleData(
062 companyId, PropsValues.COMPANY_DEFAULT_NAME,
063 PropsValues.DEFAULT_ADMIN_FIRST_NAME,
064 PropsValues.DEFAULT_ADMIN_LAST_NAME,
065 PropsValues.ADMIN_EMAIL_FROM_NAME, false);
066 }
067
068 public static void addSampleData(
069 long companyId, String companyName, String adminUserFirstName,
070 String adminUserLastName, String adminUserEmailAddress,
071 boolean resetPassword)
072 throws Exception {
073
074 StopWatch stopWatch = new StopWatch();
075
076 stopWatch.start();
077
078 if (_log.isInfoEnabled()) {
079 _log.info("Adding sample data");
080 }
081
082 Company company = updateCompany(
083 CompanyLocalServiceUtil.getCompanyById(companyId), companyName,
084 LocaleUtil.toLanguageId(LocaleUtil.getDefault()));
085
086 User adminUser = updateAdminUser(
087 company, LocaleUtil.getDefault(),
088 LocaleUtil.toLanguageId(LocaleUtil.getDefault()),
089 adminUserEmailAddress, adminUserFirstName, adminUserLastName,
090 resetPassword);
091
092 User defaultUser = company.getDefaultUser();
093
094 Account account = company.getAccount();
095
096 Organization organization =
097 OrganizationLocalServiceUtil.addOrganization(
098 defaultUser.getUserId(),
099 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID,
100 account.getLegalName(), true);
101
102 GroupLocalServiceUtil.updateFriendlyURL(
103 organization.getGroupId(), "/main");
104
105 Layout extranetLayout = LayoutLocalServiceUtil.addLayout(
106 defaultUser.getUserId(), organization.getGroupId(), false,
107 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
108 account.getLegalName() + " Extranet", null, null,
109 LayoutConstants.TYPE_PORTLET, false, "/extranet",
110 new ServiceContext());
111
112 LayoutLocalServiceUtil.updateLayout(
113 extranetLayout.getGroupId(), false, extranetLayout.getLayoutId(),
114 extranetLayout.getTypeSettings());
115
116 Layout intranetLayout = LayoutLocalServiceUtil.addLayout(
117 defaultUser.getUserId(), organization.getGroupId(), true,
118 LayoutConstants.DEFAULT_PARENT_LAYOUT_ID,
119 account.getLegalName() + " Intranet", null, null,
120 LayoutConstants.TYPE_PORTLET, false, "/intranet",
121 new ServiceContext());
122
123 LayoutLocalServiceUtil.updateLayout(
124 intranetLayout.getGroupId(), true, intranetLayout.getLayoutId(),
125 intranetLayout.getTypeSettings());
126
127 OrganizationLocalServiceUtil.addUserOrganization(
128 adminUser.getUserId(), organization);
129
130 addOrganizations(companyName, defaultUser, organization);
131
132 if (_log.isInfoEnabled()) {
133 _log.info("Finished adding data in " + stopWatch.getTime() + " ms");
134 }
135 }
136
137 public static User updateAdminUser(
138 Company company, Locale locale, String languageId,
139 String emailAddress, String firstName, String lastName,
140 boolean resetPassword)
141 throws PortalException {
142
143 ScreenNameGenerator screenNameGenerator =
144 ScreenNameGeneratorFactory.getInstance();
145
146 String screenName = GetterUtil.getString(
147 PropsValues.DEFAULT_ADMIN_EMAIL_ADDRESS_PREFIX, "test");
148
149 try {
150 screenName = screenNameGenerator.generate(0, 0, emailAddress);
151 }
152 catch (Exception e) {
153 }
154
155 User adminUser = UserLocalServiceUtil.fetchUserByEmailAddress(
156 company.getCompanyId(), emailAddress);
157
158 if (adminUser != null) {
159 FullNameGenerator fullNameGenerator =
160 FullNameGeneratorFactory.getInstance();
161
162 String fullName = fullNameGenerator.getFullName(
163 firstName, null, lastName);
164
165 String greeting = LanguageUtil.format(
166 locale, "welcome-x", fullName, false);
167
168 Contact contact = adminUser.getContact();
169
170 Calendar birthdayCal = CalendarFactoryUtil.getCalendar();
171
172 birthdayCal.setTime(contact.getBirthday());
173
174 int birthdayMonth = birthdayCal.get(Calendar.MONTH);
175 int birthdayDay = birthdayCal.get(Calendar.DAY_OF_MONTH);
176 int birthdayYear = birthdayCal.get(Calendar.YEAR);
177
178 adminUser = UserLocalServiceUtil.updateUser(
179 adminUser.getUserId(), StringPool.BLANK, StringPool.BLANK,
180 StringPool.BLANK, false, adminUser.getReminderQueryQuestion(),
181 adminUser.getReminderQueryAnswer(), screenName, emailAddress,
182 adminUser.getFacebookId(), adminUser.getOpenId(), false, null,
183 languageId, adminUser.getTimeZoneId(), greeting,
184 adminUser.getComments(), firstName, adminUser.getMiddleName(),
185 lastName, contact.getPrefixId(), contact.getSuffixId(),
186 contact.isMale(), birthdayMonth, birthdayDay, birthdayYear,
187 contact.getSmsSn(), contact.getFacebookSn(),
188 contact.getJabberSn(), contact.getSkypeSn(),
189 contact.getTwitterSn(), contact.getJobTitle(), null, null, null,
190 null, null, new ServiceContext());
191 }
192 else {
193 UserLocalServiceUtil.addDefaultAdminUser(
194 company.getCompanyId(), screenName, emailAddress, locale,
195 firstName, StringPool.BLANK, lastName);
196
197 adminUser = UserLocalServiceUtil.getUserByEmailAddress(
198 company.getCompanyId(), emailAddress);
199
200 String defaultAdminEmailAddress =
201 PropsValues.DEFAULT_ADMIN_EMAIL_ADDRESS_PREFIX + "@" +
202 PropsValues.COMPANY_DEFAULT_WEB_ID;
203
204 if (!emailAddress.equals(defaultAdminEmailAddress)) {
205 User user = UserLocalServiceUtil.fetchUserByEmailAddress(
206 company.getCompanyId(), defaultAdminEmailAddress);
207
208 if (user != null) {
209 UserLocalServiceUtil.updateStatus(
210 user.getUserId(), WorkflowConstants.STATUS_INACTIVE,
211 new ServiceContext());
212 }
213 }
214 }
215
216 return UserLocalServiceUtil.updatePasswordReset(
217 adminUser.getUserId(), resetPassword);
218 }
219
220 public static Company updateCompany(
221 Company company, String companyName, String languageId)
222 throws Exception {
223
224 Account account = company.getAccount();
225
226 account.setName(companyName);
227 account.setLegalName(companyName + ", Inc.");
228
229 AccountLocalServiceUtil.updateAccount(account);
230
231 User defaultUser = company.getDefaultUser();
232
233 defaultUser.setLanguageId(languageId);
234
235 UserLocalServiceUtil.updateUser(defaultUser);
236
237 return company;
238 }
239
240 protected static void addOrganizations(
241 String companyName, User defaultUser,
242 Organization parentOrganization)
243 throws Exception {
244
245 for (Object[] organizationArray : _ORGANIZATION_ARRAYS) {
246 String name = companyName + organizationArray[0];
247 long regionId = (Long)organizationArray[1];
248 long countryId = (Long)organizationArray[2];
249 String type = (String)organizationArray[3];
250
251 Organization organization =
252 OrganizationLocalServiceUtil.addOrganization(
253 defaultUser.getUserId(),
254 parentOrganization.getOrganizationId(), name, type,
255 regionId, countryId,
256 ListTypeConstants.ORGANIZATION_STATUS_DEFAULT,
257 StringPool.BLANK, true, null);
258
259 GroupLocalServiceUtil.updateFriendlyURL(
260 organization.getGroupId(),
261 FriendlyURLNormalizerUtil.normalize(
262 StringPool.SLASH + organizationArray[0]));
263
264 if (organizationArray.length <= 4) {
265 continue;
266 }
267
268 String organizationPrefix = (String)organizationArray[4];
269
270 long[] groupIds = {organization.getGroupId()};
271 long[] organizationIds = {
272 parentOrganization.getOrganizationId(),
273 organization.getOrganizationId()
274 };
275
276 for (int i = 1; i <= 10; i++) {
277 StringBundler sb = new StringBundler(5);
278
279 String defaultUserEmailAddress = defaultUser.getEmailAddress();
280
281 String[] defaultUserEmailAddressParts =
282 defaultUserEmailAddress.split(StringPool.AT);
283
284 sb.append(defaultUserEmailAddressParts[0]);
285
286 sb.append(StringPool.PERIOD);
287 sb.append(organizationPrefix);
288 sb.append(StringPool.PERIOD);
289 sb.append(i);
290
291 String screenName = sb.toString();
292
293 String emailAddress =
294 screenName + defaultUserEmailAddressParts[1];
295
296 String lastName = organizationPrefix + StringPool.SPACE + i;
297
298 User user = UserLocalServiceUtil.addUser(
299 0, defaultUser.getCompanyId(), false, "test", "test", false,
300 screenName, emailAddress, 0, null, LocaleUtil.getDefault(),
301 "Test", null, lastName, 0, 0, true, Calendar.JANUARY, 1,
302 1970, null, groupIds, organizationIds, null, null, false,
303 new ServiceContext());
304
305 user.setPasswordReset(false);
306 user.setAgreedToTermsOfUse(true);
307
308 UserLocalServiceUtil.updateUser(user);
309 }
310 }
311 }
312
313 private static final Object[][] _ORGANIZATION_ARRAYS = {
314 {
315 "Chicago", 19014L, 19L, OrganizationConstants.TYPE_ORGANIZATION,
316 "ORD"
317 },
318 {"Consulting", 19005L, 19L, OrganizationConstants.TYPE_ORGANIZATION},
319 {"Dalian", 0L, 2L, OrganizationConstants.TYPE_ORGANIZATION, "DLC"},
320 {"Engineering", 19005L, 19L, OrganizationConstants.TYPE_ORGANIZATION},
321 {"Frankfurt", 0L, 4L, OrganizationConstants.TYPE_ORGANIZATION, "FRA"},
322 {"Hong Kong", 0L, 2L, OrganizationConstants.TYPE_ORGANIZATION, "HKG"},
323 {
324 "Kuala Lumpur", 0L, 135L, OrganizationConstants.TYPE_ORGANIZATION,
325 "KUL"
326 },
327 {
328 "Los Angeles", 19005L, 19L, OrganizationConstants.TYPE_ORGANIZATION,
329 "LAX"
330 },
331 {"Madrid", 0L, 15L, OrganizationConstants.TYPE_ORGANIZATION, "MAD"},
332 {"Marketing", 19005L, 19L, OrganizationConstants.TYPE_ORGANIZATION},
333 {
334 "New York", 19033L, 19L, OrganizationConstants.TYPE_ORGANIZATION,
335 "NYC"
336 },
337 {
338 "Saint Paulo", 0L, 48L, OrganizationConstants.TYPE_ORGANIZATION,
339 "GRU"
340 },
341 {"Sales", 19005L, 19L, OrganizationConstants.TYPE_ORGANIZATION},
342 {
343 "San Francisco", 19005L, 19L,
344 OrganizationConstants.TYPE_ORGANIZATION, "SFO"
345 },
346 {"Support", 19005L, 19L, OrganizationConstants.TYPE_ORGANIZATION}
347 };
348
349 private static final Log _log = LogFactoryUtil.getLog(
350 SetupWizardSampleDataUtil.class);
351
352 }