diff --git a/idempiere.zk.selenium/.classpath b/idempiere.zk.selenium/.classpath
new file mode 100644
index 0000000000..74c51989b7
--- /dev/null
+++ b/idempiere.zk.selenium/.classpath
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idempiere.zk.selenium/.project b/idempiere.zk.selenium/.project
new file mode 100644
index 0000000000..b0c020865a
--- /dev/null
+++ b/idempiere.zk.selenium/.project
@@ -0,0 +1,17 @@
+
+
+ idempiere.zk.selenium
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/idempiere.zk.selenium/.settings/org.eclipse.jdt.core.prefs b/idempiere.zk.selenium/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..8000cd6ca6
--- /dev/null
+++ b/idempiere.zk.selenium/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/idempiere.zk.selenium/Readme.txt b/idempiere.zk.selenium/Readme.txt
new file mode 100644
index 0000000000..184224dbeb
--- /dev/null
+++ b/idempiere.zk.selenium/Readme.txt
@@ -0,0 +1,28 @@
+config.properties
+- configuration file for running Ztl generator and Ztl test
+
+ZtlGenerator.launch
+- Eclipse launch configuration for Ztl generator
+
+zk.jq.test
+- Example test cases written using Selenium Web Driver and Zk JQ selector
+
+zk.selenese.test
+- Example test cases exported from Selenium IDE ( JUnit4 + WebDriver )
+
+zk.ztl.test
+- Example test cases generated by Ztl generator
+
+resource/selenese
+- selenese test script recorded by Selenium IDE
+
+resource/ztl/zk/ztl/test
+- ztl test script
+
+Notes
+======
+* Mapping between selenese ( the native format created by Selenium IDE recording ) and
+ web driver export is not one to one. For e.g, the fireEvent command is not needed in
+ web driver test script.
+
+* You must change the "target" instance variable value to "" in the generated ztl java source
diff --git a/idempiere.zk.selenium/ZtlGenerator.launch b/idempiere.zk.selenium/ZtlGenerator.launch
new file mode 100644
index 0000000000..0f11ed8cac
--- /dev/null
+++ b/idempiere.zk.selenium/ZtlGenerator.launch
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idempiere.zk.selenium/config.properties b/idempiere.zk.selenium/config.properties
new file mode 100644
index 0000000000..5b668703d0
--- /dev/null
+++ b/idempiere.zk.selenium/config.properties
@@ -0,0 +1,11 @@
+server=http://127.0.0.1:8080
+context-path=/webui
+delay=500
+action=
+timeout=20000
+browser=firefox
+granularity=1
+leniency=1
+all=firefox
+firefox=firefoxdriver
+target=
diff --git a/idempiere.zk.selenium/lib/ztl/Readme.txt b/idempiere.zk.selenium/lib/ztl/Readme.txt
new file mode 100644
index 0000000000..0c9ef8e10f
--- /dev/null
+++ b/idempiere.zk.selenium/lib/ztl/Readme.txt
@@ -0,0 +1,8 @@
+ztl-2.0.0-SNAPSHOT.jar
+- for execution of ztl generator and ztl test cases
+
+selenium-server-standalone-2.25.0.jar
+- for execution of ztl test cases
+
+others
+- for execution of ztl generator
diff --git a/idempiere.zk.selenium/resource/selenese/ChangeRole.selenese b/idempiere.zk.selenium/resource/selenese/ChangeRole.selenese
new file mode 100644
index 0000000000..83ce8d2a60
--- /dev/null
+++ b/idempiere.zk.selenium/resource/selenese/ChangeRole.selenese
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+login
+
+
+
+
+| login |
+
+
+ | open |
+ /webui/ |
+ |
+
+
+ | type |
+ id=loginPanel_grdLogin_rowUser_txtUserId |
+ SuperUser |
+
+
+ | fireEvent |
+ id=loginPanel_grdLogin_rowUser_txtUserId |
+ blur |
+
+
+ | type |
+ id=loginPanel_grdLogin_rowPassword_txtPassword |
+ System |
+
+
+ | fireEvent |
+ id=loginPanel_grdLogin_rowPassword_txtPassword |
+ blur |
+
+
+ | click |
+ id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real |
+ |
+
+
+ | click |
+ id=loginPanel_Ok |
+ 10 |
+
+
+ | waitForElementPresent |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowclient_lstClient_zk_GardenWorld > td.z-comboitem-text |
+ |
+
+
+ | pause |
+ 1000 |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text |
+ |
+
+
+ | click |
+ id=rolePanel_Ok |
+ |
+
+
+ | waitForElementPresent |
+ id=loginUserAndRole |
+ |
+
+
+ | assertText |
+ id=loginUserAndRole |
+ SuperUser@GardenWorld.HQ/GardenWorld Admin |
+
+
+ | click |
+ id=changeRole |
+ |
+
+
+ | waitForElementPresent |
+ id=rolePanel_grdChooseRole_rowclient_lstClient |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowclient_lstClient_System_ > td.z-comboitem-text |
+ |
+
+
+ | click |
+ id=rolePanel_Ok |
+ |
+
+
+ | pause |
+ 2000 |
+ |
+
+
+ | assertText |
+ id=loginUserAndRole |
+ SuperUser@System.*/System Administrator |
+
+
+
+
diff --git a/idempiere.zk.selenium/resource/selenese/CreateNewProduct.selenese b/idempiere.zk.selenium/resource/selenese/CreateNewProduct.selenese
new file mode 100644
index 0000000000..9bd830cb76
--- /dev/null
+++ b/idempiere.zk.selenium/resource/selenese/CreateNewProduct.selenese
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+login
+
+
+
+
+| login |
+
+
+ | open |
+ /webui/ |
+ |
+
+
+ | type |
+ id=loginPanel_grdLogin_rowUser_txtUserId |
+ SuperUser |
+
+
+ | fireEvent |
+ id=loginPanel_grdLogin_rowUser_txtUserId |
+ blur |
+
+
+ | type |
+ id=loginPanel_grdLogin_rowPassword_txtPassword |
+ System |
+
+
+ | fireEvent |
+ id=loginPanel_grdLogin_rowPassword_txtPassword |
+ blur |
+
+
+ | click |
+ id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real |
+ |
+
+
+ | click |
+ id=loginPanel_Ok |
+ 10 |
+
+
+ | waitForElementPresent |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowclient_lstClient_zk_comp_32 > td.z-comboitem-text |
+ |
+
+
+ | pause |
+ 1000 |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text |
+ |
+
+
+ | click |
+ id=rolePanel_Ok |
+ |
+
+
+ | waitForElementPresent |
+ id=loginUserAndRole |
+ |
+
+
+ | assertText |
+ id=loginUserAndRole |
+ SuperUser@GardenWorld.HQ/GardenWorld Admin |
+
+
+ | type |
+ id=treeSearchCombo-real |
+ Product |
+
+
+ | fireEvent |
+ treeSearchCombo-real |
+ blur |
+
+
+ | click |
+ id=findWindow_simpleSearch_btnOk |
+ |
+
+
+ | click |
+ id=Product_1_BtnNew |
+ |
+
+
+ | click |
+ id=Product_1_Product_Value |
+ |
+
+
+ | type |
+ id=Product_1_Product_Value |
+ test |
+
+
+ | fireEvent |
+ id=Product_1_Product_Value |
+ blur |
+
+
+ | type |
+ id=Product_1_Product_Name |
+ test |
+
+
+ | fireEvent |
+ id=Product_1_Product_Name |
+ blur |
+
+
+ | click |
+ id=Product_1_BtnSave |
+ |
+
+
+
+
diff --git a/idempiere.zk.selenium/resource/selenese/Login.selenese b/idempiere.zk.selenium/resource/selenese/Login.selenese
new file mode 100644
index 0000000000..12f38d9648
--- /dev/null
+++ b/idempiere.zk.selenium/resource/selenese/Login.selenese
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+login
+
+
+
+
+| login |
+
+
+ | open |
+ /webui/ |
+ |
+
+
+ | type |
+ id=loginPanel_grdLogin_rowUser_txtUserId |
+ SuperUser |
+
+
+ | fireEvent |
+ id=loginPanel_grdLogin_rowUser_txtUserId |
+ blur |
+
+
+ | type |
+ id=loginPanel_grdLogin_rowPassword_txtPassword |
+ System |
+
+
+ | fireEvent |
+ id=loginPanel_grdLogin_rowPassword_txtPassword |
+ blur |
+
+
+ | click |
+ id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real |
+ |
+
+
+ | click |
+ id=loginPanel_Ok |
+ 10 |
+
+
+ | waitForElementPresent |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text |
+ |
+
+
+ | pause |
+ 1000 |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowRole_lstRole-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowRole_lstRole_GardenWorld_Admin > td.z-comboitem-text |
+ |
+
+
+ | pause |
+ 1000 |
+ |
+
+
+ | click |
+ id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn |
+ |
+
+
+ | click |
+ css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text |
+ |
+
+
+ | click |
+ id=rolePanel_Ok |
+ |
+
+
+ | waitForElementPresent |
+ id=loginUserAndRole |
+ |
+
+
+ | assertText |
+ id=loginUserAndRole |
+ SuperUser@GardenWorld.HQ/GardenWorld Admin |
+
+
+
+
diff --git a/idempiere.zk.selenium/resource/ztl/zk/ztl/test/LoginTest.ztl b/idempiere.zk.selenium/resource/ztl/zk/ztl/test/LoginTest.ztl
new file mode 100644
index 0000000000..b7c29a894a
--- /dev/null
+++ b/idempiere.zk.selenium/resource/ztl/zk/ztl/test/LoginTest.ztl
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/idempiere.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java b/idempiere.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java
new file mode 100644
index 0000000000..86f0c723cd
--- /dev/null
+++ b/idempiere.zk.selenium/src/org/idempiere/ui/zk/selenium/Zk.java
@@ -0,0 +1,32 @@
+package org.idempiere.ui.zk.selenium;
+
+import java.util.List;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.SearchContext;
+import org.openqa.selenium.WebElement;
+
+/**
+ * utility class to find elements using zk jq selector
+ * @author hengsin
+ *
+ */
+public class Zk extends By {
+
+ private String selector;
+
+ private Zk(String selector) {
+ this.selector = selector;
+ }
+
+ @Override
+ public List findElements(SearchContext context) {
+ List list = (List) ((JavascriptExecutor)context).executeScript("return jq('" + selector + "').get();");
+ return list;
+ }
+
+ public static Zk jq(String selector) {
+ return new Zk(selector);
+ }
+}
diff --git a/idempiere.zk.selenium/src/zk/jq/test/LoginTest.java b/idempiere.zk.selenium/src/zk/jq/test/LoginTest.java
new file mode 100644
index 0000000000..1f4d27a7ff
--- /dev/null
+++ b/idempiere.zk.selenium/src/zk/jq/test/LoginTest.java
@@ -0,0 +1,94 @@
+package zk.jq.test;
+
+import java.util.concurrent.TimeUnit;
+
+import org.idempiere.ui.zk.selenium.Zk;
+import org.junit.*;
+import static org.junit.Assert.*;
+import org.openqa.selenium.*;
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+/**
+ * Web Driver + zk jq selector, doesn't required AdempiereIdGenerator
+ * @author hengsin
+ *
+ */
+public class LoginTest {
+ private WebDriver driver;
+ private String baseUrl;
+ private StringBuffer verificationErrors = new StringBuffer();
+ @Before
+ public void setUp() throws Exception {
+ driver = new FirefoxDriver();
+ baseUrl = "http://127.0.0.1:8080/";
+ driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
+ }
+
+ @Test
+ public void testLogin() throws Exception {
+ // open | /webui/ |
+ driver.get(baseUrl + "/webui/");
+ // enter user name
+ driver.findElement(Zk.jq("$loginPanel $txtUserId")).clear();
+ driver.findElement(Zk.jq("$loginPanel $txtUserId")).sendKeys("SuperUser");
+
+ // enter password
+ driver.findElement(Zk.jq("$loginPanel $txtPassword")).clear();
+ driver.findElement(Zk.jq("$loginPanel $txtPassword")).sendKeys("System");
+
+ // check select role
+ driver.findElement(Zk.jq("$loginPanel $chkSelectRole ~ input")).click();
+ // click ok button
+ driver.findElement(Zk.jq("$loginPanel $Ok")).click();
+ // wait for role panel
+ for (int second = 0;; second++) {
+ if (second >= 60) fail("timeout");
+ try { if (isElementPresent(Zk.jq("$rolePanel $lstClient"))) break; } catch (Exception e) {}
+ Thread.sleep(1000);
+ }
+
+ // select GardenWorld client
+ driver.findElement(Zk.jq("$rolePanel $lstClient ~ .z-combobox-btn")).click();
+ driver.findElement(Zk.jq("$rolePanel $lstClient $GardenWorld")).click();
+
+ // select GardenWorld admin role
+ driver.findElement(Zk.jq("$rolePanel $lstRole ~ .z-combobox-btn")).click();
+ //note the 4 \\\\ needed to escape the space character. ugly but it works
+ driver.findElement(Zk.jq("$rolePanel $lstRole $GardenWorld\\\\ Admin")).click();
+
+ // select HQ organization
+ driver.findElement(Zk.jq("$rolePanel $lstOrganisation ~ .z-combobox-btn")).click();
+ driver.findElement(Zk.jq("$rolePanel $lstOrganisation $HQ")).click();
+
+ // click ok button
+ driver.findElement(Zk.jq("$rolePanel $Ok")).click();
+
+ // wait for home page
+ for (int second = 0;; second++) {
+ if (second >= 60) fail("timeout");
+ try { if (isElementPresent(Zk.jq("$loginUserAndRole"))) break; } catch (Exception e) {}
+ Thread.sleep(1000);
+ }
+
+ // assert login user and role
+ assertEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", driver.findElement(Zk.jq("$loginUserAndRole")).getText());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ driver.quit();
+ String verificationErrorString = verificationErrors.toString();
+ if (!"".equals(verificationErrorString)) {
+ fail(verificationErrorString);
+ }
+ }
+
+ private boolean isElementPresent(By by) {
+ try {
+ driver.findElement(by);
+ return true;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
+ }
+}
diff --git a/idempiere.zk.selenium/src/zk/selenese/test/LoginTest.java b/idempiere.zk.selenium/src/zk/selenese/test/LoginTest.java
new file mode 100644
index 0000000000..3c22648117
--- /dev/null
+++ b/idempiere.zk.selenium/src/zk/selenese/test/LoginTest.java
@@ -0,0 +1,94 @@
+package zk.selenese.test;
+
+import java.util.concurrent.TimeUnit;
+import org.junit.*;
+import static org.junit.Assert.*;
+import org.openqa.selenium.*;
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+/**
+ * Generated from selenium ide, required AdempiereIdGenerator
+ * @author hengsin
+ *
+ */
+public class LoginTest {
+ private WebDriver driver;
+ private String baseUrl;
+ private StringBuffer verificationErrors = new StringBuffer();
+ @Before
+ public void setUp() throws Exception {
+ driver = new FirefoxDriver();
+ baseUrl = "http://127.0.0.1:8080/";
+ driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
+ }
+
+ @Test
+ public void testLogin() throws Exception {
+ // open | /webui/ |
+ driver.get(baseUrl + "/webui/");
+ // type | id=loginPanel_grdLogin_rowUser_txtUserId | SuperUser
+ driver.findElement(By.id("loginPanel_grdLogin_rowUser_txtUserId")).clear();
+ driver.findElement(By.id("loginPanel_grdLogin_rowUser_txtUserId")).sendKeys("SuperUser");
+
+ // fireEvent | id=loginPanel_grdLogin_rowUser_txtUserId | blur
+ // not needed for webdriver
+ // type | id=loginPanel_grdLogin_rowPassword_txtPassword | System
+ driver.findElement(By.id("loginPanel_grdLogin_rowPassword_txtPassword")).clear();
+ driver.findElement(By.id("loginPanel_grdLogin_rowPassword_txtPassword")).sendKeys("System");
+ // fireEvent | id=loginPanel_grdLogin_rowPassword_txtPassword | blur
+ // not needed for webdriver
+ // click | id=loginPanel_grdLogin_rowSelectRole_chkSelectRole-real |
+ driver.findElement(By.id("loginPanel_grdLogin_rowSelectRole_chkSelectRole-real")).click();
+ // click | loginPanel_Ok | 10
+ driver.findElement(By.id("loginPanel_Ok")).click();
+ // waitForElementPresent | id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ for (int second = 0;; second++) {
+ if (second >= 60) fail("timeout");
+ try { if (isElementPresent(By.id("rolePanel_grdChooseRole_rowclient_lstClient-btn"))) break; } catch (Exception e) {}
+ Thread.sleep(1000);
+ }
+
+ // click | id=rolePanel_grdChooseRole_rowclient_lstClient-btn |
+ driver.findElement(By.id("rolePanel_grdChooseRole_rowclient_lstClient-btn")).click();
+ // click | css=#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text |
+ driver.findElement(By.cssSelector("#rolePanel_grdChooseRole_rowclient_lstClient_GardenWorld > td.z-comboitem-text")).click();
+ Thread.sleep(1000);
+ // click | id=rolePanel_grdChooseRole_rowRole_lstRole-btn |
+ driver.findElement(By.id("rolePanel_grdChooseRole_rowRole_lstRole-btn")).click();
+ // click | css=#rolePanel_grdChooseRole_rowRole_lstRole_GardenWorld_Admin > td.z-comboitem-text |
+ driver.findElement(By.cssSelector("#rolePanel_grdChooseRole_rowRole_lstRole_GardenWorld_Admin > td.z-comboitem-text")).click();
+ Thread.sleep(1000);
+ // click | id=rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn |
+ driver.findElement(By.id("rolePanel_grdChooseRole_rowOrganisation_lstOrganisation-btn")).click();
+ // click | css=#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text |
+ driver.findElement(By.cssSelector("#rolePanel_grdChooseRole_rowOrganisation_lstOrganisation_HQ > td.z-comboitem-text")).click();
+ // click | rolePanel_Ok |
+ driver.findElement(By.id("rolePanel_Ok")).click();
+ // waitForElementPresent | loginUserAndRole |
+ for (int second = 0;; second++) {
+ if (second >= 60) fail("timeout");
+ try { if (isElementPresent(By.id("loginUserAndRole"))) break; } catch (Exception e) {}
+ Thread.sleep(1000);
+ }
+ // assertText | loginUserAndRole | SuperUser@GardenWorld.HQ/GardenWorld Admin
+ assertEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", driver.findElement(By.id("loginUserAndRole")).getText());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ driver.quit();
+ String verificationErrorString = verificationErrors.toString();
+ if (!"".equals(verificationErrorString)) {
+ fail(verificationErrorString);
+ }
+ }
+
+ private boolean isElementPresent(By by) {
+ try {
+ driver.findElement(by);
+ return true;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
+ }
+}
diff --git a/idempiere.zk.selenium/src/zk/ztl/test/LoginTest.java b/idempiere.zk.selenium/src/zk/ztl/test/LoginTest.java
new file mode 100644
index 0000000000..0ea68e8a42
--- /dev/null
+++ b/idempiere.zk.selenium/src/zk/ztl/test/LoginTest.java
@@ -0,0 +1,86 @@
+/* LoginTest.java
+
+ Purpose:
+
+ Description:
+
+ History:
+ Dec, 6, 2012 17:09:52 PM
+
+Copyright (C) 2012 Potix Corporation. All Rights Reserved.
+
+This program is distributed under Apache License Version 2.0 in the hope that
+it will be useful, but WITHOUT ANY WARRANTY.
+*/
+package zk.ztl.test;
+import org.junit.Test;
+import org.zkoss.ztl.Element;
+import org.zkoss.ztl.JQuery;
+import org.zkoss.ztl.Tags;
+import org.zkoss.ztl.Widget;
+import org.zkoss.ztl.ZK;
+import org.zkoss.ztl.ZKClientTestCase;
+import org.zkoss.ztl.util.*;
+
+import org.openqa.selenium.*;
+import com.thoughtworks.selenium.Selenium;
+import com.thoughtworks.selenium.SeleniumException;
+
+@Tags(tags = "login")
+public class LoginTest extends ZKClientTestCase {
+
+ public LoginTest() {
+ target = "";
+ browsers = getBrowsers("firefox");
+ _timeout = 20000;
+ caseID = getClass().getSimpleName();
+ }
+
+ @Test(expected = AssertionError.class)
+ public void testlogin() {
+ for (Selenium browser : browsers) {
+ try {
+ start(browser);
+ windowFocus();
+ windowMaximize();
+ String zscript = "";
+ Widget engine = new Widget(new StringBuffer("zk.Desktop._dt"));
+
+ // remove all of unnecessary children
+ if (target.endsWith("/service.zul"))
+ removeChildren(engine.firstChild());
+
+ /** start **/
+ /** client code **/
+
+ type(jq("$loginPanel $txtUserId"), "SuperUser");
+ type(jq("$loginPanel $txtPassword"), "System");
+ click(widget(jq("$loginPanel $chkSelectRole")).$n("real"));
+ click(jq("$loginPanel $Ok"));
+ waitResponse();
+ click(jq("$rolePanel $lstClient ~ .z-combobox-btn"));
+ click(jq("$rolePanel $lstClient $GardenWorld"));
+ click(jq("$rolePanel $lstRole ~ .z-combobox-btn"));
+ click(jq("$rolePanel $lstRole $GardenWorld\\\\ Admin"));
+ waitResponse();
+ click(jq("$rolePanel $lstOrganisation ~ .z-combobox-btn"));
+ click(jq("$rolePanel $lstOrganisation $HQ"));
+ click(jq("$rolePanel $Ok"));
+ waitResponse();
+ verifyEquals("SuperUser@GardenWorld.HQ/GardenWorld Admin", jq("$loginUserAndRole").text());
+
+ /** end **/
+ } catch (SeleniumException e) {
+ ZKSelenium zbrowser = ((ZKSelenium) browser);
+ ConfigHelper.getInstance().clearCache(zbrowser);
+ zbrowser.shutdown();
+ throw e;
+ } finally {
+ stop();
+ }
+ }
+ }
+}
+
+
+
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 e5aa5792ea..984a8f0ea4 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
@@ -23,38 +23,52 @@ import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.metainfo.ComponentInfo;
import org.zkoss.zk.ui.sys.IdGenerator;
+/**
+ * Id generator for selenium ide recording.
+ * You don't need this to run ztl or zk jq selector based test script but if would help to
+ * code or troubleshoot the test script.
+ *
+ * DON'T use this for other purpose, you have been warned :)
+ *
+ * @author Carlos Ruiz
+ * @author hengsin
+ *
+ */
public class AdempiereIdGenerator implements IdGenerator {
private static final String DEFAULT_ZK_COMP_PREFIX = "zk_comp_";
private static final String DESKTOP_ID_ATTRIBUTE = "org.adempiere.comp.id";
- /* use this to add a component prefix to identify zk component
- * if the prefix starts with unq then it will be used as is - if it doesn't then a sequence suffix will be added to guarantee uniqueness
- */
- public static final String ZK_COMPONENT_PREFIX_ATTRIBUTE = "zk_component_prefix";
-
@Override
public String nextComponentUuid(Desktop desktop, Component comp, ComponentInfo compInfo) {
- String prefix = (String) comp.getAttribute(ZK_COMPONENT_PREFIX_ATTRIBUTE);
- if (prefix == null || prefix.length() == 0)
+ String prefix = comp.getId();
+
+ if (prefix == null || prefix.length() == 0) {
prefix = DEFAULT_ZK_COMP_PREFIX;
- else {
- Pattern pattern = Pattern.compile("[^a-zA-Z_0-9]");
- Matcher matcher = pattern.matcher(prefix);
- StringBuffer sb = new StringBuffer();
- while(matcher.find()) {
- matcher.appendReplacement(sb, "_");
- }
- matcher.appendTail(sb);
- prefix = sb.toString();
- if (prefix.startsWith("unq")) { // prefix already guaranteed unique
- if (desktop.getComponentByUuidIfAny(prefix) == null) { // but don't trust and look to avoid dups
- return prefix;
- } else {
- prefix = "not" + prefix; // set notunq as the prefix to let dev know something is wrong
- }
- }
}
+
+ StringBuilder builder = new StringBuilder(prefix);
+ Component parent = comp.getParent();
+ while(parent != null) {
+ String id = parent.getId();
+ if (id != null && id.length() > 0)
+ builder.insert(0, id+"_");
+ parent = parent.getParent();
+ }
+ prefix = builder.toString();
+
+ Pattern pattern = Pattern.compile("[^a-zA-Z_0-9]");
+ Matcher matcher = pattern.matcher(prefix);
+ StringBuffer sb = new StringBuffer();
+ while(matcher.find()) {
+ matcher.appendReplacement(sb, "_");
+ }
+ matcher.appendTail(sb);
+ prefix = sb.toString();
+
+ if (desktop.getComponentByUuidIfAny(prefix) == null) { // look to avoid dups
+ return prefix;
+ }
/* add sequence suffix to guarantee uniqueness */
int i = 0;
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java
index fd8b8ef26c..5938f41604 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java
@@ -69,6 +69,7 @@ import org.compiere.util.Util;
import org.zkoss.zk.au.out.AuFocus;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
+import org.zkoss.zk.ui.IdSpace;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
@@ -99,7 +100,7 @@ import org.zkoss.zul.impl.XulElement;
* @author Low Heng Sin
*/
public class ADTabpanel extends Div implements Evaluatee, EventListener,
-DataStatusListener, IADTabpanel
+DataStatusListener, IADTabpanel, IdSpace
{
public static final String ON_SWITCH_VIEW_EVENT = "onSwitchView";
@@ -260,6 +261,8 @@ DataStatusListener, IADTabpanel
this.dataBinder = new GridTabDataBinder(gridTab);
this.getChildren().clear();
+
+ setId(gridTab.getName());
int AD_Tree_ID = 0;
if (gridTab.isTreeTab())
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowToolbar.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowToolbar.java
index 075260c286..37ba6a21ab 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowToolbar.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADWindowToolbar.java
@@ -28,7 +28,6 @@ import java.util.Properties;
import java.util.logging.Level;
import org.adempiere.base.IServiceHolder;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.action.Actions;
import org.adempiere.webui.action.IAction;
@@ -205,10 +204,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener
{
ToolBarButton btn = new ToolBarButton("");
btn.setName(BTNPREFIX+name);
- if (windowNo > 0)
- btn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + btn.getName() + "_" + windowNo);
- else
- btn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, btn.getName());
+ btn.setId(btn.getName());
if (image != null)
btn.setImage("/images/"+image + "24.png");
btn.setTooltiptext(Msg.getMsg(Env.getCtx(),tooltip));
@@ -623,6 +619,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener
}
ToolBarButton btn = createButton(mToolBarButton.getComponentName(), null, tooltiptext);
btn.removeEventListener(Events.ON_CLICK, this);
+ btn.setId(mToolBarButton.getName());
btn.setDisabled(false);
AImage aImage = Actions.getActionImage(actionId);
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java
index d344189740..d4f0149055 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/BreadCrumb.java
@@ -19,7 +19,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.Menupopup;
@@ -141,6 +140,7 @@ public class BreadCrumb extends Div implements EventListener {
messageContainer = new Hbox();
messageContainer.setStyle("float: right; height: 30px;");
messageContainer.setAlign("center");
+ messageContainer.setId("messages");
appendChild(messageContainer);
altKeyMap.put(KeyEvent.UP, btnPrevious);
@@ -161,6 +161,7 @@ public class BreadCrumb extends Div implements EventListener {
if (clickable) {
BreadCrumbLink a = new BreadCrumbLink();
a.setLabel(label);
+ a.setId("breadcrumb-"+label);
a.setPathId(id);
a.addEventListener(Events.ON_CLICK, this);
if (layout.getChildren().size() > 1) {
@@ -171,6 +172,7 @@ public class BreadCrumb extends Div implements EventListener {
layout.insertBefore(a, toolbarContainer);
} else {
Label pathLabel = new Label();
+ pathLabel.setId("breadcrumb-"+label);
pathLabel.setValue(label);
if (layout.getChildren().size() > 1) {
Label symbol = new Label();
@@ -272,10 +274,7 @@ public class BreadCrumb extends Div implements EventListener {
{
ToolBarButton btn = new ToolBarButton("");
btn.setName(BTNPREFIX+name);
- if (windowNo > 0)
- btn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + btn.getName() + "_" + windowNo);
- else
- btn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, btn.getName());
+ btn.setId(name);
btn.setImage("/images/"+image + "24.png");
btn.setTooltiptext(Msg.getMsg(Env.getCtx(),tooltip));
btn.setSclass("breadcrumb-toolbar-button");
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java
index 9120d75a61..48fb2107a9 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/DetailPane.java
@@ -110,6 +110,8 @@ public class DetailPane extends Panel implements EventListener {
}
addEventListener(LayoutUtils.ON_REDRAW_EVENT, this);
+
+ setId("detailPane");
}
public int getSelectedIndex() {
@@ -190,6 +192,7 @@ public class DetailPane extends Panel implements EventListener {
button = new ToolBarButton();
button.setImage(NEW_IMAGE);
+ button.setId("BtnNew");
toolbar.appendChild(button);
button.addEventListener(Events.ON_CLICK, new EventListener() {
@Override
@@ -202,6 +205,7 @@ public class DetailPane extends Panel implements EventListener {
button = new ToolBarButton();
button.setImage(EDIT_IMAGE);
+ button.setId("BtnEdit");
toolbar.appendChild(button);
button.addEventListener(Events.ON_CLICK, new EventListener() {
@Override
@@ -213,6 +217,7 @@ public class DetailPane extends Panel implements EventListener {
button = new ToolBarButton();
button.setImage(DELETE_IMAGE);
+ button.setId("BtnDelete");
toolbar.appendChild(button);
button.addEventListener(Events.ON_CLICK, new EventListener() {
@Override
@@ -226,6 +231,7 @@ public class DetailPane extends Panel implements EventListener {
if (!tabPanel.getGridTab().isSortTab()) {
button = new ToolBarButton();
button.setImage(PROCESS_IMAGE);
+ button.setId("BtnProcess");
toolbar.appendChild(button);
button.addEventListener(Events.ON_CLICK, new EventListener() {
@Override
@@ -240,6 +246,7 @@ public class DetailPane extends Panel implements EventListener {
messageContainer.setPack("end");
messageContainer.setAlign("center");
messageContainer.setSclass("adwindow-detailpane-message");
+ messageContainer.setId("messages");
toolbar.appendChild(messageContainer);
toolbar.setSclass("adwindow-detailpane-toolbar");
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WResetPassword.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WResetPassword.java
index dc4ac2d4d1..d9a19740ea 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WResetPassword.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WResetPassword.java
@@ -17,7 +17,6 @@ package org.adempiere.webui.apps.form;
import java.util.logging.Level;
import org.adempiere.exceptions.AdempiereException;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.component.Column;
import org.adempiere.webui.component.ConfirmPanel;
import org.adempiere.webui.component.Grid;
@@ -130,45 +129,38 @@ public class WResetPassword implements IFormController, EventListener, Va
txtOldPassword = new Textbox();
txtOldPassword.setId("txtOldPassword");
txtOldPassword.setType("password");
- txtOldPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtOldPassword.getId());
txtOldPassword.setCols(25);
txtOldPassword.setWidth("220px");
txtNewPassword = new Textbox();
txtNewPassword.setId("txtNewPassword");
txtNewPassword.setType("password");
- txtNewPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewPassword.getId());
txtNewPassword.setCols(25);
txtNewPassword.setWidth("220px");
txtRetypeNewPassword = new Textbox();
txtRetypeNewPassword.setId("txtRetypeNewPassword");
txtRetypeNewPassword.setType("password");
- txtRetypeNewPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewPassword.getId());
txtRetypeNewPassword.setCols(25);
txtRetypeNewPassword.setWidth("220px");
txtNewEMail = new Textbox();
txtNewEMail.setId("txtNewEMail");
- txtNewEMail.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewEMail.getId());
txtNewEMail.setCols(25);
txtNewEMail.setWidth("220px");
txtRetypeNewEMail = new Textbox();
txtRetypeNewEMail.setId("txtRetypeNewEMail");
- txtRetypeNewEMail.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtRetypeNewEMail.getId());
txtRetypeNewEMail.setCols(25);
txtRetypeNewEMail.setWidth("220px");
txtNewEMailUser = new Textbox();
txtNewEMailUser.setId("txtNewEMailUser");
- txtNewEMailUser.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewEMailUser.getId());
txtNewEMailUser.setCols(25);
txtNewEMailUser.setWidth("220px");
txtNewEMailUserPW = new Textbox();
txtNewEMailUserPW.setId("txtNewEMailUserPW");
- txtNewEMailUserPW.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewEMailUserPW.getId());
txtNewEMailUserPW.setCols(25);
txtNewEMailUserPW.setWidth("220px");
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Combobox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Combobox.java
index 3fbf73f455..385b574dea 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Combobox.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Combobox.java
@@ -19,6 +19,7 @@ package org.adempiere.webui.component;
import java.util.List;
+import org.zkoss.zk.ui.IdSpace;
import org.zkoss.zul.Comboitem;
/**
@@ -27,7 +28,7 @@ import org.zkoss.zul.Comboitem;
* @date Feb 25, 2007
* @version $Revision: 0.10 $
*/
-public class Combobox extends org.zkoss.zul.Combobox
+public class Combobox extends org.zkoss.zul.Combobox implements IdSpace
{
/**
*
@@ -42,6 +43,7 @@ public class Combobox extends org.zkoss.zul.Combobox
public Comboitem appendItem(String label)
{
ComboItem item = new ComboItem(label);
+ item.setId(label);
item.setParent(this);
return item;
}
@@ -62,6 +64,7 @@ public class Combobox extends org.zkoss.zul.Combobox
public void appendItem(String name, Object value) {
ComboItem item = new ComboItem(name, value);
+ item.setId(name);
this.appendChild(item);
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ConfirmPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ConfirmPanel.java
index 64713a23a1..86e4ac7533 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ConfirmPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/ConfirmPanel.java
@@ -22,7 +22,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.compiere.util.Env;
import org.compiere.util.Msg;
@@ -104,7 +103,6 @@ public final class ConfirmPanel extends Hbox
Button button = new Button();
button.setName("btn"+name);
button.setId(name);
- button.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, button.getId());
String text = Msg.translate(Env.getCtx(), name);
if (!name.equals(text))
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
index 7643c79d98..0b7f8a0238 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Messagebox.java
@@ -248,6 +248,7 @@ public class Messagebox extends Window implements EventListener
this.setSizable(true);
this.setVisible(true);
+ this.setId(title);
AEnv.showCenterScreen(this);
return returnValue;
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Tabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Tabpanel.java
index 31168648b3..ae7da6661b 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Tabpanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/Tabpanel.java
@@ -18,6 +18,7 @@
package org.adempiere.webui.component;
import org.adempiere.webui.panel.ITabOnCloseHandler;
+import org.zkoss.zk.ui.IdSpace;
import org.zkoss.zul.Tab;
/**
@@ -26,7 +27,7 @@ import org.zkoss.zul.Tab;
* @date Feb 25, 2007
* @version $Revision: 0.10 $
*/
-public class Tabpanel extends org.zkoss.zul.Tabpanel
+public class Tabpanel extends org.zkoss.zul.Tabpanel implements IdSpace
{
/**
*
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 73f2b92b89..251f2b163b 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
@@ -133,6 +133,7 @@ public abstract class TabbedDesktop extends AbstractDesktop {
final ADWindow adWindow = new ADWindow(Env.getCtx(), windowId, query);
final DesktopTabpanel tabPanel = new DesktopTabpanel();
+ tabPanel.setId(adWindow.getTitle()+"_"+adWindow.getADWindowContent().getWindowNo());
final Tab tab = windowContainer.addWindow(tabPanel, adWindow.getTitle(), true);
tab.setImage(IN_PROGRESS_IMAGE);
tab.setClosable(false);
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java
index 5f778788e7..84264a1e1b 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WEditor.java
@@ -22,7 +22,6 @@ import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.component.Bandbox;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Datebox;
@@ -109,13 +108,7 @@ public abstract class WEditor implements EventListener, PropertyChangeLis
}
this.setComponent(comp);
- String gridTabName = gridField.getGridTab() != null ? gridField.getGridTab().getTabNo() + "_" + gridField.getGridTab().getTableName() : "";
- comp.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE,
- "unqField_"
- + gridField.getWindowNo()
- + "_" + gridTabName
- + "_" + gridField.getColumnName()
- + (rowIndex >= 0 ? "_" + rowIndex : ""));
+ comp.setId(gridField.getColumnName()+(rowIndex >= 0 ? "_" + rowIndex : ""));
this.gridField = gridField;
this.setMandatory(gridField.isMandatory(false));
this.readOnly = gridField.isReadOnly();
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java
index b4108daae8..97d2c4d97e 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WSearchEditor.java
@@ -545,6 +545,7 @@ public class WSearchEditor extends WEditor implements ContextMenuListener, Value
}
}
});
+ ip.setId(ip.getTitle()+"_"+ip.getWindowNo());
AEnv.showWindow(ip);
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java
index b3c8757845..77eb6a8edc 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ChangePasswordPanel.java
@@ -19,7 +19,6 @@ import java.util.Properties;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.util.Callback;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Combobox;
@@ -224,7 +223,6 @@ public class ChangePasswordPanel extends Window implements EventListener
lstSecurityQuestion.setAutocomplete(true);
lstSecurityQuestion.setAutodrop(true);
lstSecurityQuestion.setId("lstSecurityQuestion");
- lstSecurityQuestion.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + lstSecurityQuestion.getId());
lstSecurityQuestion.setWidth("220px");
lstSecurityQuestion.getItems().clear();
@@ -234,28 +232,24 @@ public class ChangePasswordPanel extends Window implements EventListener
txtOldPassword = new Textbox();
txtOldPassword.setId("txtOldPassword");
txtOldPassword.setType("password");
- txtOldPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtOldPassword.getId());
txtOldPassword.setCols(25);
txtOldPassword.setWidth("220px");
txtNewPassword = new Textbox();
txtNewPassword.setId("txtNewPassword");
txtNewPassword.setType("password");
- txtNewPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewPassword.getId());
txtNewPassword.setCols(25);
txtNewPassword.setWidth("220px");
txtRetypeNewPassword = new Textbox();
txtRetypeNewPassword.setId("txtRetypeNewPassword");
txtRetypeNewPassword.setType("password");
- txtRetypeNewPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtNewPassword.getId());
txtRetypeNewPassword.setCols(25);
txtRetypeNewPassword.setWidth("220px");
txtAnswer = new Textbox();
txtAnswer.setId("txtAnswer");
// txtAnswer.setType("password");
- txtAnswer.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtAnswer.getId());
txtAnswer.setCols(25);
txtAnswer.setWidth("220px");
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java
index c990b7f54e..1bd0dc1386 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoPanel.java
@@ -1305,4 +1305,7 @@ public abstract class InfoPanel extends Window implements EventListener,
return "natural";
}
+ public int getWindowNo() {
+ return p_WindowNo;
+ }
} // Info
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java
index af610d6148..96c32760ad 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java
@@ -31,7 +31,6 @@ import java.util.Locale;
import java.util.Properties;
import java.util.logging.Level;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Button;
@@ -317,7 +316,6 @@ public class LoginPanel extends Window implements EventListener
txtUserId = new Textbox();
txtUserId.setId("txtUserId");
- txtUserId.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtUserId.getId());
txtUserId.setCols(25);
txtUserId.setMaxlength(40);
txtUserId.setWidth("220px");
@@ -326,7 +324,6 @@ public class LoginPanel extends Window implements EventListener
txtPassword = new Textbox();
txtPassword.setId("txtPassword");
txtPassword.setType("password");
- txtPassword.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtPassword.getId());
txtPassword.setCols(25);
// txtPassword.setMaxlength(40);
@@ -336,7 +333,6 @@ public class LoginPanel extends Window implements EventListener
lstLanguage.setAutocomplete(true);
lstLanguage.setAutodrop(true);
lstLanguage.setId("lstLanguage");
- lstLanguage.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + lstLanguage.getId());
lstLanguage.addEventListener(Events.ON_SELECT, this);
lstLanguage.setWidth("220px");
@@ -354,10 +350,13 @@ public class LoginPanel extends Window implements EventListener
}
chkRememberMe = new Checkbox(Msg.getMsg(Language.getBaseAD_Language(), "RememberMe"));
+ chkRememberMe.setId("chkRememberMe");
chkSelectRole = new Checkbox(Msg.getMsg(Language.getBaseAD_Language(), "SelectRole"));
+ chkSelectRole.setId("chkSelectRole");
btnResetPassword = new ToolBarButton(Msg.getMsg(Language.getBaseAD_Language(), "ForgotMyPassword"));
+ btnResetPassword.setId("btnResetPassword");
// Make the default language the language of client System
String defaultLanguage = MClient.get(ctx, 0).getAD_Language();
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java
index 74c2d2e0a6..96daa55333 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/ResetPasswordPanel.java
@@ -22,7 +22,6 @@ import java.util.Properties;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.util.Callback;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.ConfirmPanel;
@@ -217,7 +216,6 @@ public class ResetPasswordPanel extends Window implements EventListener
txtEmail = new Textbox();
txtEmail.setId("txtEmail");
- txtEmail.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtEmail.getId());
txtEmail.setCols(25);
txtEmail.setWidth("220px");
txtEmail.setReadonly(false);
@@ -228,7 +226,6 @@ public class ResetPasswordPanel extends Window implements EventListener
txtUserId = new Textbox();
txtUserId.setId("txtUserId");
- txtUserId.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtUserId.getId());
txtUserId.setCols(25);
txtUserId.setMaxlength(40);
txtUserId.setWidth("220px");
@@ -247,7 +244,6 @@ public class ResetPasswordPanel extends Window implements EventListener
txtSecurityQuestion = new Textbox();
txtSecurityQuestion.setId("txtSecurityQuestion");
- txtSecurityQuestion.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtSecurityQuestion.getId());
txtSecurityQuestion.setCols(25);
txtSecurityQuestion.setWidth("220px");
txtSecurityQuestion.setReadonly(true);
@@ -256,7 +252,6 @@ public class ResetPasswordPanel extends Window implements EventListener
txtAnswer = new Textbox();
txtAnswer.setId("txtAnswer");
// txtAnswer.setType("password");
- txtAnswer.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + txtAnswer.getId());
txtAnswer.setCols(25);
txtAnswer.setWidth("220px");
txtAnswer.setReadonly(true);
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java
index e509298660..a6dfe1b82f 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/RolePanel.java
@@ -26,7 +26,6 @@ package org.adempiere.webui.panel;
import java.sql.Timestamp;
import java.util.Properties;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.component.ComboItem;
import org.adempiere.webui.component.Combobox;
@@ -261,7 +260,6 @@ public class RolePanel extends Window implements EventListener, Deferrabl
lstRole.setAutocomplete(true);
lstRole.setAutodrop(true);
lstRole.setId("lstRole");
- lstRole.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + lstRole.getId());
lstRole.addEventListener(Events.ON_SELECT, this);
lstRole.setWidth("220px");
@@ -270,7 +268,6 @@ public class RolePanel extends Window implements EventListener, Deferrabl
lstClient.setAutocomplete(true);
lstClient.setAutodrop(true);
lstClient.setId("lstClient");
- lstClient.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + lstClient.getId());
lstClient.addEventListener(Events.ON_SELECT, this);
lstClient.setWidth("220px");
@@ -279,7 +276,6 @@ public class RolePanel extends Window implements EventListener, Deferrabl
lstOrganisation.setAutocomplete(true);
lstOrganisation.setAutodrop(true);
lstOrganisation.setId("lstOrganisation");
- lstOrganisation.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + lstOrganisation.getId());
lstOrganisation.addEventListener(Events.ON_SELECT, this);
lstOrganisation.setWidth("220px");
@@ -288,13 +284,13 @@ public class RolePanel extends Window implements EventListener, Deferrabl
lstWarehouse.setAutocomplete(true);
lstWarehouse.setAutodrop(true);
lstWarehouse.setId("lstWarehouse");
- lstWarehouse.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unq" + lstWarehouse.getId());
lstWarehouse.addEventListener(Events.ON_SELECT, this);
lstWarehouse.setWidth("220px");
lstDate = new WDateEditor();
- lstDate.setValue(new Timestamp(System.currentTimeMillis()));
+ lstDate.setValue(new Timestamp(System.currentTimeMillis()));
+ lstDate.getComponent().setId("loginDate");
btnOk = new Button();
btnOk.setId("btnOk");
@@ -318,6 +314,7 @@ public class RolePanel extends Window implements EventListener, Deferrabl
for(int i = 0; i < m_clientKNPairs.length; i++)
{
ComboItem ci = new ComboItem(m_clientKNPairs[i].getName(), m_clientKNPairs[i].getID());
+ ci.setId(ci.getLabel());
lstClient.appendChild(ci);
if (m_clientKNPairs[i].getID().equals(initDefault))
lstClient.setSelectedItem(ci);
@@ -363,6 +360,7 @@ public class RolePanel extends Window implements EventListener, Deferrabl
for (int i = 0; i < roleKNPairs.length; i++)
{
ComboItem ci = new ComboItem(roleKNPairs[i].getName(), roleKNPairs[i].getID());
+ ci.setId(ci.getLabel());
lstRole.appendChild(ci);
if (roleKNPairs[i].getID().equals(initDefault))
lstRole.setSelectedItem(ci);
@@ -415,6 +413,7 @@ public class RolePanel extends Window implements EventListener, Deferrabl
for(int i = 0; i < orgKNPairs.length; i++)
{
ComboItem ci = new ComboItem(orgKNPairs[i].getName(), orgKNPairs[i].getID());
+ ci.setId(ci.getLabel());
lstOrganisation.appendChild(ci);
if(orgKNPairs[i].getID().equals(initDefault))
lstOrganisation.setSelectedItem(ci);
@@ -451,6 +450,7 @@ public class RolePanel extends Window implements EventListener, Deferrabl
for(int i = 0; i < warehouseKNPairs.length; i++)
{
ComboItem ci = new ComboItem(warehouseKNPairs[i].getName(), warehouseKNPairs[i].getID());
+ ci.setLabel(ci.getLabel());
lstWarehouse.appendChild(ci);
if(warehouseKNPairs[i].getID().equals(initDefault))
lstWarehouse.setSelectedItem(ci);
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java
index def4bddabb..5778c05384 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/TreeSearchPanel.java
@@ -20,7 +20,6 @@ package org.adempiere.webui.panel;
import java.util.List;
import java.util.TreeMap;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.AutoComplete;
import org.adempiere.webui.component.Label;
@@ -33,6 +32,7 @@ import org.compiere.model.MTreeNode;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.zkoss.zk.ui.Component;
+import org.zkoss.zk.ui.IdSpace;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
@@ -54,7 +54,7 @@ import org.zkoss.zul.impl.LabelImageElement;
* @date Mar 3, 2007
* @version $Revision: 0.10 $
*/
-public class TreeSearchPanel extends Panel implements EventListener, TreeDataListener
+public class TreeSearchPanel extends Panel implements EventListener, TreeDataListener, IdSpace
{
/**
*
@@ -121,7 +121,7 @@ public class TreeSearchPanel extends Panel implements EventListener, Tree
cmbSearch = new AutoComplete();
cmbSearch.setAutodrop(true);
- cmbSearch.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, "unqCmbSearch" + "_" + m_windowno + "_" + m_tabno);
+ cmbSearch.setId("treeSearchCombo");
cmbSearch.addEventListener(Events.ON_CHANGE, this);
cmbSearch.addEventListener(Events.ON_OK, this);
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java
index 8801ba7b64..a98fea3a1d 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/UserPanel.java
@@ -76,7 +76,9 @@ public class UserPanel extends Vbox implements EventListener
this.appendChild(vbox);
lblUserNameValue.setValue(getUserName() + "@" + getClientName() + "." + getOrgName()+"/"+this.getRoleName());
+ lblUserNameValue.setStyle("cursor: pointer;");
lblUserNameValue.addEventListener(Events.ON_CLICK, this);
+ lblUserNameValue.setId("loginUserAndRole");
LayoutUtils.addSclass("desktop-header-font", lblUserNameValue);
LayoutUtils.addSclass("desktop-header-username", lblUserNameValue);
vbox.appendChild(lblUserNameValue);
@@ -85,11 +87,12 @@ public class UserPanel extends Vbox implements EventListener
vbox.appendChild(hbox);
hbox.setAlign("center");
- preference.setLabel(Msg.getMsg(Env.getCtx(), "Preference"));
+ preference.setLabel(Msg.getMsg(Env.getCtx(), "Preference"));
+ preference.setId("preference");
preference.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("desktop-header-font", preference);
LayoutUtils.addSclass("link", preference);
- preference.setParent(hbox);
+ preference.setParent(hbox);
Separator sep = new Separator("vertical");
sep.setBar(true);
@@ -97,6 +100,7 @@ public class UserPanel extends Vbox implements EventListener
sep.setParent(hbox);
changeRole.setLabel(Msg.getMsg(Env.getCtx(), "changeRole"));
+ changeRole.setId("changeRole");
changeRole.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("desktop-header-font", changeRole);
LayoutUtils.addSclass("link", changeRole);
@@ -108,6 +112,7 @@ public class UserPanel extends Vbox implements EventListener
sep.setParent(hbox);
logout.setLabel(Msg.getMsg(Env.getCtx(),"Logout"));
+ logout.setId("logout");
logout.addEventListener(Events.ON_CLICK, this);
LayoutUtils.addSclass("desktop-header-font", logout);
LayoutUtils.addSclass("link", logout);
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
index c61236ac25..091e80c085 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/window/FindWindow.java
@@ -36,7 +36,6 @@ import java.util.Vector;
import java.util.logging.Level;
import java.util.regex.Pattern;
-import org.adempiere.webui.AdempiereIdGenerator;
import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Column;
@@ -238,6 +237,8 @@ public class FindWindow extends Window implements EventListener, ValueCha
this.setClosable(false);
this.setSizable(true);
this.setMaximizable(true);
+
+ this.setId("findWindow");
}
public boolean initialize()
@@ -300,18 +301,21 @@ public class FindWindow extends Window implements EventListener, ValueCha
{
Button btnNew = new Button();
btnNew.setName("btnNew");
+ btnNew.setId("btnNew");
btnNew.setImage("/images/New24.png");
btnNew.addEventListener(Events.ON_CLICK,this);
LayoutUtils.addSclass("action-button", btnNew);
Button btnOk = new Button();
btnOk.setName("btnOkSimple");
+ btnOk.setId("btnOk");
btnOk.setImage("/images/Ok24.png");
btnOk.addEventListener(Events.ON_CLICK,this);
LayoutUtils.addSclass("action-button", btnOk);
Button btnCancel = new Button();
btnCancel.setName("btnCancel");
+ btnCancel.setId("btnCancel");
btnCancel.setImage("/images/Cancel24.png");
btnCancel.addEventListener(Events.ON_CLICK,this);
LayoutUtils.addSclass("action-button", btnCancel);
@@ -503,11 +507,13 @@ public class FindWindow extends Window implements EventListener, ValueCha
btnSave.setImage("/images/Save24.png");
btnSave.addEventListener(Events.ON_CLICK, this);
btnSave.setDisabled(true);
+ btnSave.setId("btnSave");
// LayoutUtils.addSclass("disableFilter", btnSave);
fQueryName = new Combobox();
fQueryName.setTooltiptext(Msg.getMsg(Env.getCtx(),"QueryName"));
fQueryName.setReadonly(true);
+ fQueryName.setId("savedQueryCombo");
//user query
userQueries = MUserQuery.get(Env.getCtx(), m_AD_Tab_ID);
@@ -544,10 +550,12 @@ public class FindWindow extends Window implements EventListener, ValueCha
Tabpanel tabPanel = new Tabpanel();
tabPanel.setStyle("height: 100%; width: 100%");
tabPanel.appendChild(winLookupRecord);
+ tabPanel.setId("simpleSearch");
winMain.addTab(tabPanel, Msg.getMsg(Env.getCtx(), "Find").replaceAll("&", ""),false, true);
tabPanel = new Tabpanel();
tabPanel.setStyle("height: 100%; width: 100%");
tabPanel.appendChild(winAdvanced);
+ tabPanel.setId("advancedSearch");
winMain.addTab(tabPanel, Msg.getMsg(Env.getCtx(), "Advanced").replaceAll("&", ""), false, false);
initSimple();
initAdvanced();
@@ -564,6 +572,7 @@ public class FindWindow extends Window implements EventListener, ValueCha
historyCombo.setAutocomplete(false);
historyCombo.setButtonVisible(true);
historyCombo.setReadonly(true);
+ historyCombo.setId("historyCombo");
historyCombo.appendItem(" ", "");
historyCombo.appendItem((Msg.getMsg(Env.getCtx(), HISTORY_DAY_ALL)),HISTORY_DAY_ALL);
historyCombo.appendItem((Msg.getMsg(Env.getCtx(), HISTORY_DAY_YEAR)), HISTORY_DAY_YEAR);
@@ -687,11 +696,9 @@ public class FindWindow extends Window implements EventListener, ValueCha
return;
ListItem listItem = new ListItem();
listItem.setId("Row"+advancedPanel.getItemCount());
- listItem.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listItem.getId());
Listbox listColumn = new Listbox();
listColumn.setId("listColumn"+listItem.getId());
- listColumn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listColumn.getId());
listColumn.setName("listColumn");
listColumn.setMold("select");
listColumn.setRows(0);
@@ -699,7 +706,6 @@ public class FindWindow extends Window implements EventListener, ValueCha
Listbox listOperator = new Listbox();
listOperator.setId("listOperator"+listItem.getId());
- listOperator.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listOperator.getId());
listOperator.setName("listOperator");
listOperator.setMold("select");
listOperator.setRows(0);
@@ -707,7 +713,6 @@ public class FindWindow extends Window implements EventListener, ValueCha
Listbox listAndOr = new Listbox();
listAndOr.setId("listAndOr"+listItem.getId());
- listAndOr.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listAndOr.getId());
listAndOr.setName("listAndOr");
listAndOr.setMold("select");
listAndOr.setRows(0);
@@ -715,7 +720,6 @@ public class FindWindow extends Window implements EventListener, ValueCha
Listbox listLeftBracket = new Listbox();
listLeftBracket.setId("listLeftBracket"+listItem.getId());
- listLeftBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listLeftBracket.getId());
listLeftBracket.setName("listLeftBracket");
listLeftBracket.setMold("select");
listLeftBracket.setRows(0);
@@ -723,7 +727,6 @@ public class FindWindow extends Window implements EventListener, ValueCha
Listbox listRightBracket = new Listbox();
listRightBracket.setId("listRightBracket"+listItem.getId());
- listRightBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listRightBracket.getId());
listRightBracket.setName("listRightBracket");
listRightBracket.setMold("select");
listRightBracket.setRows(0);
@@ -775,35 +778,28 @@ public class FindWindow extends Window implements EventListener, ValueCha
ListCell cellColumn = new ListCell();
cellColumn.appendChild(listColumn);
cellColumn.setId("cellColumn"+listItem.getId());
- cellColumn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellColumn.getId());
ListCell cellOperator = new ListCell();
cellOperator.appendChild(listOperator);
cellOperator.setId("cellOperator"+listItem.getId());
- cellOperator.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellOperator.getId());
ListCell cellQueryFrom = new ListCell();
cellQueryFrom.setId("cellQueryFrom"+listItem.getId());
- cellQueryFrom.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellQueryFrom.getId());
ListCell cellQueryTo = new ListCell();
cellQueryTo.setId("cellQueryTo"+listItem.getId());
- cellQueryTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellQueryTo.getId());
ListCell cellAndOr = new ListCell();
cellAndOr.appendChild(listAndOr);
cellAndOr.setId("cellAndOr"+listItem.getId());
- cellAndOr.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellAndOr.getId());
ListCell cellLeftBracket = new ListCell();
cellLeftBracket.appendChild(listLeftBracket);
cellLeftBracket.setId("cellLeftBracket"+listItem.getId());
- cellLeftBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellLeftBracket.getId());
ListCell cellRightBracket = new ListCell();
cellRightBracket.appendChild(listRightBracket);
cellRightBracket.setId("cellRightBracket"+listItem.getId());
- cellRightBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellRightBracket.getId());
listItem.appendChild(cellAndOr);
listItem.appendChild(cellLeftBracket);
@@ -874,15 +870,6 @@ public class FindWindow extends Window implements EventListener, ValueCha
}
} // createFields
- /**
- * sets the list of values of column and operator listboxes
- * @param listColumn column
- * @param listOperator operator
- **/
- private void setValues(Listbox listColumn, Listbox listOperator)
- {
- setValues(listColumn, listOperator, null);
- }
private void setValues(Listbox listColumn, Listbox listOperator, String[] fields)
{
@@ -1019,10 +1006,8 @@ public class FindWindow extends Window implements EventListener, ValueCha
}
Component componentFrom = getEditorCompQueryFrom(row);
componentFrom.setId("searchFieldFrom"+row.getId());
- componentFrom.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, componentFrom.getId());
Component componentTo = getEditorCompQueryTo(row);
componentTo.setId("searchFieldTo"+row.getId());
- componentTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, componentTo.getId());
Listbox listOp = (Listbox) row.getFellow("listOperator"+row.getId());
String betweenValue = listOp.getSelectedItem().getValue().toString();
diff --git a/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml b/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml
new file mode 100644
index 0000000000..06f7e9ea8f
--- /dev/null
+++ b/org.adempiere.ui.zk/WEB-INF/zk-selenium.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+ org.adempiere.webui.AdempiereIdGenerator
+
+
+
+
+ org.zkoss.zk.ui.uuidRecycle.disabled
+ true
+
+