[jbosstools-commits] JBoss Tools SVN: r7196 - in trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model: loaders/impl and 1 other directory.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Fri Mar 28 14:54:52 EDT 2008


Author: scabanovich
Date: 2008-03-28 14:54:52 -0400 (Fri, 28 Mar 2008)
New Revision: 7196

Modified:
   trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/OrderedChildren.java
   trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java
   trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java
   trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/loaders/impl/PropertiesLoader.java
Log:
JBIDE-1966

Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/OrderedChildren.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/OrderedChildren.java	2008-03-28 18:32:54 UTC (rev 7195)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/OrderedChildren.java	2008-03-28 18:54:52 UTC (rev 7196)
@@ -15,6 +15,7 @@
 
 public class OrderedChildren extends RegularChildren {
     protected XModelObject[] list = EMPTY;
+    protected List<XModelObject> alist = new ArrayList<XModelObject>();
 
     public OrderedChildren() {}
 
@@ -24,22 +25,24 @@
 
     public void clear() {
         super.clear();
-        if(list != EMPTY) synchronized (this) {
+        if(size() > 0) synchronized (this) {
+        	alist.clear();
         	list = EMPTY;
         }
     }
     
     public XModelObject[] getObjects() {
+    	if(list == null) synchronized (this) {
+    		list = alist.toArray(new XModelObject[0]);
+    	}
         return list;
     }
 
     public boolean addObject(XModelObject o) {
         if(!super.addObject(o)) return false;
         synchronized (this) {
-        	XModelObject[] ls = new XModelObject[list.length + 1];
-        	System.arraycopy(list, 0, ls, 0, list.length);
-        	ls[list.length] = o;
-        	list = ls;
+        	alist.add(o);
+        	list = null;
         }
         return true;
     }
@@ -50,39 +53,49 @@
         if(i >= 0) synchronized (this) {
         	if(list.length == 1) {
         		list = EMPTY;
+        		alist.clear();
         	} else {
-        		XModelObject[] ls = new XModelObject[list.length - 1];
-        		if(i > 0) System.arraycopy(list, 0, ls, 0, i);
-        		System.arraycopy(list, i + 1, ls, i, list.length - i - 1);
-        		list = ls;
+        		alist.remove(i);
+            	list = null;
         	}
         }
         return true;
     }
 
     public synchronized int getIndex(XModelObject o) {
-        for (int i = 0; i < list.length; i++) if(o == list[i]) return i;
-        return -1;
+    	return alist.indexOf(o);
     }
 
     public synchronized boolean move(int from, int to) {
-        if(list.length == 0) throw new IndexOutOfBoundsException();
-        int size = list.length;
+        int size = size();
+        if(size == 0) throw new IndexOutOfBoundsException();
         if(to >= size) to = size - 1;
         if(from < 0 || from >= size || from == to) return false;
-        XModelObject o = list[from];
+        XModelObject o = alist.get(from);
         int delta = to > from ? 1 : -1;
         for (int k = from; k != to; k += delta) {
-        	list[k] = list[k + delta];        	
+        	alist.set(k, alist.get(k + delta));
+        	if(list != null) list[k] = list[k + delta];
         }
-        list[to] = o;
+        alist.set(to, o);
+    	if(list != null) list[to] = o;
         return true;
     }
 
     public void sort(Comparator<XModelObject> c) {
         if(c == null) c = comparator;
         if(c == null) return;
+        getObjects();
         Arrays.sort(list, c);
+        alist = Arrays.asList(list);
     }
 
+	public void replaceChildren(XModelObject[] objects) {
+		super.replaceChildren(objects);
+		synchronized (this) {
+			alist = Arrays.asList(objects);
+			list = null;
+		}
+	}
+
 }

Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java	2008-03-28 18:32:54 UTC (rev 7195)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularChildren.java	2008-03-28 18:54:52 UTC (rev 7196)
@@ -213,6 +213,18 @@
 		return false;
 	}
 
+	public void replaceChildren(XModelObject[] objects) {
+		if(objects.length == 0) {
+			if(this.objects != null) this.objects = null;
+		} else {
+			SMap m = new SMap();
+			for (int i = 0; i < objects.length; i++) {
+				m.put(objects[i].getPathPart(), objects[i]);
+			}
+			this.objects = m;
+		}
+	}
+	
 }
 
 /**

Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java	2008-03-28 18:32:54 UTC (rev 7195)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java	2008-03-28 18:54:52 UTC (rev 7196)
@@ -149,6 +149,12 @@
         }
         return b;
     }
+    
+    //TODO implement registering/unregistering error children 
+    public void replaceChildren(XModelObject[] objects) {
+    	children.replaceChildren(objects);
+    	changeTimeStamp();
+    }
 
 }
 

Modified: trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/loaders/impl/PropertiesLoader.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/loaders/impl/PropertiesLoader.java	2008-03-28 18:32:54 UTC (rev 7195)
+++ trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/loaders/impl/PropertiesLoader.java	2008-03-28 18:54:52 UTC (rev 7196)
@@ -17,7 +17,6 @@
 import org.jboss.tools.common.model.loaders.*;
 import org.jboss.tools.common.model.plugin.ModelPlugin;
 import org.jboss.tools.common.model.util.*;
-import org.jboss.tools.common.model.engines.impl.EnginesLoader;
 import org.jboss.tools.common.model.impl.*;
 import org.jboss.tools.common.meta.XAttribute;
 
@@ -43,9 +42,10 @@
         } catch (Exception e) {
         	//ignore
         }
+
         StringTokenizer st = new StringTokenizer(body, "\n\r", true);
-        StringBuffer sb = new StringBuffer();
-        StringBuffer lineEnd = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
+        StringBuilder lineEnd = new StringBuilder();
         int state = 0;
         XModelObject c = null;
         while(st.hasMoreTokens()) {
@@ -103,8 +103,10 @@
             p.setProperty("comments", comments);
             p.setProperty("separator", "#"); //obsolete
             p.setProperty("line-end", "");
+
             c = object.getModel().createModelObject("Property", p);
             object.addChild(c);
+
             String dirtyvalue = (i < s.length()) ? s.substring(i + 1) : "";
             if(s.endsWith("\\")) {
             	state = 3;
@@ -123,7 +125,8 @@
         XModelObject c = object.copy(0);
 		XModelObjectLoaderUtil.setTempBody(c, XModelObjectLoaderUtil.getTempBody(object));
         load(c);
-        EnginesLoader.merge(object, c, false);
+        ////EnginesLoader.merge(object, c, false);
+        merge(object, c);
         object.setModified(false);
         return true;
     }
@@ -231,14 +234,15 @@
     	for (int i = 0; i < c1.length; i++) m1.put(c1[i].getPathPart(), c1[i]);
 		XModelObject[] c2 = o2.getChildren();
 		RegularObjectImpl impl1 = (RegularObjectImpl)o1;
-		boolean ch = false;
+		boolean ch = c2.length != c1.length;
+		boolean mod = false;
 		for (int i = 0; i < c2.length; i++) {
 			XModelObject c = (XModelObject)m1.remove(c2[i].getPathPart());
 			if(c == null) {
-				o1.addChild(c = c2[i].copy());
-				ch = true;				
+				c = c2[i].copy();
+				((XModelObjectImpl)c).setParent_0(impl1);
 			} else if(!c.isEqual(c2[i])) { 
-				ch = true;
+				mod = true;
 				XAttribute[] as = c.getModelEntity().getAttributes();
 				for (int j = 0; j < as.length; j++) {
 					if(!as[j].isCopyable()) continue;				
@@ -249,22 +253,28 @@
 					  c.setAttributeValue(n, v2);				
 				}
 			}
-			int ic = impl1.getIndexOfChild(c);
-			if(ic != i) {
-				impl1.move(ic, i, true);				
-			}			
+			if(!ch && c1[i] != c) {
+				ch = true;
+			}
+			c2[i] = c;
 		}
 		c1 = (XModelObject[])m1.values().toArray(new XModelObject[0]);
-		for (int i = 0; i < c1.length; i++) c1[i].removeFromParent();
+//		for (int i = 0; i < c1.length; i++) c1[i].removeFromParent();
+		
+		if(ch || c1.length > 0) {
+			impl1.replaceChildren(c2);
+			((XModelImpl)o1.getModel()).fireStructureChanged(o1);
+		}
+
 		String conclusion1 = o1.get("conclusion");
 		if(conclusion1 == null) conclusion1 = "";
 		String conclusion2 = o2.get("conclusion");
 		if(conclusion2 == null) conclusion2 = "";
 		if(!conclusion1.equals(conclusion2)) {
 			o1.set("conclusion", conclusion2);
-			ch = true;
+			mod = true;
 		}
-		if(ch) o1.setModified(true);
+		if(ch || mod) o1.setModified(true);
     }
     
     private String convertName(String n) {




More information about the jbosstools-commits mailing list