Author: koen.aers(a)jboss.com
Date: 2009-09-03 19:28:27 -0400 (Thu, 03 Sep 2009)
New Revision: 17458
Modified:
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/AbstractContentProvider.java
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/ContentProvider.java
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/Editor.java
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/GraphPage.java
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlContentProvider.java
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlEditor.java
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/pf/editor/PageFlowEditor.java
Log:
JBIDE-3915: jBPM Eclipse plugin can't save graphical view if gpd.xml is marked as read
only
Modified:
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/AbstractContentProvider.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/AbstractContentProvider.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/AbstractContentProvider.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -81,14 +81,21 @@
return buffer.toString();
}
- protected String getNotationInfoFileName(String semanticInfoFileName) {
+ public String getNotationInfoFileName(String semanticInfoFileName) {
return ".gpd." + semanticInfoFileName;
}
-
- protected String getSemanticInfoFileName(String notationInfoFileName) {
- return notationInfoFileName.substring(5);
+
+ public String getDiagramImageFileName(String semanticInfoFileName) {
+ String result;
+ int index = semanticInfoFileName.indexOf(".xml");
+ result = index > -1 ? semanticInfoFileName.substring(0, index) :
semanticInfoFileName;
+ return result + ".jpg";
}
+// public String getSemanticInfoFileName(String notationInfoFileName) {
+// return notationInfoFileName.substring(5);
+// }
+
protected void processRootContainer(RootContainer rootContainer, Element notationInfo)
{
addDimension(rootContainer, notationInfo);
addNodes(rootContainer, notationInfo);
Modified:
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/ContentProvider.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/ContentProvider.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/ContentProvider.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -8,4 +8,7 @@
boolean saveToInput(IEditorInput input, RootContainer rootContainer);
void addNotationInfo(RootContainer rootContainer, IEditorInput input);
+ String getNotationInfoFileName(String semanticInfoFileName);
+ String getDiagramImageFileName(String semanticInfoFileName);
+
}
Modified: trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/Editor.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/Editor.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/Editor.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -1,7 +1,13 @@
package org.jbpm.gd.common.editor;
+import java.util.ArrayList;
import java.util.EventObject;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.ResourceAttributes;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.EditDomain;
@@ -11,6 +17,7 @@
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
@@ -24,6 +31,7 @@
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
@@ -84,6 +92,7 @@
initSourcePage();
initGraphPage();
setActivePage(0);
+ checkReadOnly();
}
protected void addPage(int index, IEditorPart part, String label) {
@@ -198,11 +207,15 @@
private void handleCommandStackChanged() {
getActionRegistry().updateStackActions();
- if (!isDirty() && getCommandStack().isDirty()) {
+ if (!isDirty() && getCommandStack().isDirty() && editAllowed()) {
isDirty = true;
firePropertyChange(IEditorPart.PROP_DIRTY);
}
}
+
+ private boolean editAllowed() {
+ return true;
+ }
protected void pageChange(int newPageIndex) {
if (newPageIndex == 0) {
@@ -302,6 +315,7 @@
}
public void doSave(IProgressMonitor monitor) {
+ if (!checkReadOnly()) return;
super.doSave(monitor);
getGraphPage().doSave(monitor);
boolean saved = getContentProvider().saveToInput(getEditorInput(),
getRootContainer());
@@ -316,12 +330,53 @@
super.dispose();
}
- public abstract String getDefaultImageFileName();
-
protected SelectionSynchronizer createSelectionSynchronizer() {
return new SelectionSynchronizer();
}
+ private boolean checkReadOnly() {
+ IFile inputFile = ((FileEditorInput)getEditorInput()).getFile();
+ IFolder inputFolder = (IFolder)inputFile.getParent();
+ IFile notationInfoFile =
inputFolder.getFile(getContentProvider().getNotationInfoFileName(inputFile.getName()));
+ IFile diagramImageFile =
inputFolder.getFile(getContentProvider().getDiagramImageFileName(inputFile.getName()));
+ String readOnlyFiles = "";
+ ArrayList readOnlyFilesList = new ArrayList();
+ if (inputFile.isReadOnly()) {
+ readOnlyFiles += ("- " + inputFile.getFullPath().toOSString() +
"\n");
+ readOnlyFilesList.add(inputFile);
+ }
+ if (notationInfoFile.exists() && notationInfoFile.isReadOnly()) {
+ readOnlyFiles += ("- " + notationInfoFile.getFullPath().toOSString() +
"\n");
+ readOnlyFilesList.add(notationInfoFile);
+ }
+ if (diagramImageFile.exists() && diagramImageFile.isReadOnly()) {
+ readOnlyFiles += ("- " + diagramImageFile.getFullPath().toOSString() +
"\n");
+ readOnlyFilesList.add(diagramImageFile);
+ }
+ if (readOnlyFilesList.isEmpty()) return true;
+ boolean answer = MessageDialog.openQuestion(
+ getSite().getShell(),
+ "Read-only Input Files Detected",
+ "The following files have a read-only indicator which needs to be changed to
read-write in order to be able to save the process correctly.\n\n" +
+ readOnlyFiles + "\n" +
+ "Do you want to perform this change now?");
+ if (answer) {
+ try {
+ ResourceAttributes resourceAttributes = new ResourceAttributes();
+ resourceAttributes.setReadOnly(false);
+ for (int i = 0; i < readOnlyFilesList.size(); i++) {
+ ((IFile)readOnlyFilesList.get(i)).setResourceAttributes(resourceAttributes);
+ }
+ return false;
+ } catch (CoreException e) {
+ Logger.logError("Error while trying to set files writeable", e);
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+
protected abstract ContentProvider createContentProvider();
protected abstract SemanticElement createMainElement();
protected abstract GraphicalViewer createGraphicalViewer();
Modified:
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/GraphPage.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/GraphPage.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/common/editor/GraphPage.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -131,18 +131,13 @@
}
}
- private String getImageSavePath() {
+ public String getImageSavePath() {
IFile file = ((FileEditorInput)getEditorInput()).getFile();
- String name = file.getName();
- if (name.startsWith(".gpd.") && name.length() > 7) {
- name = name.substring(5, name.length() - 3) + "jpg";
- } else {
- name = editor.getDefaultImageFileName();
- }
+ String name = editor.getContentProvider().getDiagramImageFileName(file.getName());
IPath path = file.getRawLocation().removeLastSegments(1).append(name);
return path.toOSString();
}
-
+
public void doSaveAs() {
}
Modified:
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlContentProvider.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlContentProvider.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlContentProvider.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -36,7 +36,7 @@
public class JpdlContentProvider extends AbstractContentProvider{
- protected String getNotationInfoFileName(String semanticInfoFileName) {
+ public String getNotationInfoFileName(String semanticInfoFileName) {
if ("processdefinition.xml".equals(semanticInfoFileName)) {
return "gpd.xml";
} else {
@@ -44,14 +44,22 @@
}
}
- protected String getSemanticInfoFileName(String notationInfoFileName) {
- if ("gpd.xml".equals(notationInfoFileName)) {
- return "processdefinition.xml";
+ public String getDiagramImageFileName(String semanticInfoFileName) {
+ if ("processdefinition.xml".equals(semanticInfoFileName)) {
+ return "processimage.jpg";
} else {
- return super.getSemanticInfoFileName(notationInfoFileName);
+ return super.getDiagramImageFileName(semanticInfoFileName);
}
}
+// public String getSemanticInfoFileName(String notationInfoFileName) {
+// if ("gpd.xml".equals(notationInfoFileName)) {
+// return "processdefinition.xml";
+// } else {
+// return super.getSemanticInfoFileName(notationInfoFileName);
+// }
+// }
+
protected void addNodes(NodeContainer nodeContainer, Element notationInfo) {
NodeElementContainer nodeElementContainer =
(NodeElementContainer)nodeContainer.getSemanticElement();
addNodes(nodeContainer, nodeElementContainer.getNodeElements(), notationInfo);
Modified: trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlEditor.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlEditor.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/jpdl/editor/JpdlEditor.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -144,8 +144,4 @@
super.dispose();
}
- public String getDefaultImageFileName() {
- return "processimage.jpg";
- }
-
}
Modified:
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/pf/editor/PageFlowEditor.java
===================================================================
---
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/pf/editor/PageFlowEditor.java 2009-09-03
19:41:58 UTC (rev 17457)
+++
trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd/pf/editor/PageFlowEditor.java 2009-09-03
23:28:27 UTC (rev 17458)
@@ -1,6 +1,5 @@
package org.jbpm.gd.pf.editor;
-import org.eclipse.ui.part.FileEditorInput;
import org.jbpm.gd.common.editor.ContentProvider;
import org.jbpm.gd.common.editor.Editor;
import org.jbpm.gd.common.editor.GraphicalViewer;
@@ -11,13 +10,6 @@
public class PageFlowEditor extends Editor {
- public String getDefaultImageFileName() {
- String str = ((FileEditorInput)getEditorInput()).getName();
- int index = str.indexOf(".xml");
- str = index > -1 ? str.substring(0, index) : str;
- return str + ".jpg";
- }
-
protected ContentProvider createContentProvider() {
return new PageFlowContentProvider();
}