Author: tchemit Date: 2009-10-03 20:22:57 +0200 (Sat, 03 Oct 2009) New Revision: 1548 Modified: trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java Log: improve api + add javadoc Modified: trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java =================================================================== --- trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java 2009-10-03 18:17:23 UTC (rev 1547) +++ trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModelBuilder.java 2009-10-03 18:22:57 UTC (rev 1548) @@ -1,15 +1,34 @@ package jaxx.runtime.swing.navigation; +import java.util.Enumeration; import jaxx.runtime.Decorator; import jaxx.runtime.JAXXAction; +import jaxx.runtime.JAXXContext; import jaxx.runtime.JAXXContextEntryDef; import jaxx.runtime.JAXXObject; import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; import jaxx.runtime.swing.navigation.NavigationUtil.NodeRenderer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; -/** @author chemit */ +/** + * This object is design to build a {@link NavigationTreeModel}. + * + * + * @author chemit + */ public class NavigationTreeModelBuilder { + /** + * Logger + */ + static private final Log log = LogFactory.getLog(NavigationTreeModelBuilder.class); + /** + * The model deal by the builder. + * + * <b>Note:</b> It is a good idea to keep only one instance of the model. + * If reset is required, should empty the model but not reinstanciate it. + */ protected NavigationTreeModel model; public NavigationTreeModelBuilder(String navigationSeparator) { @@ -20,58 +39,63 @@ return model; } + public NavigationTreeNode buildEmptyRoot(JAXXContextEntryDef<?> entryDef, String contextName) { + NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(""), entryDef, null, contextName, null, null); + return addChildNode(null, node); + } + public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, - JAXXContextEntryDef entryDef, - String entryPath, - String contextName, - Class<? extends JAXXObject> uiClass, - Class<? extends JAXXAction> actionClass) { + JAXXContextEntryDef<?> entryDef, + String entryPath, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(libelle), entryDef, entryPath, contextName, uiClass, actionClass); return addChildNode(parentNode, node); } public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, - JAXXContextEntryDef entryDef, - String contextName, - Class<? extends JAXXObject> uiClass, - Class<? extends JAXXAction> actionClass) { + JAXXContextEntryDef<?> entryDef, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(libelle), entryDef, contextName, uiClass, actionClass); return addChildNode(parentNode, node); } public NavigationTreeNode build(NavigationTreeNode parentNode, String libelle, - String entryPath, - String contextName, - Class<? extends JAXXObject> uiClass, - Class<? extends JAXXAction> actionClass) { + String entryPath, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(libelle), entryPath, contextName, uiClass, actionClass); return addChildNode(parentNode, node); } public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, - JAXXContextEntryDef entryDef, - String entryPath, - String contextName, - Class<? extends JAXXObject> uiClass, - Class<? extends JAXXAction> actionClass) { + JAXXContextEntryDef<?> entryDef, + String entryPath, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(decorator), entryDef, entryPath, contextName, uiClass, actionClass); return addChildNode(parentNode, node); } public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, - JAXXContextEntryDef entryDef, - String contextName, - Class<? extends JAXXObject> uiClass, - Class<? extends JAXXAction> actionClass) { + JAXXContextEntryDef<?> entryDef, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(decorator), entryDef, contextName, uiClass, actionClass); return addChildNode(parentNode, node); } public NavigationTreeNode build(NavigationTreeNode parentNode, Decorator<?> decorator, - String entryPath, - String contextName, - Class<? extends JAXXObject> uiClass, - Class<? extends JAXXAction> actionClass) { + String entryPath, + String contextName, + Class<? extends JAXXObject> uiClass, + Class<? extends JAXXAction> actionClass) { NavigationTreeNode node = model.new NavigationTreeNode(new NodeRenderer(decorator), entryPath, contextName, uiClass, actionClass); return addChildNode(parentNode, node); } @@ -92,6 +116,41 @@ return parentNode; } + public void finalizeModel(NavigationTreeNode node, Class<? extends JAXXObject> defaultUIClass, Class<? extends JAXXAction> defaultUIHandlerClass) { + if (node == null) { + return; + } + if (node.getJaxxClass() == null) { + // no ui is associated with this node, display a empty content + node.setJaxxClass(defaultUIClass); + } + + if (node.getJaxxActionClass() == null) { + node.setJaxxActionClass(defaultUIHandlerClass); + } + Enumeration<?> children = node.children(); + while (children.hasMoreElements()) { + finalizeModel((NavigationTreeNode) children.nextElement(), defaultUIClass, defaultUIHandlerClass); + } + + } + + public void printModel(JAXXContext context, NavigationTreeNode node) { + if (node == null) { + return; + } + log.info("node " + node.getContextPath() + ", jxpath: " + node.getJaxxContextEntryPath() + ", entryContextDef: " + node.getJaxxContextEntryDef()); + if (log.isDebugEnabled()) { + log.debug("node userObject" + node.getUserObject()); + log.debug("value from node " + node.getJAXXContextValue(context)); + log.debug("value from model " + model.getJAXXContextValue(context, node)); + } + Enumeration<?> children = node.children(); + while (children.hasMoreElements()) { + printModel(context, (NavigationTreeNode) children.nextElement()); + } + } + public static abstract class ChildBuilder<O> { protected NavigationTreeModelBuilder builder; @@ -148,5 +207,4 @@ } } } - }