blob: 0907a4acaa2388fa7c98565e48bc53c9e4a47428 [file] [log] [blame]
package org.apache.myfaces.tobago.component;
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.tobago.TobagoConstants;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import java.util.Map;
@Deprecated
public class UITreeOldNode extends javax.faces.component.UIInput {
private static final Log LOG = LogFactory.getLog(UITreeOldNode.class);
private static final String SUB_REFERENCE_KEY = "subReferenceKey";
protected UITreeOldNode(UIComponent parent, int index) {
super();
if (parent instanceof UITreeOldNode) {
String parentSubReference = ((UITreeOldNode) parent).getSubReference();
if (parentSubReference == null) {
getAttributes().put(SUB_REFERENCE_KEY, "childAt[" + index + "]");
} else {
getAttributes().put(SUB_REFERENCE_KEY, parentSubReference + ".childAt[" + index + "]");
}
}
setRendererType(TobagoConstants.RENDERER_TYPE_TREE_OLD_NODE);
parent.getChildren().add(this);
initId();
initName();
initDisabled();
initTip();
}
public UITreeOldNode() {
}
// ///////////////////////////////////////////// code
public boolean getRendersChildren() {
return true;
}
public String getSubReference() {
return (String) getAttributes().get(SUB_REFERENCE_KEY);
}
public DefaultMutableTreeNode getTreeNode() {
return (DefaultMutableTreeNode) getValue();
}
public Object getValue() {
TreeNode value = null;
UITreeOld root = findTreeRoot();
String subReference = getSubReference();
if (LOG.isDebugEnabled()) {
LOG.debug("root = '" + root + "'");
LOG.debug("subReference = '" + subReference + "'");
}
TreeNode rootNode = (TreeNode) root.getValue();
if (LOG.isDebugEnabled()) {
LOG.debug("rootNode = '" + rootNode + "'");
}
if (rootNode != null) {
try {
if (subReference == null) {
value = rootNode;
} else {
value = (TreeNode) PropertyUtils.getProperty(rootNode, subReference);
}
if (LOG.isDebugEnabled()) {
LOG.debug("treeNode = '" + value + "'");
}
} catch (Throwable e) {
LOG.error("subReference = '" + subReference + "'", e);
}
}
return value;
}
protected void createTreeNodes() {
TreeNode node = (TreeNode) getValue();
if (node != null) {
int childCount = node.getChildCount();
for (int i = 0; i < childCount; i++) {
UITreeOldNode component = new UITreeOldNode(this, i);
component.createTreeNodes();
}
}
}
private void initName() {
TreeNode treeNode = (TreeNode) getValue();
if (treeNode != null) {
Object name = getReference(treeNode, TobagoConstants.ATTR_NAME_REFERENCE);
if (name == null) {
name = toString();
}
getAttributes().put(TobagoConstants.ATTR_NAME, name.toString());
}
}
private void initTip() {
TreeNode treeNode = (TreeNode) getValue();
if (treeNode != null) {
Object tip = getReference(treeNode, TobagoConstants.ATTR_TIP_REFERENCE);
if (tip != null) {
getAttributes().put(TobagoConstants.ATTR_TIP, tip.toString());
}
}
}
private void initDisabled() {
TreeNode treeNode = (TreeNode) getValue();
if (treeNode != null) {
Object disabled = getReference(treeNode,
TobagoConstants.ATTR_DISABLED_REFERENCE);
if (!(disabled instanceof Boolean)) {
if (disabled instanceof String) {
disabled = Boolean.valueOf((String) disabled);
} else {
disabled = false;
}
}
getAttributes().put(TobagoConstants.ATTR_DISABLED, disabled);
}
}
private void initId() {
TreeNode treeNode = (TreeNode) getValue();
if (treeNode != null) {
Object id = getReference(treeNode, TobagoConstants.ATTR_ID_REFERENCE);
if (!(id instanceof String)) {
id = "node" + Integer.toString(System.identityHashCode(treeNode));
}
setId((String) id);
}
}
@SuppressWarnings("unchecked")
private Object getReference(TreeNode treeNode, String key) {
Object value = null;
UITreeOld root = findTreeRoot();
String reference = (String) root.getAttributes().get(key);
if (reference != null) {
try {
FacesContext facesContext = FacesContext.getCurrentInstance();
Map requestMap = facesContext.getExternalContext().getRequestMap();
String ref = "#{tobagoTreeNode." + reference + "}";
ValueBinding vb = facesContext.getApplication().createValueBinding(ref);
requestMap.put("tobagoTreeNode", treeNode);
value = vb.getValue(facesContext);
requestMap.remove("tobagoTreeNode");
} catch (Exception e) {
LOG.warn(
"Can't find " + key + " over ref='" + reference
+ "' treeNode='" + treeNode + "! " + treeNode.getClass().getName(), e);
}
}
return value;
}
public UITreeOld findTreeRoot() {
UIComponent ancestor = getParent();
while (ancestor != null && ancestor instanceof UITreeOldNode) {
ancestor = ancestor.getParent();
}
if (ancestor instanceof UITreeOld) {
return (UITreeOld) ancestor;
}
return null;
}
public void updateModel(FacesContext facesContext) {
// nothig to update for treeNode's
}
}