From 6e6d59d04f0087100e0dd3e1bf0450227b6af56c Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 18 Jun 2013 17:37:11 +0800 Subject: [PATCH] IDEMPIERE-1044 Load testing. Use more reliable fixed uuid generation method for jmeter load testing. Disable recycling of uuid for jmeter load testing. Added npe check for close window. --- .../adempiere/webui/AdempiereIdGenerator.java | 42 ++++++++++++++++++- .../webui/desktop/TabbedDesktop.java | 2 +- org.adempiere.ui.zk/WEB-INF/zk-selenium.xml | 5 +++ 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java index c0638771bf..282a55aa4b 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereIdGenerator.java @@ -48,6 +48,45 @@ public class AdempiereIdGenerator implements IdGenerator { public String nextComponentUuid(Desktop desktop, Component comp, ComponentInfo compInfo) { buildLocatorAttribute(comp); + String uuid = comp.getId(); + boolean useIdSpace = true; + if (Util.isEmpty(uuid)) { + useIdSpace = false; + String attribute = comp.getWidgetAttribute(AdempiereWebUI.WIDGET_INSTANCE_NAME); + if (!Util.isEmpty(attribute)) { + String widgetName = getWidgetName(comp.getWidgetClass()); + uuid = widgetName+"0"+attribute; + } + } + + if (Util.isEmpty(uuid)) { + uuid = getWidgetName(comp.getWidgetClass()); + } + + StringBuilder builder = new StringBuilder(uuid); + if (useIdSpace) { + Component parent = comp.getParent(); + while (parent != null) { + if (parent instanceof IdSpace) { + builder.insert(0, "_"); + builder.insert(0, parent.getUuid()); + break; + } else { + parent = parent.getParent(); + } + } + } else { + if (comp.getParent() != null) { + builder.insert(0, "_"); + builder.insert(0, comp.getParent().getUuid()); + } + } + + uuid = escapeId(builder.toString()); + if (desktop.getComponentByUuidIfAny(uuid) == null) { // look to avoid dups + return uuid; + } + String number; if ((number = (String)desktop.getAttribute("Id_Num")) == null) { number = "0"; @@ -56,7 +95,8 @@ public class AdempiereIdGenerator implements IdGenerator { int i = Integer.parseInt(number); i++;// Start from 1 desktop.setAttribute("Id_Num", String.valueOf(i)); - return "t_" + i; + + return uuid + "_" + i; } private static String getWidgetName(String widgetClass) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java index 41f49a24ac..4a9c46cb29 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/TabbedDesktop.java @@ -345,7 +345,7 @@ public abstract class TabbedDesktop extends AbstractDesktop { { Tabpanel panel = (Tabpanel) child; Component component = panel.getFirstChild(); - Object att = component.getAttribute(WINDOWNO_ATTRIBUTE); + Object att = component != null ? component.getAttribute(WINDOWNO_ATTRIBUTE) : null; if (att != null && (att instanceof Integer)) { if (windowNo == (Integer)att) diff --git a/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml b/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml index d5e7dd3ed9..3875a948dd 100644 --- a/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml +++ b/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml @@ -17,4 +17,9 @@ org.adempiere.webui.UiLifeCycleListener + + + org.zkoss.zk.ui.uuidRecycle.disabled + true +