org.eclipse.scada.sec.ui.providers.pkcs12.PreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.scada.sec.ui.providers.pkcs12.PreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2013 Jens Reimann 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:
 *     Jens Reimann - initial API and implementation
 *     IBH SYSTEMS GmbH - use new selection helper
 *******************************************************************************/
package org.eclipse.scada.sec.ui.providers.pkcs12;

import java.util.List;

import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.scada.sec.ui.DisplayCallbackHandler;
import org.eclipse.scada.sec.ui.providers.KeyProvider;
import org.eclipse.scada.sec.ui.providers.KeyTreeViewer;
import org.eclipse.scada.sec.ui.providers.Locked;
import org.eclipse.scada.ui.utils.SelectionHelper;
import org.eclipse.scada.ui.utils.status.StatusHelper;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

public class PreferencePage extends org.eclipse.jface.preference.PreferencePage
        implements IWorkbenchPreferencePage {

    private FactoryImpl factory;

    private KeyTreeViewer viewer;

    private Button addButton;

    private Button removeButton;

    private List<KeyProvider> selectedProviders;

    private Button unlockButton;

    private List<Locked> locked;

    @Override
    public void init(final IWorkbench workbench) {
    }

    @Override
    protected Control createContents(final Composite parent) {
        final Composite wrapper = new Composite(parent, SWT.NONE);
        wrapper.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        wrapper.setLayout(new GridLayout(1, false));

        this.factory = new FactoryImpl();
        this.factory.init(SWTObservables.getRealm(parent.getDisplay()));

        this.viewer = new KeyTreeViewer(wrapper);
        this.viewer.setInput(this.factory);
        this.viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        final Composite buttons = new Composite(wrapper, SWT.NONE);
        buttons.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        buttons.setLayout(new RowLayout(SWT.HORIZONTAL));

        this.addButton = new Button(buttons, SWT.PUSH);
        this.addButton.setText("Add");
        this.addButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                handleAdd();
            }
        });

        this.removeButton = new Button(buttons, SWT.PUSH);
        this.removeButton.setText("Remove");
        this.removeButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                handleRemove();
            }
        });

        this.unlockButton = new Button(buttons, SWT.PUSH);
        this.unlockButton.setText("Unlock");
        this.unlockButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(final SelectionEvent e) {
                handleUnlock();
            }
        });

        this.viewer.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(final SelectionChangedEvent event) {
                setSelection(event.getSelection());
            }
        });

        setSelection(StructuredSelection.EMPTY);

        return wrapper;
    }

    protected void handleUnlock() {
        try {
            for (final Locked l : this.locked) {
                l.unlock(new DisplayCallbackHandler(getShell(), "Unlock", "Unlock key element"));
            }
        } catch (final Exception e) {
            ErrorDialog.openError(getShell(), "Error", null, StatusHelper.convertStatus(Activator.PLUGIN_ID, e));
        }
    }

    protected void setSelection(final ISelection selection) {
        this.selectedProviders = SelectionHelper.list(selection, KeyProvider.class);
        this.locked = SelectionHelper.list(selection, Locked.class);

        this.unlockButton.setEnabled(!this.locked.isEmpty());
        this.removeButton.setEnabled(!this.selectedProviders.isEmpty());
    }

    protected void handleRemove() {
        final MultiStatus ms = new MultiStatus(Activator.PLUGIN_ID, 0, "Removing key providers", null);

        for (final KeyProvider provider : this.selectedProviders) {
            try {
                this.factory.remove(provider);
            } catch (final Exception e) {
                ms.add(StatusHelper.convertStatus(Activator.PLUGIN_ID, e));
            }
        }
        if (!ms.isOK()) {
            ErrorDialog.openError(getShell(), "Error", null, ms);
        }
    }

    protected void handleAdd() {
        final FileDialog dlg = new FileDialog(getShell(), SWT.OPEN);
        final String result = dlg.open();
        if (result != null) {
            try {
                this.factory.addFile(result);
            } catch (final Exception e) {
                ErrorDialog.openError(getShell(), "Error", "Failed to add file",
                        StatusHelper.convertStatus(Activator.PLUGIN_ID, e));
            }
        }
    }
}