Java tutorial
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); } } }