root / org.gvsig.toolbox / trunk / org.gvsig.toolbox / org.gvsig.toolbox.algorithm / src / main / java / es / unex / sextante / nonSpatial / calculator / CalculatorModelerParametersPanel.java @ 59
History | View | Annotate | Download (9.26 KB)
1 |
package es.unex.sextante.nonSpatial.calculator; |
---|---|
2 |
|
3 |
import info.clearthought.layout.TableLayout; |
4 |
import info.clearthought.layout.TableLayoutConstants; |
5 |
|
6 |
import java.awt.event.MouseAdapter; |
7 |
import java.awt.event.MouseEvent; |
8 |
import java.awt.event.MouseListener; |
9 |
import java.util.HashMap; |
10 |
import java.util.Iterator; |
11 |
import java.util.Set; |
12 |
|
13 |
import javax.swing.BorderFactory; |
14 |
import javax.swing.JScrollPane; |
15 |
import javax.swing.JTextArea; |
16 |
import javax.swing.JTree; |
17 |
import javax.swing.ScrollPaneConstants; |
18 |
import javax.swing.border.BevelBorder; |
19 |
import javax.swing.tree.DefaultMutableTreeNode; |
20 |
import javax.swing.tree.DefaultTreeCellRenderer; |
21 |
import javax.swing.tree.DefaultTreeModel; |
22 |
import javax.swing.tree.TreePath; |
23 |
|
24 |
import org.nfunk.jep.JEP; |
25 |
|
26 |
import es.unex.sextante.core.ObjectAndDescription; |
27 |
import es.unex.sextante.core.OutputObjectsSet; |
28 |
import es.unex.sextante.core.Sextante; |
29 |
import es.unex.sextante.gui.modeler.GeoAlgorithmModelerParametersPanel; |
30 |
import es.unex.sextante.modeler.elements.ModelElementNumericalValue; |
31 |
import es.unex.sextante.outputs.Output; |
32 |
import es.unex.sextante.parameters.Parameter; |
33 |
|
34 |
public class CalculatorModelerParametersPanel |
35 |
extends
|
36 |
GeoAlgorithmModelerParametersPanel { |
37 |
|
38 |
|
39 |
private JTextArea jTextExpression; |
40 |
private JScrollPane jScrollPane; |
41 |
private JTree jTree; |
42 |
private JScrollPane jScrollPane1; |
43 |
private CalculatorKeysPanel m_KeysPanel;
|
44 |
private HashMap m_Constants; |
45 |
|
46 |
|
47 |
public CalculatorModelerParametersPanel() {
|
48 |
|
49 |
super();
|
50 |
|
51 |
} |
52 |
|
53 |
|
54 |
@Override
|
55 |
protected void initGUI() { |
56 |
|
57 |
this.setPreferredSize(new java.awt.Dimension(570, 350)); |
58 |
final TableLayout thisLayout = new TableLayout(new double[][] { |
59 |
{ 10.0, TableLayoutConstants.FILL, TableLayoutConstants.FILL, TableLayoutConstants.FILL,
|
60 |
TableLayoutConstants.FILL, 10.0 },
|
61 |
{ 10.0, TableLayoutConstants.FILL, TableLayoutConstants.FILL, TableLayoutConstants.FILL, 50.0, 5.0, 50.0, 5.0, |
62 |
10.0 } });
|
63 |
thisLayout.setHGap(10);
|
64 |
thisLayout.setVGap(10);
|
65 |
this.setLayout(thisLayout);
|
66 |
this.setSize(new java.awt.Dimension(350, 350)); |
67 |
{ |
68 |
jScrollPane = new JScrollPane(); |
69 |
this.add(jScrollPane, "1, 4, 4, 4"); |
70 |
jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
71 |
{ |
72 |
jTextExpression = new JTextArea(); |
73 |
jScrollPane.setViewportView(jTextExpression); |
74 |
jTextExpression.setPreferredSize(new java.awt.Dimension(0, 0)); |
75 |
jTextExpression.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); |
76 |
try {
|
77 |
final Parameter param = m_Algorithm.getParameters().getParameter(CalculatorAlgorithm.FORMULA);
|
78 |
final ObjectAndDescription oad = ((ObjectAndDescription) getParameterValue(param));
|
79 |
if (oad != null) { |
80 |
final String sFormula = (String) oad.getObject(); |
81 |
jTextExpression.setText(sFormula); |
82 |
} |
83 |
} |
84 |
catch (final Exception e) { |
85 |
Sextante.addErrorToLog(e); |
86 |
} |
87 |
} |
88 |
} |
89 |
{ |
90 |
m_KeysPanel = new CalculatorKeysPanel(jTextExpression);
|
91 |
this.add(m_KeysPanel, "3, 1, 4, 3"); |
92 |
} |
93 |
{ |
94 |
jScrollPane1 = new JScrollPane(); |
95 |
this.add(jScrollPane1, "1, 1, 2, 3"); |
96 |
{ |
97 |
jTree = new JTree(); |
98 |
jScrollPane1.setViewportView(jTree); |
99 |
jScrollPane1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
100 |
jTree.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); |
101 |
final MouseListener ml = new MouseAdapter() { |
102 |
@Override
|
103 |
public void mousePressed(MouseEvent e) { |
104 |
int iRow = jTree.getRowForLocation(e.getX(), e.getY());
|
105 |
TreePath path = jTree.getPathForLocation(e.getX(), e.getY());
|
106 |
if ((iRow != -1) && (e.getClickCount() == 2)) { |
107 |
insertTextFromTree(path); |
108 |
} |
109 |
} |
110 |
}; |
111 |
jTree.addMouseListener(ml); |
112 |
try {
|
113 |
populateTree(); |
114 |
} |
115 |
catch (final Exception e) { |
116 |
e.printStackTrace(); |
117 |
} |
118 |
} |
119 |
} |
120 |
|
121 |
} |
122 |
|
123 |
|
124 |
private void populateTree() { |
125 |
|
126 |
int i;
|
127 |
final int j; |
128 |
|
129 |
jTree.setModel(null);
|
130 |
|
131 |
//numerical values
|
132 |
final ObjectAndDescription[] values = getElementsOfClass(ModelElementNumericalValue.class, false); |
133 |
final DefaultMutableTreeNode main = new DefaultMutableTreeNode(Sextante.getText("ELEMENTS")); |
134 |
DefaultMutableTreeNode node = new DefaultMutableTreeNode(Sextante.getText("Numerical_values")); |
135 |
DefaultMutableTreeNode child;
|
136 |
for (i = 0; i < values.length; i++) { |
137 |
final String sName = values[i].getDescription(); |
138 |
final String sVariableName = values[i].getObject().toString(); |
139 |
child = new DefaultMutableTreeNode(new ObjectAndDescription(sName, sVariableName)); |
140 |
node.add(child); |
141 |
} |
142 |
main.add(node); |
143 |
|
144 |
//functions
|
145 |
final String sFunctions[] = { "sin", "cos", "tan", "asin", "acos", "atan", "atan2", "sinh", "cosh", "tanh", "asinh", |
146 |
"acosh", "atanh", "ln", "log", "exp", "abs", "rand", "mod", "sqrt", "if" }; |
147 |
node = new DefaultMutableTreeNode(Sextante.getText("Functions")); |
148 |
for (i = 0; i < sFunctions.length; i++) { |
149 |
child = new DefaultMutableTreeNode(" " + sFunctions[i] + "() "); |
150 |
node.add(child); |
151 |
} |
152 |
main.add(node); |
153 |
|
154 |
//operators
|
155 |
final String sOperators[] = { "+", "-", "*", "/", "%", "!", "^", "&&", "||", "<", ">", "<=", ">=", "==", "!=" }; |
156 |
node = new DefaultMutableTreeNode(Sextante.getText("Operators")); |
157 |
for (i = 0; i < sOperators.length; i++) { |
158 |
final String s = " " + sOperators[i] + " "; |
159 |
child = new DefaultMutableTreeNode(new ObjectAndDescription(s, s)); |
160 |
node.add(child); |
161 |
} |
162 |
main.add(node); |
163 |
|
164 |
//constants
|
165 |
node = new DefaultMutableTreeNode(Sextante.getText("Constants")); |
166 |
m_Constants = new HashMap(); |
167 |
m_Constants.put("e", " " + Double.toString(Math.E) + " "); |
168 |
m_Constants.put("Pi", " " + Double.toString(Math.PI) + " "); |
169 |
|
170 |
final Set set = m_Constants.keySet(); |
171 |
final Iterator iter = set.iterator(); |
172 |
while (iter.hasNext()) {
|
173 |
final String s = (String) iter.next(); |
174 |
child = new DefaultMutableTreeNode(new ObjectAndDescription(s, s)); |
175 |
node.add(child); |
176 |
} |
177 |
|
178 |
main.add(node); |
179 |
|
180 |
jTree.setModel(new DefaultTreeModel(main)); |
181 |
final DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) jTree.getCellRenderer(); |
182 |
renderer.setOpenIcon(null);
|
183 |
renderer.setClosedIcon(null);
|
184 |
renderer.setLeafIcon(null);
|
185 |
|
186 |
} |
187 |
|
188 |
|
189 |
private void insertTextFromTree(final TreePath path) { |
190 |
|
191 |
final TreePath parent = path.getParentPath(); |
192 |
|
193 |
if ((parent != null) && !parent.toString().equals("[" + Sextante.getText("ELEMENTS") + "]")) { |
194 |
final String sParentName = parent.toString(); |
195 |
final DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); |
196 |
String s = (String) ((ObjectAndDescription) node.getUserObject()).getObject(); |
197 |
|
198 |
if (sParentName.equals("[" + Sextante.getText("ELEMENTS") + ", " + Sextante.getText("Constants]"))) { |
199 |
if (m_Constants.containsKey(s)) {
|
200 |
s = (String) m_Constants.get(s);
|
201 |
} |
202 |
else {
|
203 |
s = "";
|
204 |
} |
205 |
} |
206 |
|
207 |
jTextExpression.insert(s, jTextExpression.getCaretPosition()); |
208 |
|
209 |
if (sParentName.equals("[" + Sextante.getText("ELEMENTS") + ", " + Sextante.getText("Functions]"))) { |
210 |
jTextExpression.setCaretPosition(jTextExpression.getCaretPosition() - 2);
|
211 |
} |
212 |
} |
213 |
|
214 |
} |
215 |
|
216 |
|
217 |
@Override
|
218 |
public boolean assignParameters(final HashMap map) { |
219 |
|
220 |
final ObjectAndDescription[] values = getElementsOfClass(ModelElementNumericalValue.class, false); |
221 |
|
222 |
final JEP jep = new JEP(); |
223 |
|
224 |
jep.addStandardConstants(); |
225 |
jep.addStandardFunctions(); |
226 |
|
227 |
for (int i = 0; i < values.length; i++) { |
228 |
if (jTextExpression.getText().contains(values[i].getObject().toString())) {
|
229 |
jep.addVariable(values[i].getObject().toString(), 0);
|
230 |
map.put("DUMMY" + this.getInnerParameterKey(), values[i].getObject().toString()); |
231 |
} |
232 |
} |
233 |
|
234 |
jep.parseExpression(jTextExpression.getText()); |
235 |
|
236 |
if (jep.hasError()) {
|
237 |
return false; |
238 |
} |
239 |
|
240 |
|
241 |
final String sFormulaKey = getInnerParameterKey(); |
242 |
map.put(CalculatorAlgorithm.FORMULA, sFormulaKey); |
243 |
m_DataObjects.put(sFormulaKey, new ObjectAndDescription("String", jTextExpression.getText())); |
244 |
|
245 |
final OutputObjectsSet oosetGlobal = this.m_GlobalAlgorithm.getOutputObjects(); |
246 |
final OutputObjectsSet ooset = this.m_Algorithm.getOutputObjects(); |
247 |
|
248 |
final String sName = CalculatorAlgorithm.RESULT + this.m_sAlgorithmName; |
249 |
try {
|
250 |
final Output out = ooset.getOutput(CalculatorAlgorithm.RESULT);
|
251 |
final Output outToAdd = out.getClass().newInstance();
|
252 |
outToAdd.setName(sName); |
253 |
outToAdd.setDescription(sName); //TODO!!!!!!!!!!!!!!!
|
254 |
oosetGlobal.add(outToAdd); |
255 |
} |
256 |
catch (final Exception e) {} |
257 |
|
258 |
return true; |
259 |
|
260 |
} |
261 |
|
262 |
} |