package com.isencia.passerelle.workbench.model.editor.ui.editor.actions;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.actions.ActionFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ptolemy.kernel.Entity;
import com.isencia.passerelle.model.Flow;
import com.isencia.passerelle.workbench.model.editor.ui.Activator;
import com.isencia.passerelle.workbench.model.editor.ui.editor.PasserelleModelEditor;
import com.isencia.passerelle.workbench.model.editor.ui.editor.PasserelleModelMultiPageEditor;
import com.isencia.passerelle.workbench.model.ui.command.ChangeActorPropertyCommand;
import com.isencia.passerelle.workbench.model.ui.wizards.NameChecker;
public class UpdateFlowAction extends SelectionAction implements NameChecker {
private static final Logger logger = LoggerFactory
.getLogger(UpdateFlowAction.class);
public static String ID = "UpdateFlowAction";
private PasserelleModelMultiPageEditor parent;
private final String icon = "icons/import.gif";
/**
* Creates an empty model
*
* @param part
*/
public UpdateFlowAction() {
this(null, null);
setId(ID);
}
/**
* Creates an empty model
*
* @param part
*/
public UpdateFlowAction(final IEditorPart part) {
this(part, null);
setId(ID);
}
/**
* Creates the model from the contents of the part
*
* @param part
* @param parent
*/
public UpdateFlowAction(final IEditorPart part,
final PasserelleModelMultiPageEditor parent) {
super(part);
this.parent = parent;
setLazyEnablementCalculation(true);
if (parent != null)
setId(ID);
}
@Override
protected void init() {
super.init();
Activator.getImageDescriptor(icon);
setHoverImageDescriptor(Activator.getImageDescriptor(icon));
setImageDescriptor(Activator.getImageDescriptor(icon));
setDisabledImageDescriptor(Activator.getImageDescriptor(icon));
setEnabled(false);
}
@Override
public void run() {
try {
if (parent != null) {
final Entity entity = parent.getSelectedContainer();
Flow flow = (Flow) entity.toplevel();
Flow updateFlow = Activator.getDefault().getRepositoryService().getFlow(flow.getName());
if (updateFlow != null){
PasserelleModelEditor editor = parent.getEditor();
PasserelleModelMultiPageEditor multiEditor = editor.getParent();
multiEditor.setModel(updateFlow);
editor.setDiagram(updateFlow);
editor.refresh();
editor.getEditDomain().getCommandStack().execute(
new ChangeActorPropertyCommand());
}
}
} catch (Exception e) {
logger.error("Cannot commit flow", e);
}
}
public boolean isNameValid(String name) {
return true;
}
public String getErrorMessage(String name) {
return null;
}
@Override
protected boolean calculateEnabled() {
return true;
}
}