Author: lfryc(a)redhat.com
Date: 2011-02-23 20:35:22 -0500 (Wed, 23 Feb 2011)
New Revision: 21907
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/KeyConverter.java
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichTreeModelRecursiveAdaptorBean.java
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/ModelNode.java
modules/tests/metamer/trunk/application/src/main/webapp/components/richTree/treeAdaptors.xhtml
Log:
added KeyConverter which enables selection of map values by adaptors (RFPL-1133)
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichTreeModelRecursiveAdaptorBean.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichTreeModelRecursiveAdaptorBean.java 2011-02-24
01:34:24 UTC (rev 21906)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/RichTreeModelRecursiveAdaptorBean.java 2011-02-24
01:35:22 UTC (rev 21907)
@@ -50,13 +50,16 @@
@ViewScoped
public class RichTreeModelRecursiveAdaptorBean implements Serializable {
+
private static final long serialVersionUID = 4008175400649809L;
private static Logger logger;
+ private static List<RecursiveNode> rootNodes;
+
private Attributes attributes;
private AtomicReference<Boolean> leafChildrenNullable = new
AtomicReference<Boolean>(true);
private boolean useMapModel;
- private transient List<RecursiveNode> rootNodes;
private Map<String, Boolean> expanded = new TreeMap<String, Boolean>();
+ private boolean rootNodesInitialized = false;
/*
* Nodes which was loaded lazily in the current request
@@ -97,7 +100,7 @@
}
public List<RecursiveNode> getRootNodes() {
- if (rootNodes == null) {
+ if (!rootNodesInitialized) {
rootNodes = RecursiveNode.createChildren(null, leafChildrenNullable,
new Reference<LazyLoadingListener<Node>>() {
private static final long serialVersionUID = 1L;
@@ -107,6 +110,7 @@
return nodeLazyLoadingListener;
}
});
+ rootNodesInitialized = true;
}
return rootNodes;
}
@@ -130,4 +134,8 @@
public Map<String, Boolean> getExpanded() {
return expanded;
}
+
+ public static List<RecursiveNode> getRootNodesStatically() {
+ return rootNodes;
+ }
}
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/KeyConverter.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/KeyConverter.java
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/KeyConverter.java 2011-02-24
01:35:22 UTC (rev 21907)
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010-2011, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ *******************************************************************************/
+package org.richfaces.tests.metamer.model.treeAdaptor;
+
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.FacesConverter;
+
+import org.apache.commons.lang.CharUtils;
+import org.richfaces.tests.metamer.bean.RichTreeModelRecursiveAdaptorBean;
+
+import com.google.common.base.Strings;
+
+/**
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
+ * @version $Revision$
+ */
+@FacesConverter("treeAdaptorKeyConverter")
+public class KeyConverter implements Converter {
+
+ public Object getAsObject(FacesContext context, UIComponent component, String value)
{
+ List<RecursiveNode> list =
RichTreeModelRecursiveAdaptorBean.getRootNodesStatically();
+ RecursiveNode recursive = null;
+ ModelNode model = null;
+
+ char alpha = ' ';
+ for (int i = 0; i < value.length(); i++) {
+ char ch = value.charAt(i);
+ if (CharUtils.isAsciiAlpha(ch)) {
+ alpha = ch;
+ switch (alpha) {
+ case 'M':
+ model = recursive.getModel();
+ break;
+ default:
+ }
+ }
+ if (CharUtils.isAsciiNumeric(ch)) {
+ int num = CharUtils.toIntValue(ch);
+ switch (alpha) {
+ case 'R':
+ recursive = list.get(num);
+ list = recursive.getRecursiveList();
+ break;
+
+ case 'K':
+ for (ModelNode.K key : model.getMap().keySet()) {
+ if (key.number == num) {
+ return key;
+ }
+ }
+ throw new IllegalStateException();
+ default:
+ }
+ }
+ }
+
+ if (Strings.isNullOrEmpty(value)) {
+ return null;
+ }
+
+ return null;
+ }
+
+ public String getAsString(FacesContext context, UIComponent component, Object value)
{
+ if (value instanceof ModelNode.K) {
+ ModelNode.K k = (ModelNode.K) value;
+ return k.getLabel();
+ }
+
+ if (value == null) {
+ return "";
+ }
+
+ throw new IllegalStateException();
+ }
+
+}
\ No newline at end of file
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/ModelNode.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/ModelNode.java 2011-02-24
01:34:24 UTC (rev 21906)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/treeAdaptor/ModelNode.java 2011-02-24
01:35:22 UTC (rev 21907)
@@ -112,7 +112,7 @@
}
}
- public class K implements Serializable {
+ public class K implements Serializable, Comparable<K> {
private static final long serialVersionUID = 1L;
int number;
@@ -124,6 +124,11 @@
public String getLabel() {
return ModelNode.this.getLabel() + "-K-" + number;
}
+
+ @Override
+ public int compareTo(K o) {
+ return this.number - o.number;
+ }
}
public class V implements Serializable {
Modified:
modules/tests/metamer/trunk/application/src/main/webapp/components/richTree/treeAdaptors.xhtml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/webapp/components/richTree/treeAdaptors.xhtml 2011-02-24
01:34:24 UTC (rev 21906)
+++
modules/tests/metamer/trunk/application/src/main/webapp/components/richTree/treeAdaptors.xhtml 2011-02-24
01:35:22 UTC (rev 21907)
@@ -125,7 +125,8 @@
<rich:treeModelAdaptor
nodes="#{node.model.map}"
-
rendered="#{richTreeModelAdaptorBean.attributes['rendered'].value}">
+
rendered="#{richTreeModelAdaptorBean.attributes['rendered'].value}"
+ rowKeyConverter="treeAdaptorKeyConverter">
<rich:treeNode>
#{node.label}
</rich:treeNode>