| /* |
| * Copyright (c) 2007-2013, 2015 Eike Stepper (Berlin, Germany) and others. |
| * 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: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.emf.cdo.internal.ui.views; |
| |
| import org.eclipse.emf.cdo.eresource.CDOResourceLeaf; |
| import org.eclipse.emf.cdo.internal.ui.actions.OpenSessionAction; |
| import org.eclipse.emf.cdo.internal.ui.actions.OpenTransactionAction; |
| import org.eclipse.emf.cdo.internal.ui.transfer.RepositoryTransferDragListener; |
| import org.eclipse.emf.cdo.session.CDOSession; |
| import org.eclipse.emf.cdo.transfer.ui.TransferDropAdapter; |
| import org.eclipse.emf.cdo.ui.CDOEditorUtil; |
| import org.eclipse.emf.cdo.ui.CDOItemProvider; |
| |
| import org.eclipse.net4j.util.container.IContainer; |
| import org.eclipse.net4j.util.container.IManagedContainer; |
| import org.eclipse.net4j.util.container.IPluginContainer; |
| import org.eclipse.net4j.util.ui.views.ContainerItemProvider; |
| import org.eclipse.net4j.util.ui.views.ContainerView; |
| import org.eclipse.net4j.util.ui.views.IElementFilter; |
| |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jface.action.GroupMarker; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.IToolBarManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.jface.viewers.ITreeSelection; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.ui.IWorkbenchActionConstants; |
| import org.eclipse.ui.IWorkbenchPage; |
| |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| /** |
| * @author Eike Stepper |
| */ |
| public class CDOSessionsView extends ContainerView |
| { |
| public final static String ID = "org.eclipse.emf.cdo.ui.CDOSessionsView"; //$NON-NLS-1$ |
| |
| private static Map<String, ResourceOpener> resourceOpeners = Collections |
| .synchronizedMap(new HashMap<String, ResourceOpener>()); |
| |
| private OpenSessionAction openSessionAction; |
| |
| public CDOSessionsView() |
| { |
| } |
| |
| @Override |
| protected Control createUI(Composite parent) |
| { |
| openSessionAction = new OpenSessionAction(getViewSite().getPage()); |
| Control control = super.createUI(parent); |
| |
| TreeViewer viewer = getViewer(); |
| |
| // CDOMergeDropAdapter.support(viewer); |
| |
| RepositoryTransferDragListener.support(viewer); |
| TransferDropAdapter.support(viewer); |
| |
| return control; |
| } |
| |
| @Override |
| protected IManagedContainer getContainer() |
| { |
| return IPluginContainer.INSTANCE; |
| } |
| |
| @Override |
| protected ContainerItemProvider<IContainer<Object>> createContainerItemProvider() |
| { |
| return new CDOItemProvider(getSite().getPage(), new IElementFilter() |
| { |
| public boolean filter(Object element) |
| { |
| return element instanceof CDOSession; |
| } |
| }); |
| } |
| |
| @Override |
| protected void fillLocalToolBar(IToolBarManager manager) |
| { |
| super.fillLocalToolBar(manager); |
| manager.add(openSessionAction); |
| } |
| |
| @Override |
| protected void fillContextMenu(IMenuManager manager, ITreeSelection selection) |
| { |
| super.fillContextMenu(manager, selection); |
| |
| manager.add(new Separator("group.new")); |
| manager.add(new Separator("group.open")); |
| manager.add(new GroupMarker("group.openWith")); |
| manager.add(new Separator("group.edit")); |
| manager.add(new GroupMarker("group.new.branch")); |
| manager.add(new Separator("group.port")); |
| manager.add(new Separator("group.build")); |
| manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
| manager.add(new Separator("group.properties")); |
| } |
| |
| @Override |
| protected void doubleClicked(Object object) |
| { |
| IWorkbenchPage page = getSite().getPage(); |
| |
| if (object instanceof CDOSession) |
| { |
| CDOSession session = (CDOSession)object; |
| if (session.getViews().length == 0) |
| { |
| OpenTransactionAction.openTransaction(session); |
| return; |
| } |
| } |
| |
| if (object instanceof CDOResourceLeaf) |
| { |
| CDOResourceLeaf resource = (CDOResourceLeaf)object; |
| |
| ResourceOpener opener = getResourceOpener(resource); |
| if (opener != null) |
| { |
| opener.openResource(page, resource); |
| } |
| else |
| { |
| CDOEditorUtil.openEditor(page, resource); |
| } |
| |
| return; |
| } |
| |
| super.doubleClicked(object); |
| } |
| |
| public static ResourceOpener getResourceOpener(CDOResourceLeaf resource) |
| { |
| String extension = new Path(resource.getName()).getFileExtension(); |
| return getResourceOpener(extension); |
| } |
| |
| public static ResourceOpener getResourceOpener(String resourceExtension) |
| { |
| return resourceOpeners.get(resourceExtension); |
| } |
| |
| public static ResourceOpener registerResourceOpener(String resourceExtension, ResourceOpener opener) |
| { |
| return resourceOpeners.put(resourceExtension, opener); |
| } |
| |
| public static ResourceOpener unregisterResourceOpener(String resourceExtension) |
| { |
| return resourceOpeners.remove(resourceExtension); |
| } |
| |
| /** |
| * @author Eike Stepper |
| */ |
| public interface ResourceOpener |
| { |
| public void openResource(IWorkbenchPage page, CDOResourceLeaf resource); |
| } |
| } |