Package org.projectforge.web.admin

Source Code of org.projectforge.web.admin.SetupPage

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.web.admin;

import java.io.InputStreamReader;
import java.io.Reader;
import java.util.zip.GZIPInputStream;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.projectforge.core.Configuration;
import org.projectforge.core.ConfigurationDO;
import org.projectforge.core.ConfigurationDao;
import org.projectforge.core.ConfigurationParam;
import org.projectforge.core.HibernateSearchReindexer;
import org.projectforge.database.InitDatabaseDao;
import org.projectforge.database.MyDatabaseUpdater;
import org.projectforge.database.XmlDump;
import org.projectforge.database.xstream.XStreamSavingConverter;
import org.projectforge.task.TaskTree;
import org.projectforge.user.PFUserDO;
import org.projectforge.user.UserGroupCache;
import org.projectforge.web.LoginPage;
import org.projectforge.web.MenuItemRegistry;
import org.projectforge.web.UserFilter;
import org.projectforge.web.wicket.AbstractUnsecureBasePage;
import org.projectforge.web.wicket.MessagePage;
import org.projectforge.web.wicket.MySession;
import org.projectforge.web.wicket.WicketUtils;

public class SetupPage extends AbstractUnsecureBasePage
{
  private static final long serialVersionUID = 9174903871130640690L;

  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(SetupPage.class);

  @SpringBean(name = "initDatabaseDao")
  private InitDatabaseDao initDatabaseDao;

  @SpringBean(name = "configurationDao")
  private ConfigurationDao configurationDao;

  @SpringBean(name = "hibernateSearchReindexer")
  private HibernateSearchReindexer hibernateSearchReindexer;

  @SpringBean(name = "taskTree")
  private TaskTree taskTree;

  @SpringBean(name = "userGroupCache")
  private UserGroupCache userGroupCache;

  @SpringBean(name = "myDatabaseUpdater")
  private MyDatabaseUpdater myDatabaseUpdater;

  @SpringBean(name = "xmlDump")
  private XmlDump xmlDump;

  private final SetupForm setupForm;

  private final SetupImportForm importForm;

  public SetupPage(final PageParameters parameters)
  {
    super(parameters);
    checkAccess();
    setupForm = new SetupForm(this);
    body.add(setupForm);
    setupForm.init();
    importForm = new SetupImportForm(this);
    body.add(importForm);
    importForm.init();
    // final StringBuffer js = new StringBuffer("<script>\n") //
    // .append("$(function() {") //
    // .append("  $('input:file').uniform({\n") //
    // .append("    fileDefaultText : '- No file selected',\n") //
    // .append("    fileBtnText : 'Choose - File'\n") //
    // .append("  }); });\n") //
    // .append("alert('Hurzel');") //
    // .append("</script>\n");
    // body.add(new Label("uploadScript", js.toString()).setEscapeModelStrings(false));
  }

  protected void finishSetup()
  {
    log.info("Finishing the set-up...");
    checkAccess();
    PFUserDO adminUser = null;
    final String message;
    if (setupForm.getSetupMode() == SetupTarget.EMPTY_DATABASE) {
      adminUser = initDatabaseDao.initializeEmptyDatabase(setupForm.getAdminUser(), setupForm.getTimeZone());
      message = "administration.setup.message.emptyDatabase";
    } else {
      adminUser = initDatabaseDao.initializeEmptyDatabaseWithTestData(setupForm.getAdminUser(), setupForm.getTimeZone());
      message = "administration.setup.message.testdata";
      // refreshes the visibility of the costConfigured dependent menu items:
      Configuration.getInstance().setExpired(); // Force reload.
      MenuItemRegistry.instance().refresh();
    }
    ((MySession) getSession()).login(adminUser, getRequest());
    UserFilter.login(WicketUtils.getHttpServletRequest(getRequest()), adminUser);
    configurationDao.checkAndUpdateDatabaseEntries();
    if (setupForm.getTimeZone() != null) {
      final ConfigurationDO configurationDO = getConfigurationDO(ConfigurationParam.DEFAULT_TIMEZONE);
      if (configurationDO != null) {
        configurationDO.setTimeZone(setupForm.getTimeZone());
        configurationDao.update(configurationDO);
      }
    }
    configure(ConfigurationParam.CALENDAR_DOMAIN, setupForm.getCalendarDomain());
    configure(ConfigurationParam.SYSTEM_ADMIN_E_MAIL, setupForm.getSysopEMail());
    configure(ConfigurationParam.FEEDBACK_E_MAIL, setupForm.getFeedbackEMail());
    if (myDatabaseUpdater.getSystemUpdater().isUpdated() == true) {
      // Update status:
      UserFilter.setUpdateRequiredFirst(false);
    }
    setResponsePage(new MessagePage(message, adminUser.getUsername()));
    log.info("Set-up finished.");
  }

