Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extPublish / src / com / iver / cit / gvsig / publish / servers / geoserver / GeoserverPublishControler.java @ 10626

History | View | Annotate | Download (7.88 KB)

1
package com.iver.cit.gvsig.publish.servers.geoserver;
2

    
3

    
4
import java.awt.geom.Rectangle2D;
5
import java.sql.SQLException;
6
import java.util.Iterator;
7
import java.util.LinkedHashMap;
8
import java.util.Map;
9
import java.util.Set;
10

    
11
import org.gvsig.remoteservices.conf.geoserver.Catalog;
12
import org.gvsig.remoteservices.conf.geoserver.CatalogPOSTGIS;
13
import org.gvsig.remoteservices.conf.geoserver.CatalogSHAPE;
14
import org.gvsig.remoteservices.conf.geoserver.Info;
15
import org.gvsig.remoteservices.conf.geoserver.InfoPOSTGIS;
16
import org.gvsig.remoteservices.conf.geoserver.InfoSHAPE;
17

    
18
import com.hardcode.gdbms.driver.exceptions.ReadDriverException;
19
import com.iver.cit.gvsig.exceptions.expansionfile.ExpansionFileReadException;
20
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
21
import com.iver.cit.gvsig.fmap.layers.FLayer;
22
import com.iver.cit.gvsig.fmap.layers.FLayers;
23
import com.iver.cit.gvsig.fmap.layers.FLyrVect;
24
import com.iver.cit.gvsig.fmap.layers.ISpatialDB;
25
import com.iver.cit.gvsig.fmap.layers.ReadableVectorial;
26
import com.iver.cit.gvsig.fmap.layers.VectorialFileAdapter;
27
import com.iver.cit.gvsig.publish.model.LayerInfo;
28
import com.iver.cit.gvsig.publish.model.LayerInfoFactory;
29
import com.iver.cit.gvsig.publish.model.ServiceInfo;
30
import com.iver.cit.gvsig.publish.model.ServiceInfoFactory;
31
import com.iver.cit.gvsig.publish.servers.GenericServer;
32
import com.iver.cit.gvsig.publish.servers.PublishControler;
33
import com.iver.utiles.StringUtilities;
34
import com.iver.utiles.swing.jcomboServer.ServerData;
35

    
36
public class GeoserverPublishControler extends PublishControler{
37
        public static String user = null; //login para el update de geoserver --> poner en el GUI
38
        public static String passw= null; //passw para el update de geoserver --> poner en el GUI
39
        public static String confDir = null;
40
        public static String namespace = null;
41
        public static String serverAddress = null;
42
        public static String path = null;
43
        private Map layers = new LinkedHashMap();
44

    
45
        /**
46
         * Constructor
47
         */
48
        public GeoserverPublishControler(String service) {
49
                super(service);
50
        }
51

    
52
        /*
53
         *  (non-Javadoc)
54
         * @see com.iver.cit.gvsig.publish.servers.PublishControler#publish(com.iver.utiles.swing.jcomboServer.ServerData)
55
         */
56
        public Object publish(ServerData serverData) {
57
                return publish(serverData.getServerAddress(),
58
                                serverData.getProperty(GenericServer.GENERIC_SERVER_PATH),
59
                                serverData.getProperty(Geoserver.WFS_USER),
60
                                serverData.getProperty(Geoserver.WFS_PASSWORD),
61
                                serverData.getProperty(Geoserver.WFS_NAMESPACE),
62
                                serverData.getProperty(Geoserver.WFS_CONF_DIR)
63
                                );
64
        }
65

    
66
        /* TODO: */
67

    
68
        private Object publish(String serverAddress,String path, String user, String password, String namespace, String configDir) {
69
                this.path = path;
70
                this.namespace = namespace;
71
                this.serverAddress = serverAddress;
72
                this.user = user;
73
                this.passw = password;
74
                this.confDir = configDir;
75

    
76
                for (int i = 0; i < getLayers().getLayersCount(); i++) {
77
                        FLayer lyr = getLayers().getLayer(i);
78
                        if (lyr.isVisible()){
79
                                if (lyr instanceof FLayers){
80
                                        System.out.println("We can't publish layers groups yet");
81
                                }else{
82
                                        publishSimpleLayer(lyr);
83
                                }
84
                        }
85
                }
86
                return null;
87
        }
88

    
89
        private void publishSimpleLayer(FLayer lyr){
90
                if (lyr instanceof FLyrVect){
91
                        FLyrVect flyrVect = (FLyrVect)lyr;
92
                        System.out.println(flyrVect.getSource().getDriver().getName());
93
                        //Postgis
94
                        if(flyrVect.getSource().getDriver().getName().compareTo("PostGIS JDBC Driver")==0){
95
                                publishSimplePostgis((FLyrVect)lyr);
96
                        }
97
                        //Shape
98
                        if(flyrVect.getSource().getDriver().getName().compareTo("gvSIG shp driver")==0){
99
                                publishSimpleShape((FLyrVect)lyr);
100
                        }
101
                }
102
        }
103

    
104
        private void  publishSimpleShape(FLayer lyr){
105
                Rectangle2D extent = null;
106
                String source = null;
107
                FLyrVect flyrVect = (FLyrVect)lyr;
108
                ReadableVectorial rv = flyrVect.getSource();
109
                if (rv instanceof VectorialFileAdapter) {
110
                        VectorialFileAdapter vfa = (VectorialFileAdapter) rv;
111
                        source = path+"/"+vfa.getFile().getName();
112
                }
113
                try {
114
                        extent = lyr.getFullExtent();
115
                } catch (ReadDriverException e) {
116
                        e.printStackTrace();
117
                } catch (ExpansionFileReadException e) {
118
                        e.printStackTrace();
119
                }
120
                InfoSHAPE i=new InfoSHAPE(confDir,"/data/featureTypes/"+lyr.getName()+"_"+lyr.getName().split(".shp")[0]+"/",
121
                                lyr.getName().split(".shp")[0],
122
                                lyr.getName().split(".shp")[0],
123
                                lyr.getProjection().getAbrev().split(":")[1],
124
                                "/",
125
                                "8",
126
                                "false"
127
                                ,"line",
128
                                "false",
129
                                "",
130
                                extent.getMinX(),extent.getMinY(),extent.getMaxX(),extent.getMaxY());
131

    
132
                CatalogSHAPE g=new CatalogSHAPE(confDir,
133
                                namespace,
134
                                "namespace",
135
                                lyr.getName().split(".shp")[0],
136
                                "file:"+source,
137
                                "true");
138

    
139
                layers.put(i,g);
140
        }
141

    
142

    
143
        private void publishSimplePostgis(FLyrVect lyr){
144
                Rectangle2D extent = null;
145
                try {
146
                        extent = lyr.getFullExtent();
147
                } catch (ReadDriverException e1) {
148
                        // TODO Auto-generated catch block
149
                        e1.printStackTrace();
150
                } catch (ExpansionFileReadException e1) {
151
                        // TODO Auto-generated catch block
152
                        e1.printStackTrace();
153
                }
154
                InfoPOSTGIS i=new InfoPOSTGIS(confDir,"/data/featureTypes/"+lyr.getName()+"_"+lyr.getName().split(".shp")[0]+"/",
155
                                lyr.getName().split(".shp")[0],
156
                                lyr.getName().split(".shp")[0],
157
                                lyr.getProjection().getAbrev().split(":")[1],
158
                                "/",
159
                                "8",
160
                                "false"
161
                                ,"line",
162
                                "false",
163
                                "",
164
                                extent.getMinX(),extent.getMinY(),extent.getMaxX(),extent.getMaxY());
165

    
166
                String user = null;
167
                String pass = "chkdsk";
168
                String host = null;
169
                String dbname = null;
170
                String port = null;
171
                DBLayerDefinition layerDef =((ISpatialDB)lyr.getSource()).getLyrDef();
172
                try {
173
                        user = layerDef.getConnection().getMetaData().getUserName();
174
                        pass = "chkdsk";
175
                        host = getPostgisHost(layerDef.getConnection().getMetaData().getURL());
176
                        dbname = layerDef.getConnection().getCatalog();
177
                        port = getPostgisPort(layerDef.getConnection().getMetaData().getURL());
178
                } catch (SQLException e) {
179
                        // TODO Auto-generated catch block
180
                        e.printStackTrace();
181
                }
182

    
183

    
184
                CatalogPOSTGIS g=new CatalogPOSTGIS(confDir,
185
                                namespace,
186
                                "namespace",
187
                                lyr.getName().split(".shp")[0],
188
                                "true",
189
                                "abstract",
190
                                "true",
191
                                user,
192
                                pass,
193
                                "true",
194
                                host,
195
                                "public",
196
                                port,
197
                                dbname,
198
                                "postgis");
199

    
200
                layers.put(i,g);
201
        }
202

    
203
        private  String getPostgisHost(String url){
204
                //jdbc:postgresql://sercartlin:5432/carto_300k
205
                String[] s = url.split(":");
206
                return StringUtilities.replace(s[2],"//","");
207
        }
208

    
209
        private String getPostgisPort(String url){
210
                //jdbc:postgresql://sercartlin:5432/carto_300k
211
                String[] s = url.split(":");
212
                return s[3].split("/")[0];
213
        }
214

    
215

    
216
        public ServiceInfo getServiceInfo() {
217
                if (serviceInfo == null) {
218
                        serviceInfo = ServiceInfoFactory.createServiceInfo(getService());
219
                        Set infos = layers.keySet();
220
                        Iterator it = infos.iterator();
221
                        while (it.hasNext()){
222
                                //Object ob = it.next();
223
                                //Info info = (Info) ob;
224
                                Info info = (Info)it.next();
225
                                LayerInfo layerInfo = LayerInfoFactory.createLayerInfo(getService());
226
                                layerInfo.setName(info.getName());
227
                                layerInfo.setSrs(info.getSrs());
228
                                layerInfo.setExtent(info.getExtent());
229
                                layerInfo.setTitle(info.getTitle());
230
                                layerInfo.setAbstrac(info.getAbstract());
231
                                serviceInfo.addLayer(layerInfo);
232
                        }
233
                }
234
                return serviceInfo;
235
        }
236

    
237
        /*
238
         *  (non-Javadoc)
239
         * @see com.iver.cit.gvsig.publish.servers.PublishControler#writeFile()
240
         */
241
        public void writeFile() {
242
                Set infos = layers.keySet();
243
                Iterator it = infos.iterator();
244
                int i=0;
245
                while (it.hasNext()){
246
                        Info info = (Info)it.next();
247
                        LayerInfo layerInfo = serviceInfo.getLayer(i);
248
                        info.setName(layerInfo.getName());
249
                        info.setSrs(layerInfo.getSrs());
250
                        info.setExtent(layerInfo.getExtent());
251
                        info.setAbstract(layerInfo.getAbstrac());
252
                        info.setTitle(layerInfo.getTitle());
253
                        Catalog catalog = (Catalog)layers.get(info);
254
                        info.toXML();
255
                        info.close();
256
                        catalog.toXML();
257
                        catalog.close();
258
                        System.out.println("notificando cambios a geoserver ...");
259
                        catalog.update(serverAddress, user, passw);
260
                        System.out.println("hecho.");
261
                        i++;
262
                }
263

    
264
        }
265

    
266
}
267