Author: scabanovich
Date: 2010-09-30 08:33:40 -0400 (Thu, 30 Sep 2010)
New Revision: 25322
Modified:
trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/PositionSearcher.java
Log:
JBIDE-6085
https://jira.jboss.org/browse/JBIDE-6085
Modified:
trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/PositionSearcher.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/PositionSearcher.java 2010-09-30
11:15:10 UTC (rev 25321)
+++
trunk/common/plugins/org.jboss.tools.common.model/src/org/jboss/tools/common/model/util/PositionSearcher.java 2010-09-30
12:33:40 UTC (rev 25322)
@@ -65,6 +65,9 @@
private void selectAttribute() {
if(attribute == null || attribute.length() == 0) return;
XAttribute a = object.getModelEntity().getAttribute(attribute);
+ if(isESB(a)) {
+ findESBAttrPosition(a);
+ }
String xml = (a == null) ? null : a.getXMLName();
if(xml == null || xml.length() == 0) return;
if(xml.indexOf(".") < 0) { //$NON-NLS-1$
@@ -218,5 +221,46 @@
}
}
+
+ /**
+ * Temporal solution; should be refactored to a framework.
+ *
+ */
+ boolean isESB(XAttribute a) {
+ return a != null && "true".equals(a.getProperty("pre"));
+ }
+
+ void findESBAttrPosition(XAttribute a) {
+ int ep = text.indexOf("</action>", startPosition);
+ if(ep < 0) return;
+
+ String dt = text.substring(startPosition, ep);
+
+ String name = "name=\"" + a.getXMLName() + "\"";
+ int name_i = dt.indexOf(name);
+ if(name_i < 0) return;
+ int ps = dt.lastIndexOf("<property", name_i);
+ if(ps < 0) return;
+ int pe = dt.indexOf("/>", ps);
+ if(pe < 0) return;
+ String dt2 = dt.substring(ps, pe + 2);
+ int value_i = dt2.indexOf("value=");
+
+ if(value_i >= 0) {
+ int i2 = dt2.indexOf('"', value_i);
+ int i3 = (i2 < 0) ? -1 : dt2.indexOf('"', i2 + 1);
+ if(i3 > i2 + 1) {
+ startPosition = startPosition + ps + i2 + 1;
+ endPosition = startPosition + i3 - i2 - 1;
+ return;
+ } else if(i3 == i2 + 1) {
+ startPosition = startPosition + ps + i2;
+ endPosition = startPosition + 2;
+ return;
+ }
+ }
+ startPosition = startPosition + ps;
+ endPosition = startPosition + pe + 2 - ps;
+ }
}