Revision 1369

View differences:

tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/resources-plugin/i18n/text.properties
1
_PostgreSQL_loading_parameters=Par\u00e1metros de carga de PostgreSQL
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
1
_PostgreSQL_loading_parameters=PostgreSQL loading parameters
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3
  <libraries library-dir="lib/"/>
4
  <depends plugin-name="org.gvsig.app.mainplugin"/>
5
  <resourceBundle name="text"/>
6
  <extensions>
7
     <extension class-name="org.gvsig.andami.LibraryExtension" active="false"/>
8
  </extensions>    
9
</plugin-config>
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<assembly>
2
  <id>gvsig-plugin-package</id>
3
  <formats>
4
    <format>zip</format>
5
  </formats>
6
  <baseDirectory>${project.artifactId}</baseDirectory>
7
  <includeBaseDirectory>true</includeBaseDirectory>
8
  <files>
9
    <file>
10
      <source>target/${project.artifactId}-${project.version}.jar</source>
11
      <outputDirectory>lib</outputDirectory>
12
    </file>
13
    <file>
14
      <source>target/package.info</source>
15
    </file>
16
    <file>
17
      <source>src/main/resources-plugin/config.xml</source>
18
    </file>
19
  </files>
20

  
21
  <dependencySets>
22
  
23
    <dependencySet>
24
      <useProjectArtifact>false</useProjectArtifact>
25
      <useTransitiveDependencies>false</useTransitiveDependencies>
26
      <outputDirectory>lib</outputDirectory>
27
      <includes>
28
        <include>org.gvsig:org.gvsig.postgresql.provider</include>
29
      </includes>
30
    </dependencySet>
31
    
32
    <dependencySet>
33
      <useProjectArtifact>false</useProjectArtifact>
34
      <useTransitiveDependencies>false</useTransitiveDependencies>
35
      <outputDirectory>lib</outputDirectory>
36
      <includes>
37
		<include>org.postgresql:postgresql</include>
38
		<include>org.apache.commons:commons-dbcp2</include>
39
		<include>org.apache.commons:commons-pool2</include>
40
      </includes>
41
    </dependencySet>
42
    
43
  </dependencySets>
44

  
45
</assembly>
46

  
47

  
48

  
49

  
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.postgresql.app.mainplugin</artifactId>
7
  <packaging>jar</packaging>
8
  <name>${project.artifactId}</name>
9
  <description>PostgreSQL file format support</description>
10

  
11
  <parent>
12
      <groupId>org.gvsig</groupId>
13
      <artifactId>org.gvsig.postgresql.app</artifactId>
14
      <version>2.0.263</version>
15
  </parent>
16

  
17
  <dependencies>
18
    <dependency>
19
        <groupId>org.gvsig</groupId>
20
        <artifactId>org.gvsig.tools.lib</artifactId>
21
        <scope>compile</scope>
22
    </dependency>
23
    <dependency>
24
        <groupId>org.gvsig</groupId>
25
        <artifactId>org.gvsig.andami</artifactId>
26
        <scope>compile</scope>
27
    </dependency>
28
    <dependency>
29
        <groupId>org.gvsig</groupId>
30
        <artifactId>org.gvsig.postgresql.provider</artifactId>
31
        <scope>compile</scope>
32
    </dependency>
33
    
34
    <dependency>
35
      <groupId>org.postgresql</groupId>
36
      <artifactId>postgresql</artifactId>
37
      <scope>runtime</scope>
38
    </dependency>
39
    <dependency>
40
      <groupId>org.apache.commons</groupId>
41
      <artifactId>commons-dbcp2</artifactId>
42
      <scope>runtime</scope>
43
    </dependency>    
44
    <dependency>
45
      <groupId>org.apache.commons</groupId>
46
      <artifactId>commons-pool2</artifactId>
47
      <scope>runtime</scope>
48
    </dependency>
49

  
50
  </dependencies>
51
  
52
    <properties>
53
        <!-- Package info property values -->
54
        <!-- Default values in org.gvsig.desktop -->
55
        <gvsig.package.info.name>Formats: PostgreSQL support</gvsig.package.info.name>
56
        <gvsig.package.info.state>testing</gvsig.package.info.state>
57
        <gvsig.package.info.official>true</gvsig.package.info.official>
58
        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.0.1</gvsig.package.info.dependencies>
59
        <gvsig.package.info.categories>Formats,Vector,Database</gvsig.package.info.categories>
60
        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-postgresql/pool/</gvsig.package.info.poolURL>
61
    </properties>
62
  
63

  
64
</project>
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/org.gvsig.postgresql.app.mainplugin/buildNumber.properties
1
#Mon Oct 09 22:17:14 CEST 2023
2
buildNumber=2321
0 3

  
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.app/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.postgresql.app</artifactId>
7
  <packaging>pom</packaging>
8
  <name>${project.artifactId}</name>
9
  <parent>
10
      <groupId>org.gvsig</groupId>
11
      <artifactId>org.gvsig.postgresql</artifactId>
12
      <version>2.0.263</version>
13
  </parent>
14

  
15
  <modules>
16
    <module>org.gvsig.postgresql.app.mainplugin</module>
17
    <!--
18
    <module>org.gvsig.postgresql.app.export</module>
19
    -->
20
  </modules>
21

  
22
</project>
tags/org.gvsig.postgresql-2.0.263/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
  <modelVersion>4.0.0</modelVersion>
6
  <artifactId>org.gvsig.postgresql</artifactId>
7
  <version>2.0.263</version>
8
  <packaging>pom</packaging>
9
  <name>${project.artifactId}</name>
10
  <description>PostgreSQL support fort DAL and gvSIG</description>
11
  <parent>
12
      <groupId>org.gvsig</groupId>
13
      <artifactId>org.gvsig.desktop</artifactId>
14
      <version>2.0.432</version>
15
  </parent>
16

  
17
  <url>https://devel.gvsig.org/redmine/projects/gvsig-postgresql</url>
18
  <scm>
19
      <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-postgresql/tags/org.gvsig.postgresql-2.0.263</connection>
20
      <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-postgresql/tags/org.gvsig.postgresql-2.0.263</developerConnection>
21
      <url>https://devel.gvsig.org/redmine/projects/gvsig-postgresql/repository/show/tags/org.gvsig.postgresql-2.0.263</url>
22
  </scm>
23

  
24
    <repositories>
25
        <repository>
26
            <id>gvsig-public-http-repository</id>
27
            <name>gvSIG maven public HTTP repository</name>
28
            <url>http://devel.gvsig.org/m2repo/j2se</url>
29
            <releases>
30
                <enabled>true</enabled>
31
                <updatePolicy>daily</updatePolicy>
32
                <checksumPolicy>warn</checksumPolicy>
33
            </releases>
34
            <snapshots>
35
                <enabled>true</enabled>
36
                <updatePolicy>daily</updatePolicy>
37
                <checksumPolicy>warn</checksumPolicy>
38
            </snapshots>
39
        </repository>
