org.chaupal.jp2p.ui.jxta.peergroup.PeerGroupViewPart.java Source code

Java tutorial

Introduction

Here is the source code for org.chaupal.jp2p.ui.jxta.peergroup.PeerGroupViewPart.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Chaupal.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Apache License, Version 2.0
 * which accompanies this distribution, and is available at
 * http://www.apache.org/licenses/LICENSE-2.0.html
 *******************************************************************************/
package org.chaupal.jp2p.ui.jxta.peergroup;

import java.util.Map;
import java.util.Properties;
import java.util.Stack;

import net.jp2p.container.utils.INode;
import net.jp2p.container.utils.SimpleNode;
import net.jp2p.container.utils.StringStyler;
import net.jp2p.jxta.peergroup.PeerGroupNode;
import net.jp2p.jxta.peergroup.PeerGroupPropertySource.PeerGroupProperties;
import net.jxta.document.Advertisement;
import net.jxta.peergroup.PeerGroup;

//import org.chaupal.jp2p.ui.jxta.advertisement.AdvertisementComposite;
import org.chaupal.jp2p.ui.jxta.view.AbstractJp2pServiceViewPart;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.swt.custom.SashForm;

import org.eclipse.swt.widgets.Table;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.layout.TreeColumnLayout;
import org.eclipse.swt.layout.FillLayout;

public class PeerGroupViewPart extends AbstractJp2pServiceViewPart<INode<PeerGroup, PeerGroup>> {

    public static final String ID = "org.chaupal.jp2p.ui.peergroup.view"; //$NON-NLS-1$
    public static final String S_PEERGROUP_VIEWER = "Peergroup Viewer";

    static enum PeerGroupColumns {
        NAME, VALUE;

        @Override
        public String toString() {
            return StringStyler.prettyString(super.toString());
        }
    }

    private final FormToolkit toolkit = new FormToolkit(Display.getCurrent());

    private TableViewer tableViewer;
    private StyledText styledText;

    private Table table;
    private SashForm sashForm_1;
    private Composite composite;
    private Tree tree;
    private TreeViewer treeViewer;
    private PeerGroupViewPart viewpart;

