/******************************************************************************
* Copyright (c) 2006-2008 g-Eclipse consortium
* 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
*
* Initial development of the original code was made for
* project g-Eclipse founded by European Union
* project number: FP6-IST-034327 http://www.geclipse.eu/
*
* Contributor(s):
* Sylva Girtelschmid - JKU
*****************************************************************************/
package eu.geclipse.ui.visualisation;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.actions.SelectionListenerAction;
import eu.geclipse.core.model.IGridVisualisation;
import eu.geclipse.core.reporting.ProblemException;
import eu.geclipse.ui.dialogs.ProblemDialog;
import eu.geclipse.ui.internal.Activator;
import eu.geclipse.ui.internal.actions.Messages;
import eu.geclipse.ui.views.VisualisationView;
/**
* @author sgirtel
*
*/
public class AbstractVisualisationAction extends SelectionListenerAction {
/**
* Extension point which has to be implemented to provide additional actions for
* visualisable elements (i.e. elements that extend the IGridVisualisation interface).
*/
public static final String ACTION_EXTENSION_POINT = "eu.geclipse.ui.visualisationAction"; //$NON-NLS-1$
/**
* Name of the attribute which specifies the class name of the AbstractVisualisationAction
* implementation.
*/
public static final String EXT_ACTION_CLASS = "class"; //$NON-NLS-1$
/**
* The name of the element which contains the visualisation action specification.
*/
public static final String EXT_ACTION_ELEMENT = "action"; //$NON-NLS-1$
/**
* Name of the attribute which specifies the text for the action.
*/
public static final String EXT_ACTION_TEXT = "text"; //$NON-NLS-1$
/**
* Name of the attribute which specifies the option text for the action's tool-tip.
*/
public static final String EXT_ACTION_TOOLTIP = "tooltip"; //$NON-NLS-1$
/**
* The file extension of the resource that this action will become active for.
*/
public static final String EXT_ACTION_FILE_EXTENSION = "fileExtension"; //$NON-NLS-1$
/**
*
*/
public static final String EXT_ACTION_TYPE = "type"; //$NON-NLS-1$
protected IWorkbenchSite workbenchSite;
private String type = null;
private String fileExt = null;
private ArrayList< IGridVisualisation > vis;
/**
*
*/
public AbstractVisualisationAction() {
super( Messages.getString( "AbstractVisualisationAction.title" ) ); //$NON-NLS-1$
}
/**
* @param actionText
* @param actionTooltip
* @param fileExtension
* @param site
* @param visType
*/
public void init( final String actionText,
final String actionTooltip,
final String fileExtension,
final IWorkbenchSite site,
final String visType ) {
super.setText( actionText );
super.setToolTipText( actionTooltip );
this.fileExt = fileExtension;
this.workbenchSite = site;
this.type = visType;
}
protected boolean isVisualizable( final Object element ) {
return element instanceof eu.geclipse.core.model.IGridVisualisation;
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.Action#run()
*/
@Override
public void run() {
Object element = getStructuredSelection().getFirstElement();
if( element != null ) {
try {
( ( IGridVisualisation )element ).validate();
IViewPart view = this.workbenchSite.getPage().showView( "eu.geclipse.ui.views.visualisationview" ); //$NON-NLS-1$
( ( VisualisationView )view ).setVisResource( ( IGridVisualisation )element );
( ( VisualisationView )view ).render( ( ( IGridVisualisation )element).getResourceFileNameExtension(), this.type );
if ( ( ( VisualisationView )view ).isSuccess() ) {
Display.getDefault().asyncExec( new Runnable() {
public void run() {
try {
AbstractVisualisationAction.this.workbenchSite.getPage().showView( "eu.geclipse.ui.views.visualisationview" ); //$NON-NLS-1$
} catch( PartInitException e ) {
Activator.logException( e );
}
}
} );
}
} catch( PartInitException pie ) {
ProblemDialog.openProblem( null,
Messages.getString( "AbstractVisualisationAction.errorDialogTitle" ), //$NON-NLS-1$
Messages.getString( "AbstractVisualisationAction.errorOpeningView" ), //$NON-NLS-1$
pie );
} catch( ProblemException pe ) {
ProblemDialog.openProblem( null,
Messages.getString( "AbstractVisualisationAction.errorDialogTitle" ), //$NON-NLS-1$
Messages.getString( "AbstractVisualisationAction.elementNotVisualizable" ), //$NON-NLS-1$
pe );
}
}
}
/* (non-Javadoc)
* @see org.eclipse.ui.actions.BaseSelectionListenerAction#updateSelection
* (org.eclipse.jface.viewers.IStructuredSelection)
*/
@Override
protected boolean updateSelection( final IStructuredSelection selection ) {
this.vis = new ArrayList< IGridVisualisation >();
boolean enabled = super.updateSelection( selection );
Iterator< ? > iter = selection.iterator();
while( iter.hasNext() && enabled ) {
Object element = iter.next();
boolean isVisualizableFile = isVisualizable( element );
enabled &= isVisualizableFile;
if( isVisualizableFile ) {
this.vis.add( ( IGridVisualisation )element );
}
}
return enabled && !this.vis.isEmpty();
}
/**
* @return
*/
public String getFileExt() {
return this.fileExt;
}
}