org.eclipse.servicesregistry.ui.internal.prefpage.SrPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.servicesregistry.ui.internal.prefpage.SrPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2012 SAP AG and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.servicesregistry.ui.internal.prefpage;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.servicesregistry.core.config.IServicesRegistrySystem;
import org.eclipse.servicesregistry.core.config.persistency.ConfigCreationCanceledException;
import org.eclipse.servicesregistry.core.config.persistency.ConfigLoadException;
import org.eclipse.servicesregistry.core.config.persistency.ConfigStoreException;
import org.eclipse.servicesregistry.core.config.persistency.IConfigStorage;
import org.eclipse.servicesregistry.core.config.persistency.IPreferencesController;
import org.eclipse.servicesregistry.core.config.persistency.IUserCredentialsHandler;
import org.eclipse.servicesregistry.core.config.persistency.SrConfigStorageFactory;
import org.eclipse.servicesregistry.core.internal.logging.ILogger;
import org.eclipse.servicesregistry.core.internal.logging.Logger;
import org.eclipse.servicesregistry.ui.internal.text.SrUiMessages;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * Preference page for configuring connections to the services registry
 * 
 * @author Danail Branekov
 */
public class SrPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IShellAware {
    public final static int YES_BUTTON = 0;
    private static final int CONNECTION_DISPLAY_NAME_COLUMN_INDEX = 0;
    private ILogger logger = Logger.instance();
    private final IConfigStorage configStorage;

    private IPreferencesController controller;

    private Button addConfigButton;
    private Button editConfigButton;
    private Button deleteConfigButton;
    private TableViewer configsTableViewer;

    public SrPreferencePage() {
        super();
        noDefaultAndApplyButton();
        configStorage = SrConfigStorageFactory.getDefault();
    }

    @Override
    protected Control createContents(Composite parent) {
        final Composite preferencesComposite = new Composite(parent, SWT.NONE);
        preferencesComposite.setLayout(new GridLayout(5, true));

        createPreferencesTable(preferencesComposite);
        createPreferencesButtons(preferencesComposite);

        return preferencesComposite;
    }

    private void createPreferencesButtons(final Composite parent) {
        addConfigButton = new Button(parent, SWT.PUSH);
        addConfigButton.setText(SrUiMessages.SR_PREFERENCE_ADD_CONFIG_BUTTON);
        addConfigButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        addConfigButton.addSelectionListener(new AddConfigSelectionListener());

        editConfigButton = new Button(parent, SWT.PUSH);
        editConfigButton.setText(SrUiMessages.SR_PREFERENCE_EDIT_CONFIG_BUTTON);
        editConfigButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        editConfigButton.addSelectionListener(new EditConfigSelectionListener());
        editConfigButton.setEnabled(false);

        deleteConfigButton = new Button(parent, SWT.PUSH);
        deleteConfigButton.setText(SrUiMessages.SR_PREFERENCE_DELETE_CONFIG_BUTTON);
        deleteConfigButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
        deleteConfigButton.addSelectionListener(new DeleteConfigSelectionListener());
        deleteConfigButton.setEnabled(false);
    }

