blob: c06093b95678508ef74acb90dfdbc4efbd5743db [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Formal Mind GmbH and University of Dusseldorf.
* 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:
* Michael Jastram - initial API and implementation
******************************************************************************/
package org.eclipse.rmf.reqif10.pror.editor.actions;
import java.util.Set;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.rmf.reqif10.ReqIFToolExtension;
import org.eclipse.rmf.reqif10.pror.configuration.ConfigurationFactory;
import org.eclipse.rmf.reqif10.pror.configuration.ConfigurationPackage;
import org.eclipse.rmf.reqif10.pror.configuration.ProrPresentationConfiguration;
import org.eclipse.rmf.reqif10.pror.configuration.ProrPresentationConfigurations;
import org.eclipse.rmf.reqif10.pror.configuration.ProrToolExtension;
import org.eclipse.rmf.reqif10.pror.configuration.provider.ProrPresentationConfigurationsItemProvider;
import org.eclipse.rmf.reqif10.pror.edit.presentation.service.PresentationInterface;
import org.eclipse.rmf.reqif10.pror.editor.presentation.Reqif10Editor;
import org.eclipse.rmf.reqif10.pror.editor.presentation.SpecificationEditor;
import org.eclipse.rmf.reqif10.pror.editor.presentation.service.PresentationServiceManager;
import org.eclipse.rmf.reqif10.pror.util.ConfigurationUtil;
import org.eclipse.rmf.reqif10.pror.util.ProrUtil;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorPart;
public class PresentationConfigurationActionDelegate implements
IEditorActionDelegate {
private Reqif10Editor editor;
/**
* Retrieves the {@link EditingDomain} from the Editor if present.
*/
public void setActiveEditor(IAction action, IEditorPart editor) {
if (editor instanceof Reqif10Editor) {
this.editor = (Reqif10Editor) editor;
} else if (editor instanceof SpecificationEditor) {
this.editor = ((SpecificationEditor) editor).getReqifEditor();
} else {
this.editor = null;
}
}
/**
* Opens the {@link ReqIFToolExtension} for the current
* {@link EditingDomain}.
*/
public void run(IAction action) {
if (editor == null)
return;
// Make sure the data structures exist
EditingDomain ed = editor.getEditingDomain();
ProrToolExtension toolExtension = ConfigurationUtil
.createProrToolExtension(editor.getReqif(), ed);
if (toolExtension.getPresentationConfigurations() == null) {
ProrPresentationConfigurations configs = ConfigurationFactory.eINSTANCE
.createProrPresentationConfigurations();
((ProrPresentationConfigurationsItemProvider) ProrUtil
.getItemProvider(editor.getAdapterFactory(), configs))
.setEditingDomain(ed);
ed.getCommandStack()
.execute(
SetCommand
.create(ed,
toolExtension,
ConfigurationPackage.Literals.PROR_TOOL_EXTENSION__PRESENTATION_CONFIGURATIONS,
configs));
}
SubtreeDialog dialog = new SubtreeDialog(editor, getProrPresentationConfigurations(), "Presentation Configuration",
"org.eclipse.rmf.reqif10.pror.editor.presentationConfiguration");
dialog.setActions(buildAddPresentationActions(), true);
dialog.open();
}
private IAction[] buildAddPresentationActions() {
Set<Class<? extends ProrPresentationConfiguration>> configs = PresentationServiceManager
.getPresentationInterfaceMap().keySet();
IAction[] actions = new IAction[configs.size()];
int i = 0;
for (final Class<? extends ProrPresentationConfiguration> config : configs) {
actions[i++] = new Action(ProrUtil.substractPrefixPostfix(config, "","ConfigurationImpl")) {
@Override
public void run() {
PresentationInterface service = PresentationServiceManager
.getPresentationInterfaceMap().get(config);
ProrPresentationConfiguration config = service
.getConfigurationInstance();
Command command = AddCommand
.create(editor.getEditingDomain(),
getProrPresentationConfigurations(),
ConfigurationPackage.Literals.PROR_PRESENTATION_CONFIGURATIONS__PRESENTATION_CONFIGURATIONS,
config);
editor.getEditingDomain().getCommandStack()
.execute(command);
}
};
}
return actions;
}
/**
* Retrieves the {@link ProrToolExtension} and ensures that
* {@link ProrPresentationConfigurations} are not null.
*/
private ProrPresentationConfigurations getProrPresentationConfigurations() {
final ProrToolExtension ext = ConfigurationUtil
.createProrToolExtension(editor.getReqif(), editor.getEditingDomain());
if (ext.getPresentationConfigurations() == null) {
Command cmd = SetCommand
.create(editor.getEditingDomain(),
ext,
ConfigurationPackage.Literals.PROR_TOOL_EXTENSION__PRESENTATION_CONFIGURATIONS,
ConfigurationFactory.eINSTANCE
.createProrPresentationConfigurations());
editor.getEditingDomain().getCommandStack().execute(cmd);
}
return ext.getPresentationConfigurations();
}
public void selectionChanged(IAction action, ISelection selection) {
// No action required.
}
}