xref: /AOO41X/main/xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java (revision 04ea5bd4910fe6337fe7d7c799027ca781f77c68)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
25 
26 import org.openoffice.xmerge.util.Debug;
27 
28 /**
29  * This is the Factory class responsible for creating a <code>Token</code>.
30  * It has three methods for returning three different types of Tokens
31  * (Operator, Operand and Function).
32  * This utility class is used by either the <code>FormulaParser</code> or the
33  * <code>FormulaDecoder</code>.
34  */
35 public class TokenFactory {
36 
37     private OperatorLookup operatorLookup;
38     private OperandLookup operandLookup;
39     private FunctionLookup fl;
40 
41     /**
42      * Default Constructor
43      */
TokenFactory()44     public TokenFactory() {
45         operatorLookup = new OperatorLookup();
46         operandLookup = new OperandLookup();
47         fl = new FunctionLookup();
48     }
49 
50     /**
51      * The Factory method for creating function Tokens
52      *
53      * @return The created <code>Token</code>
54      */
getFunctionToken(String s, int args)55     public Token getFunctionToken(String s, int args) {
56         Token t = null;
57         // We will have to fix this later to include fixed function tokens
58         // Also will need to handle errors where functions names are incorrect???
59         Debug.log(Debug.TRACE,"TokenFactory creating function Token : " + s);
60         try {
61             t = new Token(s, ParseToken.TOKEN_FUNCTION_VARIABLE, fl.getIDFromString(s), args);
62         } catch (UnsupportedFunctionException eFn) {
63 
64             Debug.log(Debug.ERROR, eFn.getMessage());
65         }
66         return t;
67     }
68 
69     /**
70      * The Factory method for creating operator Tokens
71      *
72      * @return The created <code>Token</code>
73      */
getOperatorToken(String s, int args)74     public Token getOperatorToken(String s, int args) {
75 
76         Token t = null;
77 
78         Debug.log(Debug.TRACE,"TokenFactory creating operator Token : " + s);
79         try  {
80             if(args==1) {
81                 if(s.equals("+")) {
82                     t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString("UNARY_PLUS"), args);
83                 } else if (s.equals("-")) {
84                     t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString("UNARY_MINUS"), args);
85                 } else {
86                     t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString(s), args);
87                 }
88             } else {
89                 t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString(s), args);
90             }
91         } catch (UnsupportedFunctionException eFn) {
92             Debug.log(Debug.ERROR, eFn.getMessage());
93         }
94         return t;
95     }
96 
97     /**
98      * The Factory method for creating Operand Tokens
99      *
100      * @return The created <code>Token</code>
101      */
getOperandToken(String s, String type)102     public Token getOperandToken(String s, String type) {
103         Token t = null;
104 
105         Debug.log(Debug.TRACE,"TokenFactory creating operand (" + type + ") Token : " + s);
106         try {
107             t = new Token(s, ParseToken.TOKEN_OPERAND, operandLookup.getIDFromString(type), 0);
108         } catch (UnsupportedFunctionException eFn) {
109             Debug.log(Debug.ERROR, eFn.getMessage());
110         }
111 
112         return t;
113     }
114 }
115