/**
* Copyright (c) 2014 Liferay, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the End User License
* Agreement for Liferay Developer Studio ("License"). You may not use this file
* except in compliance with the License. You can obtain a copy of the License
* by contacting Liferay, Inc. See the License for the specific language
* governing permissions and limitations under the License, including but not
* limited to distribution rights of the Software.
*/
package com.liferay.ide.server.ui.navigator;
import com.liferay.ide.server.ui.LiferayServerUI;
import com.liferay.ide.server.ui.action.EditPropertiesFileAction;
import com.liferay.ide.server.ui.action.OpenLiferayHomeFolderAction;
import java.util.Iterator;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.CommonViewer;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.ICommonViewerSite;
import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
/**
* @author Gregory Amerson
*/
public class PropertiesActionProvider extends CommonActionProvider
{
public static final String NEW_MENU_ID = "org.eclipse.wst.server.ui.internal.cnf.newMenuId";
public static final String TOP_SECTION_END_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.topSectionEnd";
public static final String TOP_SECTION_START_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.topSectionStart";
private ICommonActionExtensionSite actionSite;
private EditPropertiesFileAction editAction;
private OpenLiferayHomeFolderAction openFolderAction;
public PropertiesActionProvider()
{
super();
}
private void addListeners( CommonViewer tableViewer )
{
tableViewer.addOpenListener( new IOpenListener()
{
public void open( OpenEvent event )
{
try
{
final IStructuredSelection sel = (IStructuredSelection) event.getSelection();
final Object data = sel.getFirstElement();
if( !( data instanceof PropertiesFile ) )
{
return;
}
PropertiesActionProvider.this.editAction.run();
}
catch( Exception e )
{
LiferayServerUI.logError( "Error opening kaleo workflow.", e );
}
}
} );
}
protected void addTopSection( IMenuManager menu, PropertiesFile file )
{
// open action
if( file != null )
{
menu.add( editAction );
menu.add( openFolderAction );
}
}
public void fillContextMenu( IMenuManager menu )
{
// This is a temp workaround to clean up the default group that are provided by CNF
menu.removeAll();
ICommonViewerSite site = actionSite.getViewSite();
IStructuredSelection selection = null;
if( site instanceof ICommonViewerWorkbenchSite )
{
ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite) site;
selection = (IStructuredSelection) wsSite.getSelectionProvider().getSelection();
}
PropertiesFile file = null;
if( selection != null && !selection.isEmpty() )
{
Iterator<?> iterator = selection.iterator();
Object obj = iterator.next();
if( obj instanceof PropertiesFile )
{
file = (PropertiesFile) obj;
}
if( iterator.hasNext() )
{
file = null;
}
}
menu.add( invisibleSeparator( TOP_SECTION_START_SEPARATOR ) );
addTopSection( menu, file );
menu.add( invisibleSeparator( TOP_SECTION_END_SEPARATOR ) );
menu.add( new Separator() );
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS + "-end" ) );
}
public void init( ICommonActionExtensionSite site )
{
super.init( site );
this.actionSite = site;
ICommonViewerSite viewerSite = site.getViewSite();
if( viewerSite instanceof ICommonViewerWorkbenchSite )
{
StructuredViewer v = site.getStructuredViewer();
if( v instanceof CommonViewer )
{
CommonViewer cv = (CommonViewer) v;
ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite) viewerSite;
addListeners( cv );
makeActions( cv, wsSite.getSelectionProvider() );
}
}
}
private Separator invisibleSeparator( String s )
{
Separator sep = new Separator( s );
sep.setVisible( false );
return sep;
}
private void makeActions( CommonViewer tableViewer, ISelectionProvider provider )
{
// Shell shell = tableViewer.getTree().getShell();
// create the open action
editAction = new EditPropertiesFileAction( provider );
openFolderAction = new OpenLiferayHomeFolderAction( provider );
}
}