blob: a9cea2ed266905a95f39ebcbda3fa073f0004705 [file] [log] [blame]
/*
* 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);
}
}