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 |
} |