[jbosstools-commits] JBoss Tools SVN: r42961 - in trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common: editor and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Thu Aug 9 19:44:45 EDT 2012


Author: scabanovich
Date: 2012-08-09 19:44:45 -0400 (Thu, 09 Aug 2012)
New Revision: 42961

Modified:
   trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/core/resources/XModelObjectEditorInput.java
   trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java
   trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/TextEditorSupport.java
Log:
JBIDE-12411
https://issues.jboss.org/browse/JBIDE-12410
When file systems in model are rebuilt, for example after web content path is replaced, editors that use xmodel object representing a file resource should check if the xmodel object is deleted from the model, and in this case find the new valid object.

Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/core/resources/XModelObjectEditorInput.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/core/resources/XModelObjectEditorInput.java	2012-08-09 23:24:29 UTC (rev 42960)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/core/resources/XModelObjectEditorInput.java	2012-08-09 23:44:45 UTC (rev 42961)
@@ -47,6 +47,22 @@
 		this.object = object;
 		cache = new XModelObjectCache(object);
 	}
+
+	/**
+	 * Returns true if XModelObject corresponding to the file is replaced.
+	 * 
+	 * @return
+	 */
+	public boolean updateXModelObject() {
+		IFile file = getFile();
+		XModelObject o = EclipseResourceUtil.createObjectForResource(file);
+		if(o != null && o != object) {
+			object = o;
+			cache = new XModelObjectCache(object);
+			return true;
+		}
+		return false;
+	}
 	
 	private static XModelObject getMainObject(XModelObject object) {
 		if(object instanceof FileAnyAuxiliaryImpl) {
@@ -135,10 +151,7 @@
 	}
 
 	public IFile getFile() {
-//		XModelObject o = getXModelObject();
-//		if (o == null || o.getPath() == null)
-			return super.getFile();
-//		return getFileByObject(o);
+		return super.getFile();
 	}
 	
 	public boolean isFileChanged() {

Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java	2012-08-09 23:24:29 UTC (rev 42960)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/editor/ObjectMultiPageEditor.java	2012-08-09 23:44:45 UTC (rev 42961)
@@ -12,13 +12,10 @@
 
 import java.io.*;
 import java.text.MessageFormat;
-import java.util.*;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.Properties;
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
-import org.jboss.tools.common.CommonPlugin;
 import org.jboss.tools.common.core.resources.XModelObjectEditorInput;
 import org.jboss.tools.common.model.util.XModelTreeListenerSWTSync;
 import org.jboss.tools.common.model.ui.outline.XModelObjectContentOutlineProvider;
@@ -53,6 +50,7 @@
 import org.jboss.tools.common.model.event.XModelTreeListener;
 import org.jboss.tools.common.model.filesystems.FileSystemsHelper;
 import org.jboss.tools.common.model.filesystems.impl.FileAnyImpl;
+import org.jboss.tools.common.model.filesystems.impl.FileSystemImpl;
 import org.jboss.tools.common.model.filesystems.impl.FolderImpl;
 import org.jboss.tools.common.model.options.Preference;
 import org.jboss.tools.common.model.options.PreferenceModelUtilities;
@@ -552,6 +550,33 @@
 	public void structureChanged(XModelTreeEvent event) {
 		if(lock2) return;
 		if(waitForMerge) return;
+
+		if((event.getModelObject() instanceof FileSystemImpl || event.getDetails() instanceof FileSystemImpl) &&
+				getFile() != null && getFile().exists() && getEditorInput() instanceof XModelObjectEditorInput) {
+			XModelObjectEditorInput ei = (XModelObjectEditorInput)getEditorInput();
+			if(ei.updateXModelObject()) {
+				lock2 = true;
+				try {
+					XModelObject o = ei.getXModelObject();
+				
+					if(textEditor != null) textEditor.setObject(o);
+					object = o;
+					setInput(ei);
+
+					lastModifiedTimeStamp = (object == null || object.isModified()) ? -1 : object.getLastModificationTimeStamp();
+					cache = new XModelObjectCache(object);
+					outline.setCache(cache);
+					model = object.getModel();
+
+					updateTitle();
+					timeStamp = -1;
+					update0();
+				} finally {
+					lock2 = false;
+				}
+			}
+		}
+
 		if(needsUpdate()) {
 			Display.getDefault().syncExec(new U());
 		}

Modified: trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/TextEditorSupport.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/TextEditorSupport.java	2012-08-09 23:24:29 UTC (rev 42960)
+++ trunk/common/plugins/org.jboss.tools.common.model.ui/src/org/jboss/tools/common/model/ui/texteditors/TextEditorSupport.java	2012-08-09 23:44:45 UTC (rev 42961)
@@ -41,7 +41,7 @@
 	}
 
 	public void update() {
-		if(lock > 0) return;
+		if(lock > 0 || modified) return;
 		if(!needsUpdate()) return;
 		lock++;
 		try {
@@ -85,7 +85,8 @@
 		lock++;
 		try {
 			FileAnyImpl f = (FileAnyImpl)getModelObject();
-			if(f != null) f.edit(provider.getText()); 
+			if(f != null) f.edit(provider.getText());
+			timeStamp = f.getTimeStamp();
 		} catch (XModelException e) {
 			ModelUIPlugin.getPluginLog().logError(e);
 		} finally {



More information about the jbosstools-commits mailing list