01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: /* $Id: Numeric.java 426576 2006-07-28 15:44:37Z jeremias $ */
19:
20: package org.apache.fop.datatypes;
21:
22: import org.apache.fop.fo.expr.PropertyException;
23:
24: /**
25: * An interface for classes that can participate in numeric operations.
26: * All the numeric operation (+, -, *, ...) are expressed in terms of
27: * this Numeric interface.
28: * Numerics has a value (getNumericValue) and a dimension (getDimension).
29: * Numerics can be either absolute or relative. Relative numerics
30: * must be resolved against base value before the value can be used.
31: * <p>
32: * To support relative numerics internally in the expresion parser and
33: * during evaulation one additional methods exists: isAbsolute() which
34: * return true for absolute numerics and false for relative numerics.
35: */
36: public interface Numeric {
37: /**
38: * Return the value of this Numeric
39: * @return the computed value.
40: * @throws PropertyException
41: */
42: double getNumericValue() throws PropertyException;
43:
44: /**
45: * Return the value of this Numeric
46: * @param context The context for the length calculation (for percentage based lengths)
47: * @return the computed value.
48: * @throws PropertyException
49: */
50: double getNumericValue(PercentBaseContext context)
51: throws PropertyException;
52:
53: /**
54: * Return the dimension of this numeric. Plain numbers has a dimension of
55: * 0 and length has a dimension of 1. Other dimension can occur as a result
56: * of multiplications and divisions.
57: * @return the dimension.
58: */
59: int getDimension();
60:
61: /**
62: * Return true if the numeric is an absolute value. Relative values are
63: * percentages and table-column-units. All other numerics are absolute.
64: * @return true when the numeric is absolute.
65: */
66: boolean isAbsolute();
67:
68: /**
69: * Returns the value of this numeric as an int.
70: * @return the value as an integer.
71: */
72: public int getValue();
73:
74: /**
75: * Returns the value of this numeric as an int.
76: * @param context the context for the length calculation (for percentage based lengths)
77: * @return the value as an integer.
78: */
79: public int getValue(PercentBaseContext context);
80:
81: /**
82: * Return the resolved value. This method will becalled during evaluation
83: * of the expression tree and relative numerics can then return a
84: * resolved absolute Numeric. Absolute numerics can just return themself.
85: *
86: * @return A resolved value.
87: * @throws PropertyException
88: */
89: //Numeric getResolved() throws PropertyException;
90: /**
91: * Return the enum value that is stored in this numeric.
92: */
93: public int getEnum();
94: }
|