blob: af71cda80dfb16934dc3e3a20f8f35166423c7b9 [file] [log] [blame]
/*********************************************************************
* Copyright (c) 2005, 2019 SAP SE
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* SAP SE - initial API, implementation and documentation
* jpasch - Bug 323025 ActionBarContributor cleanup
* Bug 336488 - DiagramEditor API
* pjpaulin - Bug 352120 - Now uses IDiagramContainerUI interface
* mwenz - Bug 370888 - API Access to export and print
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
package org.eclipse.graphiti.ui.internal.action;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.features.ISaveImageFeature;
import org.eclipse.graphiti.features.context.ISaveImageContext;
import org.eclipse.graphiti.features.context.impl.SaveImageContext;
import org.eclipse.graphiti.internal.command.FeatureCommandWithContext;
import org.eclipse.graphiti.internal.command.GenericFeatureCommandWithContext;
import org.eclipse.graphiti.internal.command.ICommand;
import org.eclipse.graphiti.platform.IDiagramBehavior;
import org.eclipse.graphiti.ui.internal.Messages;
import org.eclipse.graphiti.ui.internal.command.GefCommandWrapper;
import org.eclipse.graphiti.ui.platform.IConfigurationProvider;
import org.eclipse.jface.action.Action;
/**
* @noinstantiate This class is not intended to be instantiated by clients.
* @noextend This class is not intended to be subclassed by clients.
*/
public class SaveImageAction extends Action {
private IDiagramBehavior diagramBehavior;
private IConfigurationProvider configurationProvider;
public static final String TOOL_TIP = Messages.SaveImageAction_1_xmsg;
public static final String TEXT = Messages.SaveImageAction_0_xmsg;
public static final String ACTION_ID = "export_diagram_action"; //$NON-NLS-1$
public static final String ACTION_DEFINITION_ID = "org.eclipse.graphiti.ui.internal.action.SaveImageAction"; //$NON-NLS-1$
public SaveImageAction(IDiagramBehavior diagramBehavior, IConfigurationProvider configurationProvider) {
super();
this.diagramBehavior = diagramBehavior;
this.configurationProvider = configurationProvider;
setText(TEXT);
setToolTipText(TOOL_TIP);
setId(ACTION_ID);
setActionDefinitionId(ACTION_DEFINITION_ID);
}
@Override
public boolean isEnabled() {
IFeatureProvider featureProvider = getFeatureProvider();
if (featureProvider == null) {
return false;
}
ISaveImageFeature feature = featureProvider.getSaveImageFeature();
ISaveImageContext context = createSaveImageContext();
if (feature == null || !feature.canSave(context)) {
return false;
}
if (((IAdaptable) diagramBehavior.getDiagramContainer()).getAdapter(GraphicalViewer.class) == null) {
return false;
}
return true;
}
@Override
public void run() {
ISaveImageContext context = createSaveImageContext();
IFeatureProvider featureProvider = getFeatureProvider();
ISaveImageFeature feature = featureProvider.getSaveImageFeature();
if (feature != null) {
FeatureCommandWithContext command = new GenericFeatureCommandWithContext(feature, context);
executeOnCommandStack(command);
}
}
private ISaveImageContext createSaveImageContext() {
SaveImageContext context = new SaveImageContext();
return context;
}
private IFeatureProvider getFeatureProvider() {
return configurationProvider.getDiagramTypeProvider().getFeatureProvider();
}
private void executeOnCommandStack(ICommand command) {
CommandStack commandStack = configurationProvider.getDiagramBehavior().getEditDomain().getCommandStack();
GefCommandWrapper wrapperCommand = new GefCommandWrapper(command, configurationProvider.getDiagramBehavior()
.getEditingDomain());
commandStack.execute(wrapperCommand);
}
}