Revision 44259 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/DefaultJExpressionBuilder.java
DefaultJExpressionBuilder.java | ||
---|---|---|
18 | 18 |
import java.util.HashSet; |
19 | 19 |
import java.util.List; |
20 | 20 |
import java.util.Locale; |
21 |
import java.util.Map; |
|
22 | 21 |
import java.util.Objects; |
23 | 22 |
import javax.swing.DefaultListCellRenderer; |
24 | 23 |
import javax.swing.ImageIcon; |
... | ... | |
50 | 49 |
import org.apache.commons.lang3.StringUtils; |
51 | 50 |
import org.gvsig.expressionevaluator.Expression; |
52 | 51 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
53 |
import org.gvsig.expressionevaluator.Function; |
|
54 | 52 |
import org.gvsig.expressionevaluator.SymbolTable; |
55 | 53 |
import org.gvsig.expressionevaluator.swing.Element; |
56 |
import org.gvsig.expressionevaluator.swing.Element.CalculatedElement; |
|
57 |
import org.gvsig.expressionevaluator.swing.Element.ConstantElement; |
|
58 |
import org.gvsig.expressionevaluator.swing.Element.FunctionElement; |
|
59 | 54 |
import org.gvsig.expressionevaluator.swing.Element.GroupElement; |
60 | 55 |
import org.gvsig.expressionevaluator.swing.Element.SimpleElement; |
61 | 56 |
import org.gvsig.expressionevaluator.swing.ExpressionBuilderConfig; |
... | ... | |
65 | 60 |
import org.gvsig.tools.i18n.I18nManager; |
66 | 61 |
import org.gvsig.tools.script.Script; |
67 | 62 |
import org.gvsig.tools.swing.api.Component; |
68 |
import org.gvsig.tools.swing.api.ListElement; |
|
69 | 63 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
70 | 64 |
import org.gvsig.tools.swing.api.ToolsSwingManager; |
71 | 65 |
import org.gvsig.tools.swing.api.pickercontroller.PickerController; |
... | ... | |
79 | 73 |
*/ |
80 | 74 |
@SuppressWarnings("UseSpecificCatch") |
81 | 75 |
public class DefaultJExpressionBuilder |
82 |
extends DefaultJExpressionBuilderView |
|
76 |
extends DefaultJExpressionBuilderView2
|
|
83 | 77 |
implements JExpressionBuilder { |
84 | 78 |
|
85 | 79 |
private final ExpressionEvaluatorSwingManager manager; |
... | ... | |
87 | 81 |
private PickerController<List<Script>> scriptPicker; |
88 | 82 |
private ScriptSwingManager.ScriptEditor scriptEditor; |
89 | 83 |
|
90 |
private final ExpressionBuilderConfig config;
|
|
84 |
private final ExpressionBuilderConfig bulderConfig;
|
|
91 | 85 |
private ElementsTreeModel treeModel; |
92 | 86 |
private ImageIcon defaultIconGroup; |
93 | 87 |
private ImageIcon defaultIconElement; |
... | ... | |
277 | 271 |
public DefaultJExpressionBuilder(ExpressionEvaluatorSwingManager manager, ExpressionBuilderConfig config) { |
278 | 272 |
this.manager = manager; |
279 | 273 |
if( config == null ) { |
280 |
this.config = new DefaultExpressionBuilderConfig(manager);
|
|
274 |
this.bulderConfig = new DefaultExpressionBuilderConfig(manager);
|
|
281 | 275 |
} else { |
282 |
this.config = config;
|
|
276 |
this.bulderConfig = config;
|
|
283 | 277 |
} |
284 | 278 |
this.initComponents(); |
285 | 279 |
} |
... | ... | |
304 | 298 |
final I18nManager i18n = ToolsLocator.getI18nManager(); |
305 | 299 |
|
306 | 300 |
this.automaticExpressionChecker = new AbstractAutomaticExpressionChecker( |
307 |
config, txtExpression
|
|
301 |
bulderConfig, txtExpression
|
|
308 | 302 |
) { |
309 | 303 |
@Override |
310 | 304 |
protected Expression getExpression() { |
... | ... | |
390 | 384 |
lblColumn.setText(Integer.toString(e.getDot())); |
391 | 385 |
} |
392 | 386 |
}); |
387 |
this.treeElements.setRowHeight(0); |
|
393 | 388 |
this.treeElements.setCellRenderer(new DefaultTreeCellRenderer() { |
394 | 389 |
@Override |
395 | 390 |
public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { |
396 |
JLabel label = (JLabel) super.getTreeCellRendererComponent(tree,value, selected, expanded, leaf, row, hasFocus); |
|
391 |
JLabel component = (JLabel) super.getTreeCellRendererComponent(tree,value, selected, expanded, leaf, row, hasFocus); |
|
392 |
JLabel text = component; |
|
393 |
JLabel icon = component; |
|
394 |
|
|
395 |
// JPanel component = new JPanel(); |
|
396 |
// JLabel text = new JLabel(); |
|
397 |
// JLabel icon = new JLabel(); |
|
398 |
// component.setLayout(new FlowLayout()); |
|
399 |
// component.add(icon); |
|
400 |
// component.add(text); |
|
401 |
// component.setLayout(new GridBagLayout()); |
|
402 |
// component.add(icon, new GridBagConstraints(0,0,0,0,0,0,GridBagConstraints.NORTH,GridBagConstraints.BOTH,new Insets(1,1,1,1),1,1)); |
|
403 |
// component.add(text, new GridBagConstraints(1,0,0,0,0,0,GridBagConstraints.NORTH,GridBagConstraints.BOTH,new Insets(1,1,1,1),1,1)); |
|
404 |
|
|
397 | 405 |
if( value instanceof Element ) { |
398 | 406 |
Element element = (Element) value; |
399 | 407 |
if( element.getIconName()==null ) { |
400 | 408 |
if( element instanceof GroupElement ) { |
401 |
label.setIcon(defaultIconGroup);
|
|
409 |
icon.setIcon(defaultIconGroup);
|
|
402 | 410 |
} else { |
403 |
label.setIcon(defaultIconElement);
|
|
411 |
icon.setIcon(defaultIconElement);
|
|
404 | 412 |
} |
405 | 413 |
} else { |
406 |
label.setIcon(element.getIcon());
|
|
414 |
icon.setIcon(element.getIcon());
|
|
407 | 415 |
} |
408 |
label.setText(element.getName());
|
|
409 |
label.setEnabled(element.isEnabled());
|
|
416 |
text.setText(element.getLabel());
|
|
417 |
text.setEnabled(element.isEnabled());
|
|
410 | 418 |
} else { |
411 |
label.setIcon(null);
|
|
412 |
label.setText(Objects.toString(value, ""));
|
|
419 |
icon.setIcon(null);
|
|
420 |
text.setText(Objects.toString(value, ""));
|
|
413 | 421 |
} |
414 |
return label;
|
|
422 |
return component;
|
|
415 | 423 |
} |
424 |
|
|
425 |
private JLabel JPanel() { |
|
426 |
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. |
|
427 |
} |
|
416 | 428 |
}); |
417 | 429 |
|
418 | 430 |
this.treeElements.addTreeSelectionListener(new TreeSelectionListener() { |
... | ... | |
448 | 460 |
this.btnSimpleElementInsert.addActionListener(new ActionListener() { |
449 | 461 |
@Override |
450 | 462 |
public void actionPerformed(ActionEvent e) { |
451 |
ListElement<SimpleElement> element = (ListElement<SimpleElement>) lstSimpleElement.getSelectedValue();
|
|
463 |
Element element = (Element) lstSimpleElement.getSelectedValue();
|
|
452 | 464 |
if (element != null) { |
453 |
doInsert(element.getValue());
|
|
465 |
doInsert(element); |
|
454 | 466 |
} |
455 | 467 |
} |
456 | 468 |
}); |
... | ... | |
466 | 478 |
@Override |
467 | 479 |
public java.awt.Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { |
468 | 480 |
JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); |
469 |
Element element = null; |
|
470 |
if( value instanceof ListElement ) { |
|
471 |
if( ((ListElement) value).getValue() instanceof Element ) { |
|
472 |
element = (Element) ((ListElement) value).getValue(); |
|
473 |
} |
|
474 |
} |
|
475 |
if( element !=null ) { |
|
481 |
if( value instanceof Element ) { |
|
482 |
Element element = (Element) value; |
|
476 | 483 |
if( element.getIconName()==null ) { |
477 | 484 |
if( element instanceof GroupElement ) { |
478 | 485 |
label.setIcon(defaultIconGroup); |
... | ... | |
482 | 489 |
} else { |
483 | 490 |
label.setIcon(element.getIcon()); |
484 | 491 |
} |
485 |
label.setText(element.getName());
|
|
492 |
label.setText(element.getLabel());
|
|
486 | 493 |
label.setEnabled(element.isEnabled()); |
487 | 494 |
} else { |
488 | 495 |
label.setIcon(null); |
... | ... | |
494 | 501 |
this.lstSimpleElement.getSelectionModel().addListSelectionListener(new ListSelectionListener() { |
495 | 502 |
@Override |
496 | 503 |
public void valueChanged(ListSelectionEvent e) { |
497 |
ListElement<SimpleElement> element = (ListElement<SimpleElement>) lstSimpleElement.getSelectedValue();
|
|
504 |
Element element = (Element) lstSimpleElement.getSelectedValue();
|
|
498 | 505 |
if (element != null) { |
499 |
doSelectElement(element.getValue());
|
|
506 |
doSelectElement(element); |
|
500 | 507 |
} |
501 | 508 |
} |
502 | 509 |
}); |
... | ... | |
504 | 511 |
@Override |
505 | 512 |
public void mouseClicked(MouseEvent e) { |
506 | 513 |
if( e.getButton()==MouseEvent.BUTTON1 && e.getClickCount()==2 ) { |
507 |
ListElement<SimpleElement> element = (ListElement<SimpleElement>) lstSimpleElement.getSelectedValue();
|
|
514 |
Element element = (Element) lstSimpleElement.getSelectedValue();
|
|
508 | 515 |
if (element != null) { |
509 |
doSelectElement(element.getValue());
|
|
510 |
doInsert(element.getValue());
|
|
516 |
doSelectElement(element); |
|
517 |
doInsert(element); |
|
511 | 518 |
} |
512 | 519 |
} |
513 | 520 |
} |
... | ... | |
516 | 523 |
@Override |
517 | 524 |
public void keyReleased(KeyEvent e) { |
518 | 525 |
if( e.getKeyCode()==KeyEvent.VK_ENTER ) { |
519 |
ListElement<SimpleElement> element = (ListElement<SimpleElement>) lstSimpleElement.getSelectedValue();
|
|
526 |
Element element = (Element) lstSimpleElement.getSelectedValue();
|
|
520 | 527 |
if (element != null) { |
521 |
doSelectElement(element.getValue());
|
|
522 |
doInsert(element.getValue());
|
|
528 |
doSelectElement(element); |
|
529 |
doInsert(element); |
|
523 | 530 |
} |
524 | 531 |
} |
525 | 532 |
} |
... | ... | |
611 | 618 |
this.pnlScriptEditorContainer.setLayout(new BorderLayout()); |
612 | 619 |
this.pnlScriptEditorContainer.add(this.scriptEditor.asJComponent(), BorderLayout.CENTER); |
613 | 620 |
|
614 |
this.tabExpressionBuilder.setEnabledAt(0, this.config.getScriptsEnabled());
|
|
621 |
this.tabExpressionBuilder.setEnabledAt(0, this.bulderConfig.getPreferences().getScriptsEnabled());
|
|
615 | 622 |
|
616 | 623 |
this.infoPanel.repaint(); |
617 | 624 |
|
618 | 625 |
this.setPreferredSize(new Dimension(650, 350)); |
626 |
|
|
627 |
|
|
628 |
Dimension dim = this.getPreferredSize(); |
|
629 |
this.spnlExpression.setDividerLocation(dim.height/5); |
|
630 |
this.spnlBottom.setDividerLocation(dim.width/3); |
|
631 |
this.spnlItem.setDividerLocation(dim.width/3); |
|
619 | 632 |
} |
620 | 633 |
|
621 | 634 |
private String removeCursorMark(String s) { |
... | ... | |
655 | 668 |
this.txtExpression.requestFocusInWindow(); |
656 | 669 |
} |
657 | 670 |
|
658 |
private void doInsert(SimpleElement element) { |
|
659 |
if( element instanceof FunctionElement ) { |
|
660 |
Function function = ((FunctionElement)element).getFunction(); |
|
661 |
if (function == null) { |
|
662 |
doInsert(element.getName()); |
|
663 |
} else { |
|
664 |
doInsert(function.template() == null ? function.name() + "({{}})" : function.template()); |
|
665 |
} |
|
666 |
} else if( element instanceof CalculatedElement) { |
|
667 |
Object value = ((CalculatedElement) element).getValue(); |
|
668 |
if( value != null ) { |
|
669 |
doInsert(" "+value.toString()+" "); |
|
670 |
} |
|
671 |
} else if( element instanceof ConstantElement) { |
|
672 |
Object value = ((ConstantElement) element).getValue(); |
|
673 |
doInsert(" "+Utils.repr(value)+" "); |
|
674 |
} else { |
|
675 |
doInsert(" "+element.getName()+" "); |
|
676 |
} |
|
671 |
private void doInsert(Element element) { |
|
672 |
doInsert(element.getRenderedValue()); |
|
673 |
element.used(); |
|
677 | 674 |
} |
678 | 675 |
|
679 | 676 |
private void doFilter() { |
... | ... | |
681 | 678 |
model.setFilter(this.txtSimpleElementFilter.getText()); |
682 | 679 |
} |
683 | 680 |
|
684 |
private void doSelectElement(SimpleElement element) {
|
|
681 |
private void doSelectElement(Element element) { |
|
685 | 682 |
// if( !element.isEnabled() ) { |
686 | 683 |
// this.infoPanel.clean(); |
687 | 684 |
// } else { |
... | ... | |
724 | 721 |
return; |
725 | 722 |
} |
726 | 723 |
if (child instanceof SimpleElement) { |
727 |
String label = child.getName(); |
|
728 |
Function function = child instanceof FunctionElement? ((FunctionElement)child).getFunction(): null; |
|
729 |
if (function != null && !StringUtils.isEmpty(function.returnType())) { |
|
730 |
label = "<html><b>" + label + "</b> return " + function.returnType() + "</html>"; |
|
731 |
// label = label + " return " + function.returnType(); |
|
732 |
} |
|
733 |
model.addElement(new ListElement<>(label, child)); |
|
724 |
model.addElement(child); |
|
734 | 725 |
} |
735 | 726 |
} |
736 | 727 |
model.sort(true); |
... | ... | |
784 | 775 |
} |
785 | 776 |
} |
786 | 777 |
} |
787 |
|
|
788 |
@Override |
|
789 |
public int getSimpleElementsLimit() { |
|
790 |
return this.config.getSimpleElementsLimit(); |
|
791 |
} |
|
792 | 778 |
|
793 | 779 |
@Override |
794 |
public void setSimpleElementsLimit(int limit) {
|
|
795 |
this.config.setSimpleElementsLimit(limit);
|
|
780 |
public Preferences getPreferences() {
|
|
781 |
return this.bulderConfig.getPreferences();
|
|
796 | 782 |
} |
797 | 783 |
|
798 | 784 |
@Override |
799 | 785 |
public List<Element> getElements() { |
800 |
return this.config.getElements();
|
|
786 |
return this.bulderConfig.getElements();
|
|
801 | 787 |
} |
802 | 788 |
|
803 | 789 |
@Override |
804 | 790 |
public void addElement(Element element) { |
805 |
this.config.addElement(element);
|
|
791 |
this.bulderConfig.addElement(element);
|
|
806 | 792 |
} |
807 | 793 |
|
808 | 794 |
@Override |
809 | 795 |
public Collection<SymbolTable> getSymbolTables() { |
810 |
return this.config.getSymbolTables();
|
|
796 |
return this.bulderConfig.getSymbolTables();
|
|
811 | 797 |
} |
812 | 798 |
|
813 | 799 |
@Override |
814 | 800 |
public void addSymbolTable(String name) { |
815 |
this.config.addSymbolTable(name);
|
|
801 |
this.bulderConfig.addSymbolTable(name);
|
|
816 | 802 |
} |
817 | 803 |
|
818 | 804 |
@Override |
819 | 805 |
public void addSymbolTable(SymbolTable symbolTable) { |
820 |
this.config.addSymbolTable(symbolTable);
|
|
806 |
this.bulderConfig.addSymbolTable(symbolTable);
|
|
821 | 807 |
} |
822 | 808 |
|
823 | 809 |
@Override |
824 | 810 |
public void removeAllSymbolTables() { |
825 |
this.config.removeAllSymbolTables();
|
|
811 |
this.bulderConfig.removeAllSymbolTables();
|
|
826 | 812 |
} |
827 | 813 |
|
828 | 814 |
@Override |
829 | 815 |
public void removeSymbolTable(String name) { |
830 |
this.config.removeSymbolTable(name);
|
|
816 |
this.bulderConfig.removeSymbolTable(name);
|
|
831 | 817 |
} |
832 | 818 |
|
833 | 819 |
@Override |
834 | 820 |
public SymbolTable getPreviewSymbolTable() { |
835 |
return this.config.getPreviewSymbolTable();
|
|
821 |
return this.bulderConfig.getPreviewSymbolTable();
|
|
836 | 822 |
} |
837 | 823 |
|
838 | 824 |
@Override |
839 | 825 |
public void setPreviewSymbolTable(SymbolTable symbolTable) { |
840 |
this.config.setPreviewSymbolTable(symbolTable);
|
|
826 |
this.bulderConfig.setPreviewSymbolTable(symbolTable);
|
|
841 | 827 |
} |
842 |
|
|
843 |
@Override |
|
844 |
public void setScriptsEnabled(boolean enabled) { |
|
845 |
this.config.setScriptsEnabled(enabled); |
|
846 |
this.tabExpressionBuilder.setEnabledAt(0, this.config.getScriptsEnabled()); |
|
847 |
} |
|
848 |
|
|
849 |
@Override |
|
850 |
public boolean getScriptsEnabled() { |
|
851 |
return this.config.getScriptsEnabled(); |
|
852 |
} |
|
853 |
|
|
854 |
@Override |
|
855 |
public void setSQLCompatible(boolean sqlCompatible) { |
|
856 |
this.config.setSQLCompatible(sqlCompatible); |
|
857 |
} |
|
858 |
|
|
859 |
@Override |
|
860 |
public boolean isSQLCompatible() { |
|
861 |
return this.config.isSQLCompatible(); |
|
862 |
} |
|
863 |
|
|
864 |
@Override |
|
865 |
public Object getProperty(String string) { |
|
866 |
return this.config.getProperty(string); |
|
867 |
} |
|
868 |
|
|
869 |
@Override |
|
870 |
public void setProperty(String string, Object o) { |
|
871 |
this.config.setProperty(string, o); |
|
872 |
} |
|
873 |
|
|
874 |
@Override |
|
875 |
public Map<String, Object> getProperties() { |
|
876 |
return this.config.getProperties(); |
|
877 |
} |
|
878 | 828 |
|
879 | 829 |
@Override |
880 | 830 |
public JComponent asJComponent() { |
... | ... | |
885 | 835 |
private void initializeTree() { |
886 | 836 |
if( this.treeModel == null ) { |
887 | 837 |
I18nManager i18n = ToolsLocator.getI18nManager(); |
888 |
this.treeModel = new ElementsTreeModel( |
|
838 |
this.treeModel = new ElementsTreeModel( (GroupElement)
|
|
889 | 839 |
this.manager.createGroupElement( |
890 |
this.config, |
|
891 | 840 |
i18n.getTranslation("_Elements"), |
892 | 841 |
this.getElements() |
893 |
) |
|
894 |
); |
|
842 |
).setConfig(this)); |
|
895 | 843 |
this.treeElements.setModel(this.treeModel); |
896 | 844 |
} |
897 | 845 |
} |
... | ... | |
902 | 850 |
"Indicate the time limit in seconds for calculating the elements", |
903 | 851 |
"Time limit", |
904 | 852 |
JOptionPane.QUESTION_MESSAGE, |
905 |
String.valueOf(this.config.getSimpleElementsLimit())
|
|
853 |
String.valueOf(this.bulderConfig.getPreferences().getSimpleElementsLimit())
|
|
906 | 854 |
); |
907 | 855 |
if( StringUtils.isBlank(s) ) { |
908 | 856 |
return; |
909 | 857 |
} |
910 | 858 |
try { |
911 | 859 |
int n = Integer.parseInt(s); |
912 |
this.config.setSimpleElementsLimit(n);
|
|
860 |
this.bulderConfig.getPreferences().setSimpleElementsLimit(n);
|
|
913 | 861 |
this.treeModel.reload(); |
914 | 862 |
} catch(Exception ex) { |
915 | 863 |
dialogs.messageDialog( |
Also available in: Unified diff