Author: nbelaevski
Date: 2007-11-11 19:36:36 -0500 (Sun, 11 Nov 2007)
New Revision: 3894
Modified:
trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java
trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java
trunk/framework/api/src/main/java/org/richfaces/model/ClassicTreeDataModel.java
trunk/framework/api/src/main/java/org/richfaces/model/SwingCacheableTreeDataModel.java
trunk/framework/api/src/main/java/org/richfaces/model/SwingTreeDataModel.java
trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java
Log:
http://jira.jboss.com/jira/browse/RF-864 final refactoring
Modified:
trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java 2007-11-11
22:43:50 UTC (rev 3893)
+++
trunk/framework/api/src/main/java/org/richfaces/model/CacheableTreeDataModel.java 2007-11-12
00:36:36 UTC (rev 3894)
@@ -87,9 +87,9 @@
return false;
}
- public CacheableTreeDataModel(TreeDataModel<T> model) {
- super(model.getClazz(), model.getNodeAdaptor());
- setWrappedData(createDefaultNode());
+ public CacheableTreeDataModel(TreeDataModel<T> model, MissingNodeHandler<T>
missingNodeHandler) {
+ super(model.getClazz(), model.getNodeAdaptor(), missingNodeHandler);
+ setWrappedData(missingNodeHandler.handleMissingNode(null, null));
setTreeDataModel(model);
}
@@ -134,5 +134,5 @@
}
protected abstract void setDefaultNodeData(T node, Object data);
-
+
}
Modified:
trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java 2007-11-11
22:43:50 UTC (rev 3893)
+++
trunk/framework/api/src/main/java/org/richfaces/model/ClassicCacheableTreeDataModel.java 2007-11-12
00:36:36 UTC (rev 3894)
@@ -32,23 +32,29 @@
public class ClassicCacheableTreeDataModel extends CacheableTreeDataModel<TreeNode>
{
+ private static final MissingNodeHandler<TreeNode> missingNodeHandler = new
MissingNodeHandler<TreeNode>() {
+
+ public TreeNode handleMissingNode(TreeNode parentNode,
+ Object pathSegment) {
+
+ TreeNode childNode = new TreeNodeImpl();
+
+ if (parentNode != null) {
+ parentNode.addChild(pathSegment, childNode);
+ }
+
+ return childNode;
+ }
+
+ };
+
public ClassicCacheableTreeDataModel(TreeDataModel<TreeNode> model) {
- super(model);
+ super(model, missingNodeHandler);
}
@Override
- protected TreeNode createDefaultNode() {
- return new TreeNodeImpl();
- }
-
- @Override
protected void setDefaultNodeData(TreeNode node, Object data) {
((TreeNodeImpl) node).setData(data);
}
- @Override
- protected void addChild(TreeNode parent, Object key, TreeNode node) {
- parent.addChild(key, node);
- }
-
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/ClassicTreeDataModel.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/model/ClassicTreeDataModel.java 2007-11-11
22:43:50 UTC (rev 3893)
+++
trunk/framework/api/src/main/java/org/richfaces/model/ClassicTreeDataModel.java 2007-11-12
00:36:36 UTC (rev 3894)
@@ -33,7 +33,7 @@
public class ClassicTreeDataModel extends TreeDataModel<TreeNode> {
public ClassicTreeDataModel() {
- super(TreeNode.class, TreeDataModelNodeAdaptor.classicTreeNodeAdaptor);
+ super(TreeNode.class, TreeDataModelNodeAdaptor.classicTreeNodeAdaptor, null);
}
public TreeNode getTreeNode() {
@@ -44,15 +44,4 @@
throw new IllegalStateException(
"No tree element available or row key not set!");
}
-
- @Override
- protected void addChild(TreeNode parent, Object key, TreeNode node) {
- parent.addChild(key, node);
- }
-
- @Override
- protected TreeNode createDefaultNode() {
- throw new UnsupportedOperationException();
- }
-
}
Modified:
trunk/framework/api/src/main/java/org/richfaces/model/SwingCacheableTreeDataModel.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/model/SwingCacheableTreeDataModel.java 2007-11-11
22:43:50 UTC (rev 3893)
+++
trunk/framework/api/src/main/java/org/richfaces/model/SwingCacheableTreeDataModel.java 2007-11-12
00:36:36 UTC (rev 3894)
@@ -34,27 +34,32 @@
public class SwingCacheableTreeDataModel extends CacheableTreeDataModel<TreeNode>
{
+ private static final MissingNodeHandler<TreeNode> missingNodeHandler = new
MissingNodeHandler<TreeNode>() {
+
+ public TreeNode handleMissingNode(TreeNode parent,
+ Object pathSegment) {
+
+ SwingTreeNodeImpl childNode = new SwingTreeNodeImpl();
+
+ if (parent != null) {
+ SwingTreeNodeImpl parentNode = (SwingTreeNodeImpl) parent;
+
+ parentNode.addChild(pathSegment, childNode);
+ childNode.setParent(parentNode);
+ }
+
+ return childNode;
+ }
+
+ };
+
public SwingCacheableTreeDataModel(TreeDataModel<TreeNode> model) {
- super(model);
+ super(model, missingNodeHandler);
}
@Override
- protected TreeNode createDefaultNode() {
- return new SwingTreeNodeImpl();
- }
-
- @Override
protected void setDefaultNodeData(TreeNode node, Object data) {
((SwingTreeNodeImpl) node).setData(data);
}
- @Override
- protected void addChild(TreeNode parent, Object key, TreeNode node) {
- SwingTreeNodeImpl parentNode = (SwingTreeNodeImpl) parent;
- SwingTreeNodeImpl childNode = (SwingTreeNodeImpl) node;
-
- parentNode.addChild(key, node);
- childNode.setParent(parentNode);
- }
-
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/SwingTreeDataModel.java
===================================================================
---
trunk/framework/api/src/main/java/org/richfaces/model/SwingTreeDataModel.java 2007-11-11
22:43:50 UTC (rev 3893)
+++
trunk/framework/api/src/main/java/org/richfaces/model/SwingTreeDataModel.java 2007-11-12
00:36:36 UTC (rev 3894)
@@ -40,7 +40,7 @@
private TreeNode treeNode;
public SwingTreeDataModel() {
- super(TreeNode.class, TreeDataModelNodeAdaptor.swingTreeNodeAdaptor);
+ super(TreeNode.class, TreeDataModelNodeAdaptor.swingTreeNodeAdaptor, null);
}
@Override
@@ -77,15 +77,4 @@
super.setWrappedData(data);
}
-
- @Override
- protected void addChild(TreeNode parent, Object key, TreeNode node) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- protected TreeNode createDefaultNode() {
- throw new UnsupportedOperationException();
- }
-
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java 2007-11-11
22:43:50 UTC (rev 3893)
+++ trunk/framework/api/src/main/java/org/richfaces/model/TreeDataModel.java 2007-11-12
00:36:36 UTC (rev 3894)
@@ -36,7 +36,7 @@
* @author Nick Belaevski - nbelaevski(a)exadel.com created 16.11.2006
*
*/
-public abstract class TreeDataModel<T> extends AbstractTreeDataModel {
+public class TreeDataModel<T> extends AbstractTreeDataModel {
private Object wrappedData;
private Class<T> clazz;
@@ -50,9 +50,26 @@
protected final TreeDataModelNodeAdaptor<T> nodeAdaptor;
- public TreeDataModel(Class<T> clazz, TreeDataModelNodeAdaptor<T>
nodeAdaptor) {
+ private MissingNodeHandler<T> missingNodeHandler;
+
+ /**
+ * Interface aimed to handle missing nodes for externally-generated keys.
+ * Typical usage for the interface is filling model cache
+ * @param <T> generic tree node type
+ *
+ * @author Nick Belaevski
+ * @since 3.2
+ */
+ public static interface MissingNodeHandler<T> {
+ T handleMissingNode(T parentNode, Object pathSegment);
+ };
+
+ public TreeDataModel(Class<T> clazz, TreeDataModelNodeAdaptor<T>
nodeAdaptor,
+ MissingNodeHandler<T> missingNodeHandler) {
+
this.clazz = clazz;
this.nodeAdaptor = nodeAdaptor;
+ this.missingNodeHandler = missingNodeHandler;
}
public final Class<T> getClazz() {
@@ -207,8 +224,16 @@
//TODO nick - reset rowTreeData
return null;
} else {
- childRowTreeData = createDefaultNode();
- addChild(rowTreeData, pathSegment, childRowTreeData);
+ if (missingNodeHandler != null) {
+ childRowTreeData = missingNodeHandler.
+ handleMissingNode(rowTreeData, pathSegment);
+
+ if (childRowTreeData == null) {
+ return null;
+ }
+ } else {
+ return null;
+ }
}
}
@@ -287,8 +312,4 @@
return null;
}
- protected abstract T createDefaultNode();
-
- protected abstract void addChild(T parent, Object key, T node);
-
}