Skip to content
Snippets Groups Projects
Commit 9c664306 authored by Lukas Ladenberger's avatar Lukas Ladenberger
Browse files

fixed PROBPLUGIN-108

parent 848db8e1
No related branches found
No related tags found
No related merge requests found
Showing
with 152 additions and 303 deletions
......@@ -31,23 +31,7 @@
<iterate
operator="or">
<instanceof
value="de.bmotionstudio.rodin.IBMotionSurfaceRoot">
</instanceof>
</iterate>
</with>
</visibleWhen>
</command>
<command
commandId="de.bmotionstudio.rodin.command.renameVisualization"
label="Rename"
style="push">
<visibleWhen>
<with
variable="selection">
<iterate
operator="or">
<instanceof
value="de.bmotionstudio.rodin.IBMotionSurfaceRoot">
value="de.bmotionstudio.rodin.BMotionStudioRodinFile">
</instanceof>
</iterate>
</with>
......@@ -62,11 +46,6 @@
id="de.bmotionstudio.rodin.command.startVisualization"
name="Start Visualization">
</command>
<command
defaultHandler="de.bmotionstudio.rodin.RenameFileHandler"
id="de.bmotionstudio.rodin.command.renameVisualization"
name="Rename">
</command>
</extension>
<extension
point="org.rodinp.core.fileAssociations">
......@@ -75,20 +54,6 @@
root-element-type="de.bmotionstudio.gef.editor.BMotionStudioFile">
</fileAssociation>
</extension>
<extension
point="org.eclipse.core.contenttype.contentTypes">
<content-type
base-type="org.rodinp.core.rodin"
file-extensions="bmso"
id="BMotionStudioFile"
name="BMotion Studio Surface File"
priority="normal">
</content-type>
<file-association
content-type="de.bmotionstudio.gef.editor.BMotionStudioFile"
file-extensions="bmso">
</file-association>
</extension>
<extension
point="org.eclipse.ui.navigator.navigatorContent">
<navigatorContent
......@@ -104,7 +69,7 @@
</triggerPoints>
<possibleChildren>
<instanceof
value="de.bmotionstudio.rodin.IBMotionSurfaceRoot">
value="de.bmotionstudio.rodin.BMotionStudioRodinFile">
</instanceof>
</possibleChildren>
<actionProvider
......@@ -112,8 +77,7 @@
id="de.bmotionstudio.ui.navigatorAction"
priority="normal">
<enablement>
<instanceof
value="de.bmotionstudio.rodin.IBMotionSurfaceRoot">
<instanceof value="de.bmotionstudio.rodin.BMotionStudioRodinFile">
</instanceof>
</enablement>
</actionProvider>
......@@ -138,14 +102,6 @@
</includes>
</viewerActionBinding>
</extension>
<extension
point="org.rodinp.core.internalElementTypes">
<internalElementType
class="de.bmotionstudio.rodin.BMotionSurfaceRoot"
id="BMotionStudioFile"
name="BMotion Studio Surface File">
</internalElementType>
</extension>
......
......@@ -11,6 +11,8 @@ import java.util.Collection;
import java.util.Iterator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
......@@ -18,15 +20,16 @@ import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.*;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.part.FileEditorInput;
import org.rodinp.core.IRodinElement;
import org.rodinp.core.IRodinFile;
import org.rodinp.core.RodinDBException;
import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
import de.bmotionstudio.gef.editor.BMotionStudioImage;
public class ActionCollection {
......@@ -42,42 +45,39 @@ public class ActionCollection {
@Override
public void run() {
IRodinFile component;
final ISelection selection = site.getStructuredViewer()
.getSelection();
final Object obj = ((IStructuredSelection) selection)
.getFirstElement();
if (obj instanceof IBMotionSurfaceRoot) {
component = (IRodinFile) ((IRodinElement) obj)
.getOpenable();
if (obj instanceof BMotionStudioRodinFile) {
if (component == null) {
return;
}
BMotionStudioRodinFile file = (BMotionStudioRodinFile) obj;
IResource resource = file.getResource();
final IFile ifile = resource.getProject().getFile(
resource.getName());
try {
final IEditorDescriptor desc = PlatformUI
.getWorkbench().getEditorRegistry()
.getDefaultEditor(
component.getCorrespondingResource()
.getName());
BMotionEditorPlugin.getActivePage().openEditor(
new FileEditorInput(component.getResource()),
.getDefaultEditor(resource.getName());
BMotionEditorPlugin
.getDefault()
.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage()
.openEditor(new FileEditorInput(ifile),
desc.getId());
// editor.getSite().getSelectionProvider().setSelection(
// new StructuredSelection(obj));
} catch (final PartInitException e) {
final String errorMsg = "Error open Editor";
MessageDialog.openError(null, null, errorMsg);
BMotionEditorPlugin.getDefault().getLog().log(
new Status(IStatus.ERROR,
BMotionEditorPlugin
.getDefault()
.getLog()
.log(new Status(IStatus.ERROR,
BMotionEditorPlugin.PLUGIN_ID,
errorMsg, e));
}
......@@ -101,39 +101,36 @@ public class ActionCollection {
public void run() {
if (!(site.getStructuredViewer().getSelection().isEmpty())) {
Collection<IRodinElement> set = new ArrayList<IRodinElement>();
Collection<BMotionStudioRodinFile> set = new ArrayList<BMotionStudioRodinFile>();
IStructuredSelection ssel = (IStructuredSelection) site
.getStructuredViewer().getSelection();
for (Iterator<?> it = ssel.iterator(); it.hasNext();) {
final Object obj = it.next();
if (!(obj instanceof IBMotionSurfaceRoot)) {
if (!(obj instanceof BMotionStudioRodinFile)) {
continue;
}
IRodinElement elem = (IRodinElement) obj;
if (elem.isRoot()) {
elem = elem.getParent();
}
BMotionStudioRodinFile elem = (BMotionStudioRodinFile) obj;
set.add(elem);
}
int answer = YesToAllMessageDialog.YES;
for (IRodinElement element : set) {
if (element instanceof IRodinFile) {
for (BMotionStudioRodinFile element : set) {
if (answer != YesToAllMessageDialog.YES_TO_ALL) {
answer = YesToAllMessageDialog
.openYesNoToAllQuestion(
site.getViewSite().getShell(),
"Confirm File Delete",
"Are you sure you want to delete file '"
+ ((IRodinFile) element)
.getElementName()
+ ((BMotionStudioRodinFile) element)
.getResource()
.getName()
+ "' in project '"
+ element
.getParent()
.getElementName()
+ "' ?");
+ element.getResource()
.getProject()
.getName() + "' ?");
}
if (answer == YesToAllMessageDialog.NO_TO_ALL
......@@ -142,18 +139,18 @@ public class ActionCollection {
if (answer != YesToAllMessageDialog.NO) {
try {
closeOpenedEditor((IRodinFile) element);
((IRodinFile) element).delete(true,
closeOpenedEditor((BMotionStudioRodinFile) element);
((BMotionStudioRodinFile) element)
.getResource().delete(true,
new NullProgressMonitor());
} catch (PartInitException e) {
MessageDialog.openError(null, "Error",
"Could not delete file");
} catch (RodinDBException e) {
MessageDialog.openError(null, "Error",
"Could not delete file");
}
} catch (CoreException e) {
e.printStackTrace();
}
}
}
}
......@@ -161,13 +158,15 @@ public class ActionCollection {
};
deleteAction.setText("&Delete");
deleteAction.setToolTipText("Delete these elements");
deleteAction.setImageDescriptor(BMotionStudioImage.getImageDescriptor(
"org.eclipse.ui", "$nl$/icons/full/etool16/delete_edit.gif"));
deleteAction.setImageDescriptor(BMotionEditorPlugin
.imageDescriptorFromPlugin("org.eclipse.ui",
"$nl$/icons/full/etool16/delete_edit.gif"));
return deleteAction;
}
static void closeOpenedEditor(IRodinFile file) throws PartInitException {
static void closeOpenedEditor(BMotionStudioRodinFile file)
throws PartInitException {
IEditorReference[] editorReferences = BMotionEditorPlugin
.getActivePage().getEditorReferences();
for (int j = 0; j < editorReferences.length; j++) {
......
......@@ -9,8 +9,6 @@ package de.bmotionstudio.rodin;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import org.rodinp.core.IInternalElement;
import org.rodinp.core.IRodinFile;
import de.bmotionstudio.gef.editor.BMotionStudioImage;
......@@ -22,12 +20,10 @@ public class BMotionLabelProvider implements ILabelProvider {
public String getText(final Object element) {
if (element instanceof IRodinFile) {
return ((IRodinFile) element).getBareName();
} else if (element instanceof IInternalElement) {
return ((IInternalElement) element).getRodinFile().getBareName();
}
return null;
if (element instanceof BMotionStudioRodinFile)
return ((BMotionStudioRodinFile) element).getResource().getName()
.replace(".bmso", "");
return element.toString();
}
......
......@@ -49,12 +49,12 @@ public class BMotionStudioActionProvider extends CommonActionProvider {
public void fillContextMenu(IMenuManager menu) {
super.fillContextMenu(menu);
menu.add(new GroupMarker(GROUP_FILEACTIONS));
menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN, ActionCollection
.getOpenAction(site));
menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN,
ActionCollection.getOpenAction(site));
menu.appendToGroup(ICommonMenuConstants.GROUP_OPEN_WITH,
buildOpenWithMenu());
menu.appendToGroup(GROUP_FILEACTIONS, ActionCollection
.getDeleteAction(site));
menu.appendToGroup(GROUP_FILEACTIONS,
ActionCollection.getDeleteAction(site));
}
MenuManager buildOpenWithMenu() {
......@@ -63,7 +63,7 @@ public class BMotionStudioActionProvider extends CommonActionProvider {
ISelection selection = site.getStructuredViewer().getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
menu.add(new OpenWithMenu(BMotionEditorPlugin.getActivePage(),
((IBMotionSurfaceRoot) obj).getRodinFile().getResource()));
((BMotionStudioRodinFile) obj).getResource()));
return menu;
}
......
......@@ -6,34 +6,42 @@
package de.bmotionstudio.rodin;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.rodinp.core.IRodinProject;
import org.rodinp.core.RodinCore;
import org.rodinp.core.RodinDBException;
public class BMotionStudioContentProvider implements ITreeContentProvider {
public Object[] getChildren(final Object parentElement) {
List<Object> res = new ArrayList<Object>();
if (parentElement instanceof IProject) {
final IProject project = (IProject) parentElement;
// if it is a RodinProject return the IRodinProject from the DB.
final IRodinProject proj = RodinCore.valueOf(project);
if (proj.exists()) {
if (project.exists()) {
try {
return proj
.getRootElementsOfType(IBMotionSurfaceRoot.ELEMENT_TYPE);
} catch (final RodinDBException e) {
e.printStackTrace();
for (IResource rs : project.members()) {
if (rs.getFileExtension() != null
&& rs.getFileExtension().equals("bmso")) {
res.add(new BMotionStudioRodinFile(rs));
}
}
} catch (CoreException e) {
e.printStackTrace();
}
}
return res.toArray(new BMotionStudioRodinFile[res.size()]);
}
......
......@@ -6,16 +6,22 @@
package de.bmotionstudio.rodin;
import org.rodinp.core.IInternalElement;
import org.rodinp.core.IInternalElementType;
import org.rodinp.core.RodinCore;
import org.eclipse.core.resources.IResource;
import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
public class BMotionStudioRodinFile {
public interface IBMotionSurfaceRoot extends IInternalElement {
private IResource resource;
IInternalElementType<IBMotionSurfaceRoot> ELEMENT_TYPE = RodinCore
.getInternalElementType(BMotionEditorPlugin.PLUGIN_ID
+ ".BMotionStudioFile"); //$NON-NLS-1$
public BMotionStudioRodinFile(IResource resource) {
this.resource = resource;
}
public IResource getResource() {
return resource;
}
public void setResource(IResource resource) {
this.resource = resource;
}
}
/**
* (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen,
* Heinrich Heine Universitaet Duesseldorf
* This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html)
* */
package de.bmotionstudio.rodin;
import org.rodinp.core.IInternalElementType;
import org.rodinp.core.IRodinElement;
import org.rodinp.core.RodinDBException;
import org.rodinp.core.basis.InternalElement;
import org.rodinp.core.basis.RodinElement;
public class BMotionSurfaceRoot extends InternalElement implements
IBMotionSurfaceRoot {
public BMotionSurfaceRoot(final String name, final IRodinElement parent) {
super(name, parent);
}
@Override
public RodinElement[] getChildren() throws RodinDBException {
return NO_ELEMENTS;
}
@Override
public IInternalElementType<IBMotionSurfaceRoot> getElementType() {
return ELEMENT_TYPE;
}
}
/**
* (c) 2009 Lehrstuhl fuer Softwaretechnik und Programmiersprachen,
* Heinrich Heine Universitaet Duesseldorf
* This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html)
* */
package de.bmotionstudio.rodin;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.rodinp.core.IRodinFile;
import org.rodinp.core.IRodinProject;
import org.rodinp.core.RodinCore;
import org.rodinp.core.RodinDBException;
import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
import de.bmotionstudio.gef.editor.internal.BMotionFileInputValidator;
/**
* @author Lukas Ladenberger
*
*/
public class RenameFileHandler extends AbstractHandler implements IHandler {
private ISelection fSelection;
private IWorkbenchPart part;
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
fSelection = HandlerUtil.getCurrentSelection(event);
part = HandlerUtil.getActivePart(event);
if (fSelection instanceof IStructuredSelection) {
IStructuredSelection ssel = (IStructuredSelection) fSelection;
if (ssel.size() == 1) {
Object obj = ssel.getFirstElement();
if (obj instanceof IBMotionSurfaceRoot) {
final IBMotionSurfaceRoot root = (IBMotionSurfaceRoot) obj;
if (root.getParent() instanceof IRodinFile) {
final IRodinFile file = root.getRodinFile();
final IRodinProject prj = file.getRodinProject();
InputDialog dialog = new InputDialog(part.getSite()
.getShell(), "Rename BMotion Studio Project",
"Please enter the new name for the Project",
getDefaultName(root),
new BMotionFileInputValidator(prj));
dialog.open();
final String bareName = dialog.getValue();
if (dialog.getReturnCode() == InputDialog.CANCEL)
return null; // Cancel
assert bareName != null;
try {
RodinCore.run(new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor)
throws RodinDBException {
String newName = bareName
+ "."
+ BMotionEditorPlugin.FILEEXT_STUDIO;
if (newName != null)
file.rename(newName, false, monitor);
}
}, null);
} catch (RodinDBException e) {
e.printStackTrace();
}
}
}
}
}
return null;
}
public void selectionChanged(final IAction action,
final ISelection selection) {
fSelection = selection;
}
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
part = targetPart;
}
private String getDefaultName(IBMotionSurfaceRoot root) {
return root.getResource().getName().replace(".bmso", "");
}
}
......@@ -8,6 +8,11 @@ package de.bmotionstudio.rodin;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.IStructuredSelection;
import de.bmotionstudio.gef.editor.handler.StartVisualizationFileHandler;
......@@ -21,8 +26,14 @@ public class StartEventBVisualizationHandler extends
@Override
protected IFile getBmsFileFromSelection(IStructuredSelection ssel) {
if (ssel.getFirstElement() instanceof IBMotionSurfaceRoot)
return ((IBMotionSurfaceRoot) ssel.getFirstElement()).getResource();
if (ssel.getFirstElement() instanceof BMotionStudioRodinFile) {
IResource resource = ((BMotionStudioRodinFile) ssel
.getFirstElement()).getResource();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IPath location = Path.fromOSString(resource.getFullPath()
.toOSString());
return workspace.getRoot().getFileForLocation(location);
}
return null;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment