Statistics
| Revision:

root / trunk / extensions / extOracleSpatial / src / es / prodevelop / cit / gvsig / jdbc_spatial / NewOracleSpatialTableFinishAction.java @ 29689

History | View | Annotate | Download (5.07 KB)

1
package es.prodevelop.cit.gvsig.jdbc_spatial;
2

    
3
import java.awt.geom.Rectangle2D;
4
import java.sql.Types;
5
import java.util.ArrayList;
6

    
7
import jwizardcomponent.FinishAction;
8
import jwizardcomponent.JWizardComponents;
9

    
10
import org.apache.log4j.Logger;
11

    
12
import com.hardcode.driverManager.Driver;
13
import com.iver.andami.PluginServices;
14
import com.iver.andami.ui.mdiManager.IWindow;
15
import com.iver.cit.gvsig.fmap.MapContext;
16
import com.iver.cit.gvsig.fmap.ViewPort;
17
import com.iver.cit.gvsig.fmap.core.ICanReproject;
18
import com.iver.cit.gvsig.fmap.crs.CRSFactory;
19
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
20
import com.iver.cit.gvsig.fmap.drivers.FieldDescription;
21
import com.iver.cit.gvsig.fmap.drivers.IConnection;
22
import com.iver.cit.gvsig.fmap.drivers.db.utils.ConnectionWithParams;
23
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
24
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
25

    
26
import es.prodevelop.cit.gvsig.fmap.drivers.jdbc.oracle.OracleSpatialDriver;
27
import es.prodevelop.cit.gvsig.fmap.drivers.jdbc.oracle.OracleSpatialWriter;
28
import es.prodevelop.cit.gvsig.jdbc_spatial.gui.jdbcwizard.NewOracleSpatialTableWizard;
29
import es.prodevelop.cit.gvsig.jdbc_spatial.gui.jdbcwizard.RepeatedChooseGeometryTypePanel;
30
import es.prodevelop.cit.gvsig.jdbc_spatial.gui.jdbcwizard.RepeatedFieldDefinitionPanel;
31

    
32
public class NewOracleSpatialTableFinishAction extends FinishAction {
33
        
34
        private static Logger logger = Logger.getLogger(NewOracleSpatialTableFinishAction.class.getName());
35
        private NewOracleSpatialTableWizard connectionPanel;
36
        private RepeatedChooseGeometryTypePanel geoTypePanel;
37
        private RepeatedFieldDefinitionPanel fieldsPanel;
38
        private MapContext theMapContext;
39
        private IWindow closeThis;
40
        
41
        
42
        // ...
43
        
44
        public NewOracleSpatialTableFinishAction(
45
                        JWizardComponents wc,
46
                        IWindow closeit,
47
                        NewOracleSpatialTableWizard connPanel,
48
                        MapContext mc) {
49
                
50
                super(wc);
51
                theMapContext = mc;
52
                closeThis = closeit;
53
                connectionPanel = connPanel;
54
                geoTypePanel = (RepeatedChooseGeometryTypePanel) wc.getWizardPanel(0);
55
                fieldsPanel = (RepeatedFieldDefinitionPanel) wc.getWizardPanel(1);
56
        }
57

    
58
        public void performAction() {
59

    
60
                PluginServices.getMDIManager().closeWindow(closeThis);
61
                
62
                ViewPort vp = theMapContext.getViewPort();
63
                
64
                DBLayerDefinition lyr_def = new DBLayerDefinition();
65
                
66
                FieldDescription[] flds = fieldsPanel.getFieldsDescription();
67
                FieldDescription[] flds_new = getValidFields(flds);
68
                
69
                lyr_def.setFieldsDesc(flds_new);
70
                
71
                String table_name = geoTypePanel.getLayerName().toUpperCase();
72
                lyr_def.setTableName(table_name);
73
                String usr = connectionPanel.getConnectionWithParams().getUser();
74
                lyr_def.setUser(usr.toUpperCase());
75
                String epsg_code = vp.getProjection().getAbrev();
76
                lyr_def.setSRID_EPSG(epsg_code.substring(5));
77
                
78
                lyr_def.setFieldID(OracleSpatialDriver.ORACLE_ID_FIELD);
79
                lyr_def.setFieldGeometry(OracleSpatialDriver.DEFAULT_GEO_FIELD);
80
                lyr_def.setWhereClause("");
81
                
82
                Rectangle2D extent = vp.getAdjustedExtent();
83
                if (extent == null) {
84
                        int h = vp.getImageHeight();
85
                        int w = vp.getImageWidth();
86
                        extent = new Rectangle2D.Double(0, 0, w, h);
87
                }
88
                IConnection iconn = connectionPanel.getConnectionWithParams().getConnection();
89

    
90
                // --------------------------------------------------------------------
91
                // -------------------------------------------------------------------
92
                // --------------------------------------------------------------------
93
                theMapContext.beginAtomicEvent();
94
                
95
                OracleSpatialWriter.createEmptyTable(lyr_def, iconn, extent);
96
                OracleSpatialDriver oracleDrv = new OracleSpatialDriver();
97
                oracleDrv.setData(iconn, lyr_def);
98
                
99
                int shptype = geoTypePanel.getSelectedGeometryType();
100
                oracleDrv.setShapeType(shptype);
101
                
102
                FLyrVect lyr = (FLyrVect) LayerFactory.createDBLayer(
103
                                oracleDrv,
104
                                table_name,
105
                                vp.getProjection());
106

    
107
                lyr.setVisible(true);
108
                theMapContext.getLayers().addLayer(lyr);
109
                theMapContext.endAtomicEvent();
110
                // --------------------------------------------------------------------
111
                // --------------------------------------------------------------------
112
                // --------------------------------------------------------------------
113
                
114
        }
115
        
116
        private boolean validFieldName(FieldDescription f_desc) {
117
                
118
                if ((f_desc.getFieldName().compareToIgnoreCase(OracleSpatialDriver.DEFAULT_ID_FIELD_CASE_SENSITIVE) == 0)
119
                                || (f_desc.getFieldName().compareToIgnoreCase(OracleSpatialDriver.ORACLE_ID_FIELD) == 0)) {
120
                        return false;
121
                }
122
                return true;
123
        }
124

    
125
        private FieldDescription[] getValidFields(FieldDescription[] ff) {
126
                
127
                // remove GID, ROWID
128
                ArrayList aux = new ArrayList();
129

    
130
                // rowid
131
                FieldDescription row_fld = new FieldDescription();
132
                row_fld.setFieldName(OracleSpatialDriver.ORACLE_ID_FIELD);
133
                row_fld.setFieldType(Types.VARCHAR);
134
                aux.add(row_fld);
135
                
136
                
137
                for (int i=0; i<ff.length; i++) {
138
                        if (validFieldName(ff[i])) {
139
                                aux.add(ff[i]);
140
                        }
141
                }
142
                
143
                
144
                // gid
145
                FieldDescription gid_fld = new FieldDescription();
146
                gid_fld.setFieldName(OracleSpatialDriver.DEFAULT_ID_FIELD_CASE_SENSITIVE);
147
                gid_fld.setFieldType(Types.INTEGER);
148
                aux.add(gid_fld);
149
                
150
                return (FieldDescription[]) aux.toArray(new FieldDescription[0]);
151
                // -------
152
        }
153

    
154
}