org.extremecomponents.tree.TreeNode.java Source code

Java tutorial

Introduction

Here is the source code for org.extremecomponents.tree.TreeNode.java

Source

/*
 * Copyright 2004 original author or authors.
 *
 * Licensed 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.
 */
package org.extremecomponents.tree;

import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * org.extremecomponents.tree.bean.TreeNode.java -
 * 
 * @author Paul Horn
 */
public final class TreeNode extends HashMap {
    private static Log logger = LogFactory.getLog(TreeNode.class);
    private Object identifier;
    private Object bean;
    private TreeNode parent;
    private List children;
    private int depth;
    private boolean open;

    public TreeNode() {
        super();
    }

    public TreeNode(Object bean, Object identifier, int depth)
            throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
        if (bean instanceof Map) {
            this.putAll((Map) bean);
        } else {
            PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(bean.getClass());
            for (int i = 0; i < descriptors.length; i++) {
                this.put(descriptors[i].getName(), BeanUtils.getProperty(bean, descriptors[i].getName()));
            }
        }
        setBean(bean);
        this.identifier = identifier;
        this.depth = depth;
    }

    /**
     * @param child
     */
    public void addChild(Object child) {
        if (children == null) {
            children = new ArrayList();
        }

        children.add(child);
    }

    /**
     * @return Returns the bean.
     */
    public Object getBean() {
        return bean;
    }

    /**
     * @param bean
     *            The bean to set.
     */
    public void setBean(Object bean) {
        this.bean = bean;

        PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(bean);

        for (int i = 0; i < descriptors.length; i++) {
            try {
                String propertyName = descriptors[i].getDisplayName();
                Object val = BeanUtils.getProperty(bean, propertyName);
                this.put(propertyName, val);
            } catch (Exception e) {
                logger.error("TreeNode.setBean() Problem", e);
            }
        }
    }

    /**
     * @return Returns the children.
     */
    public List getChildren() {
        return children;
    }

    /**
     * @param children
     *            The children to set.
     */
    public void setChildren(List children) {
        this.children = children;
    }

    /**
     * @return Returns the parent.
     */
    public TreeNode getParent() {
        return parent;
    }

    /**
     * @param parent
     *            The parent to set.
     */
    public void setParent(TreeNode parent) {
        this.parent = parent;
    }

    /**
     * @return Returns the depth.
     */
    public int getDepth() {
        return depth;
    }

    /**
     * @param depth
     *            The depth to set.
     */
    public void setDepth(int depth) {
        this.depth = depth;
    }

    /**
     * @return Returns the open.
     */
    public boolean isOpen() {
        return open;
    }

    /**
     * @param open
     *            The open to set.
     */
    public void setOpen(boolean open) {
        this.open = open;
    }

    /**
     * @return
     */
    public Object getIdentifier() {
        return identifier;
    }

    /**
     * @param object
     */
    public void setIdentifier(Object object) {
        identifier = object;
    }

    /**
     * @param object
     */
    public boolean equals(Object obj) {
        TreeNode node = (TreeNode) obj;

        return (super.equals(obj) || this.identifier.equals(node.getIdentifier()));
    }
}