Revision 45634 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.geodb.app/org.gvsig.geodb.app.mainplugin/src/main/java/org/gvsig/geodb/TableInfoController.java

View differences:

TableInfoController.java
5 5
 */
6 6
package org.gvsig.geodb;
7 7

  
8
import java.awt.Cursor;
8 9
import java.awt.event.ActionEvent;
9 10
import java.awt.event.ItemEvent;
11
import javax.swing.DefaultComboBoxModel;
12
import javax.swing.DefaultListModel;
13
import javax.swing.DefaultListSelectionModel;
10 14
import javax.swing.JButton;
11 15
import javax.swing.JComboBox;
12 16
import javax.swing.JLabel;
13 17
import javax.swing.JList;
14 18
import javax.swing.JTextField;
19
import javax.swing.event.ChangeEvent;
20
import javax.swing.event.ChangeListener;
15 21
import org.apache.commons.lang3.StringUtils;
16 22
import org.cresques.cts.IProjection;
17 23
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
18 24
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
19 25
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
20 26
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
27
import org.gvsig.fmap.dal.feature.FeatureType;
21 28
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
22 29
import org.gvsig.fmap.dal.swing.DALSwingLocator;
23 30
import org.gvsig.fmap.dal.swing.DataSwingManager;
24 31
import org.gvsig.fmap.dal.swing.ProjectionPickerController;
25 32
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
26 33
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
34
import org.gvsig.fmap.geom.Geometry;
27 35
import org.gvsig.tools.ToolsLocator;
28 36
import org.gvsig.tools.i18n.I18nManager;
37
import org.gvsig.tools.locator.LocatorException;
29 38
import org.gvsig.tools.swing.api.JListWithCheckbox;
30 39
import org.gvsig.tools.swing.api.ToolsSwingLocator;
31 40
import org.gvsig.tools.swing.api.ToolsSwingManager;
......
119 128
                this.btnFilterBookmarks,
120 129
                this.btnFilterHistory
121 130
        );
131
        this.pickerProjection.addChangeListener(new ChangeListener() {
132
            @Override
133
            public void stateChanged(ChangeEvent e) {
134
                doChangeProjection();
135
            }
136
        });
137
        
138
        this.cboIdField.addItemListener((ItemEvent e) -> {
139
            if (e.getStateChange() == ItemEvent.SELECTED) {
140
                doChangeIdField();
141
            }
142
        });
122 143
        this.cboGeometryField.addItemListener((ItemEvent e) -> {
123 144
            if (e.getStateChange() == ItemEvent.SELECTED) {
124 145
                doChangeGeometryField();
146
                updateLabel();
125 147
            }
126 148
        });
