[jbosstools-commits] JBoss Tools SVN: r17458 - in trunk/jbpm/plugins/org.jbpm.gd.jpdl/src/org/jbpm/gd: jpdl/editor and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Sep 3 19:28:27 EDT 2009


Author: koen.aers at 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();
 	}



More information about the jbosstools-commits mailing list