/*
* Copyright (C) 2013 Nagoya University All rights reserved.
*/
package net.dependableos.dcase.diagram.ui.editpolicies;
import net.dependableos.dcase.BasicLink;
import net.dependableos.dcase.diagram.part.PatternUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionNodeEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.OpenEditPolicy;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
/**
* An open edit policy for a basic node.
*/
public class BasicLinkOpenEditPolicy extends OpenEditPolicy {
/**
* the command name.
*/
//private static final String COMMAND_NAME = "Set Attribute"; //$NON-NLS-1$
/**
* Returns a command to open diagram.
*
* @param request
* the request
* @return command to open diagram
*/
@Override
protected Command getOpenCommand(Request request) {
// get link
EditPart editPart = getTargetEditPart(request);
if (!(editPart instanceof ConnectionNodeEditPart)) {
editPart = editPart.getParent();
/* for DcaseLink003Userdef001Desc */
if (!(editPart instanceof ConnectionNodeEditPart)) {
return null;
}
}
Object model = editPart.getModel();
if (!(model instanceof View)) {
return null;
}
BasicLink link = (BasicLink) ((View) model).getElement();
String moduleName = link.getAttachment();
// truncate icon string...
if (moduleName != null && moduleName.length() > 0) {
String moduleArray[] = moduleName.split(PatternUtil.getResponsibilitySeparatorName());
if (moduleArray.length > 1) {
moduleName = moduleArray[0];
}
}
if (moduleName == null || moduleName.length() == 0) {
return null;
}
// get module file
IWorkbenchPage workbenchPage = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
IPath diagramPath = PatternUtil.getDiagramPath(moduleName);
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IFile diagramFile = root.getFile(new Path(diagramPath.toOSString()));
// open diagram
IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry()
.getDefaultEditor(diagramFile.getName());
if (desc != null) {
try {
workbenchPage.openEditor(new FileEditorInput(diagramFile),
desc.getId());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
}