  private ConfigurationDO getConfigurationDO(final ConfigurationParam param)
  {
    final ConfigurationDO configurationDO = configurationDao.getEntry(param);
    if (configurationDO == null) {
      log.error("Oups, can't find configuration parameter '" + param + "'. You can re-configure it anytime later.");
    }
    return configurationDO;
  }

  private void configure(final ConfigurationParam param, final String value)
  {
    if (StringUtils.isBlank(value) == true) {
      return;
    }
    final ConfigurationDO configurationDO = getConfigurationDO(param);
    if (configurationDO != null) {
      configurationDO.setStringValue(value);
      configurationDao.update(configurationDO);
    }
  }

  protected void upload()
  {
    checkAccess();
    log.info("Uploading data-base dump file...");
    final FileUpload fileUpload = importForm.fileUploadField.getFileUpload();
    if (fileUpload == null) {
      return;
    }
    try {
      final String clientFileName = fileUpload.getClientFileName();
      Reader reader = null;
      if (clientFileName.endsWith(".xml.gz") == true) {
        reader = new InputStreamReader(new GZIPInputStream(fileUpload.getInputStream()));
      } else if (clientFileName.endsWith(".xml") == true) {
        reader = new InputStreamReader(fileUpload.getInputStream());
      } else {
        log.info("Unsupported file suffix. Only *.xml and *.xml.gz is supported: " + clientFileName);
        error(getString("administration.setup.error.uploadfile"));
        return;
      }
      final XStreamSavingConverter converter = xmlDump.restoreDatabase(reader);
      final int counter = xmlDump.verifyDump(converter);
      configurationDao.checkAndUpdateDatabaseEntries();
      Configuration.getInstance().setExpired();
      taskTree.setExpired();
      userGroupCache.setExpired();
      new Thread() {
        @Override
        public void run()
        {
          hibernateSearchReindexer.rebuildDatabaseSearchIndices();
        }
      }.start();
      if (counter > 0) {
        ((MySession) getSession()).logout();
        setResponsePage(LoginPage.class);
      } else {
        error(getString("administration.setup.error.import"));
      }
    } catch (final Exception ex) {
      log.error(ex.getMessage(), ex);
      error(getString("administration.setup.error.import"));
    }
  }

  @Override
  protected String getTitle()
  {
    return getString("administration.setup.title");
  }

  private void checkAccess()
  {
    if (initDatabaseDao.isEmpty() == false) {
      log.error("Couldn't call set-up page, because the data-base isn't empty!");
      ((MySession) getSession()).logout();
      throw new RestartResponseException(WicketUtils.getDefaultPage());
    }
  }

  /**
   * @see org.projectforge.web.wicket.AbstractUnsecureBasePage#thisIsAnUnsecuredPage()
   */
  @Override
  protected void thisIsAnUnsecuredPage()
  {
  }
}
TOP

Related Classes of org.projectforge.web.admin.SetupPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.