org.jcryptool.crypto.keystore.ui.KeystoreViewer.java Source code

Java tutorial

Introduction

Here is the source code for org.jcryptool.crypto.keystore.ui.KeystoreViewer.java

Source

// -----BEGIN DISCLAIMER-----
/**************************************************************************************************
 * Copyright (c) 2013, 2014 JCrypTool Team and Contributors
 * 
 * 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
 *************************************************************************************************/
// -----END DISCLAIMER-----
package org.jcryptool.crypto.keystore.ui;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.jcryptool.core.logging.utils.LogUtil;
import org.jcryptool.crypto.keystore.KeyStorePlugin;
import org.jcryptool.crypto.keystore.ui.views.KeyDragListener;
import org.jcryptool.crypto.keystore.ui.views.nodes.ContactManager;
import org.jcryptool.crypto.keystore.ui.views.nodes.keys.KeyPairNode;
import org.jcryptool.crypto.keystore.ui.views.providers.KeyStoreViewContentProvider;
import org.jcryptool.crypto.keystore.ui.views.providers.KeyStoreViewLabelProvider;

/**
 * @author Anatoli Barski
 * @author Holger Friedrich (replaced an Action with a Handler)
 * 
 */
public class KeystoreViewer extends TreeViewer {

    private static final int DRAG_OPS = DND.DROP_COPY | DND.DROP_DEFAULT | DND.DROP_LINK | DND.DROP_MOVE;
    private final Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() };
    private KeyDragListener dragListener;

    private AbstractHandler doubleClickHandler;

    /**
     * Create the composite.
     * 
     * @param parent
     * @wbp.parser.entryPoint
     */
    public KeystoreViewer(Composite parent) {
        super(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);

        GridData gridData = new GridData();
        gridData.horizontalAlignment = GridData.FILL;
        gridData.verticalAlignment = GridData.FILL;
        gridData.grabExcessHorizontalSpace = true;
        gridData.grabExcessVerticalSpace = true;
        this.getTree().setLayoutData(gridData);

        dragListener = new KeyDragListener(this);
        this.addDragSupport(DRAG_OPS, transfers, dragListener);

        setLabelProvider(new KeyStoreViewLabelProvider());
        setContentProvider(new KeyStoreViewContentProvider(this));

        hookActions();

        this.setInput("input does not matter but triggers initialization");
    }

    public void reload() {
        ContactManager contactManager = ContactManager.getInstance();
        contactManager.resetInvisibleRoot();
        contactManager.initTreeModel();
        // contactManager.initTreemodel() results in an updated Select Key dialog,
        // but the TreeViewer still has not been updated -- now what?
        // as it turns out, the setContentprovider() needs to be moved to the end of the method
        setContentProvider(new KeyStoreViewContentProvider(this));
    }

    /**
     * Adds a listener, which will fold or unfold the nodes.
     */
    private void hookActions() {
        doubleClickHandler = new AbstractHandler() {
            @Override
            public Object execute(ExecutionEvent event) {
                ISelection selection = getSelection();
                Object obj = ((IStructuredSelection) selection).getFirstElement();

                if (obj instanceof org.jcryptool.crypto.keystore.ui.views.nodes.TreeNode) {
                    if (getTree().getSelection()[0].getExpanded()) {
                        collapseToLevel(obj, 1);
                    } else {
                        expandToLevel(obj, 1);
                    }
                } else if (obj instanceof KeyPairNode) {
                    // OperationsManager.getInstance().algorithmCalled(((AlgorithmNode) obj).getAlgorithm());
                }
                return (null);
            }
        };

        getControl().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseDoubleClick(final MouseEvent e) {
                if (e.button == 1) { // only left button double clicks
                    try {
                        doubleClickHandler.execute(null); // run assigned action
                    } catch (ExecutionException ex) {
                        LogUtil.logError(KeyStorePlugin.PLUGIN_ID, ex);
                    }
                }
            }

        });

    }
}