com.archimatetool.editor.preferences.ConnectionsPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.editor.preferences.ConnectionsPreferencePage.java

Source

/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.editor.preferences;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;

import com.archimatetool.editor.ui.ArchimateLabelProvider;

/**
 * Connections Preference Page
 * 
 * @author Phillip Beauvoir
 */
public class ConnectionsPreferencePage extends PreferencePage
        implements IWorkbenchPreferencePage, IPreferenceConstants {

    private static String HELP_ID = "com.archimatetool.help.prefsConnections"; //$NON-NLS-1$

    private Button fDoAnimateMagicConnectorButton;
    private Button fMagicConnectorPolarity1Button;
    private Button fMagicConnectorPolarity2Button;

    private Button fAllowCircularConnectionsButton;
    private Button fDoAntiAliasButton;
    private Button fUseOrthogonalAnchorButton;
    private Button fUseLineCurvesButton;
    private Button fUseLineJumpsButton;

    private Button fUseNestedConnectionsButton;
    private Button fCreateRelationWhenAddingNewElementButton;
    private Button fCreateRelationWhenAddingModelTreeElementButton;
    private Button fCreateRelationWhenMovingElement;

    private CheckboxTableViewer fTableViewerNewRelations, fTableViewerHiddenRelations;

    private TabFolder fTabFolder;

    public ConnectionsPreferencePage() {
        setPreferenceStore(Preferences.STORE);
    }

    @Override
    public void init(IWorkbench workbench) {
    }

    @Override
    protected Control createContents(Composite parent) {
        // Help
        PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HELP_ID);

        fTabFolder = new TabFolder(parent, SWT.NONE);

        Composite client = new Composite(fTabFolder, SWT.NULL);
        client.setLayout(new GridLayout());

        TabItem item = new TabItem(fTabFolder, SWT.NONE);
        item.setText(Messages.ConnectionsPreferencePage_4);
        item.setControl(client);

        // Magic Connector
        Group magicConnectorGroup = new Group(client, SWT.NULL);
        magicConnectorGroup.setText(Messages.ConnectionsPreferencePage_0);
        magicConnectorGroup.setLayout(new GridLayout());
        magicConnectorGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        fDoAnimateMagicConnectorButton = new Button(magicConnectorGroup, SWT.CHECK);
        fDoAnimateMagicConnectorButton.setText(Messages.ConnectionsPreferencePage_1);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        fDoAnimateMagicConnectorButton.setLayoutData(gd);

        fMagicConnectorPolarity1Button = new Button(magicConnectorGroup, SWT.RADIO);
        fMagicConnectorPolarity1Button.setText(Messages.ConnectionsPreferencePage_2);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fMagicConnectorPolarity1Button.setLayoutData(gd);

        fMagicConnectorPolarity2Button = new Button(magicConnectorGroup, SWT.RADIO);
        fMagicConnectorPolarity2Button.setText(Messages.ConnectionsPreferencePage_3);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fMagicConnectorPolarity2Button.setLayoutData(gd);

        // Drawing
        Group connectorGroup = new Group(client, SWT.NULL);
        connectorGroup.setText(Messages.ConnectionsPreferencePage_17);
        connectorGroup.setLayout(new GridLayout());
        connectorGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        fDoAntiAliasButton = new Button(connectorGroup, SWT.CHECK);
        fDoAntiAliasButton.setText(Messages.ConnectionsPreferencePage_13);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fDoAntiAliasButton.setLayoutData(gd);

        fUseOrthogonalAnchorButton = new Button(connectorGroup, SWT.CHECK);
        fUseOrthogonalAnchorButton.setText(Messages.ConnectionsPreferencePage_14);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fUseOrthogonalAnchorButton.setLayoutData(gd);

        fUseLineCurvesButton = new Button(connectorGroup, SWT.CHECK);
        fUseLineCurvesButton.setText(Messages.ConnectionsPreferencePage_15);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fUseLineCurvesButton.setLayoutData(gd);

        fUseLineJumpsButton = new Button(connectorGroup, SWT.CHECK);
        fUseLineJumpsButton.setText(Messages.ConnectionsPreferencePage_16);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fUseLineJumpsButton.setLayoutData(gd);

        // Rules
        Group rulesGroup = new Group(client, SWT.NULL);
        rulesGroup.setText(Messages.ConnectionsPreferencePage_18);
        rulesGroup.setLayout(new GridLayout());
        rulesGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        fAllowCircularConnectionsButton = new Button(rulesGroup, SWT.CHECK);
        fAllowCircularConnectionsButton.setText(Messages.ConnectionsPreferencePage_5);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fAllowCircularConnectionsButton.setLayoutData(gd);

        // ARM

        Composite client2 = new Composite(fTabFolder, SWT.NULL);
        client2.setLayout(new GridLayout());

        TabItem item2 = new TabItem(fTabFolder, SWT.NONE);
        item2.setText(Messages.ConnectionsPreferencePage_19);
        item2.setControl(client2);

        // Nested Connections
        Label label = new Label(client2, SWT.NONE);
        label.setText(Messages.ConnectionsPreferencePage_6);

        fUseNestedConnectionsButton = new Button(client2, SWT.CHECK);
        fUseNestedConnectionsButton.setText(Messages.ConnectionsPreferencePage_7);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fUseNestedConnectionsButton.setLayoutData(gd);
        fUseNestedConnectionsButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                enableNestedConnectionComponents();
            }
        });

        fCreateRelationWhenAddingNewElementButton = new Button(client2, SWT.CHECK);
        fCreateRelationWhenAddingNewElementButton.setText(Messages.ConnectionsPreferencePage_8);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fCreateRelationWhenAddingNewElementButton.setLayoutData(gd);
        fCreateRelationWhenAddingNewElementButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                enableNestedConnectionComponents();
            }
        });

        fCreateRelationWhenAddingModelTreeElementButton = new Button(client2, SWT.CHECK);
        fCreateRelationWhenAddingModelTreeElementButton.setText(Messages.ConnectionsPreferencePage_9);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fCreateRelationWhenAddingModelTreeElementButton.setLayoutData(gd);
        fCreateRelationWhenAddingModelTreeElementButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                enableNestedConnectionComponents();
            }
        });

        fCreateRelationWhenMovingElement = new Button(client2, SWT.CHECK);
        fCreateRelationWhenMovingElement.setText(Messages.ConnectionsPreferencePage_10);
        gd = new GridData(GridData.FILL_HORIZONTAL);
        fCreateRelationWhenMovingElement.setLayoutData(gd);
        fCreateRelationWhenMovingElement.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                enableNestedConnectionComponents();
            }
        });

        label = new Label(client2, SWT.NONE);
        label.setText(Messages.ConnectionsPreferencePage_11);
        fTableViewerNewRelations = createRelationsTable(client2);

        label = new Label(client2, SWT.NONE);
        label.setText(Messages.ConnectionsPreferencePage_12);
        fTableViewerHiddenRelations = createRelationsTable(client2);

        setValues();

        return fTabFolder;
    }

    private CheckboxTableViewer createRelationsTable(Composite parent) {
        final CheckboxTableViewer viewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
        GridData gd = new GridData(GridData.FILL_HORIZONTAL);
        gd.heightHint = 80;
        viewer.getTable().setLayoutData(gd);

        viewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                return ArchimateLabelProvider.INSTANCE.getDefaultName((EClass) element);
            }

            @Override
            public Image getImage(Object element) {
                return ArchimateLabelProvider.INSTANCE.getImage(element);
            }
        });

        viewer.setContentProvider(new IStructuredContentProvider() {
            @Override
            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            @Override
            public void dispose() {
            }

            @Override
            public Object[] getElements(Object inputElement) {
                return ConnectionPreferences.RELATION_KEYMAP.keySet().toArray();
            }
        });

        viewer.setCheckStateProvider(new ICheckStateProvider() {
            @Override
            public boolean isGrayed(Object element) {
                return false;
            }

            @Override
            public boolean isChecked(Object element) {
                int value = (Integer) viewer.getInput();
                return (value & ConnectionPreferences.RELATION_KEYMAP.get(element)) != 0;
            }
        });

        return viewer;
    }

    private void enableNestedConnectionComponents() {
        boolean enabled = fUseNestedConnectionsButton.getSelection();

        fCreateRelationWhenAddingNewElementButton.setEnabled(enabled);
        fCreateRelationWhenAddingModelTreeElementButton.setEnabled(enabled);
        fCreateRelationWhenMovingElement.setEnabled(enabled);

        fTableViewerNewRelations.getTable()
                .setEnabled(enabled && (fCreateRelationWhenAddingNewElementButton.getSelection()
                        || fCreateRelationWhenAddingModelTreeElementButton.getSelection()
                        || fCreateRelationWhenMovingElement.getSelection()));

        fTableViewerHiddenRelations.getTable().setEnabled(enabled);
    }

    private void setValues() {
        fDoAnimateMagicConnectorButton.setSelection(getPreferenceStore().getBoolean(ANIMATE_MAGIC_CONNECTOR));
        fMagicConnectorPolarity1Button.setSelection(getPreferenceStore().getBoolean(MAGIC_CONNECTOR_POLARITY));
        fMagicConnectorPolarity2Button.setSelection(!getPreferenceStore().getBoolean(MAGIC_CONNECTOR_POLARITY));

        fAllowCircularConnectionsButton.setSelection(getPreferenceStore().getBoolean(ALLOW_CIRCULAR_CONNECTIONS));
        fDoAntiAliasButton.setSelection(getPreferenceStore().getBoolean(ANTI_ALIAS));
        fUseOrthogonalAnchorButton.setSelection(getPreferenceStore().getBoolean(USE_ORTHOGONAL_ANCHOR));
        fUseLineCurvesButton.setSelection(getPreferenceStore().getBoolean(USE_LINE_CURVES));
        fUseLineJumpsButton.setSelection(getPreferenceStore().getBoolean(USE_LINE_JUMPS));

        fUseNestedConnectionsButton.setSelection(getPreferenceStore().getBoolean(USE_NESTED_CONNECTIONS));
        fCreateRelationWhenAddingNewElementButton.setSelection(
                getPreferenceStore().getBoolean(CREATE_RELATION_WHEN_ADDING_NEW_ELEMENT_TO_CONTAINER));
        fCreateRelationWhenAddingModelTreeElementButton.setSelection(
                getPreferenceStore().getBoolean(CREATE_RELATION_WHEN_ADDING_MODEL_TREE_ELEMENT_TO_CONTAINER));
        fCreateRelationWhenMovingElement
                .setSelection(getPreferenceStore().getBoolean(CREATE_RELATION_WHEN_MOVING_ELEMENT_TO_CONTAINER));

        fTableViewerNewRelations.setInput(getPreferenceStore().getInt(NEW_RELATIONS_TYPES));
        fTableViewerHiddenRelations.setInput(getPreferenceStore().getInt(HIDDEN_RELATIONS_TYPES));

        enableNestedConnectionComponents();
    }

    @Override
    public boolean performOk() {
        getPreferenceStore().setValue(ANIMATE_MAGIC_CONNECTOR, fDoAnimateMagicConnectorButton.getSelection());
        getPreferenceStore().setValue(MAGIC_CONNECTOR_POLARITY, fMagicConnectorPolarity1Button.getSelection());

        getPreferenceStore().setValue(ALLOW_CIRCULAR_CONNECTIONS, fAllowCircularConnectionsButton.getSelection());
        getPreferenceStore().setValue(ANTI_ALIAS, fDoAntiAliasButton.getSelection());
        getPreferenceStore().setValue(USE_ORTHOGONAL_ANCHOR, fUseOrthogonalAnchorButton.getSelection());
        getPreferenceStore().setValue(USE_LINE_CURVES, fUseLineCurvesButton.getSelection());
        getPreferenceStore().setValue(USE_LINE_JUMPS, fUseLineJumpsButton.getSelection());

        getPreferenceStore().setValue(USE_NESTED_CONNECTIONS, fUseNestedConnectionsButton.getSelection());
        getPreferenceStore().setValue(CREATE_RELATION_WHEN_ADDING_NEW_ELEMENT_TO_CONTAINER,
                fCreateRelationWhenAddingNewElementButton.getSelection());
        getPreferenceStore().setValue(CREATE_RELATION_WHEN_ADDING_MODEL_TREE_ELEMENT_TO_CONTAINER,
                fCreateRelationWhenAddingModelTreeElementButton.getSelection());
        getPreferenceStore().setValue(CREATE_RELATION_WHEN_MOVING_ELEMENT_TO_CONTAINER,
                fCreateRelationWhenMovingElement.getSelection());

        // Refresh the connection preferences *before* setting (which sends a notification)
        ConnectionPreferences.reset();

        int value = 0;
        for (Object checked : fTableViewerNewRelations.getCheckedElements()) {
            value |= ConnectionPreferences.RELATION_KEYMAP.get(checked);
        }
        getPreferenceStore().setValue(NEW_RELATIONS_TYPES, value);

        value = 0;
        for (Object checked : fTableViewerHiddenRelations.getCheckedElements()) {
            value |= ConnectionPreferences.RELATION_KEYMAP.get(checked);
        }
        getPreferenceStore().setValue(HIDDEN_RELATIONS_TYPES, value);

        return true;
    }

    @Override
    protected void performDefaults() {
        switch (fTabFolder.getSelectionIndex()) {
        case 0:
            performConnectionsDefaults();
            break;

        case 1:
            performARMDefaults();
            break;

        default:
            break;
        }

        super.performDefaults();
    }

    private void performConnectionsDefaults() {
        fDoAnimateMagicConnectorButton
                .setSelection(getPreferenceStore().getDefaultBoolean(ANIMATE_MAGIC_CONNECTOR));
        fMagicConnectorPolarity1Button
                .setSelection(getPreferenceStore().getDefaultBoolean(MAGIC_CONNECTOR_POLARITY));
        fMagicConnectorPolarity2Button
                .setSelection(!getPreferenceStore().getDefaultBoolean(MAGIC_CONNECTOR_POLARITY));

        fAllowCircularConnectionsButton
                .setSelection(getPreferenceStore().getDefaultBoolean(ALLOW_CIRCULAR_CONNECTIONS));
        fDoAntiAliasButton.setSelection(getPreferenceStore().getDefaultBoolean(ANTI_ALIAS));
        fUseOrthogonalAnchorButton.setSelection(getPreferenceStore().getDefaultBoolean(USE_ORTHOGONAL_ANCHOR));
        fUseLineCurvesButton.setSelection(getPreferenceStore().getDefaultBoolean(USE_LINE_CURVES));
        fUseLineJumpsButton.setSelection(getPreferenceStore().getDefaultBoolean(USE_LINE_JUMPS));
    }

    private void performARMDefaults() {
        fUseNestedConnectionsButton.setSelection(getPreferenceStore().getDefaultBoolean(USE_NESTED_CONNECTIONS));
        fCreateRelationWhenAddingNewElementButton.setSelection(
                getPreferenceStore().getDefaultBoolean(CREATE_RELATION_WHEN_ADDING_NEW_ELEMENT_TO_CONTAINER));
        fCreateRelationWhenAddingModelTreeElementButton.setSelection(getPreferenceStore()
                .getDefaultBoolean(CREATE_RELATION_WHEN_ADDING_MODEL_TREE_ELEMENT_TO_CONTAINER));
        fCreateRelationWhenMovingElement.setSelection(
                getPreferenceStore().getDefaultBoolean(CREATE_RELATION_WHEN_MOVING_ELEMENT_TO_CONTAINER));

        fTableViewerNewRelations.setInput(getPreferenceStore().getDefaultInt(NEW_RELATIONS_TYPES));
        fTableViewerHiddenRelations.setInput(getPreferenceStore().getDefaultInt(HIDDEN_RELATIONS_TYPES));

        enableNestedConnectionComponents();
    }
}