[jbosstools-commits] JBoss Tools SVN: r22036 - in branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common: model/engines/impl and 3 other directories.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Wed May 12 10:25:18 EDT 2010
Author: scabanovich
Date: 2010-05-12 10:25:17 -0400 (Wed, 12 May 2010)
New Revision: 22036
Modified:
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/meta/constraint/impl/XAttributeConstraintInt.java
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/engines/impl/EnginesLoader.java
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/XModelObjectImpl.java
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ConstraintChecker.java
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ResourceMarkers.java
branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/XModelObjectLoaderUtil.java
Log:
https://jira.jboss.org/jira/browse/JBDS-1197
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/meta/constraint/impl/XAttributeConstraintInt.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/meta/constraint/impl/XAttributeConstraintInt.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/meta/constraint/impl/XAttributeConstraintInt.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -14,7 +14,7 @@
import org.w3c.dom.*;
public class XAttributeConstraintInt extends XAttributeConstraintProperties {
- protected boolean mandatory = true;
+ protected boolean mandatory = false;
protected int min = Integer.MIN_VALUE;
protected int max = Integer.MAX_VALUE;
public XAttributeConstraintInt() {
@@ -23,7 +23,7 @@
public void load(Element element) {
super.load(element);
- mandatory = getBoolean("mandatory", true); //$NON-NLS-1$
+ mandatory = getBoolean("mandatory", false); //$NON-NLS-1$
min = getInt("minimum", Integer.MIN_VALUE); //$NON-NLS-1$
max = getInt("maximum", Integer.MAX_VALUE); //$NON-NLS-1$
}
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/engines/impl/EnginesLoader.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/engines/impl/EnginesLoader.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/engines/impl/EnginesLoader.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -86,11 +86,18 @@
c = cs[i].copy();
object.addChild(c);
} else {
- boolean has_id = c.getModelEntity().getAttribute(XModelObjectLoaderUtil.ATTR_ID_NAME) != null;
+ boolean has_id = c.getModelEntity().getAttribute(XModelObjectLoaderUtil.ATTR_ID_NAME) != null
+ || ((XModelObjectImpl)c).hasIdAttr();
if(has_id) {
c.removeFromParent();
EnginesLoader.merge(c, cs[i], false);
- object.addChild(c);
+ if(!object.addChild(c)) {
+ c.set(XModelObjectImpl.DUPLICATE, "1234");
+ object.addChild(c);
+ }
+ if(c.get(XModelObjectImpl.DUPLICATE) != null) {
+ c.set(XModelObjectImpl.DUPLICATE, "");
+ }
} else {
EnginesLoader.merge(c, cs[i], fire);
}
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/RegularObjectImpl.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -117,6 +117,18 @@
k++;
}
return;
+ } else if(hasIdAttr()) {
+ int k = 1;
+ while(c != null) {
+ super.set(XModelObjectImpl.DUPLICATE, "" + k); //$NON-NLS-1$
+ npp = getPathPart();
+ if(k == 1 && npp.indexOf(XModelObjectImpl.DUPLICATE) < 0) {
+ elementExists(c, name, value);
+ return;
+ }
+ c = p.children.change(this, opp, npp);
+ k++;
+ }
} else {
if(ov == null) properties.remove(name); else super.set(name, ov);
elementExists(c, name, value);
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/XModelObjectImpl.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/XModelObjectImpl.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/impl/XModelObjectImpl.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -40,6 +40,7 @@
public class XModelObjectImpl implements XModelObject, Serializable, Cloneable {
private static final long serialVersionUID = 3860648580262144825L;
// protected static final String ENTITY = XModelConstants.XMODEL_ENTITY_ATTR;
+ public static final String DUPLICATE = "__duplicate";
private XModel model = null;
private XModelEntity entity = null;
private XModelObjectImpl parent = null;
@@ -136,6 +137,21 @@
properties.put(name.intern(), value);
}
+ private Boolean hasIdAttr = null;
+
+ public boolean hasIdAttr() {
+ if(hasIdAttr != null) return hasIdAttr.booleanValue();
+ hasIdAttr = Boolean.FALSE;
+ for (int i = 0; i < getModelEntity().getAttributes().length; i++) {
+ if("true".equals(getModelEntity().getAttributes()[i].getProperty("id"))) {
+ hasIdAttr = Boolean.TRUE;
+ break;
+ }
+ }
+
+ return hasIdAttr.booleanValue();
+ }
+
protected String get_0(String name) {
XAttribute a = getModelEntity().getAttribute(name);
return (a == null || a.getAdapter() == null) ? null : a.getAdapter().getProperty(this);
@@ -300,8 +316,17 @@
public String getPathPart() {
String p = name();
- return (p == null || p.indexOf('/') < 0) ? p : p.replace('/', '#');
+ p = ((p == null || p.indexOf('/') < 0) ? p : p.replace('/', '#'));
+ return applyDuplicate(p);
}
+
+ protected final String applyDuplicate(String pathpart) {
+ String duplicate = get(DUPLICATE);
+ return (duplicate == null || duplicate.length() == 0)
+ ? pathpart
+ : pathpart + DUPLICATE + duplicate;
+
+ }
public XModelObject getChildByPath(String path) {
int i = path.indexOf(XModelObjectConstants.SEPARATOR);
@@ -360,6 +385,10 @@
String entity = (transform) ? getEntityForCopy() : getModelEntity().getName();
XModelObject c = getModel().createModelObject(entity, p);
if(c != null) c.setModified(true);
+ String d = get(DUPLICATE);
+ if(d != null && d.length() > 0) {
+ c.set(DUPLICATE, d);
+ }
return c;
}
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ConstraintChecker.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ConstraintChecker.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ConstraintChecker.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -39,12 +39,19 @@
private void check(XModelObject o) {
XAttribute[] as = o.getModelEntity().getAttributes();
+ String idAttr = null;
for (int i = 0; i < as.length; i++) {
String error = as[i].getConstraint().getError(o.getAttributeValue(as[i].getName()));
if(error != null) addProblem(o, as[i].getName(), "Value " + error);
+ if("true".equals(as[i].getProperty("id"))) idAttr = as[i].getName();
}
XModelObject[] cs = ((XModelObjectImpl)o).getLoadedChildren();
for (int i = 0; i < cs.length; i++) check(cs[i]);
+
+ String duplicate = o.get(XModelObjectImpl.DUPLICATE);
+ if(duplicate != null && duplicate.length() > 0 && idAttr != null) {
+ addProblem(o, idAttr, "Value " + o.getAttributeValue(idAttr) + " is not unique.");
+ }
}
protected void addProblem(XModelObject o, String attr, String msg) {
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ResourceMarkers.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ResourceMarkers.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/markers/ResourceMarkers.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -30,7 +30,7 @@
public class ResourceMarkers {
public static String TEXT_PROBLEM = "org.jboss.tools.common.model.textproblemmarker"; //$NON-NLS-1$
- public static String CONSTRAINT_PROBLEM = "org.jboss.tools.common.model.web.ui.constraintsmarker"; //$NON-NLS-1$
+ public static String CONSTRAINT_PROBLEM = "org.jboss.tools.jst.web.ui.constraintsmarker"; //$NON-NLS-1$
public static String JST_WEB_PROBLEM = "org.jboss.tools.jst.web.ui.strutsmarker"; //$NON-NLS-1$
private XModelObject object;
Modified: branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/XModelObjectLoaderUtil.java
===================================================================
--- branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/XModelObjectLoaderUtil.java 2010-05-12 13:47:06 UTC (rev 22035)
+++ branches/jbosstools-3.1.x/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/XModelObjectLoaderUtil.java 2010-05-12 14:25:17 UTC (rev 22036)
@@ -223,9 +223,13 @@
XModelEntity entity = o.getModelEntity();
XAttribute[] as = entity.getAttributes();
for (int i = 0; i < as.length; i++) {
+ String n = as[i].getName();
+ if("attributes".equals(n) && "true".equals(as[i].getProperty("any"))) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ loadAnyAtributes(element, o);
+ continue;
+ }
String xmlname = as[i].getXMLName();
if (xmlname == null || xmlname.length() == 0) continue;
- String n = as[i].getName();
String value = getAttribute(element, xmlname, as[i]);
if (value != null) o.setAttributeValue(n, value);
String commentName = getAttributeCommentName(xmlname);
@@ -332,6 +336,17 @@
if(q != null) EnginesLoader.merge(q, co, false);
} catch (XModelException exc) {
ModelPlugin.getPluginLog().logError("XModelObjectLoaderUtil:loadChildren:" + exc.getMessage(), exc); //$NON-NLS-1$
+ } else {
+ int k = 1;
+ String pp = co.getPathPart();
+ while(o.getChildByPath(pp) != null) {
+ co.set(XModelObjectImpl.DUPLICATE, "" + k); //$NON-NLS-1$
+ String ppn = co.getPathPart();
+ if(ppn.equals(pp)) break;
+ pp = ppn;
+ ++k;
+ }
+ o.addChild(co);
}
continue;
}
@@ -443,9 +458,13 @@
}
for (int i = 0; i < as.length; i++) {
if (as[i].isFake()) continue;
+ String n = as[i].getName();
+ if("attributes".equals(n) && "true".equals(as[i].getProperty("any"))) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ saveAnyAtributes(element, o);
+ continue;
+ }
String xmlname = as[i].getXMLName();
if (xmlname == null || xmlname.length() == 0) continue;
- String n = as[i].getName();
String v = o.getAttributeValue(n);
if (isSaveable(entity, n, v, as[i].getDefaultValue())) {
saveAttribute(element, xmlname, v);
@@ -843,24 +862,35 @@
protected void loadAnyElement(Element element, XModelObject o) {
o.setAttributeValue("tag", element.getTagName()); //$NON-NLS-1$
+ loadAnyAtributes(element, o);
+ String text = getAttribute(element, "#text").trim(); //$NON-NLS-1$
+ if(text.length() > 0) {
+ while(text.startsWith("\n") || text.startsWith("\r")) text = text.substring(1); //$NON-NLS-1$ //$NON-NLS-2$
+ while(text.endsWith("\n") || text.endsWith("\r")) text = text.substring(0, text.length() - 1); //$NON-NLS-1$ //$NON-NLS-2$
+ o.setAttributeValue("text", text); //$NON-NLS-1$
+ }
+ loadChildren(element, o);
+ }
+
+ public static void loadAnyAtributes(Element element, XModelObject o) {
+ HashSet<String> attrs = new HashSet<String>();
+ XAttribute[] oas = o.getModelEntity().getAttributes();
+ for (XAttribute a: oas) {
+ String xml = a.getXMLName();
+ if(xml != null && xml.length() > 0) attrs.add(xml);
+ }
StringBuffer sb = new StringBuffer();
NamedNodeMap as = element.getAttributes();
for (int i = 0; i < as.getLength(); i++) {
Node n = as.item(i);
String nm = n.getNodeName();
+ if(attrs.contains(nm)) continue;
String v = n.getNodeValue();
if(v == null) continue;
if(sb.length() > 0) sb.append(";"); //$NON-NLS-1$
sb.append(nm).append("=").append(v); //$NON-NLS-1$
}
o.setAttributeValue("attributes", sb.toString()); //$NON-NLS-1$
- String text = getAttribute(element, "#text").trim(); //$NON-NLS-1$
- if(text.length() > 0) {
- while(text.startsWith("\n") || text.startsWith("\r")) text = text.substring(1); //$NON-NLS-1$ //$NON-NLS-2$
- while(text.endsWith("\n") || text.endsWith("\r")) text = text.substring(0, text.length() - 1); //$NON-NLS-1$ //$NON-NLS-2$
- o.setAttributeValue("text", text); //$NON-NLS-1$
- }
- loadChildren(element, o);
}
protected void saveAnyElement(Element parent, XModelObject o) {
@@ -870,6 +900,18 @@
xmlname = namespace + ":" + xmlname; //$NON-NLS-1$
}
Element element = XMLUtil.createElement(parent, xmlname);
+ saveAnyAtributes(element, o);
+ String text = o.getAttributeValue("text"); //$NON-NLS-1$
+ if(text != null && text.length() > 0) {
+ saveAttribute(element, "#text", text); //$NON-NLS-1$
+ }
+ XModelObject[] cs = o.getChildren();
+ for (int i = 0; i < cs.length; i++) {
+ saveAnyElement(element, cs[i]);
+ }
+ }
+
+ public static void saveAnyAtributes(Element element, XModelObject o) {
String attrs = o.getAttributeValue("attributes"); //$NON-NLS-1$
StringTokenizer st = new StringTokenizer(attrs, ";"); //$NON-NLS-1$
while(st.hasMoreTokens()) {
@@ -880,14 +922,6 @@
String v = t.substring(i + 1);
element.setAttribute(n, v);
}
- String text = o.getAttributeValue("text"); //$NON-NLS-1$
- if(text != null && text.length() > 0) {
- saveAttribute(element, "#text", text); //$NON-NLS-1$
- }
- XModelObject[] cs = o.getChildren();
- for (int i = 0; i < cs.length; i++) {
- saveAnyElement(element, cs[i]);
- }
}
protected void eitherOr(Element element, String attr1, String attr2) {
@@ -941,6 +975,9 @@
}
}
mergeFinalComment(destination, source, fire);
+
+ String d = destination.get(XModelObjectImpl.DUPLICATE);
+ if(d != null && d.length() > 0) destination.set(XModelObjectImpl.DUPLICATE, "");
}
public static void mergeAttributeComment(XModelObject destination, XModelObject source, XAttribute attr, boolean fire) {
More information about the jbosstools-commits
mailing list