net.cryptea.view.BuddiesView.java Source code

Java tutorial

Introduction

Here is the source code for net.cryptea.view.BuddiesView.java

Source

package net.cryptea.view;

/*
 * (C) Copyright 2013 Nuxeo SA (http://nuxeo.com/) and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser General Public License
 * (LGPL) version 2.1 which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/lgpl-2.1.html
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * Contributors:
 *     York Keyser
 */
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import net.cryptea.model.BuddyGrp;
import net.cryptea.model.BuddyModel;
import net.cryptea.provider.BuddyContentProvider;
import net.cryptea.provider.BuddyLabelProvider;

import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;

public class BuddiesView {

    List<BuddyGrp> buddyGrp = new ArrayList<BuddyGrp>();
    @Inject
    private EPartService service;

    private TreeViewer tree;

    public BuddiesView() {
    }

    @PostConstruct
    public void createComposite(Composite parent) {

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

        tree = new TreeViewer(parent);
        tree.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
        tree.setContentProvider(new BuddyContentProvider());
        tree.setLabelProvider(new BuddyLabelProvider());

        tree.addDoubleClickListener(new IDoubleClickListener() {
            @Override
            public void doubleClick(DoubleClickEvent event) {
                StructuredSelection selection = (StructuredSelection) event.getSelection();
                BuddyModel bm = (BuddyModel) selection.getFirstElement();
                openPart(bm);
            }
        });
    }

    private void openPart(BuddyModel bm) {
        MPart part = findPart(bm.getUsername());

        if (part == null) {
            part = service.createPart("net.cryptea.rcp.part.chatWindow");
            if (bm.getName() != null) {
                part.setLabel(bm.getName());
                part.setElementId(bm.getUsername());
            }
        }

        ChatWindow cw = (ChatWindow) service.showPart(part, PartState.ACTIVATE).getObject();
        cw.setModel(bm);
    }

    private MPart findPart(String name) {
        for (MPart part : service.getParts()) {
            if (part.getElementId().equals(name)) {
                return part;
            }
        }

        return null;
    }

    public void updateBuddies(BuddyGrp grp) {

        Object[] e = null;
        TreePath[] p = null;

        if (tree.getInput() != null) {
            e = tree.getExpandedElements();
            p = tree.getExpandedTreePaths();
        }

        for (BuddyGrp buddy : buddyGrp) {
            if (buddy.getGroupName().equals(grp.getGroupName()))
                buddyGrp.remove(buddy);
        }

        buddyGrp.add(grp);

        Display.getDefault().syncExec(new Runnable() {
            public void run() {
                tree.setInput(buddyGrp);
            }
        });

        if (p != null && e != null) {
            tree.setExpandedElements(e);
            tree.setExpandedTreePaths(p);
        }
    }
}