Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / org.gvsig.oracle / src / org / gvsig / oracle / extension / NewOracleTableFinishAction.java @ 30231

History | View | Annotate | Download (6.59 KB)

1
package org.gvsig.oracle.extension;
2

    
3
import javax.swing.table.TableModel;
4

    
5
import jwizardcomponent.FinishAction;
6
import jwizardcomponent.JWizardComponents;
7

    
8
import org.gvsig.andami.PluginServices;
9
import org.gvsig.andami.messages.NotificationManager;
10
import org.gvsig.andami.ui.mdiManager.IWindow;
11
import org.gvsig.fmap.dal.DALLocator;
12
import org.gvsig.fmap.dal.DataManager;
13
import org.gvsig.fmap.dal.DataTypes;
14
import org.gvsig.fmap.dal.exception.DataException;
15
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
16
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.EditableFeatureType;
18
import org.gvsig.fmap.dal.feature.FeatureStore;
19
import org.gvsig.fmap.dal.feature.FeatureType;
20
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
21
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorer;
22
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
23
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
24
import org.gvsig.fmap.dal.store.oracle.OracleNewStoreParameters;
25
import org.gvsig.fmap.dal.store.oracle.OracleValues;
26
import org.gvsig.fmap.mapcontext.MapContext;
27
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
28
import org.gvsig.fmap.mapcontext.layers.LayerFactory;
29
import org.gvsig.fmap.mapcontext.layers.vectorial.FLayerVectorialDB;
30
import org.gvsig.oracle.gui.NewOracleTableWizard;
31
import org.gvsig.oracle.gui.RepeatedChooseGeometryTypePanel;
32
import org.gvsig.oracle.gui.RepeatedFieldDefinitionPanel;
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

    
36
/**
37
 * 
38
 * @author vsanjaime
39
 * 
40
 */