    private void createPreferencesTable(final Composite parent) {
        configsTableViewer = new TableViewer(parent,
                SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.RESIZE | SWT.SINGLE);
        configsTableViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 3));

        final Table prefTable = configsTableViewer.getTable();
        prefTable.setLinesVisible(true);
        prefTable.setHeaderVisible(true);
        final TableLayout tableLayout = new TableLayout();
        prefTable.setLayout(tableLayout);

        createDisplayNameColumn(configsTableViewer, tableLayout);

        configsTableViewer.setContentProvider(new SrConfigContentProvider(this.controller));
        configsTableViewer.setLabelProvider(new SrConfigLabelProvider());
        configsTableViewer.setInput(this.controller);
        configsTableViewer.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                if (!event.getSelection().isEmpty()) {
                    deleteConfigButton.setEnabled(true);
                    editConfigButton.setEnabled(true);
                } else {
                    deleteConfigButton.setEnabled(false);
                    editConfigButton.setEnabled(false);
                }

            }
        });
        ;
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible) {
            configsTableViewer.refresh();
        }
    }

    private void createDisplayNameColumn(final TableViewer parentViewer, final TableLayout parentTableLayout) {
        final TableViewerColumn displayNameTableColumn = new TableViewerColumn(parentViewer, SWT.LEFT,
                CONNECTION_DISPLAY_NAME_COLUMN_INDEX);
        displayNameTableColumn.getColumn().setText(SrUiMessages.SR_PREFERENCE_TABLE_DISPLAY_NAME_COLUMN_TITLE);
        final TableViewerColumn displayHostTableColumn = new TableViewerColumn(parentViewer, SWT.LEFT);
        displayHostTableColumn.getColumn().setText(SrUiMessages.SR_PREFERENCE_TABLE_HOST_COLUMN_TITLE);
        final TableViewerColumn displayPortTableColumn = new TableViewerColumn(parentViewer, SWT.LEFT);
        displayPortTableColumn.getColumn().setText(SrUiMessages.SR_PREFERENCE_TABLE_PORT_COLUMN_TITLE);

        final ColumnWeightData displayNameColumnData = new ColumnWeightData(30);
        final ColumnWeightData displayHostColumnData = new ColumnWeightData(30);
        final ColumnWeightData displayPortColumnData = new ColumnWeightData(30);

        parentTableLayout.addColumnData(displayNameColumnData);
        parentTableLayout.addColumnData(displayHostColumnData);
        parentTableLayout.addColumnData(displayPortColumnData);
    }

    public void init(IWorkbench workbench) {
        this.controller = createPreferencesController();
    }

    protected IPreferencesController createPreferencesController() {
        final IUserCredentialsHandler existingCredentialsHandler = createExistingUserCredentialsHandler();
        try {
            return new SrPreferencesController(this, configStorage, existingCredentialsHandler);
        } catch (ConfigLoadException e) {
            logger.logError(e.getMessage(), e);
            throw new RuntimeException(e);
        }
    }

    protected IUserCredentialsHandler createExistingUserCredentialsHandler() {
        return new IUserCredentialsHandler() {

            @Override
            public Buttons handleExistingCredentials() {
                switch (showUserCredentialsExistDialog()) {
                case 0:
                    return Buttons.REUSE;
                case 1:
                    return Buttons.OVERRIDE;
                default:
                    return null;
                }
            }

        };
    }

    protected int showUserCredentialsExistDialog() {
        return new MessageDialog(getShell(), SrUiMessages.SrPreferencePage_IdenticalCredentialsDialogTitle, null,
                SrUiMessages.SrPreferencePage_IdenticalCredentialsDialogMessage, MessageDialog.QUESTION,
                new String[] { SrUiMessages.SrPreferencePage_ReuseButton,
                        SrUiMessages.SrPreferencePage_OverrideButton },
                SWT.ICON_QUESTION).open();
    }

    @Override
    public boolean performOk() {
        super.performOk();
        try {
            this.controller.storeConfigurations();
            return true;
        } catch (ConfigStoreException e) {
            logger.logError(e.getMessage(), e);
        } catch (ConfigLoadException e) {
            logger.logError(e.getMessage(), e);
        }

        return false;
    }

    private IServicesRegistrySystem getSelectedConfig() {
        if (configsTableViewer.getSelection().isEmpty()) {
            return null;
        }

        return (IServicesRegistrySystem) ((IStructuredSelection) configsTableViewer.getSelection())
                .getFirstElement();
    }

    private class AddConfigSelectionListener extends SelectionAdapter implements SelectionListener {
        public void widgetSelected(SelectionEvent e) {
            try {
                controller.createNewConfiguration();
            } catch (ConfigCreationCanceledException e1) {
                return;
            }
            configsTableViewer.refresh();
        }
    }

    private class EditConfigSelectionListener extends SelectionAdapter implements SelectionListener {
        public void widgetSelected(SelectionEvent e) {
            final IServicesRegistrySystem config = getSelectedConfig();
            if (config == null) {
                return;
            }

            controller.editConfiguration(config);
            configsTableViewer.refresh();
        }
    }

    private class DeleteConfigSelectionListener extends SelectionAdapter implements SelectionListener {
        public void widgetSelected(SelectionEvent e) {
            final IServicesRegistrySystem config = getSelectedConfig();
            if (config == null || showConfirmDialog(config) != YES_BUTTON) {
                return;
            }

            controller.deleteConfiguration(config);
            configsTableViewer.refresh();
        }
    }

    protected int showConfirmDialog(final IServicesRegistrySystem config) {
        String description;
        if (config.areCredentialsStored())
            description = SrUiMessages.SrPreferencesController_DeleteConfigWithAuthDetails;
        else
            description = SrUiMessages.SrPreferencesController_DeleteConfigWithoutAuthDetails;
        return new MessageDialog(getShell(), SrUiMessages.SrPreferencesController_DeleteConfigConfirmTitle, null,
                description, MessageDialog.QUESTION, new String[] { SrUiMessages.SrPreferencesController_YesButton,
                        SrUiMessages.SrPreferencesController_NoButton },
                SWT.ICON_QUESTION).open();

    }
}