Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / project / symboltables / functionPanels / firstlayerfeature / FirstLayerFeatureAditionalPanel.java @ 44129

History | View | Annotate | Download (8.98 KB)

1
package org.gvsig.app.project.symboltables.functionPanels.firstlayerfeature;
2

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.awt.event.ItemEvent;
6
import java.awt.event.ItemListener;
7
import java.util.ArrayList;
8
import java.util.Collections;
9
import java.util.Comparator;
10
import java.util.List;
11
import javax.swing.DefaultComboBoxModel;
12
import javax.swing.JComponent;
13
import javax.swing.event.ChangeEvent;
14
import javax.swing.event.ChangeListener;
15
import org.apache.commons.lang.StringEscapeUtils;
16
import org.apache.commons.lang3.StringUtils;
17
import org.gvsig.app.ApplicationLocator;
18
import org.gvsig.app.ApplicationManager;
19
import org.gvsig.app.project.Project;
20
import org.gvsig.app.project.documents.Document;
21
import org.gvsig.app.project.documents.view.ViewDocument;
22
import org.gvsig.app.project.documents.view.ViewManager;
23
import org.gvsig.app.project.symboltables.ProjectSymbolTable;
24
import org.gvsig.expressionevaluator.Expression;
25
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
26
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
27
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
28
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
29
import org.gvsig.fmap.dal.DALLocator;
30
import org.gvsig.fmap.dal.DataManager;
31
import org.gvsig.fmap.dal.exception.DataException;
32
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
33
import org.gvsig.fmap.dal.feature.Feature;
34
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
35
import org.gvsig.fmap.dal.feature.FeatureStore;
36
import org.gvsig.fmap.dal.swing.DALSwingLocator;
37
import org.gvsig.fmap.dal.swing.DataSwingManager;
38
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
39
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
40
import org.gvsig.fmap.mapcontext.layers.FLayer;
41
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
42
import org.gvsig.fmap.mapcontrol.LayersTreeModel;
43
import org.gvsig.tools.swing.api.Component;
44
import org.gvsig.tools.swing.api.ListElement;
45
import org.gvsig.tools.swing.api.ToolsSwingLocator;
46
import org.gvsig.tools.swing.api.ToolsSwingManager;
47

    
48
/**
49
 *
50
 * @author jjdelcerro
51
 */
52
public class FirstLayerFeatureAditionalPanel 
53
        extends FirstLayerFeatureAditionalPanelView 
54
        implements Component