127 149
        this.btnDeselectAllColumns.addActionListener((ActionEvent e) -> {
......
133 155
        this.btnAdvancedProperties.addActionListener((ActionEvent e) -> {
134 156
            doShowAdvancedProperties();
135 157
        });
158
        
159
        this.btnSelectAllColumns.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
160
        this.btnDeselectAllColumns.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
161
        this.btnProjection.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
162
        this.btnFilter.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
163
        this.btnFilterBookmarks.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
164
        this.btnFilterHistory.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
165
        this.btnAdvancedProperties.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
166

  
136 167
    }
168
    
169
    private void doChangeIdField() {
170
        final TableInfo info = this.getCurrentTableInfo();
171
        if (info == null) {
172
            return;
173
        }
174
        info.setIdFieldSelected(this.cboIdField.getSelectedIndex());
175
        updateLabel();
176
    }
137 177

  
178
    private void doChangeProjection() {
179
        final TableInfo info = this.getCurrentTableInfo();
180
        if (info == null) {
181
            return;
182
        }
183
        info.setProjection(this.pickerProjection.get());
184
        updateLabel();
185
    }
186
    
138 187
    private void doChangeGeometryField() {
139 188
        TableInfo info = this.getCurrentTableInfo();
140 189
        if (info == null) {
141 190
            return;
142 191
        }
143 192
        String attrName = (String) this.cboGeometryField.getSelectedItem();
193
        
194
        info.setGeomFieldSelected(this.cboGeometryField.getSelectedIndex());
195
        
144 196
        if (StringUtils.isBlank(attrName)) {
197
            this.pickerProjection.set(null);
145 198
            return;
146 199
        }
200

  
147 201
        FeatureAttributeDescriptor attr = info.getAttributeDescriptor(attrName);
148 202
        IProjection srs = attr.getSRS();
149 203
        if (srs == null) {
150 204
            return;
151 205
        }
152 206
        this.pickerProjection.set(srs);
207
        tableInfo.setProjection(this.pickerProjection.get());
153 208
    }
154 209

  
155 210
    private void doDeselectAllColumns() {
......
199 254
    public void put(TableInfo tableInfo) {
200 255
        this.tableInfo = tableInfo;
201 256

  
257
        if(tableInfo == null) {
258
            this.lwcColumns.setModel(new DefaultListModel());
259
            this.lwcColumns.setCheckedModel(new DefaultListSelectionModel());
260
            this.txtName.setText("");
261
            this.cboGeometryField.setModel(new DefaultComboBoxModel());
262
            this.cboIdField.setModel(new DefaultComboBoxModel());
263
            this.pickerProjection.set(null);
264
            this.pickerFilter.set(null);
265
            if(this.lblReadOnlyNotification != null){
266
                this.lblReadOnlyNotification.setText("");
267
            }
268
            return;
269
        }
270

  
202 271
        this.lwcColumns.setModel(tableInfo.getColumnsListModel());
203 272
        this.lwcColumns.setCheckedModel(tableInfo.getColumnChecksModel());
273
        
274
        this.txtName.setText(tableInfo.getDocumentName());
204 275

  
205 276
        this.cboGeometryField.setModel(tableInfo.getGeomFieldComboModel());
206 277
        this.cboGeometryField.setSelectedIndex(tableInfo.getGeomFieldSelected());
......
210 281

  
211 282
        this.pickerProjection.set(tableInfo.getProjection());
212 283
        this.pickerFilter.set(tableInfo.getFilter());
213
        this.txtName.setText(tableInfo.getDocumentName());
284
        
285
        updateLabel();
286
    }
214 287

  
215
        I18nManager i18n = ToolsLocator.getI18nManager();
216
        boolean readOnly = tableInfo.isReadOnly();
217
        String readOnlyMessage = readOnly ? " <b>" + i18n.getTranslation("_Read_only") + "</b>" : "";
218
        if (tableInfo.isView()) {
219
            this.lblReadOnlyNotification.setText("<html>" + i18n.getTranslation("_View") + readOnlyMessage + "</html>");
220
        } else {
221
            this.lblReadOnlyNotification.setText("<html>" + i18n.getTranslation("_Table") + readOnlyMessage + "</html>");
288
    private void updateLabel() throws LocatorException {
289
        if (this.lblReadOnlyNotification != null) {
290
            StringBuilder builder = new StringBuilder();
291
            builder.append("<html>");
292
            I18nManager i18n = ToolsLocator.getI18nManager();
293
            builder.append("<font color='#00008B'>");
294
            if (tableInfo.isView()) {
295
                builder.append(i18n.getTranslation("_View"));
296
            } else {
297
                builder.append(i18n.getTranslation("_Table"));
298
            }
299
            boolean readOnly = tableInfo.isReadOnly();
300
            if (readOnly) {
301
                builder.append(" - <b>");
302
                builder.append(i18n.getTranslation("_Read_only"));
303
                builder.append("</b>");
304
            }
305
            if (StringUtils.isBlank(this.tableInfo.getFieldId())) {
306
                builder.append(" - ");
307
                builder.append(i18n.getTranslation("_PrimaryKey_field_recommended"));
308
            }
309
            if (this.tableInfo.requireGeometry()) {
310
                FeatureType featType = this.tableInfo.getFeatureType();
311
                if (StringUtils.isBlank(this.tableInfo.getGeomField())) {
312
                    builder.append(" - <b>");
313
                    builder.append(i18n.getTranslation("_Geometry_field_required"));
314
                    builder.append("</b>");
315
                }
316
                JDBCStoreParameters params = this.tableInfo.getParameters();
317
                if(params.getGeometryType() == Geometry.TYPES.NULL || params.getGeometryType() == Geometry.TYPES.UNKNOWN){
318
                    builder.append(" - <b>");
319
                    builder.append(i18n.getTranslation("_GeometryType_required"));
320
                    builder.append("</b>");
321
                }
322
                if(params.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN){
323
                    builder.append(" - <b>");
324
                    builder.append(i18n.getTranslation("_GeometrySubType_required"));
325
                    builder.append("</b>");
326
                }
327
                if(this.tableInfo.getProjection()==null){
328
                    builder.append(" - ");
329
                    builder.append(i18n.getTranslation("_Projection_recommended"));
330
                }
331
            } else { //Not require geometry
332
                FeatureType featType = this.tableInfo.getFeatureType();
333
                if (StringUtils.isBlank(this.tableInfo.getGeomField())) {
334
                    builder.append(" - ");
335
                    builder.append(i18n.getTranslation("_Geometry_field_recommended"));
336
                }
337
                JDBCStoreParameters params = this.tableInfo.getParameters();
338
                if(params.getGeometryType() == Geometry.TYPES.NULL || params.getGeometryType() == Geometry.TYPES.UNKNOWN){
339
                    builder.append(" - ");
340
                    builder.append(i18n.getTranslation("_GeometryType_recommended"));
341
                }
342
                if(params.getGeometrySubtype() == Geometry.SUBTYPES.UNKNOWN){
343
                    builder.append(" - ");
344
                    builder.append(i18n.getTranslation("_GeometrySubType_recommended"));
345
                }
346
                if(StringUtils.isNotBlank(this.tableInfo.getGeomField()) && this.tableInfo.getProjection()==null){
347
                    builder.append(" - ");
348
                    builder.append(i18n.getTranslation("_Projection_recommended"));
349
                }
350
                
351
            }
352
            builder.append("</font>");
353
            builder.append("</html>");
354
            this.lblReadOnlyNotification.setText(builder.toString());
222 355
        }
223 356
    }
224 357

  
......
233 366
    private TableInfo getCurrentTableInfo() {
234 367
        return this.tableInfo;
235 368
    }
369
    
370
    public void setEditable(boolean enable) {
371
        this.lstColumns.setEnabled(enable);
372
        this.txtName.setEditable(enable);
373
        this.cboGeometryField.setEnabled(enable);
374
        this.cboIdField.setEnabled(enable);
375
        this.pickerProjection.setEditable(enable);
376
        this.pickerFilter.setEditable(enable);
377
        this.btnDeselectAllColumns.setEnabled(enable);
378
        this.btnSelectAllColumns.setEnabled(enable);
379
        this.btnAdvancedProperties.setEnabled(enable);
380
    }
236 381

  
382
    public void setEnabled(boolean enable) {
383
        this.lstColumns.setEnabled(enable);
384
        this.txtName.setEnabled(enable);
385
        this.cboGeometryField.setEnabled(enable);
386
        this.cboIdField.setEnabled(enable);
387
        this.pickerProjection.setEnabled(enable);
388
        this.pickerFilter.setEnabled(enable);
389
        this.btnDeselectAllColumns.setEnabled(enable);
390
        this.btnSelectAllColumns.setEnabled(enable);
391
        this.btnAdvancedProperties.setEnabled(enable);
392
    }
393
    
394
    public String getId(){
395
        if(tableInfo == null) {
396
            return null;
397
        }
398
        return this.getCurrentTableInfo().getId();
399
    }
400
    
401
    public void clear() {
402
        this.put(null);
403
    }
404

  
405

  
237 406
}

Also available in: Unified diff