001
014
015 package com.liferay.portal.setup;
016
017 import com.liferay.portal.events.EventsProcessorUtil;
018 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
019 import com.liferay.portal.kernel.dao.jdbc.DataSourceFactoryUtil;
020 import com.liferay.portal.kernel.language.LanguageUtil;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.model.Company;
024 import com.liferay.portal.kernel.model.User;
025 import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
026 import com.liferay.portal.kernel.theme.ThemeDisplay;
027 import com.liferay.portal.kernel.util.FileUtil;
028 import com.liferay.portal.kernel.util.LocaleUtil;
029 import com.liferay.portal.kernel.util.ParamUtil;
030 import com.liferay.portal.kernel.util.PropertiesParamUtil;
031 import com.liferay.portal.kernel.util.PropsKeys;
032 import com.liferay.portal.kernel.util.StringPool;
033 import com.liferay.portal.kernel.util.SystemProperties;
034 import com.liferay.portal.kernel.util.UnicodeProperties;
035 import com.liferay.portal.kernel.util.Validator;
036 import com.liferay.portal.kernel.util.WebKeys;
037 import com.liferay.portal.util.PortalInstances;
038 import com.liferay.portal.util.PropsValues;
039
040 import java.io.IOException;
041
042 import java.sql.Connection;
043
044 import java.util.Locale;
045
046 import javax.servlet.http.HttpServletRequest;
047 import javax.servlet.http.HttpServletResponse;
048 import javax.servlet.http.HttpSession;
049
050 import javax.sql.DataSource;
051
052 import org.apache.struts.Globals;
053
054
060 public class SetupWizardUtil {
061
062 public static final String PROPERTIES_FILE_NAME =
063 "portal-setup-wizard.properties";
064
065 public static String getDefaultLanguageId() {
066 Locale defaultLocale = LocaleUtil.getDefault();
067
068 return LocaleUtil.toLanguageId(defaultLocale);
069 }
070
071 public static boolean isDefaultDatabase(HttpServletRequest request) {
072 boolean hsqldb = ParamUtil.getBoolean(
073 request, "defaultDatabase",
074 PropsValues.JDBC_DEFAULT_URL.contains("hsqldb"));
075
076 boolean jndi = Validator.isNotNull(PropsValues.JDBC_DEFAULT_JNDI_NAME);
077
078 return hsqldb && !jndi;
079 }
080
081 public static void testDatabase(HttpServletRequest request)
082 throws Exception {
083
084 String driverClassName = _getParameter(
085 request, PropsKeys.JDBC_DEFAULT_DRIVER_CLASS_NAME,
086 PropsValues.JDBC_DEFAULT_DRIVER_CLASS_NAME);
087 String url = _getParameter(request, PropsKeys.JDBC_DEFAULT_URL, null);
088 String userName = _getParameter(
089 request, PropsKeys.JDBC_DEFAULT_USERNAME, null);
090 String password = _getParameter(
091 request, PropsKeys.JDBC_DEFAULT_PASSWORD, null);
092
093 String jndiName = StringPool.BLANK;
094
095 if (Validator.isNotNull(PropsValues.JDBC_DEFAULT_JNDI_NAME)) {
096 jndiName = PropsValues.JDBC_DEFAULT_JNDI_NAME;
097 }
098
099 _testConnection(driverClassName, url, userName, password, jndiName);
100 }
101
102 public static void updateLanguage(
103 HttpServletRequest request, HttpServletResponse response) {
104
105 String languageId = ParamUtil.getString(
106 request, "companyLocale", getDefaultLanguageId());
107
108 Locale locale = LocaleUtil.fromLanguageId(languageId);
109
110 if (!LanguageUtil.isAvailableLocale(locale)) {
111 return;
112 }
113
114 HttpSession session = request.getSession();
115
116 session.setAttribute(Globals.LOCALE_KEY, locale);
117 session.setAttribute(WebKeys.SETUP_WIZARD_DEFAULT_LOCALE, languageId);
118
119 LanguageUtil.updateCookie(request, response, locale);
120
121 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
122 WebKeys.THEME_DISPLAY);
123
124 themeDisplay.setLanguageId(languageId);
125 themeDisplay.setLocale(locale);
126 }
127
128 public static void updateSetup(
129 HttpServletRequest request, HttpServletResponse response)
130 throws Exception {
131
132 UnicodeProperties unicodeProperties = PropertiesParamUtil.getProperties(
133 request, _PROPERTIES_PREFIX);
134
135 unicodeProperties.setProperty(
136 PropsKeys.LIFERAY_HOME,
137 SystemProperties.get(PropsKeys.LIFERAY_HOME));
138
139 boolean databaseConfigured = _isDatabaseConfigured(unicodeProperties);
140
141 _processDatabaseProperties(
142 request, unicodeProperties, databaseConfigured);
143
144 _processOtherProperties(request, unicodeProperties);
145
146 updateLanguage(request, response);
147
148 unicodeProperties.put(
149 PropsKeys.SETUP_WIZARD_ENABLED, String.valueOf(false));
150
151 _updateCompany(request);
152
153 _updateAdminUser(request, response, unicodeProperties);
154
155 HttpSession session = request.getSession();
156
157 session.setAttribute(
158 WebKeys.SETUP_WIZARD_PROPERTIES, unicodeProperties);
159 session.setAttribute(
160 WebKeys.SETUP_WIZARD_PROPERTIES_FILE_CREATED,
161 _writePropertiesFile(unicodeProperties));
162 }
163
164 private static String _getParameter(
165 HttpServletRequest request, String name, String defaultValue) {
166
167 name = _PROPERTIES_PREFIX.concat(name).concat(StringPool.DOUBLE_DASH);
168
169 return ParamUtil.getString(request, name, defaultValue);
170 }
171
172 private static boolean _isDatabaseConfigured(
173 UnicodeProperties unicodeProperties) {
174
175 String defaultDriverClassName = unicodeProperties.get(
176 PropsKeys.JDBC_DEFAULT_DRIVER_CLASS_NAME);
177 String defaultPassword = unicodeProperties.get(
178 PropsKeys.JDBC_DEFAULT_PASSWORD);
179 String defaultURL = unicodeProperties.get(PropsKeys.JDBC_DEFAULT_URL);
180 String defaultUsername = unicodeProperties.get(
181 PropsKeys.JDBC_DEFAULT_USERNAME);
182
183 if (PropsValues.JDBC_DEFAULT_DRIVER_CLASS_NAME.equals(
184 defaultDriverClassName) &&
185 PropsValues.JDBC_DEFAULT_PASSWORD.equals(defaultPassword) &&
186 PropsValues.JDBC_DEFAULT_URL.equals(defaultURL) &&
187 PropsValues.JDBC_DEFAULT_USERNAME.equals(defaultUsername)) {
188
189 return true;
190 }
191
192 return false;
193 }
194
195 private static void _processDatabaseProperties(
196 HttpServletRequest request, UnicodeProperties unicodeProperties,
197 boolean databaseConfigured)
198 throws Exception {
199
200 boolean defaultDatabase = ParamUtil.getBoolean(
201 request, "defaultDatabase", true);
202
203 if (defaultDatabase || databaseConfigured) {
204 unicodeProperties.remove(PropsKeys.JDBC_DEFAULT_URL);
205 unicodeProperties.remove(PropsKeys.JDBC_DEFAULT_DRIVER_CLASS_NAME);
206 unicodeProperties.remove(PropsKeys.JDBC_DEFAULT_USERNAME);
207 unicodeProperties.remove(PropsKeys.JDBC_DEFAULT_PASSWORD);
208 }
209 }
210
211 private static void _processOtherProperties(
212 HttpServletRequest request, UnicodeProperties unicodeProperties)
213 throws Exception {
214
215 _processProperty(
216 request, unicodeProperties, "adminFirstName",
217 PropsKeys.DEFAULT_ADMIN_FIRST_NAME,
218 PropsValues.DEFAULT_ADMIN_FIRST_NAME);
219 _processProperty(
220 request, unicodeProperties, "adminLastName",
221 PropsKeys.DEFAULT_ADMIN_LAST_NAME,
222 PropsValues.DEFAULT_ADMIN_LAST_NAME);
223 _processProperty(
224 request, unicodeProperties, "companyName",
225 PropsKeys.COMPANY_DEFAULT_NAME, PropsValues.COMPANY_DEFAULT_NAME);
226 }
227
228 private static void _processProperty(
229 HttpServletRequest request, UnicodeProperties unicodeProperties,
230 String parameterName, String propertyKey, String defaultValue)
231 throws Exception {
232
233 String value = ParamUtil.getString(
234 request, parameterName, defaultValue);
235
236 if (!value.equals(defaultValue)) {
237 unicodeProperties.put(propertyKey, value);
238 }
239 }
240
241 private static void _testConnection(
242 String driverClassName, String url, String userName,
243 String password, String jndiName)
244 throws Exception {
245
246 if (Validator.isNull(jndiName)) {
247 Class.forName(driverClassName);
248 }
249
250 DataSource dataSource = null;
251 Connection connection = null;
252
253 try {
254 dataSource = DataSourceFactoryUtil.initDataSource(
255 driverClassName, url, userName, password, jndiName);
256
257 connection = dataSource.getConnection();
258 }
259 finally {
260 DataAccess.cleanUp(connection);
261 DataSourceFactoryUtil.destroyDataSource(dataSource);
262 }
263 }
264
265 private static void _updateAdminUser(
266 HttpServletRequest request, HttpServletResponse response,
267 UnicodeProperties unicodeProperties)
268 throws Exception {
269
270 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
271 WebKeys.THEME_DISPLAY);
272
273 Company company = CompanyLocalServiceUtil.getCompanyById(
274 themeDisplay.getCompanyId());
275
276 String emailAddress = ParamUtil.getString(
277 request, "adminEmailAddress",
278 PropsValues.DEFAULT_ADMIN_EMAIL_ADDRESS_PREFIX + StringPool.AT +
279 company.getMx());
280
281 PropsValues.ADMIN_EMAIL_FROM_ADDRESS = emailAddress;
282
283 unicodeProperties.put(PropsKeys.ADMIN_EMAIL_FROM_ADDRESS, emailAddress);
284
285 String firstName = ParamUtil.getString(
286 request, "adminFirstName", PropsValues.DEFAULT_ADMIN_FIRST_NAME);
287 String lastName = ParamUtil.getString(
288 request, "adminLastName", PropsValues.DEFAULT_ADMIN_LAST_NAME);
289
290 User user = SetupWizardSampleDataUtil.updateAdminUser(
291 company, themeDisplay.getLocale(), themeDisplay.getLanguageId(),
292 emailAddress, firstName, lastName, true);
293
294 PropsValues.ADMIN_EMAIL_FROM_NAME = user.getFullName();
295
296 unicodeProperties.put(
297 PropsKeys.ADMIN_EMAIL_FROM_NAME, user.getFullName());
298
299 HttpSession session = request.getSession();
300
301 session.setAttribute(WebKeys.EMAIL_ADDRESS, emailAddress);
302 session.setAttribute(WebKeys.SETUP_WIZARD_PASSWORD_UPDATED, true);
303 session.setAttribute(WebKeys.USER, user);
304 session.setAttribute(WebKeys.USER_ID, user.getUserId());
305
306 EventsProcessorUtil.process(
307 PropsKeys.LOGIN_EVENTS_POST, PropsValues.LOGIN_EVENTS_POST, request,
308 response);
309 }
310
311 private static void _updateCompany(HttpServletRequest request)
312 throws Exception {
313
314 Company company = CompanyLocalServiceUtil.getCompanyById(
315 PortalInstances.getDefaultCompanyId());
316
317 String languageId = ParamUtil.getString(
318 request, "companyLocale", getDefaultLanguageId());
319
320 String companyName = ParamUtil.getString(
321 request, "companyName", PropsValues.COMPANY_DEFAULT_NAME);
322
323 SetupWizardSampleDataUtil.updateCompany(
324 company, companyName, languageId);
325
326 ThemeDisplay themeDisplay = (ThemeDisplay)request.getAttribute(
327 WebKeys.THEME_DISPLAY);
328
329 themeDisplay.setCompany(company);
330 }
331
332 private static boolean _writePropertiesFile(
333 UnicodeProperties unicodeProperties) {
334
335 try {
336 FileUtil.write(
337 PropsValues.LIFERAY_HOME, PROPERTIES_FILE_NAME,
338 unicodeProperties.toString());
339
340 if (FileUtil.exists(
341 PropsValues.LIFERAY_HOME + StringPool.SLASH +
342 PROPERTIES_FILE_NAME)) {
343
344 return true;
345 }
346 }
347 catch (IOException ioe) {
348 _log.error(ioe, ioe);
349 }
350
351 return false;
352 }
353
354 private static final String _PROPERTIES_PREFIX = "properties--";
355
356 private static final Log _log = LogFactoryUtil.getLog(
357 SetupWizardUtil.class);
358
359 }