|
Modified: ofbiz/branches/addbirt/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java (original) +++ ofbiz/branches/addbirt/framework/testtools/src/org/ofbiz/testtools/seleniumxml/SeleniumXml.java Fri Dec 11 23:11:39 2009 @@ -67,9 +67,7 @@ import com.thoughtworks.selenium.DefaultSelenium; import com.thoughtworks.selenium.SeleniumException; - public class SeleniumXml { - //public static final String PROPS_NAME = "selenium.config"; public static String PROPS_NAME = "selenium.config"; Logger logger = Logger.getLogger(SeleniumXml.class.getName()); @@ -83,7 +81,7 @@ private String username; private String password; private String testCaseDirectory; - + public static void main(String[] args) throws JDOMException, IOException, TestCaseException{ if(args.length == 0) { System.out.println("Please include a path for the selenium XML test file."); @@ -104,7 +102,7 @@ System.err.println(" Argument : "+ args[0] ); System.err.println(" Full absolute path of file : "+ testFile.getAbsolutePath() ); System.err.println(" Full canonical path of file : "+ testFile.getCanonicalPath() ); - + sel.testCaseDirectory = sel.getFileDirectory(testFile.getAbsolutePath()); System.err.println(" testCaseDirectory: "+ sel.testCaseDirectory ); sel.runTest( testFile.getAbsolutePath() ); @@ -113,7 +111,7 @@ } } } - + /* call run test suite from webtool selenium */ public static String runTestSuite(HttpServletRequest request, HttpServletResponse response){ Map parameters = UtilHttp.getParameterMap(request); @@ -135,17 +133,16 @@ SeleniumXml sel = new SeleniumXml(); File testFile = new File(para.trim()); if (testFile.exists()) { - System.err.println(" Argument : "+ para.trim() ); - System.err.println(" Full absolute path of file : "+ testFile.getAbsolutePath() ); - System.err.println(" Full canonical path of file : "+ testFile.getCanonicalPath() ); - - sel.testCaseDirectory = sel.getFileDirectory(testFile.getAbsolutePath()); - System.err.println(" testCaseDirectory: "+ sel.testCaseDirectory ); - sel.runTest( testFile.getAbsolutePath() ); - } else { - System.err.println("Test File is not exist :"+para.trim()); - } - //sel.runTest(para.trim()); + System.err.println(" Argument : "+ para.trim() ); + System.err.println(" Full absolute path of file : "+ testFile.getAbsolutePath() ); + System.err.println(" Full canonical path of file : "+ testFile.getCanonicalPath() ); + + sel.testCaseDirectory = sel.getFileDirectory(testFile.getAbsolutePath()); + System.err.println(" testCaseDirectory: "+ sel.testCaseDirectory ); + sel.runTest( testFile.getAbsolutePath() ); + } else { + System.err.println("Test File is not exist :"+para.trim()); + } }catch(JDOMException jdome){ System.out.println(jdome.getMessage()); }catch(IOException ioe){ @@ -154,7 +151,7 @@ return "success"; } } - + private String getFileDirectory(String filePath){ String directory = null; if (filePath.indexOf(File.separatorChar) != -1 ) { @@ -163,7 +160,7 @@ } return directory; } - + public SeleniumXml() throws IOException { this.map = FastMap.newInstance(); if (props == null) { @@ -176,8 +173,6 @@ private static void initConfig() throws IOException { try { String configFile = System.getProperty(PROPS_NAME); - //System.out.println("Looking for " + PROPS_NAME); - //System.out.println("Found following config file: " + configFile); if (configFile == null) { String errMsg = "The Java environment (-Dxxx=yyy) variable with name " + PROPS_NAME + " is not set, cannot resolve location."; throw new MalformedURLException(errMsg); @@ -192,23 +187,22 @@ throw e; } } - + private static void initConfig(URL url) throws IOException { try { if (url == null) { String errMsg = "The Java environment (-Dxxx=yyy) variable with name " + url.toString() + " is not set, cannot resolve location."; throw new MalformedURLException(errMsg); } - // BasicConfigurator.configure(); props = UtilProperties.getProperties(url); } catch (IOException e) { e.printStackTrace(); throw e; } } - + /** - * Constructor to preset with an existing Map of parameters. Intended to be used + * Constructor to preset with an existing Map of parameters. Intended to be used * for nested Selenium tests. * @param map */ @@ -232,18 +226,16 @@ public void runCommands() throws TestCaseException { Element root = this.doc.getRootElement(); - //List<Element> nodes = UtilGenerics.cast(root.getChildren()); List<Element> nodes = root.getChildren(); runCommands(nodes); } - + public void runCommands(List<Element> nodes) throws TestCaseException{ - for(Element elem: nodes) { String thisName = elem.getName(); if("type" == elem.getName()) { typeCmd(elem); - + } else if("setParam" == thisName) { setParam(elem); } else if("clickAt" == thisName) { @@ -278,6 +270,8 @@ testcase(elem); } else if("assertContains" == thisName) { assertContains(elem); + } else if("assertNotContains" == thisName) { + assertNotContains(elem); } else if("getHtmlSource" == thisName) { getHtmlSource(elem); } else if("getBodyText" == thisName) { @@ -296,11 +290,11 @@ appendCmd(elem); } else if("loadParameter" == thisName) { loadParameter(elem); - }else if("partialRunDependency" == thisName) { + } else if("partialRunDependency" == thisName) { partialRunDependency(elem); - }else if("if" == thisName) { + } else if("if" == thisName) { ifCmd(elem); - }else if("open" == thisName) { + } else if("open" == thisName) { openCmd(elem); } else if("click" == thisName) { clickCmd(elem); @@ -324,26 +318,22 @@ openWindow(elem); } else if("selectWindow" == thisName) { selectWindow(elem); + } else if("assertConfirmation" == thisName) { + assertConfirmation(elem); } else if("runScript" == thisName) { runScript(elem); - } else { - //logger.error("Unknown SeleniumXml command found:"+elem.getName()); - //Use reflection with parameters using the naming convention param1, param2, and any return results stored - //in map using "out" + } else { logger.info("Undefined command calling by reflection for command: " + thisName); callByReflection(elem); } } - } - + private void callByReflection(Element elem) { - String methodName = elem.getName(); - //Support two parameters for all selenium RC calls - String param1 = elem.getAttributeValue("param1"); - String param2 = elem.getAttributeValue("param2"); - + String param1 = elem.getAttributeValue("param1"); + String param2 = elem.getAttributeValue("param2"); + Class[] paramTypes = null; Object[] args = null; if( (param1 != null) && (param2 != null) ) { @@ -358,147 +348,138 @@ } //Capture the output name for "get" methods - String out = elem.getAttributeValue("out"); - + String out = elem.getAttributeValue("out"); + Method m; try { m = (Method) this.sel.getClass().getDeclaredMethod(methodName, paramTypes); Object results = m.invoke(this.sel, args); - + //Add output parameter to common map if( (out != null) && (results != null)) { addParam(out, results); } } catch (Exception e) { - // TODO Auto-generated catch block logger.error("Exception occurred when Unknown SeleniumXml command found:"+elem.getName()); e.printStackTrace(); } } - + public void waitForValue(Element elem) { - String locator = replaceParam(elem.getAttributeValue("locator")); String timeout = elem.getAttributeValue("timeout"); String outParam = elem.getAttributeValue("out"); - + int maxTime = Integer.parseInt(timeout); int maxSeconds = maxTime/1000; logger.debug("waitForValue: locator=" + locator + " timeout=" + timeout); - //this.sel.waitForCondition(script, timeout); String foundValue = null; for(int second=0;; second++) { if(second >= maxSeconds) { throw new SeleniumException("waitForValue exceeded timeout: " + maxTime); } - try{ + try{ //getValue throws an exception if it can't find locator // - sleep for 1 sec and try again // - otherwise break as we found the value - foundValue = sel.getValue(locator); + foundValue = sel.getValue(locator); if(outParam != null) { this.addParam(outParam, foundValue); } - break; // - } catch(Exception e) { + break; + } catch(Exception e) { //wait for 1 second and then resume try { Thread.sleep(1000); } catch (InterruptedException threadE) { - // TODO Auto-generated catch block threadE.printStackTrace(); } } } - } - + } + public void setParam(Element elem) { - String name = replaceParam(elem.getAttributeValue("name")); String value = replaceParam(elem.getAttributeValue("value")); - + if( (name != null) && (value != null)) { this.addParam(name, value); } } + public void getValueCmd(Element elem) { - String locator = replaceParam(elem.getAttributeValue("locator")); String outParam = elem.getAttributeValue("out"); - + logger.debug("getValueCmd: locator=" + locator); - String foundValue = sel.getValue(locator); + String foundValue = sel.getValue(locator); if(outParam != null) { this.addParam(outParam, foundValue); } - } - + } + public void waitForCondition(Element elem) { - String script = elem.getAttributeValue("script"); String timeout = elem.getAttributeValue("timeout"); - + logger.debug("waitForCondition: script=" + script + " timeout=" + timeout); this.sel.waitForCondition(script, timeout); } - + public void openWindow(Element elem) { - String url = elem.getAttributeValue("url"); String windowId = replaceParam(elem.getAttributeValue("windowId")); - + logger.debug("openWindow: url=" + url + " windowId=" + windowId); this.sel.openWindow(url, windowId); return; } - + public void selectWindow(Element elem) { - String windowId = replaceParam(elem.getAttributeValue("windowId")); - + logger.debug("selectWindow: windowId=" + windowId); this.sel.selectWindow(windowId); return; } - + public void runScript(Element elem) { - String script = replaceParam(elem.getAttributeValue("script")); - + logger.debug("runScript: script=" + script); this.sel.runScript(script); return; } - + public void loadData(Element elem) throws TestCaseException { - + String file = elem.getAttributeValue("file"); String iterations = elem.getAttributeValue("iterations"); List<Element> children = UtilGenerics.cast(elem.getChildren()); - + DataLoader loader = new DataLoader(file, iterations, this, children); loader.runTest(); } public void groovyRunner(Element elem) { - + String urlName = elem.getAttributeValue("srcUrl"); GroovyRunner runner = new GroovyRunner(urlName, this); runner.runTest(); } public void jythonRunner(Element elem) { - + String urlName = elem.getAttributeValue("srcUrl"); JythonRunner runner = new JythonRunner(urlName, this); runner.runTest(); } public void dataLoop(Element elem) throws TestCaseException { - + String dataListName = elem.getAttributeValue("dataListName"); List<Element> children = UtilGenerics.cast(elem.getChildren()); - + DataLoop looper = new DataLoop(dataListName, this, children); looper.runTest(); } @@ -517,16 +498,16 @@ RemoteRequest loader = new RemoteRequest( this, children, loginAs, requestUrl, host, responseHandlerMode); loader.runTest(); } - + public void ifCmd(Element elem) throws TestCaseException { String isRun = replaceParam(elem.getAttributeValue("condition")); if (isRun != null && !isRun.equals("") && Boolean.valueOf(isRun)) { List <Element> children = elem.getChildren(); - this.runCommands(children); + this.runCommands(children); }else{ Element child = elem.getChild("else"); List <Element> children = child.getChildren(); - this.runCommands(children); + this.runCommands(children); } } @@ -534,18 +515,18 @@ String isRun = replaceParam(elem.getAttributeValue("isRun")); if (isRun != null && Boolean.valueOf(isRun)) { List <Element> children = elem.getChildren(); - this.runCommands(children); + this.runCommands(children); } } - + public String getParamValue(String key) { return (String) this.map.get(key); } - + public Object getParamValue(Object key) { return this.map.get(key); } - + public void addParam(String name, String value) { logger.info("addParam: name=" + name + " value="+value); this.map.put(name, value); @@ -557,57 +538,51 @@ } private void assertContains(Element elem) throws TestCaseException { - String src = replaceParam(elem.getAttributeValue("src")); - String test = replaceParam(elem.getAttributeValue("test")); + String src = replaceParam(elem.getAttributeValue("src")); + String test = replaceParam(elem.getAttributeValue("test")); int indxSearch = src.indexOf(test); if(indxSearch == -1) { logger.info("assertContains didn't find " + test + " in the src"); throw new TestCaseException("assertContains didn't find: " + test); - } else { logger.info("assertContains found " + test + " in the src"); } //TODO: implement JUnit TestCase - Assert.assertTrue(indxSearch != -1); - } - -/* private void selectPopup(Element elem) { - String locator = elem.getAttributeValue("locator"); -// String winId = elem.getAttributeValue("windowId"); - String timeout = elem.getAttributeValue("timeout"); - - //this.sel.waitForPopUp(winId, timeout); - this.sel.click(locator); - - String[] winNames = this.sel.getAllWindowNames(); - this.sel.selectWindow("name=" + winNames[1]); } - - private void getAllWindowIds(Element elem) { - String[] winIds = this.sel.getAllWindowIds(); - for (String winId: winIds) { - logger.info("WindowId: " + winId); + + private void assertNotContains(Element elem) throws TestCaseException { + String src = replaceParam(elem.getAttributeValue("src")); + String test = replaceParam(elem.getAttributeValue("test")); + int indxSearch = src.indexOf(test); + if(indxSearch != -1) { + logger.info("assertNotContains found " + test + " in the src"); + throw new TestCaseException("assertContains didn't find: " + test); + } else { + logger.info("assertNotContains didn't find " + test + " in the src"); } - String[] winNames = this.sel.getAllWindowNames(); - for (String winName: winNames) { - logger.info("WindowName: " + winName); + } + + private void assertTitle(Element elem) throws TestCaseException { + String src = replaceParam(this.sel.getTitle()); + String test = replaceParam(elem.getAttributeValue("value")); + int indxSearch = src.indexOf(test); + if(indxSearch == -1) { + logger.info("assertTitle value " + test + " doesn't match exact "+src); + throw new TestCaseException("assertTitle value " + test + " doesn't match exact "+src); + } else { + logger.info("assertTitle matched title"); } - - //this.sel.selectWindow("name=" + winNames[1]); - //System.out.println("Did we select WindowName: " + winNames[1]); } -*/ + private void selectPopup(Element elem) { - String locator = elem.getAttributeValue("locator"); -// String winId = elem.getAttributeValue("windowId"); - String timeout = elem.getAttributeValue("timeout"); - - //this.sel.waitForPopUp(winId, timeout); - this.sel.click(locator); - + String locator = elem.getAttributeValue("locator"); + String timeout = elem.getAttributeValue("timeout"); + + this.sel.click(locator); String[] winNames = this.sel.getAllWindowNames(); this.sel.selectWindow("name=" + winNames[1]); } - + private void getAllWindowIds(Element elem) { String[] winIds = this.sel.getAllWindowIds(); for(int i=0; i<winIds.length; i++) { @@ -617,59 +592,57 @@ for(int i=0; i<winIds.length; i++) { logger.info("WindowName: " + winNames[i]); } - - //this.sel.selectWindow("name=" + winNames[1]); - //System.out.println("Did we select WindowName: " + winNames[1]); } - + /** * Gets the hidden value of a list box * @param elem */ private void getSelectedValue(Element elem) { - String locator = elem.getAttributeValue("locator"); - String out = elem.getAttributeValue("out"); - String text = this.sel.getSelectedValue(locator); + String locator = elem.getAttributeValue("locator"); + String out = elem.getAttributeValue("out"); + String text = this.sel.getSelectedValue(locator); logger.info("getSelectedValue: locator=" + locator + " text="+text); addParam(out, text); } - + /** * Gets the visible (displayed) value of a list box * @param elem */ private void getSelectedLabel(Element elem) { - String locator = elem.getAttributeValue("locator"); - String out = elem.getAttributeValue("out"); - String text = this.sel.getSelectedLabel(locator); + String locator = elem.getAttributeValue("locator"); + String out = elem.getAttributeValue("out"); + String text = this.sel.getSelectedLabel(locator); logger.info("getSelectedValue: locator=" + locator + " text="+text); addParam(out, text); } + private void getSelectedId(Element elem) { - String locator = elem.getAttributeValue("locator"); - String out = elem.getAttributeValue("out"); - String text = this.sel.getSelectedId(locator); + String locator = elem.getAttributeValue("locator"); + String out = elem.getAttributeValue("out"); + String text = this.sel.getSelectedId(locator); addParam(out, text); } + private void getHtmlSource(Element elem) { - String paramName = elem.getAttributeValue("out"); - String text = this.sel.getHtmlSource(); + String paramName = elem.getAttributeValue("out"); + String text = this.sel.getHtmlSource(); logger.info("getHtmlsource: paramName=" + paramName + " text=" + text); addParam(paramName, text); } - + private void getBodyText(Element elem) { - String paramName = elem.getAttributeValue("out"); - String text = this.sel.getBodyText(); -// logger.info("getBodyText: paramName=" + paramName + " text=" + text); + String paramName = elem.getAttributeValue("out"); + String text = this.sel.getBodyText(); addParam(paramName, text); } + private void testcase(Element elem) { System.err.println("New testcase: " + elem.getAttributeValue("file")); String testFile = elem.getAttributeValue("file"); String isRun = replaceParam(elem.getAttributeValue("isRun")); - - + String absolutePath = getAbsolutePath(testFile); String parentTestCase = new String(this.testCaseDirectory); SeleniumXml newTest = new SeleniumXml(this); @@ -680,14 +653,13 @@ }else{ System.err.println(" testFile :"+testFile+ " isRun:"+isRun); } - } catch (Exception e) { e.printStackTrace(); Assert.fail("Testcase error for file: " + absolutePath); } newTest.testCaseDirectory = parentTestCase; } - + private String getFileDirectoryForRelativePath(String filePath){ String directory = null; if (filePath.indexOf("/") != -1 ) { @@ -698,13 +670,21 @@ directory = filePath.substring(0, (lastIndexOf+1)); } return directory; - } + } + private void clickAt(Element elem) { logger.debug("clickAt: " + replaceParam(elem.getAttributeValue("locator"))); String locator = replaceParam(elem.getAttributeValue("locator")); String coordString = elem.getAttributeValue("coordString"); this.sel.clickAt(locator, coordString); } + + private void assertConfirmation(Element elem) { + logger.debug("assertConfirmation: " + replaceParam(elem.getAttributeValue("value"))); + this.sel.waitForCondition("selenium.isConfirmationPresent();", "1000"); + this.sel.getConfirmation(); + } + /** * @param elem takes a Selenium String locator. See Javadocs for more information. Here are some * example locators: @@ -716,90 +696,89 @@ private void clickCmd(Element elem) { logger.info("clickCmd: " + replaceParam(elem.getAttributeValue("locator"))); try { - this.sel.click(replaceParam(elem.getAttributeValue("locator"))); + this.sel.click(replaceParam(elem.getAttributeValue("locator"))); } catch (SeleniumException e) { - logger.info("caught SeleniumException Name:"+elem.getName()+" , Value: "+elem.getAttributeValue("locator")); - e.printStackTrace(); } } + private void doubleClick(Element elem) { logger.info("clickCmd: " + replaceParam(elem.getAttributeValue("locator"))); - this.sel.doubleClick((replaceParam(elem.getAttributeValue("locator")))); + this.sel.doubleClick((replaceParam(elem.getAttributeValue("locator")))); } - + private void checkCmd(Element elem) { logger.info("checkCmd: " + replaceParam(elem.getAttributeValue("locator"))); - this.sel.check(replaceParam(elem.getAttributeValue("locator"))); + this.sel.check(replaceParam(elem.getAttributeValue("locator"))); } + private void uncheckCmd(Element elem) { logger.info("uncheckCmd: " + replaceParam(elem.getAttributeValue("locator"))); - this.sel.uncheck(replaceParam(elem.getAttributeValue("locator"))); + this.sel.uncheck(replaceParam(elem.getAttributeValue("locator"))); } + private void typeCmd(Element elem) { String name = elem.getAttributeValue("name"); - String value = replaceParam(elem.getAttributeValue("value")); + String value = replaceParam(elem.getAttributeValue("value")); logger.info("typeCmd: id=" + name + " value=" + value); - this.sel.type(name, value); + this.sel.type(name, value); } + /* * setSpeed delays the time for the next selenium command to execute */ private void setSpeed(Element elem) { logger.info("setSpeed: " + elem.getAttributeValue("value")); - this.sel.setSpeed(elem.getAttributeValue("value")); + this.sel.setSpeed(elem.getAttributeValue("value")); } + /* - * waitForPageToLoadCmd is the max timeout selenium will wait for a page to load. - * Commands are executed immediately after the page loads therefore if the pages are - * fast the test will go through the pages very quickly. Use setSpeed if you want to + * waitForPageToLoadCmd is the max timeout selenium will wait for a page to load. + * Commands are executed immediately after the page loads therefore if the pages are + * fast the test will go through the pages very quickly. Use setSpeed if you want to * see the pages executed slower. */ private void waitForPageToLoadCmd(Element elem) { logger.info("waitForPageToLoadCmd: " + elem.getAttributeValue("value")); - this.sel.waitForPageToLoad(elem.getAttributeValue("value")); + this.sel.waitForPageToLoad(elem.getAttributeValue("value")); } + private void openCmd(Element elem) { - String cmd = replaceParam(elem.getAttributeValue("value")); + String cmd = replaceParam(elem.getAttributeValue("value")); logger.info("openCmd: " + cmd); - this.sel.open(cmd); - //this.sel.windowMaximize(); + this.sel.open(cmd); } + private void uniqueIdCmd(Element elem) { - String paramName = elem.getAttributeValue("out"); + String paramName = elem.getAttributeValue("out"); String paramValue = RandomStringUtils.randomAlphanumeric(MAX_STR_LENGTH).toUpperCase(); logger.info("uniqueIdCmd: parameter=" + paramName + " value=" + paramValue); addParam(paramName, paramValue); } - + /* - * captureText command captures the current HTML page and runs a regex to - * get the specified string. + * captureText command captures the current HTML page and runs a regex to + * get the specified string. * * For example: if the following string existed in a web page - * * "xx <tag a=b> yy </tag> zz" - * - * * And you wanted to capture the value in the of the XML (yy). You would do the following; * Use regxp: "<(\\S+?).*?>(.*?)</\\1>"; //The \\1 reuses group 1 - * - * <captureText regex="<(\\S+?).*?>(.*?)</\\1>" group="2" results="xmlValue" /> - * + * + * <captureText regex="<(\\S+?).*?>(.*?)</\\1>" group="2" results="xmlValue" /> + * * The command will find the <tag>.. and group 2 contains the 'yy' value. - * + * * Note: if 'group' is null it will default to the entire regex group. */ private void captureTextInPageCmd(Element elem) { - - String regex = elem.getAttributeValue("regex"); - String group = elem.getAttributeValue("group"); - String results = elem.getAttributeValue("results"); + String regex = elem.getAttributeValue("regex"); + String group = elem.getAttributeValue("group"); + String results = elem.getAttributeValue("results"); Pattern pattern = Pattern.compile(regex); - - String targetString = this.sel.getHtmlSource(); - + String targetString = this.sel.getHtmlSource(); + // Create the 'target' string we wish to interrogate. // Get a Matcher based on the target string. Matcher matcher = pattern.matcher(targetString); @@ -818,7 +797,7 @@ addParam(results, resultsValue); } else { logger.info("Didn't find results with regex: " + regex); - + //TODO: temporary to capture the missed string /*try { FileWriter out = new FileWriter("c:/dev/erep/output/failure.txt"); @@ -831,16 +810,16 @@ } */ } } - + private void randomAlphaStringCmd(Element elem) { int nSize = 0; int nPrefixSize = 0; - String paramName = elem.getAttributeValue("out"); - String size = elem.getAttributeValue("size"); + String paramName = elem.getAttributeValue("out"); + String size = elem.getAttributeValue("size"); if(size != null) { nSize = Integer.parseInt(size); } - String prefix = elem.getAttributeValue("prefix"); + String prefix = elem.getAttributeValue("prefix"); if(prefix != null) { nPrefixSize = prefix.length(); } @@ -855,34 +834,40 @@ logger.info("randomStringAlphaCmd: paramName=" + paramName + " paramValue=" + paramValue); addParam(paramName, paramValue); } + private void randomStringCmd(Element elem) { - String paramName = elem.getAttributeValue("out"); - String size = elem.getAttributeValue("size"); - String prefix = elem.getAttributeValue("prefix"); + String paramName = elem.getAttributeValue("out"); + String size = elem.getAttributeValue("size"); + String prefix = elem.getAttributeValue("prefix"); String paramValue = TestUtils.createRandomString(prefix, Integer.parseInt(size)); logger.info("randomStringCmd: paramName=" + paramName + " paramValue=" + paramValue); addParam(paramName, paramValue); } + private void getSelectedIdsCmd(Element elem) { logger.info("getSelectdIdsCmd: " + elem.getAttributeValue("value")); - this.sel.getSelectedIds(elem.getAttributeValue("value")); + this.sel.getSelectedIds(elem.getAttributeValue("value")); } + private void selectCmd(Element elem) { String selectLocator = elem.getAttributeValue("locator"); String optionLocator = elem.getAttributeValue("option"); logger.info("selectCmd: selectLocator=" + selectLocator + " optionLocator=" + optionLocator); - this.sel.select(selectLocator, optionLocator); + this.sel.select(selectLocator, optionLocator); } + private void printCmd(Element elem) { String value = replaceParam(elem.getAttributeValue("value")); logger.info("Print: " + value); } + private void copyCmd(Element elem) { - String toStr = replaceParam(elem.getAttributeValue("to")); - String fromStr = replaceParam(elem.getAttributeValue("from")); + String toStr = replaceParam(elem.getAttributeValue("to")); + String fromStr = replaceParam(elem.getAttributeValue("from")); logger.info("copyCmd: to=" + toStr + " from=" + fromStr); addParam(toStr, fromStr); } + private void appendCmd(Element elem) { logger.info("appendCmd: src1=" + elem.getAttributeValue("src1") + " src2=" + elem.getAttributeValue("src2")); String newStr = replaceParam(elem.getAttributeValue("src1")) + replaceParam(elem.getAttributeValue("src2")); @@ -891,10 +876,10 @@ private void loadParameter(Element elem) { logger.info("loadParameter: fileName=" + elem.getAttributeValue("file") ); - String parameterFile = elem.getAttributeValue("file"); String absolutePath = getAbsolutePath(parameterFile); BasicConfigurator.configure(); + try { InputStream in = new FileInputStream(absolutePath); Properties parameter = new Properties(); @@ -902,25 +887,24 @@ in.close(); Set<Entry<Object, Object>> entrySet = parameter.entrySet(); - + for(Map.Entry entry : entrySet) { String key = (String)entry.getKey(); String value = (String)entry.getValue(); System.out.println(key + " = " + value); addParam(key, value); - } + } } catch (Exception e) { logger.error("Can not load parameter . "); } - + String newStr = replaceParam(elem.getAttributeValue("src1")) + replaceParam(elem.getAttributeValue("src2")); addParam(elem.getAttributeValue("out"), newStr); } public String replaceParam(String value) { - if (value == null) { return value; } - + StringBuilder buf = new StringBuilder(); int end = 0; int start = 0; @@ -932,13 +916,13 @@ end = remainingStr.indexOf("}"); String paramName = remainingStr.substring(start + 2, end); replacedVal = getParamValue(paramName); - if (replacedVal == null) { + if (replacedVal == null) { replacedVal = ""; } buf.append(replacedVal); remainingStr = remainingStr.substring(end + 1); end = 0; - } + } buf.append(remainingStr.substring(end)); return buf.toString(); } @@ -948,35 +932,32 @@ if( (value.indexOf("${") != -1) && (value.indexOf("}", 1) != -1) ) { return true; - } + } return false; } - + //TODO read properties file to setup selenium private void setupSelenium() { - //return if Selenium has already been setup //e.g. nested selenium test cases. if(this.sel != null) return; - + String serverHost = null; String serverPort = null; String browser = null; String startUrl = null; - + //First initialize with property values if(props != null ) { //Get setup params from property value - + serverHost = props.getProperty("serverHost", "localhost"); serverPort = props.getProperty("proxyPort", "4444"); browser = props.getProperty("browser", "*iexplore"); startUrl = props.getProperty("startUrl", "http://localhost:8080"); } - //Second over ride properties if defined in the "setup" element Element elem = this.doc.getRootElement().getChild("setup"); - if (elem != null) { - + if (elem != null) { //Override properties if specified if( elem.getAttributeValue("serverHost") != null ) { serverHost = elem.getAttributeValue("serverHost"); @@ -998,6 +979,7 @@ this.sel = new DefaultSelenium(serverHost, Integer.parseInt(serverPort), browser, startUrl); this.sel.start(); } + private String getAbsolutePath(String fileName){ logger.info("getAbsolutePath: fileName=" + fileName); String fileAbsolutePath = fileName; @@ -1009,31 +991,32 @@ logger.info("getAbsolutePath: returning fileName=" + fileName); return fileAbsolutePath; } + private void readFile(String fileName) throws JDOMException, IOException { String absolutePath = getAbsolutePath(fileName); File xmlFile = new File(absolutePath); - + SAXBuilder builder = new SAXBuilder(); this.doc = builder.build(xmlFile); } - + public String getUserName() { return this.username; } - + public void setUserName(String val) { this.username = val; } - + public void setPassword(String val) { this.password = val; } - + public String getPassword() { return this.password; } - + public Map <String, Object> getMap() { return this.map; } -} \ No newline at end of file +} Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_ajax.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_ajax.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_ajax.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_ajax.xml Fri Dec 11 23:11:39 2009 @@ -1,35 +1,35 @@ -<testcase> - <open value="/example/control/updateExampleFeature" /> - <click locator="link=Logout" /> - <waitForPageToLoad value="10000" /> - <type name="PASSWORD" value="ofbiz" /> - <click locator="//input[@value='Login']" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Ajax Examples" /> - <waitForPageToLoad value="10000" /> - <type name="exampleName" value="AJAX example name" /> - <type name="description" value="AJAX description" /> - <type name="longDescription" value="This is a long description" /> - <type name="comments" value="this is a comment" /> - <type name="exampleSize" value="10" /> - <click locator="//img[@alt='View Calendar']" /> - <click locator="//tr[5]/td[2]/div" /> - <click locator="link=OK" /> - <click locator="//div[@id='_G266__body']/table/tbody/tr[9]/td[2]/a/img" /> - <click locator="link=Now" /> - <click locator="link=OK" /> - <select locator="anotherText" option="label=Explicit Option" /> - <click locator="submitButton" /> - <click locator="link=10000" /> - <waitForPageToLoad value="10000" /> - <type name="longDescription" value="This is a long description - this is a big update" /> - <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Ajax Examples" /> - <waitForPageToLoad value="10000" /> - <click locator="link=10000" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Printer Friendly" /> - <waitForPageToLoad value="10000" /> - <brett_cmd param1="1" param2="1" /> +<testcase> + <open value="/example/control/updateExampleFeature" /> + <click locator="link=Logout" /> + <waitForPageToLoad value="10000" /> + <type name="PASSWORD" value="ofbiz" /> + <click locator="//input[@value='Login']" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Ajax Examples" /> + <waitForPageToLoad value="10000" /> + <type name="exampleName" value="AJAX example name" /> + <type name="description" value="AJAX description" /> + <type name="longDescription" value="This is a long description" /> + <type name="comments" value="this is a comment" /> + <type name="exampleSize" value="10" /> + <click locator="//img[@alt='View Calendar']" /> + <click locator="//tr[5]/td[2]/div" /> + <click locator="link=OK" /> + <click locator="//div[@id='_G266__body']/table/tbody/tr[9]/td[2]/a/img" /> + <click locator="link=Now" /> + <click locator="link=OK" /> + <select locator="anotherText" option="label=Explicit Option" /> + <click locator="submitButton" /> + <click locator="link=10000" /> + <waitForPageToLoad value="10000" /> + <type name="longDescription" value="This is a long description - this is a big update" /> + <click locator="submitButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Ajax Examples" /> + <waitForPageToLoad value="10000" /> + <click locator="link=10000" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Printer Friendly" /> + <waitForPageToLoad value="10000" /> + <brett_cmd param1="1" param2="1" /> </testcase> Propchange: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_ajax.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_login.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_login.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_login.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_login.xml Fri Dec 11 23:11:39 2009 @@ -1,5 +1,6 @@ <?xml version="1.0"?> <testcase> + <open value="/example/control/setSessionLocale?newLocale=en" /> <open value="/example/control/logout" /> <waitForPageToLoad value="10000" /> <type name="USERNAME" value="admin" /> Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_new.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_new.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_new.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_new.xml Fri Dec 11 23:11:39 2009 @@ -20,11 +20,9 @@ <waitForPageToLoad value="10000" /> <click locator="link=Items" /> <waitForPageToLoad value="10000" /> - <type name="description" value="Item 1" /> + <type name="AddExampleItem_description" value="Item 1" /> <type name="amount" value="100" /> <select locator="amountUomId" option="label=Weight: Stone (st)" /> <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> - <!-- click locator="link=New Example" /> - <waitForPageToLoad value="10000" / --> + <assertConfirmation value="Do you confirm ?" /> </testcase> \ No newline at end of file Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_search.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_search.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_search.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/example_search.xml Fri Dec 11 23:11:39 2009 @@ -1,11 +1,8 @@ <testcase> - <click locator="link=Example" /> + <open value="/example/control/FindExample" /> <waitForPageToLoad value="10000" /> <click locator="searchButton" /> <waitForPageToLoad value="10000" /> - <!-- click locator="link=Last" /> - <waitForPageToLoad value="10000" / --> <getHtmlSource out="searchResults"/> - <!-- assertContains src="${searchResults}" test="${exampleName}" / --> <assertContains src="${searchResults}" test="Brett" /> </testcase> \ No newline at end of file Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/AjaxExample.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/AjaxExample.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/AjaxExample.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/AjaxExample.xml Fri Dec 11 23:11:39 2009 @@ -1,35 +1,35 @@ -<testcase> - <open value="/example/control/updateExampleFeature" /> - <click locator="link=Logout" /> - <waitForPageToLoad value="10000" /> - <type name="PASSWORD" value="ofbiz" /> - <click locator="//input[@value='Login']" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Ajax Examples" /> - <waitForPageToLoad value="10000" /> - <type name="exampleName" value="AJAX example name" /> - <type name="description" value="AJAX description" /> - <type name="longDescription" value="This is a long description" /> - <type name="comments" value="this is a comment" /> - <type name="exampleSize" value="10" /> - <click locator="//img[@alt='View Calendar']" /> - <click locator="//tr[5]/td[2]/div" /> - <click locator="link=OK" /> - <click locator="//div[@id='_G266__body']/table/tbody/tr[9]/td[2]/a/img" /> - <click locator="link=Now" /> - <click locator="link=OK" /> - <select locator="anotherText" option="label=Explicit Option" /> - <click locator="submitButton" /> - <click locator="link=10000" /> - <waitForPageToLoad value="10000" /> - <type name="longDescription" value="This is a long description - this is a big update" /> - <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Ajax Examples" /> - <waitForPageToLoad value="10000" /> - <click locator="link=10000" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Printer Friendly" /> - <waitForPageToLoad value="10000" /> - <brett_cmd param1="1" param2="1" /> +<testcase> + <open value="/example/control/updateExampleFeature" /> + <click locator="link=Logout" /> + <waitForPageToLoad value="10000" /> + <type name="PASSWORD" value="ofbiz" /> + <click locator="//input[@value='Login']" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Ajax Examples" /> + <waitForPageToLoad value="10000" /> + <type name="exampleName" value="AJAX example name" /> + <type name="description" value="AJAX description" /> + <type name="longDescription" value="This is a long description" /> + <type name="comments" value="this is a comment" /> + <type name="exampleSize" value="10" /> + <click locator="//img[@alt='View Calendar']" /> + <click locator="//tr[5]/td[2]/div" /> + <click locator="link=OK" /> + <click locator="//div[@id='_G266__body']/table/tbody/tr[9]/td[2]/a/img" /> + <click locator="link=Now" /> + <click locator="link=OK" /> + <select locator="anotherText" option="label=Explicit Option" /> + <click locator="submitButton" /> + <click locator="link=10000" /> + <waitForPageToLoad value="10000" /> + <type name="longDescription" value="This is a long description - this is a big update" /> + <click locator="submitButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Ajax Examples" /> + <waitForPageToLoad value="10000" /> + <click locator="link=10000" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Printer Friendly" /> + <waitForPageToLoad value="10000" /> + <brett_cmd param1="1" param2="1" /> </testcase> Propchange: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/AjaxExample.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewExample.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewExample.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewExample.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewExample.xml Fri Dec 11 23:11:39 2009 @@ -1,35 +1,35 @@ -<testcase> - <open value="/example/control/FindExample?portalPageId=Example" /> - <click locator="link=Logout" /> - <waitForPageToLoad value="10000" /> - <type name="PASSWORD" value="ofbiz" /> - <click locator="//input[@value='Login']" /> - <waitForPageToLoad value="10000" /> - <click locator="link=New Example" /> - <waitForPageToLoad value="10000" /> - <select locator="statusId" option="label=Defined" /> - <type name="exampleName" value="New Example 1" /> - <type name="description" value="This is a description" /> - <type name="longDescription" value="Long description goes here" /> - <type name="comments" value="comments go here" /> - <type name="exampleSize" value="10" /> - <click locator="//img[@alt='View Calendar']" /> - <click locator="//tr[2]/td[5]/div" /> - <click locator="//tr[2]/td[5]/div" /> - <click locator="//div[@id='_G152__body']/table/tbody/tr[9]/td[2]/a/img" /> - <click locator="//tr[3]/td[2]/div" /> - <click locator="//tr[3]/td[2]/div" /> - <click locator="link=OK" /> - <select locator="anotherText" option="label=Good" /> - <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Items" /> - <waitForPageToLoad value="10000" /> - <type name="description" value="Item 1" /> - <type name="amount" value="100" /> - <select locator="amountUomId" option="label=Weight: Stone (st)" /> - <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=New Example" /> - <waitForPageToLoad value="10000" /> +<testcase> + <open value="/example/control/FindExample?portalPageId=Example" /> + <click locator="link=Logout" /> + <waitForPageToLoad value="10000" /> + <type name="PASSWORD" value="ofbiz" /> + <click locator="//input[@value='Login']" /> + <waitForPageToLoad value="10000" /> + <click locator="link=New Example" /> + <waitForPageToLoad value="10000" /> + <select locator="statusId" option="label=Defined" /> + <type name="exampleName" value="New Example 1" /> + <type name="description" value="This is a description" /> + <type name="longDescription" value="Long description goes here" /> + <type name="comments" value="comments go here" /> + <type name="exampleSize" value="10" /> + <click locator="//img[@alt='View Calendar']" /> + <click locator="//tr[2]/td[5]/div" /> + <click locator="//tr[2]/td[5]/div" /> + <click locator="//div[@id='_G152__body']/table/tbody/tr[9]/td[2]/a/img" /> + <click locator="//tr[3]/td[2]/div" /> + <click locator="//tr[3]/td[2]/div" /> + <click locator="link=OK" /> + <select locator="anotherText" option="label=Good" /> + <click locator="submitButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Items" /> + <waitForPageToLoad value="10000" /> + <type name="description" value="Item 1" /> + <type name="amount" value="100" /> + <select locator="amountUomId" option="label=Weight: Stone (st)" /> + <click locator="submitButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=New Example" /> + <waitForPageToLoad value="10000" /> </testcase> Propchange: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewExample.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewFeature.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewFeature.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewFeature.xml (original) +++ ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewFeature.xml Fri Dec 11 23:11:39 2009 @@ -1,31 +1,31 @@ -<testcase> - <open value="/example/control/EditExample" /> - <click locator="link=Logout" /> - <waitForPageToLoad value="10000" /> - <type name="PASSWORD" value="ofbiz" /> - <click locator="//input[@value='Login']" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Feature" /> - <waitForPageToLoad value="10000" /> - <click locator="searchButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=New Example Feature" /> - <waitForPageToLoad value="10000" /> - <type name="description" value="New Feature 1000" /> - <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Examples" /> - <waitForPageToLoad value="10000" /> - <click locator="//a[contains(@href, '/example/control/EditExampleFeature?exampleFeatureId=10000')]" /> - <waitForPageToLoad value="10000" /> - <click locator="link=Feature" /> - <waitForPageToLoad value="10000" /> - <type name="description" value="New Feature" /> - <click locator="searchButton" /> - <waitForPageToLoad value="10000" /> - <click locator="link=10000" /> - <waitForPageToLoad value="10000" /> - <type name="description" value="New Feature 1000 - updated" /> - <click locator="submitButton" /> - <waitForPageToLoad value="10000" /> +<testcase> + <open value="/example/control/EditExample" /> + <click locator="link=Logout" /> + <waitForPageToLoad value="10000" /> + <type name="PASSWORD" value="ofbiz" /> + <click locator="//input[@value='Login']" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Feature" /> + <waitForPageToLoad value="10000" /> + <click locator="searchButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=New Example Feature" /> + <waitForPageToLoad value="10000" /> + <type name="description" value="New Feature 1000" /> + <click locator="submitButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Examples" /> + <waitForPageToLoad value="10000" /> + <click locator="//a[contains(@href, '/example/control/EditExampleFeature?exampleFeatureId=10000')]" /> + <waitForPageToLoad value="10000" /> + <click locator="link=Feature" /> + <waitForPageToLoad value="10000" /> + <type name="description" value="New Feature" /> + <click locator="searchButton" /> + <waitForPageToLoad value="10000" /> + <click locator="link=10000" /> + <waitForPageToLoad value="10000" /> + <type name="description" value="New Feature 1000 - updated" /> + <click locator="submitButton" /> + <waitForPageToLoad value="10000" /> </testcase> Propchange: ofbiz/branches/addbirt/framework/testtools/testdef/seleniumxml/example/recorded/NewFeature.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: ofbiz/branches/addbirt/framework/webtools/widget/CommonScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/webtools/widget/CommonScreens.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/webtools/widget/CommonScreens.xml (original) +++ ofbiz/branches/addbirt/framework/webtools/widget/CommonScreens.xml Fri Dec 11 23:11:39 2009 @@ -99,6 +99,16 @@ </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="pre-body"> + <section> + <condition> + <if-has-permission permission="ENTITY_MAINT"/> + </condition> + <widgets> + <include-menu name="EntityTabBar" location="component://webtools/widget/Menus.xml"/> + </widgets> + </section> + </decorator-section> <decorator-section name="body"> <section> <!-- do check for WEBTOOLS, _VIEW permission --> @@ -106,7 +116,6 @@ <if-has-permission permission="ENTITY_MAINT"/> </condition> <widgets> - <include-menu name="EntityTabBar" location="component://webtools/widget/Menus.xml"/> <decorator-section-include name="body"/> </widgets> <fail-widgets> @@ -126,6 +135,16 @@ </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="pre-body"> + <section> + <condition> + <if-has-permission permission="WEBTOOLS" action="_VIEW"/> + </condition> + <widgets> + <include-menu name="serviceTabBar" location="component://webtools/widget/Menus.xml"/> + </widgets> + </section> + </decorator-section> <decorator-section name="body"> <section> <!-- do check for WEBTOOLS, _VIEW permission --> @@ -133,7 +152,6 @@ <if-has-permission permission="WEBTOOLS" action="_VIEW"/> </condition> <widgets> - <include-menu name="serviceTabBar" location="component://webtools/widget/Menus.xml"/> <decorator-section-include name="body"/> </widgets> <fail-widgets> @@ -153,6 +171,16 @@ </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="pre-body"> + <section> + <condition> + <if-has-permission permission="ENTITY_MAINT"/> + </condition> + <widgets> + <include-menu name="importExportTabBar" location="component://webtools/widget/Menus.xml"/> + </widgets> + </section> + </decorator-section> <decorator-section name="body"> <section> <!-- do check for WEBTOOLS, _VIEW permission --> @@ -160,7 +188,6 @@ <if-has-permission permission="ENTITY_MAINT"/> </condition> <widgets> - <include-menu name="importExportTabBar" location="component://webtools/widget/Menus.xml"/> <decorator-section-include name="body"/> </widgets> <fail-widgets> @@ -180,6 +207,16 @@ </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="pre-body"> + <section> + <condition> + <if-has-permission permission="ENTITY_MAINT"/> + </condition> + <widgets> + <include-menu name="artifactTabBar" location="component://webtools/widget/Menus.xml"/> + </widgets> + </section> + </decorator-section> <decorator-section name="body"> <section> <!-- do check for WEBTOOLS, _VIEW permission --> @@ -187,7 +224,6 @@ <if-has-permission permission="ENTITY_MAINT"/> </condition> <widgets> - <include-menu name="artifactTabBar" location="component://webtools/widget/Menus.xml"/> <decorator-section-include name="body"/> </widgets> <fail-widgets> @@ -207,6 +243,16 @@ </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="pre-body"> + <section> + <condition> + <if-has-permission permission="ENTITY_MAINT"/> + </condition> + <widgets> + <include-menu name="configurationTabBar" location="component://webtools/widget/Menus.xml"/> + </widgets> + </section> + </decorator-section> <decorator-section name="body"> <section> <!-- do check for WEBTOOLS, _VIEW permission --> @@ -214,7 +260,6 @@ <if-has-permission permission="ENTITY_MAINT"/> </condition> <widgets> - <include-menu name="configurationTabBar" location="component://webtools/widget/Menus.xml"/> <decorator-section-include name="body"/> </widgets> <fail-widgets> Modified: ofbiz/branches/addbirt/framework/webtools/widget/LogScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/webtools/widget/LogScreens.xml?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/webtools/widget/LogScreens.xml (original) +++ ofbiz/branches/addbirt/framework/webtools/widget/LogScreens.xml Fri Dec 11 23:11:39 2009 @@ -27,13 +27,22 @@ </actions> <widgets> <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> - <decorator-section name="body"> + <decorator-section name="pre-body"> <section> <condition> <if-has-permission permission="WEBTOOLS" action="_VIEW"/> </condition> <widgets> <include-menu location="component://webtools/widget/Menus.xml" name="LoggingTabBar"/> + </widgets> + </section> + </decorator-section> + <decorator-section name="body"> + <section> + <condition> + <if-has-permission permission="WEBTOOLS" action="_VIEW"/> + </condition> + <widgets> <decorator-section-include name="body"/> </widgets> <fail-widgets> Modified: ofbiz/branches/addbirt/framework/widget/dtd/widget-screen.xsd URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/dtd/widget-screen.xsd?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/dtd/widget-screen.xsd (original) +++ ofbiz/branches/addbirt/framework/widget/dtd/widget-screen.xsd Fri Dec 11 23:11:39 2009 @@ -930,6 +930,15 @@ </xs:restriction> </xs:simpleType> </xs:attribute> + <xs:attribute name="save-collapsed" default="true"> + <xs:annotation><xs:documentation>When set to true, screenlet collapse status is saved as user preference. Defaults to true.</xs:documentation></xs:annotation> + <xs:simpleType> + <xs:restriction base="xs:token"> + <xs:enumeration value="true"/> + <xs:enumeration value="false"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> <xs:attribute name="padded" default="true"> <xs:annotation><xs:documentation>When set to true, screenlet content will be padded. Defaults to true.</xs:documentation></xs:annotation> <xs:simpleType> Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java Fri Dec 11 23:11:39 2009 @@ -1957,8 +1957,8 @@ // get the parameterized pagination index and size fields int paginatorNumber = modelForm.getPaginatorNumber(context); - String viewIndexParam = modelForm.getPaginateIndexField(context); - String viewSizeParam = modelForm.getPaginateSizeField(context); + String viewIndexParam = modelForm.getMultiPaginateIndexField(context); + String viewSizeParam = modelForm.getMultiPaginateSizeField(context); int viewIndex = modelForm.getViewIndex(context); int viewSize = modelForm.getViewSize(context); Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/ModelForm.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/ModelForm.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/ModelForm.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Fri Dec 11 23:11:39 2009 @@ -784,8 +784,10 @@ * use the same form definitions for many types of form UIs */ public void renderFormString(Appendable writer, Map<String, Object> context, FormStringRenderer formStringRenderer) throws IOException { - // increment the paginator - this.incrementPaginatorNumber(context); + // increment the paginator, only for list and multi forms + if ("list".equals(this.type) || "multi".equals(this.type)) { + this.incrementPaginatorNumber(context); + } // Populate the viewSize and viewIndex so they are available for use during form actions context.put("viewIndex", this.getViewIndex(context)); context.put("viewSize", this.getViewSize(context)); @@ -2178,28 +2180,42 @@ if (UtilValidate.isEmpty(field)) { field = DEFAULT_PAG_INDEX_FIELD; } + return field; + } + + public String getMultiPaginateIndexField(Map<String, Object> context) { + String field = this.paginateIndexField.expandString(context); + if (UtilValidate.isEmpty(field)) { + field = DEFAULT_PAG_INDEX_FIELD; + } // append the paginator number field = field + "_" + getPaginatorNumber(context); return field; } public int getPaginateIndex(Map<String, Object> context) { - String field = this.getPaginateIndexField(context); + String field = this.getMultiPaginateIndexField(context); int viewIndex = 0; try { Object value = context.get(field); if (value == null) { - // try parameters.VIEW_INDEX as that is an old OFBiz convention - Map<String, Object> parameters = UtilGenerics.cast(context.get("parameters")); - if (parameters != null) { - value = parameters.get("VIEW_INDEX" + "_" + getPaginatorNumber(context)); + // try parameters.VIEW_INDEX as that is an old OFBiz convention + Map<String, Object> parameters = UtilGenerics.cast(context.get("parameters")); + if (parameters != null) { + value = parameters.get("VIEW_INDEX" + "_" + getPaginatorNumber(context)); - if (value == null) { - value = parameters.get(field); + if (value == null) { + value = parameters.get(field); + } } } + + // try paginate index field without paginator number + if (value == null) { + field = this.getPaginateIndexField(context); + value = context.get(field); } if (value instanceof Integer) { @@ -2219,13 +2235,21 @@ if (UtilValidate.isEmpty(field)) { field = DEFAULT_PAG_SIZE_FIELD; } + return field; + } + + public String getMultiPaginateSizeField(Map<String, Object> context) { + String field = this.paginateSizeField.expandString(context); + if (UtilValidate.isEmpty(field)) { + field = DEFAULT_PAG_SIZE_FIELD; + } // append the paginator number field = field + "_" + getPaginatorNumber(context); return field; } public int getPaginateSize(Map<String, Object> context) { - String field = this.getPaginateSizeField(context); + String field = this.getMultiPaginateSizeField(context); int viewSize = this.defaultViewSize; try { @@ -2242,6 +2266,12 @@ } } } + + // try the page size field without paginator number + if (value == null) { + field = this.getPaginateSizeField(context); + value = context.get(field); + } if (value instanceof Integer) { viewSize = ((Integer) value).intValue(); Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java Fri Dec 11 23:11:39 2009 @@ -2287,8 +2287,8 @@ // get the parameterized pagination index and size fields int paginatorNumber = modelForm.getPaginatorNumber(context); - String viewIndexParam = modelForm.getPaginateIndexField(context); - String viewSizeParam = modelForm.getPaginateSizeField(context); + String viewIndexParam = modelForm.getMultiPaginateIndexField(context); + String viewSizeParam = modelForm.getMultiPaginateSizeField(context); int viewIndex = modelForm.getViewIndex(context); int viewSize = modelForm.getViewSize(context); Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/html/HtmlScreenRenderer.java Fri Dec 11 23:11:39 2009 @@ -262,8 +262,8 @@ // get the parametrized pagination index and size fields int paginatorNumber = modelForm.getPaginatorNumber(context); - String viewIndexParam = modelForm.getPaginateIndexField(context); - String viewSizeParam = modelForm.getPaginateSizeField(context); + String viewIndexParam = modelForm.getMultiPaginateIndexField(context); + String viewSizeParam = modelForm.getMultiPaginateSizeField(context); int viewIndex = modelForm.getViewIndex(context); int viewSize = modelForm.getViewSize(context); Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/MacroScreenRenderer.java Fri Dec 11 23:11:39 2009 @@ -662,6 +662,8 @@ sr.append(title); sr.append("\" collapsible="); sr.append(Boolean.toString(collapsible)); + sr.append(" saveCollapsed="); + sr.append(Boolean.toString(screenlet.saveCollapsed())); sr.append(" collapsibleAreaId=\""); sr.append(collapsibleAreaId); sr.append("\" expandToolTip=\""); @@ -721,8 +723,8 @@ // get the parametrized pagination index and size fields int paginatorNumber = modelForm.getPaginatorNumber(context); - String viewIndexParam = modelForm.getPaginateIndexField(context); - String viewSizeParam = modelForm.getPaginateSizeField(context); + String viewIndexParam = modelForm.getMultiPaginateIndexField(context); + String viewSizeParam = modelForm.getMultiPaginateSizeField(context); int viewIndex = modelForm.getViewIndex(context); int viewSize = modelForm.getViewSize(context); Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/screen/ModelScreenWidget.java Fri Dec 11 23:11:39 2009 @@ -333,6 +333,7 @@ protected Form navigationForm = null; protected boolean collapsible = false; protected boolean initiallyCollapsed = false; + protected boolean saveCollapsed = true; protected boolean padded = true; protected List<ModelScreenWidget> subWidgets; @@ -344,6 +345,9 @@ if (this.initiallyCollapsed) { this.collapsible = true; } + // By default, for a collapsible screenlet, the collapsed/expanded status must be saved + this.saveCollapsed = !("false".equals(screenletElement.getAttribute("save-collapsed"))); + this.padded = !"false".equals(screenletElement.getAttribute("padded")); if (this.collapsible && UtilValidate.isEmpty(this.name) && idExdr.isEmpty()) { throw new IllegalArgumentException("Collapsible screenlets must have a name or id [" + this.modelScreen.getName() + "]"); @@ -387,7 +391,7 @@ @Override public void renderWidgetString(Appendable writer, Map<String, Object> context, ScreenStringRenderer screenStringRenderer) throws GeneralException, IOException { - boolean collapsed = initiallyCollapsed; + boolean collapsed = getInitiallyCollapsed(context); if (this.collapsible) { String preferenceKey = getPreferenceKey(context) + "_collapsed"; Map<String, Object> requestParameters = UtilGenerics.checkMap(context.get("requestParameters")); @@ -414,11 +418,21 @@ public boolean collapsible() { return this.collapsible; } - - public boolean initiallyCollapsed() { + + //initially-collapsed status, which may be overriden by user preference + public boolean getInitiallyCollapsed(Map<String, Object> context) { + String screenletId = this.getId(context) + "_collapsed"; + Map<String, ? extends Object> userPreferences = UtilGenerics.checkMap(context.get("userPreferences")); + if (userPreferences != null && userPreferences.containsKey(screenletId)) { + return Boolean.valueOf((String)userPreferences.get(screenletId)).booleanValue() ; + } + return this.initiallyCollapsed; } + public boolean saveCollapsed() { + return this.saveCollapsed; + } public boolean padded() { return this.padded; } Modified: ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java (original) +++ ofbiz/branches/addbirt/framework/widget/src/org/ofbiz/widget/tree/MacroTreeRenderer.java Fri Dec 11 23:11:39 2009 @@ -253,7 +253,7 @@ StringWriter sr = new StringWriter(); sr.append("<@renderLabel "); - sr.append("\" id=\""); + sr.append("id=\""); sr.append(id); sr.append("\" style=\""); sr.append(style); Modified: ofbiz/branches/addbirt/framework/widget/templates/csvScreenMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/csvScreenMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/csvScreenMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/csvScreenMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -48,7 +48,7 @@ <#macro renderImage src id style wid hgt border alt urlString></#macro> <#macro renderContentFrame fullUrl width height border></#macro> -<#macro renderScreenletBegin id title collapsible collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled></#macro> +<#macro renderScreenletBegin id title collapsible saveCollapsed collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled></#macro> <#macro renderScreenletSubWidget></#macro> <#macro renderScreenletEnd></#macro> Modified: ofbiz/branches/addbirt/framework/widget/templates/foFormMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/foFormMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/foFormMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/foFormMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -29,6 +29,9 @@ "head1":"font-size=\"12\" font-weight=\"bold\"", "head2":"font-weight=\"bold\"", "head3":"font-weight=\"bold\" font-style=\"italic\"", + "h1":"font-size=\"12\" font-weight=\"bold\"", + "h2":"font-weight=\"bold\"", + "h3":"font-weight=\"bold\" font-style=\"italic\"", "error":"color=\"red\""}/> <#assign foStyle = foStyles[style]?default("")/> ${foStyle?default("")} Modified: ofbiz/branches/addbirt/framework/widget/templates/foScreenMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/foScreenMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/foScreenMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/foScreenMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -27,6 +27,9 @@ "head1":"font-size=\"12\" font-weight=\"bold\"", "head2":"font-weight=\"bold\"", "head3":"font-weight=\"bold\" font-style=\"italic\"", + "h1":"font-size=\"12\" font-weight=\"bold\"", + "h2":"font-weight=\"bold\"", + "h3":"font-weight=\"bold\" font-style=\"italic\"", "error":"color=\"red\""}/> <#assign foStyle = foStyles[style]?default("")/> ${foStyle?default("")} @@ -59,7 +62,7 @@ <#macro renderImage></#macro> <#macro renderContentFrame></#macro> -<#macro renderScreenletBegin id title collapsible collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled></#macro> +<#macro renderScreenletBegin id title collapsible saveCollapsed collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled></#macro> <#macro renderScreenletSubWidget></#macro> <#macro renderScreenletEnd></#macro> Modified: ofbiz/branches/addbirt/framework/widget/templates/htmlFormMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/htmlFormMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/htmlFormMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/htmlFormMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -409,7 +409,7 @@ <#macro renderLookupField className alert name value size maxlength id autocomplete descriptionFieldName formName lookupFieldFormName targetParameterIter imgSrc ajaxUrl ajaxEnabled> <div class="field-lookup"><ul> -<li><input type="text" <@renderClass className alert /><#if name?has_content> name="${name}"</#if><#if value?has_content> value="${value}"</#if><#if size?has_content> size="${size}"</#if><#if maxlength?has_content> maxlength="${maxlength}"</#if><#if id?has_content> id="${id}"</#if><#rt/><#if autocomplete?has_content> autocomplete="off"</#if>/><#rt/></li></li> +<li><input type="text" <@renderClass className alert /><#if name?has_content> name="${name}"</#if><#if value?has_content> value="${value}"</#if><#if size?has_content> size="${size}"</#if><#if maxlength?has_content> maxlength="${maxlength}"</#if><#if id?has_content> id="${id}"</#if><#rt/><#if autocomplete?has_content> autocomplete="off"</#if>/><#rt/></li> <li><#if descriptionFieldName?has_content> <a href="javascript:call_fieldlookup3(document.${formName?html}.${name?html},'${descriptionFieldName}',<#rt/> <#else> @@ -420,7 +420,7 @@ ,document.${formName}.${item}.value<#rt> </#list> </#if> -);"></li><#rt> +);"></a></li><#rt> </ul></div> <#if ajaxEnabled?has_content && ajaxEnabled> <script language="JavaScript" type="text/javascript">ajaxAutoCompleter('${ajaxUrl}');</script><#t/> Modified: ofbiz/branches/addbirt/framework/widget/templates/htmlScreenMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/htmlScreenMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/htmlScreenMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/htmlScreenMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -129,16 +129,16 @@ </#macro> <#macro renderContentFrame fullUrl width height border><iframe src="${fullUrl}" width="${width}" height="${height}" <#if border?has_content>border="${border}"</#if> /></#macro> -<#macro renderScreenletBegin id title collapsible collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled> +<#macro renderScreenletBegin id title collapsible saveCollapsed collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled> <div class="screenlet"<#if id?has_content> id="${id}"</#if>><#rt/> <#if showMore> <div class="screenlet-title-bar"><ul><#if title?has_content><li class="h3">${title}</li></#if> <#if collapsible> <li class="<#rt/> <#if collapsed> -collapsed"><a <#if javaScriptEnabled>onclick="javascript:toggleScreenlet(this, '${collapsibleAreaId}', '${expandToolTip}', '${collapseToolTip}');"<#else>href="${fullUrlString}"</#if><#if expandToolTip?has_content> title="${expandToolTip}"</#if> +collapsed"><a <#if javaScriptEnabled>onclick="javascript:toggleScreenlet(this, '${collapsibleAreaId}', '${saveCollapsed?string}', '${expandToolTip}', '${collapseToolTip}');"<#else>href="${fullUrlString}"</#if><#if expandToolTip?has_content> title="${expandToolTip}"</#if> <#else> -expanded"><a <#if javaScriptEnabled>onclick="javascript:toggleScreenlet(this, '${collapsibleAreaId}', '${expandToolTip}', '${collapseToolTip}');"<#else>href="${fullUrlString}"</#if><#if expandToolTip?has_content> title="${expandToolTip}"</#if> +expanded"><a <#if javaScriptEnabled>onclick="javascript:toggleScreenlet(this, '${collapsibleAreaId}', '${saveCollapsed?string}', '${expandToolTip}', '${collapseToolTip}');"<#else>href="${fullUrlString}"</#if><#if expandToolTip?has_content> title="${expandToolTip}"</#if> </#if> > </a></li> </#if> Modified: ofbiz/branches/addbirt/framework/widget/templates/textScreenMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/textScreenMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/textScreenMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/textScreenMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -48,7 +48,7 @@ <#macro renderImage src id style wid hgt border alt urlString></#macro> <#macro renderContentFrame fullUrl width height border></#macro> -<#macro renderScreenletBegin id title collapsible collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled></#macro> +<#macro renderScreenletBegin id title collapsible saveCollapsed collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled></#macro> <#macro renderScreenletSubWidget></#macro> <#macro renderScreenletEnd></#macro> Modified: ofbiz/branches/addbirt/framework/widget/templates/xmlScreenMacroLibrary.ftl URL: http://svn.apache.org/viewvc/ofbiz/branches/addbirt/framework/widget/templates/xmlScreenMacroLibrary.ftl?rev=889851&r1=889850&r2=889851&view=diff ============================================================================== --- ofbiz/branches/addbirt/framework/widget/templates/xmlScreenMacroLibrary.ftl (original) +++ ofbiz/branches/addbirt/framework/widget/templates/xmlScreenMacroLibrary.ftl Fri Dec 11 23:11:39 2009 @@ -52,7 +52,7 @@ </#macro> <#macro renderContentFrame fullUrl width height border></#macro> -<#macro renderScreenletBegin id title collapsible collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled> +<#macro renderScreenletBegin id title collapsible saveCollapsed collapsibleAreaId expandToolTip collapseToolTip fullUrlString padded menuString showMore collapsed javaScriptEnabled> </#macro> <#macro renderScreenletSubWidget></#macro> <#macro renderScreenletEnd></#macro> |
| Free forum by Nabble | Edit this page |
