/*
* An attribute for token property.
*
* Below is the copyright agreement for the Ptolemy II system.
*
* Copyright (c) 2007-2009 The Regents of the University of California. All
* rights reserved.
*
* Permission is hereby granted, without written agreement and without license
* or royalty fees, to use, copy, modify, and distribute this software and its
* documentation for any purpose, provided that the above copyright notice and
* the following two paragraphs appear in all copies of this software.
*
* IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
* CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
* "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE
* MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*/
package ptolemy.data.properties.token;
import ptolemy.data.Token;
import ptolemy.data.expr.ASTPtRootNode;
import ptolemy.data.expr.ParseTreeEvaluator;
import ptolemy.data.expr.PtParser;
import ptolemy.data.properties.PropertyAttribute;
import ptolemy.data.properties.PropertySolverBase;
import ptolemy.kernel.util.IllegalActionException;
import ptolemy.kernel.util.NameDuplicationException;
import ptolemy.kernel.util.NamedObj;
/**
* An attribute for token property. The PropertyTokenSolver uses this to
* annotate the model.
*
* @author Man-Kit Leung
* @version $Id$
* @since Ptolemy II 7.1
* @Pt.ProposedRating Red (mankit)
* @Pt.AcceptedRating Red (mankit)
*/
public class PropertyTokenAttribute extends PropertyAttribute {
/**
* Construct a PropertyTokenAttribute with the specified container and name.
* @param container The specified container for this attribute.
* @param name The specified name.
* @exception IllegalActionException If the attribute is not of an
* acceptable class for the container, or if the name contains a period.
* @exception NameDuplicationException If the name coincides with an
* attribute already in the container.
*/
public PropertyTokenAttribute(NamedObj container, String name)
throws IllegalActionException, NameDuplicationException {
super(container, name);
}
///////////////////////////////////////////////////////////////////
//// public methods ////
/**
* Set the expression. This method takes the descriptive form and determines
* the internal form (by parsing the descriptive form) and stores it.
* @param expression A String that is the descriptive form of either a Unit
* or a UnitEquation.
* @see ptolemy.kernel.util.Settable#setExpression(java.lang.String)
*/
public void setExpression(String expression) throws IllegalActionException {
if (expression.length() > 0) {
// Get the shared parser.
PtParser parser = PropertySolverBase.getParser();
ASTPtRootNode root = parser.generateParseTree(expression);
ParseTreeEvaluator evaluator = new ParseTreeEvaluator();
// FIXME: we may need scoping for evaluating variables
// in the expression.
Token token = evaluator.evaluateParseTree(root);
_property = new PropertyToken(token);
}
super.setExpression(expression);
}
}