41
public class NewOracleTableFinishAction extends FinishAction {
42

    
43
        @SuppressWarnings("unused")
44
        private static Logger logger = LoggerFactory
45
                        .getLogger(NewOracleTableFinishAction.class.getName());
46
        private NewOracleTableWizard connectionPanel;
47
        private RepeatedChooseGeometryTypePanel geoTypePanel;
48
        private RepeatedFieldDefinitionPanel fieldsPanel;
49
        private MapContext theMapContext;
50
        private IWindow closeThis;
51

    
52
        /**
53
         * Constructor
54
         * 
55
         * @param wc
56
         * @param closeit
57
         * @param connPanel
58
         * @param mc
59
         */
60
        public NewOracleTableFinishAction(JWizardComponents wc, IWindow closeit,
61
                        NewOracleTableWizard connPanel, MapContext mc) {
62

    
63
                super(wc);
64
                theMapContext = mc;
65
                closeThis = closeit;
66
                connectionPanel = connPanel;
67
                geoTypePanel = (RepeatedChooseGeometryTypePanel) wc.getWizardPanel(0);
68
                fieldsPanel = (RepeatedFieldDefinitionPanel) wc.getWizardPanel(1);
69
        }
70

    
71
        /**
72
         * run process
73
         */
74
        public void performAction() {
75

    
76
                PluginServices.getMDIManager().closeWindow(closeThis);
77

    
78
                // Table name
79
                String tableName = geoTypePanel.getLayerName().toUpperCase();
80

    
81
                // Connection
82
                JDBCServerExplorerParameters explorerParams = (JDBCServerExplorerParameters) connectionPanel
83
                                .getSelectedServerExplorer().getDbSeverExplorerParameters();
84

    
85
                FeatureStore target = null;
86
                try {
87

    
88
                        DataManager dataManager = DALLocator.getDataManager();
89

    
90
                        JDBCServerExplorer explorer = (JDBCServerExplorer) dataManager
91
                                        .createServerExplorer(explorerParams);
92

    
93
                        NewFeatureStoreParameters newStoreParams = (NewFeatureStoreParameters) explorer
94
                                        .getAddParameters();
95

    
96
                        ((JDBCStoreParameters) newStoreParams).setTable(tableName);
97

    
98
                        EditableFeatureType eFType = (EditableFeatureType) newStoreParams
99
                                        .getDefaultFeatureType();
100

    
101
                        TableModel model = fieldsPanel.getFieldsDescription();
102
                        FeatureType fType = createDefaultFeatureType(eFType, model);
103

    
104
                        ((OracleNewStoreParameters) newStoreParams)
105
                                        .setDefaultFeatureType(fType);
106

    
107
                        explorer.add((OracleNewStoreParameters) newStoreParams, true);
108

    
109
                        target = (FeatureStore) dataManager
110
                                        .createStore((OracleNewStoreParameters) newStoreParams);
111

    
112
                } catch (DataException e) {
113
                        NotificationManager.addError(e.getMessage(), e);
114
                } catch (ValidateDataParametersException e) {
115
                        NotificationManager.addError(e.getMessage(), e);
116
                        e.printStackTrace();
117
                }
118

    
119
                LayerFactory factory = LayerFactory.getInstance();
120

    
121
                FLayerVectorialDB lyr = null;
122
                try {
123
                        lyr = (FLayerVectorialDB) factory.createLayer(tableName, target);
124
                } catch (LoadLayerException e) {
125
                        NotificationManager.addError(e.getMessage(), e);
126
                        e.printStackTrace();
127
                }
128
                lyr.setVisible(true);
129
                theMapContext.getLayers().addLayer(lyr);
130
        }
131

    
132
        /**
133
         * Validate field name
134
         * 
135
         * @param field
136
         *            name
137
         * @return field name
138
         */
139
        private String validFieldName(String name) {
140

    
141
                if ((name
142
                                .compareToIgnoreCase(OracleValues.DEFAULT_ID_FIELD_CASE_SENSITIVE) == 0)
143
                                || (name.compareToIgnoreCase(OracleValues.ORACLE_ID_FIELD) == 0)) {
144
                        return name + "_";
145
                }
146
                return name;
147
        }
148

    
149
        /**
150
         * Build feature type from field table model
151
         * 
152
         * @param eFType
153
         * @param model
154
         * @return
155
         */
156
        private FeatureType createDefaultFeatureType(EditableFeatureType eFType,
157
                        TableModel model) {
158

    
159
                // GID Field
160
                EditableFeatureAttributeDescriptor gid = eFType.add(
161
                                OracleValues.DEFAULT_ID_FIELD_CASE_SENSITIVE, DataTypes.INT);
162
                gid.setIsAutomatic(true);
163
                gid.setSize(7);
164
                gid.setPrecision(0);
165

    
166
                // Other fields
167
                for (int i = 0; i < model.getRowCount(); i++) {
168
                        String fieldName = (String) model.getValueAt(i, 0);
169
                        fieldName = validFieldName(fieldName);
170
                        String fieldType = (String) model.getValueAt(i, 1);
171
                        String fieldSize = (String) model.getValueAt(i, 2);
172
                        int intFieldSize = new Integer(fieldSize).intValue();
173

    
174
                        EditableFeatureAttributeDescriptor newfield = null;
175

    
176
                        if (fieldType.compareToIgnoreCase("String") == 0) {
177
                                newfield = eFType.add(fieldName, DataTypes.STRING);
178
                                newfield.setSize(intFieldSize);
179
                        } else if (fieldType.compareToIgnoreCase("Boolean") == 0) {
180
                                newfield = eFType.add(fieldName, DataTypes.BOOLEAN);
181
                                newfield.setSize(intFieldSize);
182
                        } else if (fieldType.compareToIgnoreCase("Date") == 0) {
183
                                newfield = eFType.add(fieldName, DataTypes.DATE);
184
                                newfield.setSize(intFieldSize);
185
                        } else if (fieldType.compareToIgnoreCase("Integer") == 0) {
186
                                newfield = eFType.add(fieldName, DataTypes.INT);
187
                                newfield.setSize(intFieldSize);
188
                        } else if (fieldType.compareToIgnoreCase("Double") == 0) {
189
                                newfield = eFType.add(fieldName, DataTypes.DOUBLE);
190
                                newfield.setSize(intFieldSize);
191
                        }
192
                }
193

    
194
                // GEOMETRY Field
195
                EditableFeatureAttributeDescriptor geometry = eFType.add(
196
                                OracleValues.DEFAULT_GEO_FIELD, DataTypes.GEOMETRY);
197
                int geom = geoTypePanel.getSelectedGeometryType();
198
                geometry.setGeometryType(geom);
199

    
200
                eFType.setDefaultGeometryAttributeName(OracleValues.DEFAULT_GEO_FIELD);
201

    
202
                return eFType.getNotEditableCopy();
203
        }
204

    
205
}