    private ISelectionListener listener = new ISelectionListener() {
        @SuppressWarnings("unchecked")
        @Override
        public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
            if (!(sourcepart.equals(viewpart)))
                return;
            if (selection instanceof TreeSelection) {
                TreeSelection ss = (TreeSelection) selection;
                Object element = ss.getFirstElement();

                //We check for service decorators coming from the service navigator
                if (!(element instanceof SimpleNode<?, ?>))
                    return;
                SimpleNode<PeerGroup, PeerGroup> node = (SimpleNode<PeerGroup, PeerGroup>) element;
                setInput(node);
                return;
            }
            if (selection instanceof StructuredSelection) {
                StructuredSelection ss = (StructuredSelection) selection;
                Object element = ss.getFirstElement();
                if ((element == null) || (!(element instanceof Advertisement)))
                    return;
                styledText.setText(element.toString());
            }
        }
    };
    private Composite composite_1;
    //private AdvertisementComposite adv_comp;

    public PeerGroupViewPart() {
        super(S_PEERGROUP_VIEWER);
        this.viewpart = this;
    }

    @Override
    protected void onCreatePartControl(Composite parent) {
        Composite container = new Composite(parent, SWT.BORDER);
        container.setLayout(new FillLayout(SWT.HORIZONTAL));

        sashForm_1 = new SashForm(container, SWT.NONE);
        toolkit.adapt(sashForm_1);
        toolkit.paintBordersFor(sashForm_1);

        composite = new Composite(sashForm_1, SWT.BORDER);
        toolkit.adapt(composite);
        toolkit.paintBordersFor(composite);
        composite.setLayout(new TreeColumnLayout());

        treeViewer = new TreeViewer(composite, SWT.NONE);
        treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
        treeViewer.setContentProvider(new PeerGroupContentProvider());
        treeViewer.setLabelProvider(new PeerGroupLabelProvider());
        tree = treeViewer.getTree();
        tree.setHeaderVisible(true);
        toolkit.paintBordersFor(tree);

        composite_1 = new Composite(sashForm_1, SWT.NONE);
        toolkit.adapt(composite_1);
        toolkit.paintBordersFor(composite_1);
        composite_1.setLayout(new FillLayout(SWT.HORIZONTAL));
        SashForm sashForm = new SashForm(composite_1, SWT.VERTICAL);
        Composite composite_2 = new Composite(sashForm, SWT.NONE);
        composite_2.setLayout(new FillLayout(SWT.HORIZONTAL));

        Composite tableComposite = new Composite(composite_2, SWT.NONE);
        TableColumnLayout tableColumnLayout = new TableColumnLayout();
        tableComposite.setLayout(tableColumnLayout);

        tableViewer = new TableViewer(tableComposite, SWT.FULL_SELECTION);
        TableViewerColumn column = createColumn(PeerGroupColumns.NAME.toString(), tableViewer);
        tableColumnLayout.setColumnData(column.getColumn(), new ColumnWeightData(30, 50, true));
        column = createColumn(PeerGroupColumns.VALUE.toString(), tableViewer);
        tableColumnLayout.setColumnData(column.getColumn(), new ColumnWeightData(70, 200, true));

        table = tableViewer.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        tableViewer.setContentProvider(ArrayContentProvider.getInstance());

        //adv_comp = new AdvertisementComposite(sashForm, SWT.NONE);

        styledText = new StyledText(sashForm, SWT.BORDER);
        toolkit.adapt(styledText);
        toolkit.paintBordersFor(styledText);

        sashForm.setWeights(new int[] { 3, 2 });
        getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
        getSite().setSelectionProvider(this.treeViewer);
        sashForm_1.setWeights(new int[] { 2, 3 });
    }

    @Override
    protected TableViewerColumn createColumn(final String name, TableViewer viewer) {
        TableViewerColumn col = createTableViewerColumn(viewer, name, 100, 0);
        col.setLabelProvider(new ColumnLabelProvider() {

            @SuppressWarnings("unchecked")
            @Override
            public String getText(Object element) {
                if (!(element instanceof Map.Entry))
                    return super.getText(element);
                Map.Entry<String, String> entry = (Map.Entry<String, String>) element;
                PeerGroupColumns column = PeerGroupColumns.valueOf(StringStyler.styleToEnum(name));
                switch (column) {
                case NAME:
                    return entry.getKey();
                default:
                    return entry.getValue();
                }
            }
        });
        return col;
    }

    public void setInput(SimpleNode<PeerGroup, PeerGroup> node) {
        PeerGroup peergroup = node.getData();
        Properties props = new Properties();
        for (PeerGroupProperties pgp : PeerGroupProperties.values()) {
            switch (pgp) {
            case NAME:
                props.setProperty(pgp.toString(), peergroup.getPeerGroupName());
                break;
            case GROUP_ID:
                props.setProperty(pgp.toString(), peergroup.getPeerGroupID().toString());
                break;
            case PEER_ID:
                props.setProperty(pgp.toString(), peergroup.getPeerID().toString());
                break;
            case PEERGROUP_ID:
                props.setProperty(pgp.toString(), peergroup.getPeerGroupID().toString());
                break;
            case PEER_NAME:
                props.setProperty(pgp.toString(), peergroup.getPeerName());
                break;
            case STORE_HOME:
                props.setProperty(pgp.toString(), peergroup.getStoreHome().getPath());
                break;
            default:
                break;
            }
        }
        tableViewer.setInput(props.entrySet());
        Stack<Advertisement> stack = new Stack<Advertisement>();
        stack.push(peergroup.getImplAdvertisement());
        stack.push(peergroup.getPeerAdvertisement());
        stack.push(peergroup.getPeerGroupAdvertisement());
        //adv_comp.setInput(stack.toArray( new Advertisement[ stack.size()]));
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    protected INode<PeerGroup, PeerGroup> onSetService(PeerGroup peergroup) {
        PeerGroupNode leaf = new PeerGroupNode(peergroup);
        PeerGroup current = peergroup;
        SimpleNode node = leaf;
        while (current.getParentGroup() != null) {
            current = current.getParentGroup();
            node = new PeerGroupNode(current);
            node.addChild(leaf);
            leaf = (PeerGroupNode) node;
        }
        this.treeViewer.setInput(node);
        return node;
    }

    @Override
    public void setFocus() {
        // Set the focus
    }

    @Override
    protected void onRefresh() {
        PeerGroup peergroup = super.getPeerGroup();
        String msg = peergroup.getPeerName();
        if (peergroup.getPeerID() != null)
            msg += "[" + peergroup.getPeerID().toString() + "]";
        setContentDescription(msg);
    }

    @Override
    protected void onFinalize() {
        stopMonitorTask();
    }
}