org.cheetahplatform.common.logging.LoggingPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.cheetahplatform.common.logging.LoggingPreferencePage.java

Source

/*******************************************************************************
 * This file is provided under the terms of the Eclipse Public License 1.0. 
 * Any use, reproduction or distribution of the program
 * constitutes recipient's acceptance of this agreement.
 *******************************************************************************/

package org.cheetahplatform.common.logging;

import java.text.MessageFormat;

import org.cheetahplatform.common.Activator;
import org.cheetahplatform.common.CommonConstants;
import org.cheetahplatform.common.Messages;
import org.cheetahplatform.common.logging.db.ConnectionSetting;
import org.cheetahplatform.common.logging.db.DatabaseUtil;
import org.cheetahplatform.common.logging.db.IDatabaseConnector;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.RadioGroupFieldEditor;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;

/**
 * Preference page for configuring the logging of Alaska.
 * 
 * @author Jakob Pinggera <br>
 *         Michael Schier<br>
 *         Stefan Zugal <br>
 * 
 */
public class LoggingPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
    public static final String Id = "org.alaskasimulator.ui.LoggingPreferencePage"; //$NON-NLS-1$

    private StringFieldEditor uriFieldEditor;
    private StringFieldEditor userFieldEditor;
    private StringFieldEditor passwordFieldEditor;
    private Button testConnectionButton;

    private LoggingType loggingType;

    private StringFieldEditor portFieldEditor;
    private StringFieldEditor schemaFieldEditor;

    private RadioGroupFieldEditor loggingTypeFieldEditor;
    private IDatabaseConnector databaseConnector;

    private Button selectPredefinedConnectionButton;

    /**
     * Creates a new preference page.
     */
    public LoggingPreferencePage() {
        super(FieldEditorPreferencePage.GRID);

        databaseConnector = Activator.getDatabaseConnector();
    }

    /**
     * Sets the enabled state of the element, which are responsible for gathering data for the database url.
     * 
     * @param enabled
     *            <code>true</code> if the elements should be enabled, <code>false</code> otherwise
     */
    private void activateDatabaseElement(boolean enabled) {
        uriFieldEditor.getTextControl(getFieldEditorParent()).setEnabled(enabled);
        portFieldEditor.getTextControl(getFieldEditorParent()).setEnabled(enabled);
        userFieldEditor.getTextControl(getFieldEditorParent()).setEnabled(enabled);
        passwordFieldEditor.getTextControl(getFieldEditorParent()).setEnabled(enabled);
        schemaFieldEditor.getTextControl(getFieldEditorParent()).setEnabled(enabled);
        testConnectionButton.setEnabled(enabled);
        selectPredefinedConnectionButton.setEnabled(enabled);
    }

    @Override
    protected void createFieldEditors() {
        loggingTypeFieldEditor = new RadioGroupFieldEditor(CommonConstants.PREFERENCE_LOGGING_TYPE,
                Messages.LoggingPreferencePage_7, 2,
                new String[][] { { Messages.LoggingPreferencePage_8, CommonConstants.PREFERENCE_XML_LOGGING_TYPE },
                        { Messages.LoggingPreferencePage_9, CommonConstants.PREFERENCE_DB_LOGGING_TYPE } },
                getFieldEditorParent());
        addField(loggingTypeFieldEditor);

        uriFieldEditor = new StringFieldEditor(CommonConstants.PREFERENCE_HOST, Messages.LoggingPreferencePage_10,
                getFieldEditorParent());
        addField(uriFieldEditor);
        portFieldEditor = new StringFieldEditor(CommonConstants.PREFERENCE_PORT, Messages.LoggingPreferencePage_0,
                getFieldEditorParent());
        addField(portFieldEditor);
        userFieldEditor = new StringFieldEditor(CommonConstants.PREFERENCE_USER_DB_NAME,
                Messages.LoggingPreferencePage_11, getFieldEditorParent());
        addField(userFieldEditor);
        passwordFieldEditor = new StringFieldEditor(CommonConstants.PREFERENCE_PASSWORD,
                Messages.LoggingPreferencePage_12, getFieldEditorParent());
        passwordFieldEditor.getTextControl(getFieldEditorParent()).setEchoChar('*');
        addField(passwordFieldEditor);
        schemaFieldEditor = new StringFieldEditor(CommonConstants.PREFERENCE_SCHEMA,
                Messages.LoggingPreferencePage_1, getFieldEditorParent());
        addField(schemaFieldEditor);

        selectPredefinedConnectionButton = new Button(getFieldEditorParent(), SWT.NONE);
        selectPredefinedConnectionButton.setText("Select Predefined Connection...");
        selectPredefinedConnectionButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                selectPredefinedConnection();
            }
        });

        testConnectionButton = new Button(getFieldEditorParent(), SWT.NONE);
        testConnectionButton.setText(Messages.LoggingPreferencePage_2);
        testConnectionButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                testConnection();
            }
        });

        boolean dbLogging = CommonConstants.PREFERENCE_DB_LOGGING_TYPE
                .equals(getPreferenceStore().getString(CommonConstants.PREFERENCE_LOGGING_TYPE));
        if (dbLogging)
            loggingType = LoggingType.DATABASE;
        else
            loggingType = LoggingType.XML;
        activateDatabaseElement(dbLogging);
    }

    @Override
    public void init(IWorkbench workbench) {
        IPreferenceStore store = Activator.getDefault().getPreferenceStore();
        setPreferenceStore(store);
    }

    @Override
    public boolean performOk() {
        boolean result = super.performOk();

        if (LoggingType.DATABASE.equals(loggingType)) {
            databaseConnector.setDatabaseURL(DatabaseUtil.createDatabaseUrl(uriFieldEditor.getStringValue(),
                    portFieldEditor.getStringValue(), schemaFieldEditor.getStringValue()));
            databaseConnector.setDefaultCredentials(userFieldEditor.getStringValue(),
                    passwordFieldEditor.getStringValue());
            databaseConnector.setAdminCredentials(userFieldEditor.getStringValue(),
                    passwordFieldEditor.getStringValue());
        }

        Activator.getDefault().setLoggingType(loggingType);

        return result;
    }

    @Override
    public void propertyChange(PropertyChangeEvent event) {
        if (CommonConstants.PREFERENCE_DB_LOGGING_TYPE.equals(event.getNewValue())) {
            loggingType = LoggingType.DATABASE;
            activateDatabaseElement(true);
        } else if (CommonConstants.PREFERENCE_XML_LOGGING_TYPE.equals(event.getNewValue())) {
            loggingType = LoggingType.XML;
            activateDatabaseElement(false);
        }

        super.propertyChange(event);
    }

    protected void selectPredefinedConnection() {
        SelectPredefinedConnectionDialog dialog = new SelectPredefinedConnectionDialog(getShell());
        if (dialog.open() != Window.OK) {
            return;
        }

        ConnectionSetting connection = dialog.getConnection();
        uriFieldEditor.setStringValue(connection.getHost());
        portFieldEditor.setStringValue(connection.getPort());
        userFieldEditor.setStringValue(connection.getAdminUsername());
        passwordFieldEditor.setStringValue(connection.getAdminPassword());
        schemaFieldEditor.setStringValue(connection.getSchema());
        loggingTypeFieldEditor.setPreferenceName(CommonConstants.PREFERENCE_DB_LOGGING_TYPE);
    }

    /**
     * Tests the database connection.
     */
    protected void testConnection() {
        performApply();
        Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
        try {
            databaseConnector.getDatabaseConnection();
            databaseConnector.closeConnection();
            MessageDialog.openInformation(shell, Messages.LoggingPreferencePage_3,
                    Messages.LoggingPreferencePage_4);
        } catch (Exception e) {
            MessageDialog.openError(shell, Messages.LoggingPreferencePage_5,
                    MessageFormat.format(Messages.LoggingPreferencePage_6, e.getMessage()));
        }
    }
}