Author: scabanovich
Date: 2008-06-07 06:03:34 -0400 (Sat, 07 Jun 2008)
New Revision: 8626
Modified:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/helpers/SeamPagesDiagramHelper.java
Log:
JBIDE-2283
Modified:
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/helpers/SeamPagesDiagramHelper.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/helpers/SeamPagesDiagramHelper.java 2008-06-07
09:45:09 UTC (rev 8625)
+++
trunk/seam/plugins/org.jboss.tools.seam.pages.xml/src/org/jboss/tools/seam/pages/xml/model/helpers/SeamPagesDiagramHelper.java 2008-06-07
10:03:34 UTC (rev 8626)
@@ -22,6 +22,7 @@
private static XModelObject TEMPLATE;
private XModelObject config;
private Map<String,XModelObject> pageItems = new
HashMap<String,XModelObject>();
+ private Set<String> pageViewIds = new HashSet<String>();
private Map<String,XModelObject> exceptionItems = new
HashMap<String,XModelObject>();
private Map<String,XModelObject> targets = new
HashMap<String,XModelObject>();
@@ -35,6 +36,7 @@
private synchronized void reset() {
pageItems.clear();
+ pageViewIds.clear();
exceptionItems.clear();
targets.clear();
this.config = diagram.getParent();
@@ -79,6 +81,7 @@
XModelObject g = findOrCreateItem(view, pp, TYPE_PAGE);
((ReferenceObjectImpl)g).setReference(sourcePages[i]);
pageItems.put(pp, g);
+ pageViewIds.add(view);
XModelObject[] ns = sourcePages[i].getChildren();
for (int j = 0; j < ns.length; j++) {
String entity = ns[j].getModelEntity().getName();
@@ -106,9 +109,9 @@
Iterator<String> it = pageItems.keySet().iterator();
while(it.hasNext()) targets.remove(it.next());
- removeObsoletePageItems();
removeObsoleteExceptionItems();
createPageItems();
+ removeObsoletePageItems();
updatePageItems();
updateExceptionItems();
@@ -120,8 +123,7 @@
if(target == null) return;
String tvi = target.getAttributeValue(ATTR_VIEW_ID);
if(tvi == null) return;
- String ppt = toNavigationRulePathPart(tvi);
- targets.put(ppt, getTemplate());
+ targets.put(toNavigationRulePathPart(tvi), getTemplate());
}
private XModelObject getTemplate() {
@@ -150,7 +152,7 @@
String path = ps[i].getPathPart();
String type = ps[i].getAttributeValue(ATTR_TYPE);
if(!TYPE_PAGE.equals(type)) continue;
- if(!pageItems.containsKey(path) && !targets.containsKey(path)) {
+ if(!pageItems.containsKey(path) && targets.get(path) != ps[i]) {
ps[i].removeFromParent();
}
}
@@ -172,7 +174,8 @@
String[] paths = (String[])targets.keySet().toArray(new String[0]);
for (int i = 0; i < paths.length; i++) {
String fvi = toFromViewId(paths[i]);
- XModelObject g = findOrCreateItem(fvi, paths[i], TYPE_PAGE);
+ fvi = findBestMatch(fvi);
+ XModelObject g = findOrCreateItem(fvi, toNavigationRulePathPart(fvi), TYPE_PAGE);
targets.put(paths[i], g);
}
}
@@ -197,7 +200,8 @@
}
private void updatePageItem(ReferenceObjectImpl item) {
- if(item.isUpToDate()) return;
+ if(item.getReference() == null) return;
+// if(item.isUpToDate()) return;
item.notifyUpdate();
XModelObject sourcePage = item.getReference();
item.setAttributeValue(ATTR_ID, sourcePage.getPathPart());
@@ -329,7 +333,8 @@
}
private void updateOutput(ReferenceObjectImpl output) {
- if(output.isUpToDate()) return;
+ if(output.getReference() == null) return;
+// if(output.isUpToDate()) return;
output.notifyUpdate();
XModelObject rulecase = output.getReference();
output.setAttributeValue(ATTR_ID, rulecase.getAttributeValue(ATTR_VIEW_ID));
@@ -337,15 +342,11 @@
output.setAttributeValue(ATTR_PATH, path);
// String title =
SeamPagesDiagramStructureHelper.createItemOutputPresentation(rulecase);
// output.setAttributeValue("title", title);
- XModelObject g = findGroupByPath(path);
+ XModelObject g = getPage(findBestMatch(path));
String target = (g == null) ? "" : g.getPathPart();
output.setAttributeValue(ATTR_TARGET, target);
}
- private XModelObject findGroupByPath(String path) {
- return getPage(path);
- }
-
public void autolayout() {
AutoLayout auto = new AutoLayout();
auto.setItems(new SeamPagesItems());
@@ -363,6 +364,27 @@
//TODO
}
+ public String findBestMatch(String viewId) {
+ if(viewId == null || pageViewIds.contains(viewId)) {
+ return viewId;
+ }
+ String best = viewId;
+ int match = 0;
+ for (String v: pageViewIds) {
+ int i = v.indexOf('*');
+ if(i < 0) continue;
+ String head = v.substring(0, i);
+ String tail = v.substring(i + 1);
+ int m = head.length() + tail.length();
+ if(m > viewId.length() || m <= match) continue;
+ if(head.length() > 0 && !viewId.startsWith(head)) continue;
+ if(tail.length() > 0 && !viewId.endsWith(tail)) continue;
+ best = v;
+ match = m;
+ }
+ return best;
+ }
+
public static String toNavigationRulePathPart(String path) {
return "" + encode(path);
}