40
    </repositories>
41
  
42
  
43
	<build>
44
		<plugins>
45
			<plugin>
46
				<groupId>org.apache.maven.plugins</groupId>
47
				<artifactId>maven-release-plugin</artifactId>
48
				<configuration>
49
					<tagBase>https://devel.gvsig.org/svn/gvsig-postgresql/tags/</tagBase>
50
					<goals>deploy</goals>
51
				</configuration>
52
			</plugin>
53
		</plugins>
54
	</build>
55

  
56

  
57
  <dependencyManagement>
58
      <dependencies>
59
          <dependency>
60
            <groupId>org.gvsig</groupId>
61
            <artifactId>org.gvsig.postgresql.provider</artifactId>
62
            <version>2.0.263</version>
63
          </dependency>
64
          <dependency>
65
            <groupId>org.gvsig</groupId>
66
            <artifactId>org.gvsig.postgresql.app.mainplugin</artifactId>
67
            <version>2.0.263</version>
68
          </dependency>
69
        <dependency>
70
            <groupId>org.postgresql</groupId>
71
            <artifactId>postgresql</artifactId>
72
            <version>42.3.1</version>
73
        </dependency>
74
        <dependency>
75
          <groupId>org.apache.commons</groupId>
76
          <artifactId>commons-dbcp2</artifactId>
77
          <version>2.7.0</version>
78
        </dependency>   
79
        <dependency>
80
            <groupId>org.apache.commons</groupId>
81
            <artifactId>commons-pool2</artifactId>
82
            <version>2.7.0</version>
83
        </dependency>
84
      </dependencies>
85
  </dependencyManagement>
86
 
87
  <modules>
88
    <module>org.gvsig.postgresql.app</module>
89
    <module>org.gvsig.postgresql.provider</module>
90
  </modules>
91

  
92
</project>
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.postgresql.dal.PostgreSQLLibrary
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/resources/org/gvsig/postgresql/dal/PostgreSQLMetadata.xml
1
<?xml version="1.0"?>
2
<definitions>
3
  <version>1.0.0</version>
4
  <classes>
5
    <class name="PostgreSQL" namespace="Metadata">
6
      <extends>
7
      	<class name="JDBC2" namespace="Metadata"/>
8
      </extends>
9
      <description>Metadata of a PostgreSQL store</description>
10
      <fields>
11
      </fields>
12
    </class>
13

  
14
  </classes>
15
</definitions>  
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/resources/org/gvsig/postgresql/dal/PostgreSQLParameters.xml
1
<?xml version="1.0"?>
2
<definitions>
3
  <version>1.0.0</version>
4
  <classes>
5
    <class name="PostgreSQLResourceParameters">
6
      <extends>
7
        <class>JDBC2ResourceParameters</class>
8
      </extends>
9
      <description>_PostgreSQL_loading_parameters</description>
10
      <fields>
11
        <field name="JDBCDriverClass" type="string" mandatory="true"
12
          defaultValue="org.postgresql.Driver" group="Advanced">
13
          <description>JDBC Driver class</description>
14
        </field>
15
	<field name="port" type="integer" mandatory="false"
16
          defaultValue="5432" group="Connection">
17
          <description></description>
18
        </field>
19
        <field name="host" type="string" mandatory="false" 
20
            defaultValue="127.0.0.1" group="Connection">
21
          <description></description>
22
        </field>
23
        <field name="UseSSL" type="boolean" mandatory="false"
24
          defaultValue="false" group="Basic">
25
          <description>Use SSL connetion</description>
26
        </field>
27
        <field name="maxIdle" type="integer" mandatory="false"
28
          defaultValue="8" group="Advanced">
29
          <description>The maximum number of connections that can remail idle in the pool.</description>
30
        </field>
31
        <field name="networkTimeout" type="integer" mandatory="false"
32
          defaultValue="30000" group="Advanced">
33
          <description>The maximum period a connection or objects created from the connection will wait for the database to reply to any one request.</description>
34
        </field>
35
      </fields>
36
    </class>
37

  
38
    <class name="PostgreSQLStoreParameters">
39
      <extends>
40
        <class>JDBC2StoreParameters</class>
41
        <class>PostgreSQLResourceParameters</class>
42
      </extends>
43
      <fields/>
44
    </class>
45

  
46
    <class name="PostgreSQLNewStoreParameters">
47
      <extends>
48
        <class>JDBC2NewStoreParameters</class>
49
        <class>PostgreSQLResourceParameters</class>
50
      </extends>
51
      <fields/>
52
    </class>
53

  
54

  
55
    <class name="PostgreSQLServerExplorerParameters">
56
      <extends>
57
        <class>PostgreSQLResourceParameters</class>
58
        <class>JDBC2ServerExplorerParameters</class>
59
      </extends>
60
      <fields/>
61
    </class>
62

  
63

  
64
  </classes>
