Java tutorial
/** * Copyright (c) 2011 Loganalysis 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 * * Contributors: * Raffael Schmid - initial API and implementation */ package com.trivadis.loganalysis.ui.internal.view; import static com.trivadis.loganalysis.core.common.CollectionUtil.foreach; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IMemento; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.XMLMemento; import org.eclipse.ui.part.ViewPart; import com.trivadis.loganalysis.core.common.ClosureI; import com.trivadis.loganalysis.ui.Help; import com.trivadis.loganalysis.ui.IUiContext; import com.trivadis.loganalysis.ui.UiLoganalysis; import com.trivadis.loganalysis.ui.common.binding.IListChangeListener; import com.trivadis.loganalysis.ui.domain.profile.IConfiguration; import com.trivadis.loganalysis.ui.domain.profile.IProfile; import com.trivadis.loganalysis.ui.internal.Command; public class ProfilesView extends ViewPart implements ISelectionListener, IListChangeListener { public static final String ID = ProfilesView.class.getName(); private TreeViewer viewer; private Action doubleClickAction; private final IUiContext uiContext; private final Help help; public ProfilesView() { this(UiLoganalysis.getDefault().getUiContext(), Help.getDefault()); } public ProfilesView(final IUiContext context, final Help help) { this.uiContext = context; this.help = help; } @Override public void createPartControl(final Composite parent) { help.register(parent, "com.trivadis.loganalysis.help.profilesView"); createListViewer(parent); makeActions(); hookDoubleClickAction(); registerContextMenu(); } private void createListViewer(final Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new ProfilesContentAdapter(true)); viewer.setLabelProvider(new ProfilesLabelAdapter()); viewer.setSorter(new ViewerSorter()); viewer.setInput(getViewSite()); } private void registerContextMenu() { final MenuManager menuMgr = new MenuManager("#PopupMenu"); menuMgr.setRemoveAllWhenShown(true); final Menu menu = menuMgr.createContextMenu(viewer.getControl()); viewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, viewer); getSite().setSelectionProvider(viewer); } private void makeActions() { doubleClickAction = new Action() { @Override public void run() { Command.execute("com.trivadis.loganalysis.ui.openAnalysis"); } }; } private void hookDoubleClickAction() { viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(final DoubleClickEvent event) { doubleClickAction.run(); } }); } @Override public void setFocus() { viewer.getControl().setFocus(); } @Override public void saveState(final IMemento memento) { foreach(uiContext.getConfigurations(), new ClosureI<IConfiguration>() { public void call(final IConfiguration in) { in.save(memento); } }); } @SuppressWarnings("unused") private void showXml(final IMemento memento) { final Writer sw = new StringWriter(); final XMLMemento xmlMemento = (XMLMemento) memento; try { xmlMemento.save(sw); } catch (final IOException e) { e.printStackTrace(); } System.out.println(sw.toString()); } @Override public void init(final IViewSite site, final IMemento memento) throws PartInitException { super.init(site, memento); uiContext.addConfigurations(uiContext.getExtensionFacade().getConfigurationsFor(memento)); uiContext.getConfigurations().addChangeListener(this); // data binding for (final IConfiguration configuration : uiContext.getConfigurations()) { configuration.getProfiles().addChangeListener(this); } getSite().getPage().addSelectionListener(this); } public void selectionChanged(final IWorkbenchPart part, final ISelection selection) { if (selection instanceof StructuredSelection) { final StructuredSelection ss = (StructuredSelection) selection; if (ss.getFirstElement() instanceof IProfile) { final IProfile profile = (IProfile) ss.getFirstElement(); uiContext.setSelectedProfile(profile); } if (ss.getFirstElement() instanceof IConfiguration) { final IConfiguration configuration = (IConfiguration) ss.getFirstElement(); uiContext.setSelectedConfiguration(configuration); } } } public void listChanged() { if (viewer != null) viewer.refresh(); } }