datavalue.java

来自「java实现浏览器等本地桌面的功能」· Java 代码 · 共 223 行

JAVA
223
字号
/* * $Id: DataValue.java,v 1.5 2005/10/10 17:01:00 rbair Exp $ * * Copyright 2005 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library 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 library 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 library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */package org.jdesktop.dataset;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;import net.sf.jga.fn.EvaluationException;import net.sf.jga.fn.Generator;import net.sf.jga.fn.adaptor.Constant;import net.sf.jga.parser.ParseException;import net.sf.jga.parser.UncheckedParseException;/** * <p>A DataValue is represents an expression attached to a DataSet, which  * can be evaluated in the context of that DataSet to produce an Object end-value. * The expression is a String expression intended to be processed by a subclass * so that the {@link #getValue()} method returns an Object representing the  * expression's result.  * * <p>A <code>DataValue</code> has a name, which should be unique for a given  * <code>DataSet</code>. * * <p>A <code>DataValue</code> belongs to a single <code>DataSet</code>. * * @see DataSet * * @author rbair */ // TODO implement a PropertyChangeListener on the synthetic "value" field. // When some value that the DataValue expression depends on changes, it // becomes necessary to recompute the "value", and then notify that the // "value" has changed.public class DataValue {    //protected for testing    /** Used as a prefix for auto-generated names. */    protected static final String DEFAULT_NAME_PREFIX = "DataValue";        /** The shared instance of the NameGenerator for DataValues not assigned a name. */    private static final NameGenerator NAMEGEN = new NameGenerator(DEFAULT_NAME_PREFIX);    //used for communicating changes to this JavaBean, especially necessary for    //IDE tools, but also handy for any other component listening to this data value    private PropertyChangeSupport pcs = new PropertyChangeSupport(this);    /** The DataSet instance that owns this DataValue. */    private DataSet dataSet;        /** The name of this DataValue. */    private String name;       /**      * The expression which, when evaluated, returns the actual value for this     * DataValue.      */    private String expression;    private Generator<?> exprImpl = new Constant<Object>(null);        /**      * Creates a new instance of DataValue with an auto-generated name, for a      * given DataSet.     *     * @param ds The DataSet that owns this DataValue     */    public DataValue(DataSet ds) {        assert ds != null;        this.dataSet = ds;        name = NAMEGEN.generateName(this);    }        /**      * Creates a new instance of DataValue,      * for a given DataSet.     *     * @param ds The DataSet that owns this DataValue     * @param name The DataValue's name.     */    public DataValue(DataSet ds, String name) {        this(ds);        if (name != null) {            setName(name);        }    }    	/**     * Changes the name for this DataValue.	 * @param name The new name.	 */	public void setName(String name) {        if (this.name != name) {            assert DataSetUtils.isValidName(name);            String oldName = this.name;            this.name = name;            pcs.firePropertyChange("name", oldName, name);        }	}    /**      * Returns the current name for this DataValue.     *     * @return the DataValue's name.     */	public String getName() {		return name;	}    /**      * Returns the DataSet this DataValue belongs to.     *     * @return the DataSet this DataValue belongs to.     */    public DataSet getDataSet() {        return dataSet;    }        /**     * Returns the expression which will be evaluated to result in an actual     * value for this DataValue.     *     * @return the expression that underlies this DataValue     */    public String getExpression() {        return expression;    }        /**     * Sets the string expression which, when evaluated, returns a DataValue.     *      * @param expression The new expression for this DataValue.     */    public void setExpression(String expression) {        if (expression ==  null || expression.equals(""))            exprImpl = new Constant<Object>(null);        else {            try {                exprImpl = getParser().parseDataValue(expression);            }            catch (ParseException x) { throw new UncheckedParseException(x); }        }        this.expression = expression;    }        /**     * Returns the actual value resulting from the DataValue's expression being     * evaluated in the context of a DataSet. This value may be constant or may     * change on each invocation--that's up to the expression.     *     * @return the actual value of this DataValue, once evaluated.     */    // TODO: this should be abstract (PWW 04/28/04)    public Object getValue() {        try {            return exprImpl.gen();        } catch (EvaluationException e) {            e.printStackTrace();            return null;        }    }    Parser getParser() {         return dataSet.getParser();    }    /**     * Adds a PropertyChangeListener to this class for any changes to bean      * properties.     *     * @param listener The PropertyChangeListener to notify of changes to this      * instance.     */    public void addPropertyChangeListener(PropertyChangeListener listener) {        pcs.addPropertyChangeListener(listener);    }       /**     * Adds a PropertyChangeListener to this class for specific property changes.     *     * @param property The name of the property to listen to changes for.     * @param listener The PropertyChangeListener to notify of changes to this      * instance.     */    public void addPropertyChangeListener(String property, PropertyChangeListener listener) {        pcs.addPropertyChangeListener(property,  listener);    }        /**     * Stops notifying a specific listener of any changes to bean properties.     *     * @param listener The listener to stop receiving notifications.     */    public void removePropertyChangeListener(PropertyChangeListener listener) {        pcs.removePropertyChangeListener(listener);    }        /**     * Stops notifying a specific listener of changes to a specific property.     *     * @param propertyName The name of the property to ignore from now on.     * @param listener The listener to stop receiving notifications.     */    public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {        pcs.removePropertyChangeListener(propertyName,  listener);    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?