alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 *                 Sun Public License Notice
 * 
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 * 
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun
 * Microsystems, Inc. All Rights Reserved.
 */

package org.openide.nodes;

import java.beans.Beans;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.openide.util.Utilities;

/** Support for indexed properties.
*
* @see Node
*
* @author Jan Jancura
* @version 0.14, Jan 20, 1998
*/
public class IndexedPropertySupport extends Node.IndexedProperty {
    /** Instance of the bean. */
    protected Object instance;

    /** setter method */
    private Method setter;

    /** getter method */
    private Method getter;

    /** indexed setter method */
    private Method indexedSetter;

    /** indexed getter method */
    private Method indexedGetter;

    /** Constructor.
    * @param instance the bean for which these properties exist
    * @param valueType type of the entire property
    * @param elementType type of one element of the property
    * @param getter get method for the entire property
    * @param setter set method for the entire property
    * @param indexedGetter get method for one element
    * @param indexedSetter set method for one element
    */
    public IndexedPropertySupport (
        Object instance,
        Class valueType,
        Class elementType,
        Method getter,
        Method setter,
        Method indexedGetter,
        Method indexedSetter) {
        super (valueType, elementType);
        this.instance = instance;
        this.setter = setter;
        this.getter = getter;
        this.indexedSetter = indexedSetter;
        this.indexedGetter = indexedGetter;
    }

    /* Setter for display name.
    * @param s the string
    */
    public final void setDisplayName (String s) {
        super.setDisplayName (s);
    }

    /* Setter for name.
    * @param s the string
    */
    public final void setName (String s) {
        super.setName (s);
    }

    /* Setter for short description.
    * @param s the string
    */
    public final void setShortDescription (String s) {
        super.setShortDescription (s);
    }

    /* Can read the value of the property.
    * @return true if the read of the value is supported
    */
    public boolean canRead () {
        return getter != null;
    }

    /* Getter for the value.
    * @return the value of the property
    * @exception IllegalAccessException cannot access the called method
    * @exception IllegalArgumentException wrong argument
    * @exception InvocationTargetException an exception during invocation
    */
    public Object getValue () throws
        IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        if (!canRead ()) throw new IllegalAccessException ();
        Object validInstance = Beans.getInstanceOf (instance, getter.getDeclaringClass());
        return getter.invoke (validInstance, new Object [0]);
    }

    /* Can write the value of the property.
    * @return true if the read of the value is supported
    */
    public boolean canWrite () {
        return setter != null;
    }

    /* Setter for the value.
    * @param val the value of the property
    * @exception IllegalAccessException cannot access the called method
    * @exception IllegalArgumentException wrong argument
    * @exception InvocationTargetException an exception during invocation
    */
    public void setValue (Object val) throws
        IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        if (!canWrite ()) throw new IllegalAccessException ();
        Object validInstance = Beans.getInstanceOf (instance, setter.getDeclaringClass());
        if ((val!=null)&&(setter.getParameterTypes()[0].getComponentType().isPrimitive())&&(!val.getClass().getComponentType().isPrimitive())) {
            val = Utilities.toPrimitiveArray ((Object[])val);
        }
        setter.invoke (validInstance, new Object [] {val});
    }

    /* Can read the indexed value of the property.
    * @return true if the read of the value is supported
    */
    public boolean canIndexedRead () {
        return indexedGetter != null;
    }

    /* Getter for the indexed value.
    * @return the value of the property
    * @exception IllegalAccessException cannot access the called method
    * @exception IllegalArgumentException wrong argument
    * @exception InvocationTargetException an exception during invocation
    */
    public Object getIndexedValue (int index) throws
        IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        if (!canIndexedRead ()) throw new IllegalAccessException ();
        Object validInstance = Beans.getInstanceOf (instance, indexedGetter.getDeclaringClass());
        return indexedGetter.invoke (validInstance, new Object [] {new Integer (index)});
    }

    /* Can write the indexed value of the property.
    * @return true if the read of the value is supported
    */
    public boolean canIndexedWrite () {
        return indexedSetter != null;
    }

    /* Setter for the indexed value.
    * @param val the value of the property
    * @exception IllegalAccessException cannot access the called method
    * @exception IllegalArgumentException wrong argument
    * @exception InvocationTargetException an exception during invocation
    */
    public void setIndexedValue (int index, Object val) throws
        IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        if (!canIndexedWrite ()) throw new IllegalAccessException ();
        Object validInstance = Beans.getInstanceOf (instance, indexedSetter.getDeclaringClass());
        indexedSetter.invoke (validInstance, new Object [] {new Integer (index), val});
    }
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.