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

View differences:

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