/* * 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); } }