Statistics
| Revision:

root / branches / v05 / extensions / extCatalogYNomenclator / src / es / gva / cit / gvsig / catalogClient / loaders / PostgisLayerLoader.java @ 4467

History | View | Annotate | Download (5.53 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
*
3
* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License
7
* as published by the Free Software Foundation; either version 2
8
* of the License, or (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
*
19
* For more information, contact:
20
*
21
*  Generalitat Valenciana
22
*   Conselleria d'Infraestructures i Transport
23
*   Av. Blasco Ib??ez, 50
24
*   46010 VALENCIA
25
*   SPAIN
26
*
27
*      +34 963862235
28
*   gvsig@gva.es
29
*      www.gvsig.gva.es
30
*
31
*    or
32
*
33
*   IVER T.I. S.A
34
*   Salamanca 50
35
*   46005 Valencia
36
*   Spain
37
*
38
*   +34 963163400
39
*   dac@iver.es
40
*/
41
package es.gva.cit.gvsig.catalogClient.loaders;
42

    
43
import java.sql.Connection;
44
import java.sql.DriverManager;
45
import java.sql.SQLException;
46
import java.util.StringTokenizer;
47
import java.util.TreeMap;
48

    
49
import com.hardcode.driverManager.DriverLoadException;
50
import com.iver.cit.gvsig.fmap.drivers.DBLayerDefinition;
51
import com.iver.cit.gvsig.fmap.drivers.jdbc.postgis.PostGisDriver;
52
import com.iver.cit.gvsig.fmap.layers.FLayer;
53
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
54

    
55
import es.gva.cit.catalogClient.schemas.discoverer.Resource;
56
import es.gva.cit.catalogClient.traductor.ITranslator;
57
import es.gva.cit.catalogClient.traductor.Translator;
58

    
59

    
60

    
61
/**
62
 * This class is used to load a POSTGIS resource in gvSIG
63
 * 
64
 * @author Jorge Piera Llodra (piera_jor@gva.es)
65
 */
66

    
67
public class PostgisLayerLoader extends LayerLoader{
68
        
69
        
70
        
71
        public PostgisLayerLoader(Resource resource, ITranslator translator) {
72
                super(resource, translator);                
73
        }
74

    
75
        /**
76
     * This function adds a Postgis Layer to gvSIG 
77
     * @param jdbcUrl
78
            * JDBC url connection
79
            * @param table
80
            * Table to load
81
         * @throws LayerLoaderException 
82
            */        
83
           public void loadLayer() throws LayerLoaderException {
84
               FLayer flayer;
85
               String jdbcUrl = getResource().getLinkage();
86
               String table = getResource().getName();
87
        try {
88
            flayer = createPostgisLayer(jdbcUrl, table);
89
                   addLayerToView(flayer);
90
        } catch (SQLException e) {
91
                throw new LayerLoaderException(e.getMessage(),getWindowMessage());
92
        } catch (DriverLoadException e) {
93
                throw new LayerLoaderException(e.getMessage(),getWindowMessage());
94
        } catch (ClassNotFoundException e) {
95
                throw new LayerLoaderException(e.getMessage(),getWindowMessage());
96
        }     
97
        
98
           }
99
            
100
    /**
101
            * It returns a Postgis Layer
102
            * @param jdbcUrl
103
            * JDBC url connection
104
            * @param table
105
            * Table to load
106
            * @return
107
     * @throws SQLException
108
     * @throws DriverLoadException
109
     * @throws ClassNotFoundException
110
            */
111
    private FLayer createPostgisLayer(String jdbcUrl, String table) throws SQLException, DriverLoadException, ClassNotFoundException  {
112
        //jdbc:postgresql://sercartlin/carto_300k?user=gis&password=gis     
113
        //NAME=Comunicaciones&TABLENAME=comunic_lin_300k&ID=6&FIELDS=entity,layer,codigo,tipo,gid&GEOMFIELD=the_geom
114
      StringTokenizer sti = new StringTokenizer(jdbcUrl,"?");
115
        String dbURL = sti.nextToken();
116
        
117
        String p = sti.nextToken();
118
               
119
        TreeMap credentials = separateParams(p);
120
                String user = (String) credentials.get((String) "USER");
121
                String pwd = (String) credentials.get((String) "PASSWORD");
122
                
123
                TreeMap params = separateParams(table);
124
                String layerName = (String) params.get((String) "NAME");
125
                String fidField = (String) params.get((String) "ID");
126
                String sFields = (String) params.get((String) "FIELDS");
127
                String[] fields = sFields.split(",");
128
                String geomField = (String) params.get((String) "GEOMFIELD");
129
                String tableName = (String) params.get((String) "TABLENAME");
130
                String whereClause = "";
131
                        
132
                                
133
                 Connection conn = DriverManager.getConnection(dbURL, user, pwd);
134
         conn.setAutoCommit(false);
135
           
136
         DBLayerDefinition lyrDef = new DBLayerDefinition();                
137
         lyrDef.setLayerName(layerName);
138
         lyrDef.setTableName(tableName);
139
         lyrDef.setWhereClause(whereClause);
140
         lyrDef.setFieldNames(fields);
141
         lyrDef.setFieldGeometry(geomField);
142
         lyrDef.setFieldID(fidField);
143

    
144
         PostGisDriver pgd = new PostGisDriver();
145
         pgd.setData(conn, lyrDef);
146
                 
147
         return LayerFactory.createDBLayer(pgd, layerName, null);
148
   }
149
    
150
    private TreeMap separateParams(String pairValues){
151
        TreeMap map = new TreeMap(); 
152
                String[] params = pairValues.split("&");
153
                for (int i = 0; i < params.length; i++) {
154
                        String[] nameValue = params[i].split("=");
155
                        map.put(nameValue[0].toUpperCase(), nameValue[1]);
156
                }
157
                return map;
158
    }
159

    
160
        private String getErrorMessage() {
161
                return Translator.getText(getTranslator(),"postgisError") + ".\n" +
162
                                Translator.getText(getTranslator(),"server") + ": " + 
163
                                getResource().getLinkage() + "\n" +
164
                                Translator.getText(getTranslator(),"parameters") + ": " +
165
                                getResource().getName();
166
        }
167

    
168
        private String getWindowMessage() {
169
                return Translator.getText(getTranslator(),"postgisLoad");
170
        }
171

    
172
        
173
}