65
</definitions>  
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLHelper.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import java.sql.Blob;
5
import java.sql.Clob;
6
import java.sql.Connection;
7
import java.sql.DriverManager;
8
import java.sql.ResultSet;
9
import java.sql.SQLException;
10
import java.util.HashMap;
11
import java.util.Map;
12
import org.apache.commons.dbcp2.BasicDataSource;
13
import org.apache.commons.io.IOUtils;
14
import org.apache.commons.lang3.ArrayUtils;
15
import org.apache.commons.lang3.BooleanUtils;
16
import org.apache.commons.lang3.StringUtils;
17
import org.gvsig.expressionevaluator.GeometryExpressionBuilderHelper.GeometrySupportType;
18
import org.gvsig.fmap.dal.DataTypes;
19
import org.gvsig.fmap.dal.exception.DataException;
20
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
21
import org.gvsig.fmap.dal.feature.spi.FeatureProvider;
22
import org.gvsig.fmap.dal.resource.exception.AccessResourceException;
23
import org.gvsig.fmap.dal.spi.DataTransactionServices;
24
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
25
import org.gvsig.fmap.dal.store.jdbc.JDBCNewStoreParameters;
26
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
27
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
28
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCCantFetchValueException;
29
import org.gvsig.fmap.dal.store.jdbc.exception.JDBCDriverClassNotFoundException;
30
import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection;
31
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
32
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory;
33
import org.gvsig.fmap.dal.store.jdbc2.spi.AbstractConnectionProvider;
34
import org.gvsig.fmap.dal.store.jdbc2.spi.ConnectionProvider;
35
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCConnectionBase;
36
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCHelperBase;
37
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
38
import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolverBase;
39
import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolverDumb;
40
import org.gvsig.fmap.geom.Geometry;
41
import org.gvsig.postgresql.dal.operations.PostgreSQLOperationsFactory;
42
import org.gvsig.tools.dispose.Disposable;
43
import org.gvsig.tools.dispose.DisposeUtils;
44
import org.gvsig.tools.exception.BaseException;
45
import org.postgresql.util.DriverInfo;
46
import org.slf4j.Logger;
47
import org.slf4j.LoggerFactory;
48

  
49
@SuppressWarnings("UseSpecificCatch")
50
public class PostgreSQLHelper extends JDBCHelperBase {
51

  
52
    /* friend */ static final Logger LOGGER = LoggerFactory.getLogger(PostgreSQLHelper.class);
53

  
54
    public static final String POSTGRESQL_JDBC_DRIVER = "org.postgresql.Driver";
55
    
56
    public static final boolean USE_CONNECTIONS_POOL = true;
57
    
58
    public static String getConnectionURL(PostgreSQLConnectionParameters params) {
59
        return getConnectionURL(
60
            params.getHost(),
61
            params.getPort(),
62
            params.getDBName()
63
        );
64
    }
65
    
66
    public static String getConnectionURL(String host, Integer port, String db) {
67
        if( StringUtils.isEmpty(host) ) {
68
            throw new IllegalArgumentException("Parameter 'host' can't be null.");
69
        }
70
        String connectionURL = "jdbc:postgresql://" + host;
71
        if (port != null) {
72
            connectionURL = connectionURL + ":" + port;
73
        }
74
        connectionURL = connectionURL + "/" + db;
75
        LOGGER.debug("connectionURL: {}", connectionURL);
76
        return connectionURL;
77
    }
78

  
79
    private static class PostgreSQLConnectionProvider extends AbstractConnectionProvider implements Disposable, ConnectionProvider {
80

  
81
        private static boolean needRegisterDriver = true;
82

  
83
        private BasicDataSource dataSource = null;
84

  
85
        private PostgreSQLConnectionParameters connectionParameters;
86

  
87
        public PostgreSQLConnectionProvider(PostgreSQLConnectionParameters connectionParameters) {
88
            this.connectionParameters = connectionParameters;
89
            DisposeUtils.bind(this);
90
        }
91

  
92
        @Override
93
        public Connection getConnection() throws SQLException {
94
            
95
            Connection conn;
96
            if( USE_CONNECTIONS_POOL ) {
97
                if (this.dataSource == null) {
98
                    this.dataSource = this.createDataSource();               
99
                }
100
                if( LOGGER.isDebugEnabled() ) {
101
                    LOGGER.debug("getConnection:\n" + getStatusInformation());
102
                }
103
                try {
104
                    conn = this.dataSource.getConnection();
105
                } catch(Throwable ex) {
106
                    LOGGER.debug("Error getting connection from pool.",ex);
107
                    throw ex;
108
                }
109
                try {
110
                    conn.setNetworkTimeout(null, this.connectionParameters.getNetworkTimeout());
111
                } catch(Throwable ex) {
112
                    LOGGER.warn("Error setting the network timeout.",ex);
113
                }
114
                if( LOGGER.isDebugEnabled() ) {
115
                    LOGGER.debug("Created connection: {}\n  NumActive: {}\n  NumIdle: {}",
116
                        new Object[] {
117
                            conn.hashCode(), 
118
                            this.dataSource.getNumActive(),
119
                            this.dataSource.getNumIdle()
120
                        }
121
                    );
122
                }
123
            } else {
124
                try {
125
                    conn = DriverManager.getConnection(
126
                        connectionParameters.getUrl(), 
127
                        connectionParameters.getUser(), 
128
                        connectionParameters.getPassword()
129
                    );
130
                } catch(Throwable th) {
131
                    throw th;
132
                }
133
                if( LOGGER.isDebugEnabled() ) {
134
                    LOGGER.debug("Created not polled connection: {}",
135
                        new Object[] {
136
                            conn.hashCode()
137
                        }
138
                    );
139
                }
140
            }
141
            LOGGER.debug("PostgreSQL JDBC Driver: "+DriverInfo.DRIVER_VERSION);
142
            return conn;
143
        }
144
        
145
        public String getStatusInformation() {
146
            StringBuilder builder = new StringBuilder();
147
            if( this.dataSource==null ) {
148
                builder.append("Not poolled connection:\n");
149
                builder.append("  Connection URL: '").append(this.connectionParameters.getUrl()).append("'\n");
150
            } else {
151
                builder.append("BasicDataSource pool status:\n");
152
                builder.append("  Connection URL: '").append(this.dataSource.getUrl()).append("'\n");
153
                if( this.dataSource.getInitialSize()>0 ) {
154
                    builder.append("  InitialSize: ").append(this.dataSource.getInitialSize()).append(" (The initial number of connections that are created when the pool is started)\n");
155
                }
156
                if( this.dataSource.isPoolPreparedStatements() ) {
157
                    builder.append("  PoolPreparedStatements: ").append(this.dataSource.isPoolPreparedStatements()).append("\n");
158
                    builder.append("  MaxOpenPreparedStatements: ").append(this.dataSource.getMaxOpenPreparedStatements()).append(" (The maximum number of open statements that can be allocated from the statement pool at the same time, or non-positive for no limit)\n");
159
                }
160
                builder.append("  MaxTotal: ").append(this.dataSource.getMaxTotal()).append(" (The maximum number of active connections that can be allocated from this pool at the same time)\n");
161
                builder.append("  MaxIdle: ").append(this.dataSource.getMaxIdle()).append(" (The maximum number of connections that can remain idle in the pool)\n");
162
                builder.append("  NumActive:").append(this.dataSource.getNumActive()).append(" (the current number of active connections)\n");
163
                builder.append("  NumIdle:").append(this.dataSource.getNumIdle()).append(" (the current number of idle connections)\n");
164
            }
165
            return builder.toString();
166
        }
167

  
168
        private BasicDataSource createDataSource() throws SQLException {
169
            if (!this.isRegistered()) {
170
                this.registerDriver();
171
            }
172
            PostgreSQLConnectionParameters params = connectionParameters;
173

  
174
            BasicDataSource ds = new BasicDataSource();
175
            ds.setMaxIdle(params.getMaxIdle());
176
            ds.setDriverClassName(params.getJDBCDriverClassName());
177
            if( params.getUseSSL() ) {
178
                String s = BooleanUtils.toStringTrueFalse(params.getUseSSL());
179
                ds.addConnectionProperty("ssl", s );
180
            }
181
            if( !StringUtils.isEmpty(params.getUser()) ) {
182
                ds.setUsername(params.getUser());
183
            }
184
            if( !StringUtils.isEmpty(params.getPassword()) ) {
185
                ds.setPassword(params.getPassword());
186
            }
187
            ds.setUrl(params.getUrl());
188
            
189
            ds.setMinEvictableIdleTimeMillis(20*1000);
190
            ds.setTimeBetweenEvictionRunsMillis(20*1000);
191
            ds.setMinIdle(0);
192
            
193
            ds.setMaxWaitMillis(60L * 1000);
194
            return ds;
195
        }
196

  
197
        private boolean isRegistered() {
198
            return needRegisterDriver;
199
        }
200

  
201
        @Override
202
        public void registerDriver() throws SQLException {
203
            String className = this.connectionParameters.getJDBCDriverClassName();
204
            if (className == null) {
205
                return;
206
            }
207
            try {
208
                Class theClass = Class.forName(className);
209
                if (theClass == null) {
210
                    throw new JDBCDriverClassNotFoundException(PostgreSQLLibrary.NAME, className);
211
                }
212
            } catch (Exception e) {
213
                throw new SQLException("Can't register JDBC driver '" + className + "'.", e);
214
            }
215
            needRegisterDriver = false;
216
        }
217

  
218
        @Override
219
        public void dispose() {
220
            if(!DisposeUtils.release(this)){
221
                return;
222
            }
223
            if( this.dataSource!=null ) {
224
                try {
225
                    this.dataSource.close();
226
                } catch (SQLException ex) {
227
                    LOGGER.warn("Can't close BasicDataSource", ex);
228
                }
229
                this.dataSource = null;
230
            }
231
            this.connectionParameters = null;
232
        }
233
        
234
        @Override
235
        public boolean isDisposed() {
236
            return this.dataSource == null;
237
        }
238

  
239
        @Override
240
        public String getStatus() {
241
            if( dataSource==null ) {
242
                return "Not polled";
243
            }
244
            StringBuilder builder = new StringBuilder();
245
            builder.append("Pool: ");
246
            builder.append(JDBCUtils.getHexId(dataSource));
247
            builder.append(" Actives: ");
248
            builder.append(dataSource.getNumActive());
249
            builder.append("/");
250
            builder.append(dataSource.getMaxTotal()); //.getMaxActive());
251
            builder.append(" idle: ");
252
            builder.append(dataSource.getNumIdle());
253
            builder.append("/");
254
            builder.append(dataSource.getMinIdle());
255
            builder.append(":");
256
            builder.append(dataSource.getMaxIdle());
257
            return builder.toString();
258
        }
259

  
260
    }
261

  
262
    static private Map<String,ConnectionProvider> connectionProviders = new HashMap();
263
    private ConnectionProvider connectionProvider = null;
264
   
265
    /**
266
     * Constructor for use only for testing purposes.
267
     * 
268
     * @param connectionParameters
269
     * @param connectionProvider
270
     */
271
    public PostgreSQLHelper(PostgreSQLConnectionParameters connectionParameters, ConnectionProvider connectionProvider) { 
272
        super(connectionParameters);
273
        this.srssolver = new SRSSolverDumb(this);
274
        this.connectionProvider = connectionProvider;
275
    }
276
  
277

  
278

  
279
    public PostgreSQLHelper(JDBCConnectionParameters connectionParameters) {
280
        super(connectionParameters);
281
        this.srssolver = new SRSSolverBase(this);
282
    }
283

  
284
    @Override
285
    protected void doDispose() throws BaseException {
286
        if( this.connectionProvider!=null ) {
287
            this.connectionProvider.dispose();
288
            this.connectionProvider = null;
289
        }
290
        super.doDispose(); 
291
    }
292
    
293
    private ConnectionProvider getConnectionProvider(JDBCConnectionParameters connectionParameters) {
294
        if (this.connectionProvider == null) {
295
            if (this.getConnectionParameters() == null) {
296
                return null;
297
            }
298
            String key = this.getConnectionProviderKey(connectionParameters);
299
            this.connectionProvider = connectionProviders.get(key);
300
            if (this.connectionProvider == null || ((PostgreSQLConnectionProvider) this.connectionProvider).isDisposed()) {
301
                this.connectionProvider = new PostgreSQLConnectionProvider(this.getConnectionParameters());
302
                connectionProviders.put(key, this.connectionProvider);
303
            } else {
304
                DisposeUtils.bind(this.connectionProvider);
305
            }
306
        }
307
        return this.connectionProvider;
308
    }
309

  
310
    @Override
311
    public synchronized JDBCConnection  getConnection() throws AccessResourceException {
312
        try {
313
            PostgreSQLConnectionParameters connectionParameters = this.getConnectionParameters();
314
            JDBCConnection conn = (JDBCConnection) DataTransactionServices.getConnection(
315
                    transaction, 
316
                    this.getConnectionProviderKey(connectionParameters)
317
            );
318
            if( conn != null ) {
319
                return conn;
320
            }
321
            JDBCConnection connection = new JDBCConnectionBase(
322
                    this.transaction, 
323
                    this.getConnectionProvider(connectionParameters).getConnection(), 
324
                    this.getConnectionProviderKey(connectionParameters)
325
            );
326
            return connection;
327
        } catch (SQLException ex) {
328
            throw new AccessResourceException(PostgreSQLLibrary.NAME, ex);
329
        }
330
    }
331
    
332
    @Override
333
    public PostgreSQLConnectionParameters getConnectionParameters() {
334
        return (PostgreSQLConnectionParameters) super.getConnectionParameters();
335
    }
336
    
337
    @Override
338
    public String getConnectionURL() {
339
        return getConnectionURL(this.getConnectionParameters());
340
    }
341

  
342
    @Override
343
    protected String getResourceType() {
344
        return PostgreSQLLibrary.NAME;
345
    }
346

  
347
    @Override
348
    public String getProviderName() {
349
        return PostgreSQLLibrary.NAME;
350
    }
351

  
352
    @Override
353
    public JDBCSQLBuilderBase createSQLBuilder() {
354
        return new PostgreSQLBuilder(this);
355
    }
356
    
357
    @Override
358
    public OperationsFactory getOperations() {
359
        if (this.operationsFactory == null) {
360
            this.operationsFactory = new PostgreSQLOperationsFactory(this);
361
        }
362
        return operationsFactory;
363
    }
364

  
365
    @Override
366
    public GeometrySupportType getGeometrySupportType() {
367
        return GeometrySupportType.EWKB;
368
    }
369

  
370
    @Override
371
    public boolean hasSpatialFunctions() {
372
        return true;
373
    }
374

  
375
    @Override
376
    public boolean canWriteGeometry(int geometryType, int geometrySubtype) {
377
        return true;
378
    }
379

  
380
    @Override
381
    public String getQuoteForIdentifiers() {
382
        return "\"";
383
    }
384

  
385
    @Override
386
    public boolean allowAutomaticValues() {
387
        return true;
388
    }
389

  
390
    @Override
391
    public boolean supportOffsetInSelect() {
392
        return true;
393
    }
394

  
395
    @Override
396
    public String getQuoteForStrings() {
397
        return "'";
398
    }
399
    
400
    @Override
401
    public JDBCNewStoreParameters createNewStoreParameters() {
402
        return new PostgreSQLNewStoreParameters();
403
    }
404

  
405
    @Override
406
    public JDBCStoreParameters createOpenStoreParameters() {
407
        return new PostgreSQLStoreParameters();
408
    }
409

  
410
    @Override
411
    public JDBCServerExplorerParameters createServerExplorerParameters() {
412
        return new PostgreSQLServerExplorerParameters();
413
    }
414

  
415
    @Override
416
    public void fetchFeature(FeatureProvider feature, ResultSet rs, FeatureAttributeDescriptor[] columns, String[] extraValueNames) throws DataException {
417
        Object value;
418
        try {
419
            int rsIndex = 1;
420
            for (FeatureAttributeDescriptor column : columns) {
421
                switch (column.getType()) {
422
                    case DataTypes.GEOMETRY:
423
                        value = this.getGeometryFromColumn(rs, rsIndex++);
424
                        if (value != null){
425
                            ((Geometry)value).setProjection(column.getSRS());
426
                        }
427
                        break;
428
                    case DataTypes.BYTEARRAY:
429
                        value = rs.getBytes(rsIndex++);
430
                        break;
431
                    default:
432
                        value = rs.getObject(rsIndex++);
433
                        if (value instanceof Blob) {
434
                            Blob blob = (Blob) value;
435
                            value = blob.getBytes(1, (int) blob.length());
436
                            blob.free();
437
                        } else if (value instanceof Clob) {
438
                            Clob clob = (Clob) value;
439
                            value = new String(IOUtils.toCharArray(clob.getCharacterStream()));
440
                            clob.free();
441
                        }
442
                }
443
                feature.set(column.getIndex(), value);
444
            }
445
            if (ArrayUtils.isNotEmpty(extraValueNames)) {
446
                feature.setExtraValueNames(extraValueNames);
447
                for (int index = 0; index < extraValueNames.length; index++) {
448
                    value = rs.getObject(rsIndex++);
449
                    if (value instanceof Blob) {
450
                        Blob blob = (Blob) value;
451
                        value = blob.getBytes(0, (int) blob.length());
452
                        blob.free();
453
                    }
454
                    feature.setExtraValue(index, value);
455
                }
456
            }
457
        } catch (Exception ex) {
458
            throw new JDBCCantFetchValueException(ex);
459
        }
460
    }
461

  
462
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLServerExplorerFactory.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import org.apache.commons.lang3.StringUtils;
5
import org.gvsig.fmap.dal.DataServerExplorerParameters;
6
import org.gvsig.fmap.dal.exception.InitializeException;
7
import org.gvsig.fmap.dal.spi.DataServerExplorerProviderServices;
8
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
9
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
10
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParametersBase;
11
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
12
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
13
import org.gvsig.fmap.dal.store.jdbc2.impl.JDBCServerExplorerFactory;
14

  
15

  
16
public class PostgreSQLServerExplorerFactory extends JDBCServerExplorerFactory {
17

  
18
    private static final String NAME = PostgreSQLLibrary.NAME;
19
    
20
    public PostgreSQLServerExplorerFactory() {
21
        super(
22
            NAME,
23
            "PostgreSQL Server"
24
        );
25
    }
26

  
27
    public PostgreSQLServerExplorerFactory(String name) {
28
        // Cuando se instancia la factoria con un "name" que no es el de por
29
        // defecto, es para declarar "alias" para el ServerExplorer, normalmente
30
        // para mantener compatibilidad con versiones anteriores. 
31
        // Marcaremos la factoria como "hidden" para que no aparezca
32
        // en el interface de usuario.
33
        super(
34
            name,
35
            "PostgreSQL Server (for compatibility)",
36
            true
37
        );
38
    }
39

  
40
    @Override
41
    public JDBCServerExplorer create(
42
            DataServerExplorerParameters parameters, 
43
            DataServerExplorerProviderServices providerServices
44
        ) throws InitializeException {
45
        // Esto seria para convertir los parametros de gvSIG 2.3 a 2.4.
46
//        if( !StringUtils.equalsIgnoreCase(NAME, (CharSequence) parameters.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME)) ) {
47
//            parameters.setDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME, NAME);
48
//        }
49
        JDBCHelper helper = new PostgreSQLHelper((JDBCConnectionParameters) parameters);
50
        JDBCServerExplorer server = helper.createServerExplorer((JDBCServerExplorerParametersBase) parameters, 
51
                providerServices
52
        );
53
        return server;
54
    }
55
        
56

  
57
    @Override
58
    public JDBCServerExplorerParametersBase createParameters() {
59
        JDBCServerExplorerParametersBase params = new PostgreSQLServerExplorerParameters();
60
        return params;    
61
    }
62
    
63
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLStoreProviderFactory.java
1
package org.gvsig.postgresql.dal;
2

  
3
import java.util.Arrays;
4
import java.util.Collections;
5
import java.util.HashSet;
6
import java.util.Set;
7
import java.util.function.Function;
8
import org.gvsig.fmap.dal.DataParameters;
9
import static org.gvsig.fmap.dal.DataStoreProviderFactory.NO;
10
import static org.gvsig.fmap.dal.DataStoreProviderFactory.UNKNOWN;
11
import static org.gvsig.fmap.dal.DataStoreProviderFactory.YES;
12
import org.gvsig.fmap.dal.exception.InitializeException;
13
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
14
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
15
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParametersBase;
16
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
17
import org.gvsig.fmap.dal.store.jdbc2.JDBCStoreProvider;
18
import org.gvsig.fmap.dal.store.jdbc2.impl.JDBCStoreProviderFactoryBase;
19

  
20
public class PostgreSQLStoreProviderFactory extends JDBCStoreProviderFactoryBase {
21

  
22
    private static final Set<String> ALLOWED_FUNCTIONS = new HashSet<>(
23
            Arrays.asList(new String[]{
24
        "COUNT",
25
        "SUM",
26
        "MIN",
27
        "MAX"
28
    }
29
            )
30
    );
31
    private static final Set<String> DENIED_FUNCTIONS = Collections.EMPTY_SET;
32

  
33
    public PostgreSQLStoreProviderFactory() {
34
        super(
35
                PostgreSQLLibrary.NAME,
36
                "PostgreSQL store"
37
        );
38
    }
39

  
40
    @Override
41
    public JDBCStoreProvider createProvider(
42
            DataParameters parameters,
43
            DataStoreProviderServices providerServices
44
    ) throws InitializeException {
45
        JDBCHelper helper = new PostgreSQLHelper((JDBCConnectionParameters) parameters);
46
        JDBCStoreProvider provider = helper.createProvider((JDBCStoreParametersBase) parameters,
47
                providerServices
48
        );
49
        return provider;
50
    }
51

  
52
    @Override
53
    public JDBCStoreParametersBase createParameters() {
54
        JDBCStoreParametersBase params = new PostgreSQLStoreParameters();
55
        return params;
56
    }
57

  
58
    @Override
59
    public Function<String, Integer> allowFunction() {
60
        return (Function<String, Integer>) (String name) -> {
61
            if (ALLOWED_FUNCTIONS.contains(name)) {
62
                return YES;
63
            }
64
            if (DENIED_FUNCTIONS.contains(name)) {
65
                return NO;
66
            }
67
            return UNKNOWN;
68
        };
69
    }
70

  
71
    @Override
72
    public int allowGroupBy() {
73
        return YES;
74
    }
75

  
76
    @Override
77
    public int hasVectorialSupport() {
78
        return YES;
79
    }
80

  
81
    @Override
82
    public int hasRasterSupport() {
83
        return NO;
84
    }
85

  
86
    @Override
87
    public int hasTabularSupport() {
88
        return YES;
89
    }
90

  
91
    @Override
92
    public int hasSQLSupport() {
93
        return YES;
94
    }
95
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/operations/PostgreSQLFetchFeatureTypeOperation.java
1

  
2
package org.gvsig.postgresql.dal.operations;
3

  
4
import java.sql.ResultSet;
5
import java.sql.ResultSetMetaData;
6
import java.sql.SQLException;
7
import java.sql.Statement;
8
import java.util.HashMap;
9
import java.util.List;
10
import java.util.Map;
11
import org.apache.commons.lang3.StringUtils;
12
import org.cresques.cts.IProjection;
13
import org.gvsig.expressionevaluator.ExpressionBuilder;
14
import org.gvsig.fmap.dal.DataTypes;
15
import org.gvsig.fmap.dal.exception.DataException;
16
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.EditableFeatureType;
18
import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection;
19
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
20
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils;
21
import org.gvsig.fmap.dal.store.jdbc2.OperationsFactory.TableReference;
22
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase;
23
import org.gvsig.fmap.dal.store.jdbc2.spi.SRSSolver;
24
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
25
import org.gvsig.fmap.geom.Geometry;
26
import org.gvsig.fmap.geom.GeometryLocator;
27
import org.gvsig.fmap.geom.GeometryManager;
28
import org.gvsig.fmap.geom.type.GeometryType;
29
import org.gvsig.postgresql.dal.PostgreSQLBuilder;
30

  
31
@SuppressWarnings("UseSpecificCatch")
32
public class PostgreSQLFetchFeatureTypeOperation extends FetchFeatureTypeOperation {
33

  
34
    private static Map<String,GeometryType>databaseGeometryTypes = null;
35
    
36
    public PostgreSQLFetchFeatureTypeOperation(
37
            JDBCHelper helper
38
        ) {
39
        super(helper);
40
    }
41

  
42
    private GeometryType getGT(
43
            GeometryManager manager, 
44
            int type, 
45
            int subtype
46
        ) {
47
        try {
48
            return manager.getGeometryType(type, subtype);
49
        } catch (Exception ex) {
50
            return null;
51
        }
52
    }
53
    
54
    public PostgreSQLFetchFeatureTypeOperation(
55
            JDBCHelper helper,
56
            EditableFeatureType featureType,
57
            TableReference table,
58
            List<String> primaryKeys,
59
            String defaultGeometryColumn,
60
            IProjection crs,
61
            int geometryType,
62
            int geometrySubtype
63
    ) {
64
        super(helper, featureType, table, primaryKeys, defaultGeometryColumn, crs, geometryType, geometrySubtype);
65
    }
66
    
67

  
68
    @Override
69
    public void fetch(JDBCConnection conn) throws DataException {
70
        super.fetch(conn);
71
    }
72

  
73
    @Override
74
    protected int getDataTypeFromMetadata(
75
            ResultSetMetaData rsMetadata,
76
            int colIndex
77
        ) throws SQLException {
78

  
79
        return super.getDataTypeFromMetadata(rsMetadata, colIndex);
80
    }
81
    
82
    @Override
83
    public String getSQLToRetrievePrimaryKeysFromInformationSchema() throws SQLException {
84
        PostgreSQLBuilder sqlbuilder = (PostgreSQLBuilder) this.createSQLBuilder();
85
        ExpressionBuilder expbuilder = sqlbuilder.expression();
86
        
87
        String column_COLUMN_NAME = "column_name";
88
        String column_CONSTRAINT_TYPE = "constraint_type";
89
        
90
        if( sqlbuilder.getDatabaseVersion().getMajor()<10 ) {
91
            column_COLUMN_NAME = "COLUMN_NAME";
92
            column_CONSTRAINT_TYPE = "CONSTRAINT_TYPE";
93
        }
94
        sqlbuilder.select().column().name(column_COLUMN_NAME);
95
        sqlbuilder.select().column().name(column_CONSTRAINT_TYPE);
96
        sqlbuilder.select().from().custom(
97
                "INFORMATION_SCHEMA.table_constraints t_cons "
98
                + "inner join INFORMATION_SCHEMA.key_column_usage c on "
99
                + "c.constraint_catalog = t_cons.constraint_catalog and "
100
                + "c.table_schema = t_cons.table_schema and "
101
                + "c.table_name = t_cons.table_name and "
102
                + "c.constraint_name = t_cons.constraint_name "
103
        );
104
        sqlbuilder.select().where().set(
105
                expbuilder.like(
106
                        expbuilder.custom("c.TABLE_NAME"), 
107
                        expbuilder.constant(table.getTable())
108
                )
109
        );
110
        if (table.hasSchema()) {
111
            sqlbuilder.select().where().and(
112
                    expbuilder.like(
113
                            expbuilder.custom("c.TABLE_SCHEMA"),
114
                            expbuilder.constant(table.getSchema())
115
                    )
116
            );
117
        }
118
//        if (catalog != null) {
119
//            sqlbuilder.select().where().and(
120
//                    expbuilder.like(
121
//                            expbuilder.custom("c.CONSTRAINT_CATALOG"),
122
//                            expbuilder.constant(catalog)
123
//                    )
124
//            );
125
//        }
126
        sqlbuilder.select().where().and(
127
                expbuilder.eq(
128
                        expbuilder.column(column_CONSTRAINT_TYPE),
129
                        expbuilder.constant("PRIMARY KEY")
130
                )
131
        );
132
        return sqlbuilder.toString();
133
    }
134
        
135
    @Override
136
    protected void fetchGeometryTypeAndSRS(
137
            EditableFeatureAttributeDescriptor attr,
138
            ResultSetMetaData rsMetadata,
139
            int colIndex
140
        ) {
141
        if( attr.getType()!=DataTypes.GEOMETRY ) {
142
            return;
143
        }
144
        try {
145
            JDBCSQLBuilderBase sqlbuilder = this.createSQLBuilder();
146
            ExpressionBuilder expbuilder = sqlbuilder.expression();
147
            
148
            sqlbuilder.select().column().name("f_table_catalog");
149
            sqlbuilder.select().column().name("f_table_schema");
150
            sqlbuilder.select().column().name("f_table_name");
151
            sqlbuilder.select().column().name("f_geometry_column");
152
            sqlbuilder.select().column().name("coord_dimension");
153
            sqlbuilder.select().column().name("srid");
154
            sqlbuilder.select().column().name("type");
155
            sqlbuilder.select().where().set(
156
                    expbuilder.eq(
157
                            expbuilder.column("f_table_name"),
158
                            expbuilder.constant(this.getTable().getTable())
159
                    )
160
            );                
161
            sqlbuilder.select().where().and(
162
                    expbuilder.eq(
163
                            expbuilder.column("f_geometry_column"),
164
                            expbuilder.constant(attr.getName())
165
                    )
166
            );         
167
            sqlbuilder.select().from().table().name("geometry_columns");
168
            Statement st = null;
169
            ResultSet rs = null;
170
            
171
            Integer srsid = null;
172
            String geometryTypeName = null;
173
            try {
174
                st = this.getConnection().createStatement();
175
                rs = JDBCUtils.executeQuery(st, sqlbuilder.toString());
176
                if (rs.next()) {
177
                    srsid = rs.getInt("srid");
178
                    geometryTypeName = rs.getString("type");
179
                }
180
            } finally {
181
                JDBCUtils.closeQuietly(rs);
182
                JDBCUtils.closeQuietly(st);
183
            }
184
            if( !StringUtils.isEmpty(geometryTypeName) ) {
185
                GeometryType gt = getGeometryTypeFromDatabaseTypeName(geometryTypeName);
186
                attr.setGeometryType(gt);
187
            }
188
            if( srsid!=null ) {
189
                SRSSolver srssolver = this.helper.getSRSSolver();
190
                attr.setSRS(srssolver.getProjection(this.getConnection(),srsid));
191
            }
192
        } catch (Exception ex) {
193
            LOGGER.debug("Can't get geometry type and srs from column '"+attr.getName()+"'.",ex);
194
        }
195
    }
196

  
197
    private GeometryType getGeometryTypeFromDatabaseTypeName(String typeName) {
198
        if( databaseGeometryTypes==null ) {
199
            GeometryManager manager = GeometryLocator.getGeometryManager();
200
            databaseGeometryTypes = new HashMap<>();
201
            databaseGeometryTypes.put("POINT", getGT(manager, Geometry.TYPES.POINT,Geometry.SUBTYPES.GEOM2D));
202
            databaseGeometryTypes.put("POINTZ", getGT(manager, Geometry.TYPES.POINT,Geometry.SUBTYPES.GEOM3D));
203
            databaseGeometryTypes.put("POINTM", getGT(manager, Geometry.TYPES.POINT,Geometry.SUBTYPES.GEOM2DM));
204
            databaseGeometryTypes.put("POINTZM", getGT(manager, Geometry.TYPES.POINT,Geometry.SUBTYPES.GEOM3DM));
205
            
206
            databaseGeometryTypes.put("LINESTRING", getGT(manager, Geometry.TYPES.LINE,Geometry.SUBTYPES.GEOM2D));
207
            databaseGeometryTypes.put("LINESTRINGZ", getGT(manager, Geometry.TYPES.LINE,Geometry.SUBTYPES.GEOM3D));
208
            databaseGeometryTypes.put("LINESTRINGM", getGT(manager, Geometry.TYPES.LINE,Geometry.SUBTYPES.GEOM2DM));
209
            databaseGeometryTypes.put("LINESTRINGZM", getGT(manager, Geometry.TYPES.LINE,Geometry.SUBTYPES.GEOM3DM));
210
            
211
            databaseGeometryTypes.put("POLYGON", getGT(manager, Geometry.TYPES.POLYGON,Geometry.SUBTYPES.GEOM2D));
212
            databaseGeometryTypes.put("POLYGONZ", getGT(manager, Geometry.TYPES.POLYGON,Geometry.SUBTYPES.GEOM3D));
213
            databaseGeometryTypes.put("POLYGONM", getGT(manager, Geometry.TYPES.POLYGON,Geometry.SUBTYPES.GEOM2DM));
214
            databaseGeometryTypes.put("POLYGONZM", getGT(manager, Geometry.TYPES.POLYGON,Geometry.SUBTYPES.GEOM3DM));
215

  
216
            databaseGeometryTypes.put("MULTIPOINT", getGT(manager, Geometry.TYPES.MULTIPOINT,Geometry.SUBTYPES.GEOM2D));
217
            databaseGeometryTypes.put("MULTIPOINTZ", getGT(manager, Geometry.TYPES.MULTIPOINT,Geometry.SUBTYPES.GEOM3D));
218
            databaseGeometryTypes.put("MULTIPOINTM", getGT(manager, Geometry.TYPES.MULTIPOINT,Geometry.SUBTYPES.GEOM2DM));
219
            databaseGeometryTypes.put("MULTIPOINTZM", getGT(manager, Geometry.TYPES.MULTIPOINT,Geometry.SUBTYPES.GEOM3DM));
220

  
221
            databaseGeometryTypes.put("MULTILINESTRING", getGT(manager, Geometry.TYPES.MULTILINE,Geometry.SUBTYPES.GEOM2D));
222
            databaseGeometryTypes.put("MULTILINESTRINGZ", getGT(manager, Geometry.TYPES.MULTILINE,Geometry.SUBTYPES.GEOM3D));
223
            databaseGeometryTypes.put("MULTILINESTRINGM", getGT(manager, Geometry.TYPES.MULTILINE,Geometry.SUBTYPES.GEOM2DM));
224
            databaseGeometryTypes.put("MULTILINESTRINGZM", getGT(manager, Geometry.TYPES.MULTILINE,Geometry.SUBTYPES.GEOM3DM));
225

  
226
            databaseGeometryTypes.put("MULTIPOLYGON", getGT(manager, Geometry.TYPES.MULTIPOLYGON,Geometry.SUBTYPES.GEOM2D));
227
            databaseGeometryTypes.put("MULTIPOLYGONZ", getGT(manager, Geometry.TYPES.MULTIPOLYGON,Geometry.SUBTYPES.GEOM3D));
228
            databaseGeometryTypes.put("MULTIPOLYGONM", getGT(manager, Geometry.TYPES.MULTIPOLYGON,Geometry.SUBTYPES.GEOM2DM));
229
            databaseGeometryTypes.put("MULTIPOLYGONZM", getGT(manager, Geometry.TYPES.MULTIPOLYGON,Geometry.SUBTYPES.GEOM3DM));
230

  
231
            databaseGeometryTypes.put("GEOMETRY", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM2D));
232
            databaseGeometryTypes.put("GEOMETRYZ", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM3D));
233
            databaseGeometryTypes.put("GEOMETRYM", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM2DM));
234
            databaseGeometryTypes.put("GEOMETRYZM", getGT(manager, Geometry.TYPES.GEOMETRY,Geometry.SUBTYPES.GEOM3DM));
235
        }
236
        return databaseGeometryTypes.get(typeName);
237
    }
238
    
239
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/operations/PostgreSQLOperationsFactory.java
1

  
2
package org.gvsig.postgresql.dal.operations;
3

  
4
import java.util.List;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.fmap.dal.feature.EditableFeatureType;
7
import org.gvsig.fmap.dal.store.jdbc2.JDBCHelper;
8
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.FetchFeatureTypeOperation;
9
import org.gvsig.fmap.dal.store.jdbc2.spi.operations.OperationsFactoryBase;
10

  
11

  
12
public class PostgreSQLOperationsFactory extends OperationsFactoryBase {
13
    
14
    public PostgreSQLOperationsFactory(JDBCHelper helper) {
15
        super(helper);
16
    }
17

  
18
    @Override
19
    public FetchFeatureTypeOperation createFetchFeatureType(EditableFeatureType type, TableReference table, List<String> primaryKeys, String defaultGeometryField, IProjection crs) {
20
        return new PostgreSQLFetchFeatureTypeOperation(
21
                helper, type, table, primaryKeys, 
22
                defaultGeometryField, crs, -1, -1
23
        );
24
    }  
25

  
26
    @Override
27
    public FetchFeatureTypeOperation createFetchFeatureType(EditableFeatureType type, TableReference table, List<String> primaryKeys, String defaultGeometryField, IProjection crs, int geometryType, int geometrySubtype) {
28
        return new PostgreSQLFetchFeatureTypeOperation(
29
                helper, type, table, primaryKeys, 
30
                defaultGeometryField, crs, geometryType, geometrySubtype
31
        );
32
    }  
33

  
34
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLStoreParameters.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
* MA  02110-1301, USA.
20
*
21
 */
22
package org.gvsig.postgresql.dal;
23

  
24
import org.gvsig.fmap.dal.OpenDataStoreParameters;
25
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
26
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParametersBase;
27

  
28
public class PostgreSQLStoreParameters extends JDBCStoreParametersBase implements PostgreSQLConnectionParameters, OpenDataStoreParameters {
29

  
30
    private final PostgreSQLConnectionParametersHelper helper;
31
    
32
    public PostgreSQLStoreParameters() {
33
        super(
34
                PostgreSQLLibrary.NAME + "StoreParameters",
35
                PostgreSQLLibrary.NAME
36
        );
37
        this.helper = new PostgreSQLConnectionParametersHelper(this);
38
    }
39

  
40
    @Override
41
    public String getUrl() {
42
        return this.helper.getUrl();
43
    }
44
    
45
    @Override
46
    public void validate() throws ValidateDataParametersException {
47
        this.helper.validate();
48
        super.validate();
49
    }
50

  
51
    @Override
52
    public boolean getUseSSL() {
53
        return this.helper.getUseSSL();
54
    }
55

  
56
    @Override
57
    public int getMaxIdle() {
58
        return this.helper.getMaxIdle();
59
    }
60

  
61
    public void setUseSSL(boolean v) {
62
        this.helper.setUseSSL(v);
63
    }
64

  
65
    @Override
66
    public int getNetworkTimeout() {
67
        return this.helper.getNetworkTimeout();
68
    }
69
    
70
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLConnectionParameters.java
1
package org.gvsig.postgresql.dal;
2

  
3
import org.gvsig.fmap.dal.resource.db.DBParameters;
4
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
5

  
6
public interface PostgreSQLConnectionParameters extends JDBCConnectionParameters, DBParameters {
7

  
8
    public static final String USESSL_PARAMTER_NAME = "UseSSL";
9
    public static final String MAXIDLE_PARAMTER_NAME = "maxIdle";
10
    public static final String NETWORK_TIMEOUT = "networkTimeout";
11

  
12
    public boolean getUseSSL();
13

  
14
    public int getMaxIdle();
15

  
16
    public int getNetworkTimeout();
17
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLConnectionParametersHelper.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import org.apache.commons.lang3.StringUtils;
5
import org.gvsig.fmap.dal.DataParameters;
6
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
7
import org.gvsig.fmap.dal.store.jdbc.JDBCConnectionParameters;
8

  
9

  
10
public class PostgreSQLConnectionParametersHelper {
11

  
12
    private final JDBCConnectionParameters parameters;
13
    
14
    public PostgreSQLConnectionParametersHelper(JDBCConnectionParameters parameters) {
15
        this.parameters = parameters;
16
    }
17

  
18
    public String getUrl() {
19
        String url = (String) this.getDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME);
20
        if( StringUtils.isBlank(url) ) {
21
            url = PostgreSQLHelper.getConnectionURL((PostgreSQLConnectionParameters) this.parameters);
22
            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME,url);
23
        }
24
        return url;
25
    }
26
    
27
    public void validate() throws ValidateDataParametersException {
28
        if (this.getDynValue(JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME) == null) {
29
            this.setDynValue(
30
                JDBCConnectionParameters.JDBC_DRIVER_CLASS_PARAMTER_NAME,
31
                PostgreSQLHelper.POSTGRESQL_JDBC_DRIVER
32
            );
33
        }
34
        if( this.getDynValue(JDBCConnectionParameters.PORT_PARAMTER_NAME)==null ) {
35
            this.setDynValue(JDBCConnectionParameters.PORT_PARAMTER_NAME, 5432);
36
        }
37
		if ( StringUtils.isEmpty((CharSequence) this.getDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME))) {
38
            String url = PostgreSQLHelper.getConnectionURL(
39
                parameters.getHost(),
40
                parameters.getPort(),
41
                parameters.getDBName()
42
            );
43
            this.setDynValue(JDBCConnectionParameters.URL_PARAMTER_NAME, url);
44
		}
45
    }
46

  
47
    private Object getDynValue(String name) {
48
        return ((DataParameters)this.parameters).getDynValue(name);
49
    }
50
    
51
    private void setDynValue(String name, Object value) {
52
        ((DataParameters)this.parameters).setDynValue(name,value);
53
    }
54
    
55
    public int getMaxIdle() {
56
        return (int) this.getDynValue(PostgreSQLConnectionParameters.MAXIDLE_PARAMTER_NAME);
57
    }
58

  
59
    public boolean getUseSSL() {
60
        return (boolean) this.getDynValue(PostgreSQLConnectionParameters.USESSL_PARAMTER_NAME);
61
    }
62

  
63
    public void setUseSSL(boolean v) {
64
        this.setDynValue(PostgreSQLConnectionParameters.USESSL_PARAMTER_NAME, v);
65
    }
66

  
67
    public int getNetworkTimeout() {
68
        return (int) this.getDynValue(PostgreSQLConnectionParameters.NETWORK_TIMEOUT);
69
    }
70

  
71
}
tags/org.gvsig.postgresql-2.0.263/org.gvsig.postgresql.provider/src/main/java/org/gvsig/postgresql/dal/PostgreSQLLibrary.java
1

  
2
package org.gvsig.postgresql.dal;
3

  
4
import org.gvsig.fmap.dal.DALLibrary;
5
import org.gvsig.fmap.dal.DALLocator;
6
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
7
import org.gvsig.fmap.dal.store.db.DBHelper;
8
import org.gvsig.fmap.dal.store.jdbc2.JDBCLibrary;
9
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCStoreProviderBase;
10
import org.gvsig.json.Json;
11
import org.gvsig.metadata.exceptions.MetadataException;
12
import org.gvsig.tools.library.AbstractLibrary;
13
import org.gvsig.tools.library.LibraryException;
14

  
15

  
16
public class PostgreSQLLibrary extends AbstractLibrary {
17

  
18
    public static final String NAME = "PostgreSQL";
19

  
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff