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) {