All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.setup.ui.CmsDbSettingsPanel Maven / Gradle / Ivy

/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.setup.ui;

import org.opencms.setup.CmsSetupBean;
import org.opencms.ui.CmsVaadinUtils;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.Panel;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

/**
 * Form for database settings.
 */
public class CmsDbSettingsPanel extends VerticalLayout {

    /** Form field. */
    private CheckBox m_createDb;

    /** Form field. */
    private CheckBox m_createTables;

    /** Form field. */
    private TextField m_dbCreateConStr;

    /** Form field. */
    private PasswordField m_dbCreatePwd;

    /** Form field. */
    private TextField m_dbCreateUser;

    /** Form field. */
    private TextField m_dbName;

    /** Form field. */
    private PasswordField m_dbWorkPwd;

    /** Form field. */
    private TextField m_dbWorkUser;

    /** Form field. */
    private TextField m_defaultTablespace;

    /** Form field. */
    private CheckBox m_dropDatabase;

    /** Form field. */
    private TextField m_indexTablespace;

    /** Setup bean. */
    private CmsSetupBean m_setupBean;

    /** Form field. */
    private Panel m_setupPanel;

    private TextField m_templateDb;

    /** Form field. */
    private TextField m_temporaryTablespace;

    public CmsDbSettingsPanel(CmsSetupBean setupBean) {

        super();
        m_setupBean = setupBean;
        CmsVaadinUtils.readAndLocalizeDesign(this, null, null);

    }

    /**
     * Gets the value of the 'create database' check box.
     *
     * @return the value of the check box
     */
    public boolean getCreateDb() {

        return m_createDb.getValue().booleanValue();
    }

    /**
     * Gets the value of the 'create tables' check box.
     *
     * @return the value of the check box
     */
    public boolean getCreateTables() {

        return m_createTables.isVisible() ? m_createTables.getValue() : m_createDb.getValue();
    }

    /**
     * Gets the value of the 'drop database' check box.
     *
     * @return the value of the check box
     */
    public boolean getDropDb() {

        return m_dropDatabase.getValue().booleanValue();
    }

    /**
     * Initializes fields with data from setup bean.
     *
     * @param the webapp name (null for root webapp)
     */
    public void initFromSetupBean(String webapp) {

        String db = m_setupBean.getDatabase();
        CmsSetupBean bean = m_setupBean;
        Map params = new HashMap<>();
        m_setupPanel.setVisible(true);
        switch (db) {
            case "mysql":
            case "mssql":
                setVisible(
                    m_dbCreateUser,
                    m_dbCreatePwd,
                    m_dbWorkUser,
                    m_dbWorkPwd,
                    m_dbCreateConStr,
                    m_dbName,
                    m_createDb,
                    m_dropDatabase);
                m_dbCreateUser.setValue(bean.getDbCreateUser());
                m_dbCreatePwd.setValue(bean.getDbCreatePwd());
                m_dbWorkUser.setValue(bean.getDbWorkUser());
                m_dbWorkPwd.setValue(bean.getDbWorkPwd());
                m_dbCreateConStr.setValue(bean.getDbCreateConStr());
                m_dbName.setValue(webapp != null ? webapp : bean.getDb());
                m_createDb.setValue(true);
                m_createDb.setCaption("Create database and tables");
                m_dropDatabase.setValue(false);
                break;
            case "postgresql":
                setVisible(
                    m_dbCreateUser,
                    m_dbCreatePwd,
                    m_dbWorkUser,
                    m_dbWorkPwd,
                    m_dbCreateConStr,
                    m_dbName,
                    m_createDb,
                    m_createTables,
                    m_dropDatabase,
                    m_templateDb);
                m_dbCreateUser.setValue(bean.getDbCreateUser());
                m_dbCreatePwd.setValue(bean.getDbCreatePwd());
                m_dbWorkUser.setValue(bean.getDbWorkUser());
                m_dbWorkPwd.setValue(bean.getDbWorkPwd());
                m_dbCreateConStr.setValue(bean.getDbCreateConStr());
                m_dbName.setValue(webapp != null ? webapp : bean.getDb());
                m_createDb.setValue(true);
                m_createDb.setCaption("Create database and user");
                m_templateDb.setValue(dbProp("templateDb"));
                m_createTables.setValue(true);
                m_dropDatabase.setValue(false);
                break;
            case "hsqldb":
                setVisible(
                    m_dbCreateUser,
                    m_dbCreatePwd,
                    m_dbWorkUser,
                    m_dbWorkPwd,
                    m_dbCreateConStr,
                    m_createDb,
                    m_dropDatabase);

                m_dbCreateUser.setValue(bean.getDbCreateUser());
                m_dbCreatePwd.setValue(bean.getDbCreatePwd());
                m_dbWorkUser.setValue(bean.getDbWorkUser());
                m_dbWorkPwd.setValue(bean.getDbWorkPwd());
                m_createDb.setValue(true);
                m_createDb.setCaption("Create database and tables");
                m_dropDatabase.setValue(false);
                String origCreateConStr = bean.getDbProperty("hsqldb.constr");
                String createConStr = bean.getDbCreateConStr();
                if ((origCreateConStr != null) && origCreateConStr.equals(createConStr)) {
                    createConStr = "jdbc:hsqldb:file:"
                        + bean.getWebAppRfsPath()
                        + "WEB-INF"
                        + File.separatorChar
                        + "hsqldb"
                        + File.separatorChar
                        + "opencms;shutdown=false";
                }
                m_dbCreateConStr.setValue(createConStr);
                break;
            case "oracle":
                setVisible(
                    m_dbCreateUser,
                    m_dbCreatePwd,
                    m_dbWorkUser,
                    m_dbWorkPwd,
                    m_dbCreateConStr,
                    m_createDb,
                    m_createTables,
                    m_dropDatabase,
                    m_temporaryTablespace,
                    m_indexTablespace,
                    m_defaultTablespace);
                m_dbCreateUser.setValue(bean.getDbCreateUser());
                m_dbCreatePwd.setValue(bean.getDbCreatePwd());
                m_dbWorkUser.setValue(bean.getDbWorkUser());
                m_dbWorkPwd.setValue(bean.getDbWorkPwd());
                m_dbCreateConStr.setValue(bean.getDbCreateConStr());
                m_dbName.setValue(webapp != null ? webapp : bean.getDb());
                m_createDb.setValue(true);
                m_createDb.setCaption("Create user");
                m_createTables.setValue(true);
                m_dropDatabase.setValue(false);
                m_temporaryTablespace.setValue(dbProp("temporaryTablespace"));
                m_indexTablespace.setValue(dbProp("indexTablespace"));
                m_defaultTablespace.setValue(dbProp("defaultTablespace"));
                break;
            case "db2":
            case "as400":
                setVisible(m_dbWorkUser, m_dbWorkPwd, m_dbCreateConStr, m_dbName, m_createTables);
                m_setupPanel.setVisible(false);
                m_dbWorkUser.setValue(bean.getDbWorkUser());
                m_dbWorkPwd.setValue(bean.getDbWorkPwd());
                m_dbCreateConStr.setValue(bean.getDbCreateConStr());
                m_dbName.setValue(webapp != null ? webapp : bean.getDb());
                m_createDb.setValue(false);
                m_createTables.setValue(true);
                m_dropDatabase.setValue(true);
                break;
            default:
                break;
        }
    }