55
    {
56

    
57
    private final JExpressionBuilder expressionBuilder;
58
    private AttributeDescriptorPickerController fieldPicker;
59
    private AttributeDescriptorPickerController pickerFields;
60
    private ExpressionPickerController picketFilter;
61
    private FeatureSymbolTable featureSymbolTable;
62
    private FeatureStoreElement storeElement;
63
    
64
    public FirstLayerFeatureAditionalPanel(JExpressionBuilder expressionBuilder) {
65
        this.expressionBuilder = expressionBuilder;
66
        this.initComponents();
67
    }
68

    
69
    @Override
70
    public JComponent asJComponent() {
71
        return this;
72
    }
73
    
74
    private void initComponents() {
75
        DataManager dataManager = DALLocator.getDataManager();
76
        DataSwingManager dataSwingManager = DALSwingLocator.getSwingManager();
77
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
78
        ApplicationManager application = ApplicationLocator.getManager();
79
        
80
        toolsSwingManager.setDefaultPopupMenu(this.txtPreview);
81
        
82
        Project project = application.getCurrentProject();
83
        List<Document> views = project.getDocuments(ViewManager.TYPENAME);
84
        List<ListElement<Document>> views2 = new ArrayList<>();
85
        for (Document view : views) {
86
            views2.add(new ListElement<>(view.getName(),view));
87
        }
88
        Collections.sort(views2, new Comparator<ListElement<Document>>() {
89
            @Override
90
            public int compare(ListElement<Document> o1, ListElement<Document> o2) {
91
                return StringUtils.compare(o1.toString(), o2.toString());
92
            }
93
        });
94
        DefaultComboBoxModel model = new DefaultComboBoxModel();
95
        for (ListElement<Document> element : views2) {
96
            model.addElement(element);
97
        }
98
        this.cboViews.setModel(model);
99
        this.cboViews.addItemListener(new ItemListener() {
100
            @Override
101
            public void itemStateChanged(ItemEvent e) {
102
                doChangeView();
103
            }
104
        });
105
    
106
        this.cboLayers.addItemListener(new ItemListener() {
107
            @Override
108
            public void itemStateChanged(ItemEvent e) {
109
                doChangeLayer();
110
            }
111
        });
112
    
113
        this.pickerFields = DALSwingLocator.getSwingManager().createAttributeDescriptorPickerController(
114
                this.cboFields
115
        );
116
        this.pickerFields.addChangeListener(new ChangeListener() {
117
            @Override
118
            public void stateChanged(ChangeEvent e) {
119
                doChangeField();
120
            }
121
        });
122
    
123
        this.picketFilter = ExpressionEvaluatorSwingLocator.getManager().createExpressionPickerController(
124
                this.txtFilter, 
125
                this.btnFilter
126
        );
127
        this.cboViews.setSelectedIndex(0);
128
        doChangeView();
129
        
130
        this.btnInsertFunction.addActionListener(new ActionListener() {
131
            @Override
132
            public void actionPerformed(ActionEvent e) {
133
                doInsertFunction();
134
            }
135
        });
136

    
137

    
138
        this.featureSymbolTable = dataManager.createFeatureSymbolTable();
139
        this.storeElement = dataSwingManager.createFeatureStoreElement(this.picketFilter);
140
        this.picketFilter.addElement(this.storeElement);
141
    }
142

    
143
    private void doChangeView() {
144
        ViewDocument viewdoc = (ViewDocument) ListElement.getSelected(this.cboViews);
145
        if( viewdoc == null ) {
146
            this.cboLayers.setEnabled(false);
147
            this.pickerFields.setEnabled(false);
148
            return;
149
        }
150
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
151
        LayersTreeModel layerTreeModel = new LayersTreeModel(viewdoc.getMapContext().getLayers());
152
        toolsSwingManager.setTreeModel(this.cboLayers, layerTreeModel);
153
        this.cboLayers.setEnabled(true);
154
        this.cboLayers.setSelectedIndex(0);
155
        this.doChangeLayer();
156
    }
157
    
158
    private void doChangeLayer() {
159
        FLayer layer = (FLayer) ListElement.getSelected(this.cboLayers);
160
        if( layer == null ) {
161
            this.pickerFields.setEnabled(false);
162
            return;
163
        }
164
        if( !(layer instanceof FLyrVect) ) {
165
            this.pickerFields.setEnabled(false);
166
            return;
167
        }
168
        FeatureStore store = ((FLyrVect)layer).getFeatureStore();
169
        try {
170
            this.pickerFields.setFeatureType(store.getDefaultFeatureType());
171
            this.pickerFields.setEnabled(true);
172
        } catch (DataException ex) {
173
            //TODO:
174
        }
175
        Feature sampleFeature = null;
176
        try {
177
            sampleFeature = store.getFeatureSelection().first();
178
            if( sampleFeature == null ) {
179
                sampleFeature = store.first();
180
            }
181
        } catch (DataException ex) {
182
        }      
183
        if( sampleFeature!=null ) {
184
            this.featureSymbolTable.setFeature(sampleFeature);
185
            this.picketFilter.setPreviewSymbolTable(this.featureSymbolTable.createParent());
186
        }
187
        this.storeElement.setFeatureStore(store);
188
    }
189
    
190
    private void doChangeField() {
191
        FeatureAttributeDescriptor descriptor = this.pickerFields.get();
192
        if( descriptor == null ) {
193
            this.txtPreview.setText("");
194
            return;
195
        }
196
        doUpdatePreview();
197
    }
198
    
199
    private void doUpdatePreview() {
200
        ViewDocument viewdoc = (ViewDocument) ListElement.getSelected(this.cboViews);
201
        if( viewdoc == null ) {
202
            this.txtPreview.setText("");
203
            return;
204
        }
205
        FLayer layer = (FLayer) ListElement.getSelected(this.cboLayers);
206
        if( layer == null ) {
207
            this.txtPreview.setText("");
208
            return;
209
        }
210
        FeatureAttributeDescriptor descriptor = this.pickerFields.get();
211
        if( descriptor == null ) {
212
            this.txtPreview.setText("");
213
            return;
214
        }
215
        Expression filter = this.picketFilter.get();
216
        StringBuilder template = new StringBuilder();
217
        template.append(ProjectSymbolTable.FIRSTLAYERFEATURE_NAME);
218
        template.append("( '");
219
        template.append(viewdoc.getName());
220
        template.append("', '");
221
        template.append(layer.getName());
222
        template.append("', '");
223
        template.append(descriptor.getName());
224
        template.append("'");
225
        if( !filter.isPhraseEmpty() ) {
226
            template.append(", '");
227
            template.append(StringEscapeUtils.escapeSql(filter.getPhrase()));            
228
            template.append("'");
229
        }
230
        template.append(" )");
231
        this.txtPreview.setText(template.toString());
232
        this.txtPreview.setCaretPosition(0);
233
    }
234
    
235
    private void doInsertFunction() {
236
        this.expressionBuilder.insertText(this.txtPreview.getText());
237
    }
238
    
239
}