1:
31: package ;
32:
33: import ;
34: import ;
35:
36: import ;
37: import ;
38:
39:
44: public class DefaultOperatorFactory implements OperatorFactory
45: {
46: private static final String INFIX_PREFIX = "org.jfree.formula.operators.infix.";
47: private static final String PREFIX_PREFIX = "org.jfree.formula.operators.prefix.";
48: private static final String POSTFIX_PREFIX = "org.jfree.formula.operators.postfix.";
49:
50: private HashMap infixOperators;
51: private HashMap prefixOperators;
52: private HashMap postfixOperators;
53:
54: public DefaultOperatorFactory()
55: {
56: infixOperators = new HashMap();
57: prefixOperators = new HashMap();
58: postfixOperators = new HashMap();
59: }
60:
61: public void initalize(final Configuration configuration)
62: {
63: loadInfixOperators(configuration);
64: loadPrefixOperators(configuration);
65: loadPostfixOperators(configuration);
66: }
67:
68: private void loadInfixOperators(final Configuration configuration)
69: {
70: final Iterator infixKeys = configuration.findPropertyKeys(INFIX_PREFIX);
71: while (infixKeys.hasNext())
72: {
73: final String configKey = (String) infixKeys.next();
74: if (configKey.endsWith(".class") == false)
75: {
76: continue;
77: }
78: final String operatorClass = configuration.getConfigProperty(configKey);
79: if (operatorClass == null)
80: {
81: continue;
82: }
83: if (operatorClass.length() == 0)
84: {
85: continue;
86: }
87: final String tokenKey = configKey.substring
88: (0, configKey.length() - ".class".length()) + ".token";
89: final String token = configuration.getConfigProperty(tokenKey);
90: if (token == null)
91: {
92: continue;
93: }
94: final String tokenTrimmed = token.trim();
95:
96:
97:
98:
99:
100:
101:
102: final Object operator = ObjectUtilities.loadAndInstantiate
103: (operatorClass, DefaultOperatorFactory.class, InfixOperator.class);
104: if (operator instanceof InfixOperator)
105: {
106: infixOperators.put (tokenTrimmed, operator);
107: }
108: }
109: }
110:
111: private void loadPrefixOperators(final Configuration configuration)
112: {
113: final Iterator infixKeys = configuration.findPropertyKeys(PREFIX_PREFIX);
114: final int infixLength = PREFIX_PREFIX.length();
115: while (infixKeys.hasNext())
116: {
117: final String configKey = (String) infixKeys.next();
118: if (configKey.endsWith(".class") == false)
119: {
120: continue;
121: }
122: final String operatorClass = configuration.getConfigProperty(configKey);
123: if (operatorClass == null)
124: {
125: continue;
126: }
127: if (operatorClass.length() == 0)
128: {
129: continue;
130: }
131: final String tokenKey = configKey.substring
132: (0, configKey.length() - ".class".length()) + ".token";
133: final String token = configuration.getConfigProperty(tokenKey);
134: if (token == null)
135: {
136: continue;
137: }
138: final String tokenTrimmed = token.trim();
139:
140:
141:
142:
143:
144:
145:
146: final Object operator = ObjectUtilities.loadAndInstantiate
147: (operatorClass, DefaultOperatorFactory.class, PrefixOperator.class);
148: if (operator instanceof PrefixOperator)
149: {
150: prefixOperators.put (tokenTrimmed, operator);
151: }
152: }
153: }
154:
155: private void loadPostfixOperators(final Configuration configuration)
156: {
157: final Iterator infixKeys = configuration.findPropertyKeys(POSTFIX_PREFIX);
158: final int infixLength = POSTFIX_PREFIX.length();
159: while (infixKeys.hasNext())
160: {
161: final String configKey = (String) infixKeys.next();
162: if (configKey.endsWith(".class") == false)
163: {
164: continue;
165: }
166: final String operatorClass = configuration.getConfigProperty(configKey);
167: if (operatorClass == null)
168: {
169: continue;
170: }
171: if (operatorClass.length() == 0)
172: {
173: continue;
174: }
175: final String tokenKey = configKey.substring
176: (0, configKey.length() - ".class".length()) + ".token";
177: final String token = configuration.getConfigProperty(tokenKey);
178: if (token == null)
179: {
180: continue;
181: }
182: final String tokenTrimmed = token.trim();
183:
184:
185:
186:
187:
188:
189: final Object operator = ObjectUtilities.loadAndInstantiate
190: (operatorClass, DefaultOperatorFactory.class, PostfixOperator.class);
191: if (operator instanceof PostfixOperator)
192: {
193: postfixOperators.put (tokenTrimmed, operator);
194: }
195: }
196: }
197:
198: public InfixOperator createInfixOperator(final String operator)
199: {
200: return (InfixOperator) infixOperators.get(operator);
201: }
202:
203: public PostfixOperator createPostfixOperator(final String operator)
204: {
205: return (PostfixOperator) postfixOperators.get(operator);
206: }
207:
208: public PrefixOperator createPrefixOperator(final String operator)
209: {
210: return (PrefixOperator) prefixOperators.get(operator);
211: }
212: }