From: Benjamin P. <bpo...@us...> - 2006-09-20 12:51:42
|
Update of /cvsroot/swixat/swixat/src/main/java/org/swixat/framework In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv29205/src/main/java/org/swixat/framework Modified Files: Tag: B0_5_5 AbstractFrame.java ActionMonitor.java SwiXMLEngine.java XPathUtil.java Log Message: Use XPathUtil.applyXPath in all swixat project, this permit to intercept jxpath exception and log real exception. Very useful to debug application. Index: ActionMonitor.java =================================================================== RCS file: /cvsroot/swixat/swixat/src/main/java/org/swixat/framework/Attic/ActionMonitor.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -C2 -d -r1.1.2.1 -r1.1.2.2 *** ActionMonitor.java 6 Apr 2006 19:04:29 -0000 1.1.2.1 --- ActionMonitor.java 20 Sep 2006 12:51:34 -0000 1.1.2.2 *************** *** 35,38 **** --- 35,39 ---- import javax.swing.SwingUtilities; + import org.apache.commons.jxpath.JXPathContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; *************** *** 205,210 **** public JComponent getMessageDisplayerComponent() { if (getMessageDisplayer() != null && messageDisplayerComponent == null) { ! messageDisplayerComponent = (JComponent)getParentFrame() ! .getXmlEngine().getSharedContext().getValue(getMessageDisplayer()); } return this.messageDisplayerComponent; --- 206,212 ---- public JComponent getMessageDisplayerComponent() { if (getMessageDisplayer() != null && messageDisplayerComponent == null) { ! JXPathContext context = getParentFrame().getXmlEngine().getSharedContext(); ! String xpath = getMessageDisplayer(); ! messageDisplayerComponent = (JComponent)XPathUtil.applyXPath(xpath, null, context, false); } return this.messageDisplayerComponent; *************** *** 216,221 **** public JComponent getProgressDisplayerComponent() { if (getProgressDisplayer() != null && progressDisplayerComponent == null) { ! progressDisplayerComponent = (JComponent)getParentFrame() ! .getXmlEngine().getSharedContext().getValue(getProgressDisplayer()); } return this.progressDisplayerComponent; --- 218,224 ---- public JComponent getProgressDisplayerComponent() { if (getProgressDisplayer() != null && progressDisplayerComponent == null) { ! JXPathContext context = getParentFrame().getXmlEngine().getSharedContext(); ! String xpath = getProgressDisplayer(); ! progressDisplayerComponent = (JComponent)XPathUtil.applyXPath(xpath, null, context, false); } return this.progressDisplayerComponent; Index: XPathUtil.java =================================================================== RCS file: /cvsroot/swixat/swixat/src/main/java/org/swixat/framework/Attic/XPathUtil.java,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -C2 -d -r1.1.2.3 -r1.1.2.4 *** XPathUtil.java 5 Sep 2006 12:28:52 -0000 1.1.2.3 --- XPathUtil.java 20 Sep 2006 12:51:35 -0000 1.1.2.4 *************** *** 33,37 **** --- 33,41 ---- import org.apache.commons.jxpath.FunctionLibrary; import org.apache.commons.jxpath.JXPathContext; + import org.apache.commons.jxpath.JXPathException; import org.apache.commons.jxpath.PackageFunctions; + import org.apache.commons.logging.Log; + import org.apache.commons.logging.LogFactory; + import org.swixat.databinding.TreeNodeWrapper; import org.swixat.model.Context; *************** *** 53,56 **** --- 57,63 ---- public class XPathUtil { + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private Log log = LogFactory.getLog(XPathUtil.class); + /** * Create new context *************** *** 88,109 **** * The XPath root is represented by the data parameter and, optionally, * also by a previously declared JXPathContext. ! * @param path The XPath expression ! * @param data The root object to which apply the XPath expression * @param sharedCntx An already existing JXPathContext * @param list if true, the object returned by the XPath expression is a list * @return The object pointed by the XPath expression */ ! public static Object applyXPath(String path, Object data, JXPathContext sharedCntx, boolean list) { Object retValue = null; if (path != null) { JXPathContext context; ! if (sharedCntx != null) context = newContext(sharedCntx, data); ! else context = newContext(data); ! if (list) ! retValue = context.iterate(path); ! else ! retValue = context.getValue(path); } return retValue; --- 95,164 ---- * The XPath root is represented by the data parameter and, optionally, * also by a previously declared JXPathContext. ! * <p> ! * If exception occur during xpath evaluation, the main cause is printed as ! * log warn and JXPathException is re-throw, this is useful to understand ! * the evaluation error ! * ! * @param path The XPath expression, if null, result is null ! * @param data The root object to which apply the XPath expression, can ! * be null if sharedCntx is not null * @param sharedCntx An already existing JXPathContext * @param list if true, the object returned by the XPath expression is a list + * of all node that match xpath expression, not just the first one * @return The object pointed by the XPath expression */ ! public static Object applyXPath(String path, Object data, ! JXPathContext sharedCntx, boolean list) { ! Object result = applyXPath(path, data, sharedCntx, list, null); ! return result; ! } ! ! /** ! * Static method used to apply a XPath in order ! * to get the wanted property. ! * The XPath root is represented by the data parameter and, optionally, ! * also by a previously declared JXPathContext. ! * <p> ! * If exception occur during xpath evaluation, the main cause is printed as ! * log warn and JXPathException is re-throw, this is useful to understand ! * the evaluation error ! * ! * @param path The XPath expression, if null, result is null ! * @param data The root object to which apply the XPath expression, can ! * be null if sharedCntx is not null ! * @param sharedCntx An already existing JXPathContext ! * @param list if true, the object returned by the XPath expression is a list ! * of all node that match xpath expression, not just the first one ! * @param requiredType if not null, converts the result to the specified ! * class and returns the resulting object. Not applicable if list is true ! * @return The object pointed by the XPath expression ! */ ! public static Object applyXPath(String path, Object data, ! JXPathContext sharedCntx, boolean list, Class requiredType) { Object retValue = null; if (path != null) { JXPathContext context; ! if (sharedCntx != null && data != null) { context = newContext(sharedCntx, data); ! } else if (sharedCntx == null) { context = newContext(data); ! } else { ! context = sharedCntx; ! } ! ! try { ! if (list) { ! retValue = context.iterate(path); ! } else { ! if (requiredType == null) { ! retValue = context.getValue(path); ! } else { ! retValue = context.getValue(path, requiredType); ! } ! } ! } catch (JXPathException eee) { ! log.warn("Error during XPath evaluation", eee.getException()); ! throw eee; ! } } return retValue; *************** *** 124,127 **** --- 179,196 ---- } + public static boolean isInstance(String className, Object o) { + boolean result = false; + Class clazz; + try { + clazz = Class.forName(className); + result = clazz.isInstance(o); + } catch (ClassNotFoundException eee) { + if (log.isWarnEnabled()) { + log.warn("Can't find java class for " + className, eee); + } + } + return result; + } + /** * Create an array with one element Index: AbstractFrame.java =================================================================== RCS file: /cvsroot/swixat/swixat/src/main/java/org/swixat/framework/AbstractFrame.java,v retrieving revision 1.13.2.16 retrieving revision 1.13.2.17 diff -C2 -d -r1.13.2.16 -r1.13.2.17 *** AbstractFrame.java 18 Sep 2006 13:07:28 -0000 1.13.2.16 --- AbstractFrame.java 20 Sep 2006 12:51:34 -0000 1.13.2.17 *************** *** 185,189 **** if(source != null && destination != null){ JXPathContext jxp = getXmlEngine().getSharedContext(); ! Object newValue = jxp.getValue(source); Pointer destinationPointer = jxp.getPointer(destination); Object oldValue = destinationPointer.getValue(); --- 185,189 ---- if(source != null && destination != null){ JXPathContext jxp = getXmlEngine().getSharedContext(); ! Object newValue = XPathUtil.applyXPath(source, null, jxp, false); Pointer destinationPointer = jxp.getPointer(destination); Object oldValue = destinationPointer.getValue(); *************** *** 213,223 **** // there is no source, we interpret destination as xpath complete // expression that do the set alone ! try { ! JXPathContext jxp = getXmlEngine().getSharedContext(); ! jxp.getValue(destination); ! } catch(org.apache.commons.jxpath.JXPathException eee) { ! log.warn("Error during invokation caused by:", eee.getException()); ! throw eee; ! } } else { log.warn("source("+source+") or destination("+destination+") is null, can't update target"); --- 213,218 ---- // there is no source, we interpret destination as xpath complete // expression that do the set alone ! JXPathContext jxp = getXmlEngine().getSharedContext(); ! XPathUtil.applyXPath(destination, null, jxp, false); } else { log.warn("source("+source+") or destination("+destination+") is null, can't update target"); Index: SwiXMLEngine.java =================================================================== RCS file: /cvsroot/swixat/swixat/src/main/java/org/swixat/framework/SwiXMLEngine.java,v retrieving revision 1.15.2.16 retrieving revision 1.15.2.17 diff -C2 -d -r1.15.2.16 -r1.15.2.17 *** SwiXMLEngine.java 18 Sep 2006 13:03:59 -0000 1.15.2.16 --- SwiXMLEngine.java 20 Sep 2006 12:51:35 -0000 1.15.2.17 *************** *** 633,660 **** } else { String render = (String)jc.getClientProperty("render"); ! String iterate = (String)jc.getClientProperty("iterate"); try { // check if render is present -- if not deliver stringified if(render==null){ ! // if ((iterate != null) && (iterate.equalsIgnoreCase("true"))) { ! // data = getValues(jxpathContext.iterate(origin)); ! // } else { ! // data = getValue(jxpathContext.getValue(origin)); ! // } ! // NOTE(benjamin): i think i change previous line by next line in ! // next commit, it's very bad to try to convert ! // all data in String, to much specific problem. ! // try to use renderer="...xpath..." in your code ! if ((iterate != null) && (iterate.equalsIgnoreCase("true"))) { ! data = jxpathContext.iterate(origin); ! } else { ! data = jxpathContext.getValue(origin); ! } } else { // The origin xpath serves to select DOM nodes. Upon these nodes we apply // the render xpath expression, to render the nodes ! if ((iterate != null) && (iterate.equalsIgnoreCase("true"))) { java.util.List nodes = jxpathContext.selectNodes(origin); ! jc.putClientProperty("originNodes",nodes); Iterator iter =nodes.iterator(); java.util.List rendered = new ArrayList(); --- 633,653 ---- } else { String render = (String)jc.getClientProperty("render"); ! String iterateString = (String)jc.getClientProperty("iterate"); ! boolean iterate = (iterateString != null) && (iterateString.equalsIgnoreCase("true")); try { // check if render is present -- if not deliver stringified + // REMARQUE (poussin): it's very bad to try to convert + // all data in String, to much specific problem. + // try to use renderer="...xpath..." in your code not render + // but for compatibility the else code is keep (perhaps in 1.0 + // we can remove it if(render==null){ ! data = XPathUtil.applyXPath(origin, null, jxpathContext, iterate); } else { // The origin xpath serves to select DOM nodes. Upon these nodes we apply // the render xpath expression, to render the nodes ! if (iterate) { java.util.List nodes = jxpathContext.selectNodes(origin); ! jc.putClientProperty("originNodes",nodes); Iterator iter =nodes.iterator(); java.util.List rendered = new ArrayList(); *************** *** 662,666 **** Object node= iter.next(); jxpathContext.getVariables().declareVariable("origin",node); ! data = getValue(jxpathContext.getValue(render)); rendered.add(data); } --- 655,659 ---- Object node= iter.next(); jxpathContext.getVariables().declareVariable("origin",node); ! data = XPathUtil.applyXPath(render, null, jxpathContext, false); rendered.add(data); } *************** *** 668,674 **** } else { Object node = jxpathContext.selectSingleNode(origin); ! jc.putClientProperty("originNodes",node); jxpathContext.getVariables().declareVariable("origin",node); ! data = getValue(jxpathContext.getValue(render)); } --- 661,667 ---- } else { Object node = jxpathContext.selectSingleNode(origin); ! jc.putClientProperty("originNodes",node); jxpathContext.getVariables().declareVariable("origin",node); ! data = XPathUtil.applyXPath(render, null, jxpathContext, false); } |