    /**
     * Saves form field data to setup bean.
     */
    public void saveToSetupBean() {

        Map result = new HashMap();

        CmsSetupBean bean = m_setupBean;
        if (m_dbCreateUser.isVisible()) {
            bean.setDbCreateUser(m_dbCreateUser.getValue());
        }
        if (m_dbCreatePwd.isVisible()) {
            bean.setDbCreatePwd(m_dbCreatePwd.getValue());
        }
        if (m_dbWorkUser.isVisible()) {
            bean.setDbWorkUser(m_dbWorkUser.getValue());
        }

        if (m_templateDb.isVisible()) {
            setDbProp("templateDb", m_templateDb.getValue());
        }

        if (m_dbWorkPwd.isVisible()) {
            bean.setDbWorkPwd(m_dbWorkPwd.getValue());
        }

        if (m_dbCreateConStr.isVisible()) {
            bean.setDbCreateConStr(m_dbCreateConStr.getValue());
        }

        if (m_dbName.isVisible()) {
            bean.setDb(m_dbName.getValue());
        }

        result.put("dbCreateConStr", new String[] {m_dbCreateConStr.getValue()});

        result.put("dbName", new String[] {bean.getDatabase()});
        result.put("dbProduct", new String[] {bean.getDatabase()});
        result.put("dbProvider", new String[] {"sql"});
        result.put("dbName", new String[] {m_dbName.getValue()});
        result.put("db", new String[] {bean.getDb()});
        result.put("createDb", new String[] {Boolean.toString(m_createDb.getValue().booleanValue())});
        result.put("createTables", new String[] {Boolean.toString(m_createTables.getValue().booleanValue())});
        result.put("jdbcDriver", new String[] {dbProp("driver")});
        result.put("templateDb", new String[] {dbProp("templateDb")});
        result.put("dbCreateUser", new String[] {bean.getDbCreateUser()});
        result.put("dbCreatePwd", new String[] {bean.getDbCreatePwd()});
        result.put("dbWorkUser", new String[] {bean.getDbWorkUser()});
        result.put("dbWorkPwd", new String[] {bean.getDbWorkPwd()});
        result.put("dbDefaultTablespace", new String[] {m_defaultTablespace.getValue()});
        result.put("dbTemporaryTablespace", new String[] {m_temporaryTablespace.getValue()});
        result.put("dbIndexTablespace", new String[] {m_indexTablespace.getValue()});
        // result.put("servletMapping", new String[] {getServeltMapping()});
        result.put("submit", new String[] {Boolean.TRUE.toString()});
        bean.setDbParamaters(result, bean.getDatabase(), null, null);

    }

    /**
     * Accesses a property from the DB configuration for the selected DB.
     *
     * @param name the name of the property
     * @return the value of the property
     */
    private String dbProp(String name) {

        String dbType = m_setupBean.getDatabase();
        Object prop = m_setupBean.getDatabaseProperties().get(dbType).get(dbType + "." + name);
        if (prop == null) {
            return "";
        }
        return prop.toString();
    }

    private void setDbProp(String key, String value) {

        String db = m_setupBean.getDatabase();
        m_setupBean.setDbProperty(db + "." + key, value);
    }

    /**
     * Sets the visibility of the given components to 'true' .
     *
     * @param components the components to show
     */
    private void setVisible(Component... components) {

        for (Component component : components) {
            component.setVisible(true);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy