public abstract class DirectEpsgFactory extends DirectAuthorityFactory implements CRSAuthorityFactory, CSAuthorityFactory, DatumAuthorityFactory, CoordinateOperationAuthorityFactory
The EPSG database is freely available at http://www.epsg.org. Current version of this class requires EPSG database version 6.6 or above.
This factory doesn't cache any result. Any call to a createFoo method will send a new
query to the EPSG database. For caching, this factory should be wrapped in some buffered factory
like ThreadedEpsgFactory.
This class is abstract - please see the subclasses for dialect specific implementations:
AccessDialectEpsgFactory
AnsiDialectEpsgFactory
OracleDialectEpsgFactory
"27581" both fetchs the same object. However, names may be ambiguous
since the same name may be used for more than one object. This is the case of "WGS 84" for
example. If such an ambiguity is found, an exception will be thrown. If names are not wanted as a
legal EPSG code, subclasses can override the isPrimaryKey(java.lang.String) method.factoriesLOGGERhints, MAXIMUM_PRIORITY, MINIMUM_PRIORITY, NORMAL_PRIORITY, priority| Constructor and Description |
|---|
DirectEpsgFactory(Hints userHints,
Connection connection)
Constructs an authority factory using the specified connection.
|
DirectEpsgFactory(Hints userHints,
DataSource dataSource)
Constructs an authority factory using the specified connection.
|
| Modifier and Type | Method and Description |
|---|---|
protected abstract String |
adaptSQL(String statement)
Invoked when a new
PreparedStatement is about to be created from a SQL string. |
CoordinateOperation |
createCoordinateOperation(String code)
Returns a coordinate operation from a code.
|
CoordinateReferenceSystem |
createCoordinateReferenceSystem(String code)
Returns a coordinate reference system from a code.
|
CoordinateSystem |
createCoordinateSystem(String code)
Returns a coordinate system from a code.
|
CoordinateSystemAxis |
createCoordinateSystemAxis(String code)
Returns a coordinate system axis from a code.
|
Datum |
createDatum(String code)
Returns a datum from a code.
|
Ellipsoid |
createEllipsoid(String code)
Returns an ellipsoid from a code.
|
Extent |
createExtent(String code)
Returns an area of use.
|
Set |
createFromCoordinateReferenceSystemCodes(String sourceCode,
String targetCode)
Creates operations from coordinate reference system codes.
|
IdentifiedObject |
createObject(String code)
Returns an arbitrary object from a code.
|
OperationMethod |
createOperationMethod(String code)
Returns an operation method from a code.
|
ParameterDescriptor |
createParameterDescriptor(String code)
Returns a parameter descriptor from a code.
|
PrimeMeridian |
createPrimeMeridian(String code)
Returns a prime meridian, relative to Greenwich.
|
Unit<?> |
createUnit(String code)
Returns an unit from a code.
|
void |
dispose()
Disposes any resources hold by this object.
|
protected void |
finalize()
Invokes
dispose() when this factory is garbage collected. |
Citation |
getAuthority()
Returns the authority for this EPSG database.
|
Set<String> |
getAuthorityCodes(Class<? extends IdentifiedObject> type)
Returns the set of authority codes of the given type.
|
String |
getBackingStoreDescription()
Returns a description of the database engine.
|
protected Connection |
getConnection()
Access to the connection used by this EpsgFactory.
|
InternationalString |
getDescriptionText(String code)
Gets a description of the object corresponding to a code.
|
IdentifiedObjectFinder |
getIdentifiedObjectFinder(Class type)
Returns a finder which can be used for looking up unidentified objects.
|
Map<RenderingHints.Key,?> |
getImplementationHints()
Returns the implementation hints for this factory.
|
String |
getValidationQuery()
Returns the current validation query
|
protected boolean |
isConnectionValid(Connection conn)
Tests if the connection is valid by running the user provided validation query, if any.
|
protected boolean |
isPrimaryKey(String code)
Returns
true if the specified code may be a primary key in some table. |
void |
setValidationQuery(String validationQuery)
Sets the query it's run before using connection and prepared statements in order to check the
connection is still valid.
|
protected void |
shutdown(boolean active)
Shutdown the database engine.
|
createCartesianCS, createCompoundCRS, createCylindricalCS, createDerivedCRS, createEllipsoidalCS, createEngineeringCRS, createEngineeringDatum, createGeocentricCRS, createGeodeticDatum, createGeographicCRS, createImageCRS, createImageDatum, createPolarCS, createProjectedCRS, createSphericalCS, createTemporalCRS, createTemporalDatum, createTimeCS, createVerticalCRS, createVerticalCS, createVerticalDatum, noSuchAuthorityCode, trimAuthorityensureNonNull, getVendoraddImplementationHints, equals, getPriority, hashCode, onDeregistration, onRegistration, toStringcreateCompoundCRS, createDerivedCRS, createEngineeringCRS, createGeocentricCRS, createGeographicCRS, createImageCRS, createProjectedCRS, createTemporalCRS, createVerticalCRScreateCartesianCS, createCylindricalCS, createEllipsoidalCS, createPolarCS, createSphericalCS, createTimeCS, createVerticalCScreateEngineeringDatum, createGeodeticDatum, createImageDatum, createTemporalDatum, createVerticalDatumpublic DirectEpsgFactory(Hints userHints, Connection connection)
userHints - The underlying factories used for objects creation.connection - The connection to the underlying EPSG database.public DirectEpsgFactory(Hints userHints, DataSource dataSource)
userHints - The underlying factories used for objects creation.dataSource - The data source connecting to the underlying EPSG databasepublic Citation getAuthority()
getAuthority in interface AuthorityFactorygetAuthority in class AbstractAuthorityFactorypublic String getBackingStoreDescription() throws FactoryException
getBackingStoreDescription in class AbstractAuthorityFactorynull.FactoryException - if the database's metadata can't be fetched.public Map<RenderingHints.Key,?> getImplementationHints()
VERSION.getImplementationHints in interface FactorygetImplementationHints in class DirectAuthorityFactorypublic Set<String> getAuthorityCodes(Class<? extends IdentifiedObject> type) throws FactoryException
NOTE: This method returns a living connection to the underlying database. This means that the returned set can executes efficiently idioms like the following one:
But do not keep the returned reference for a long time. The returned set should stay valid even if retained for a long time (as long as this factory has not been disposed), but the existence of those long-living connections may prevent this factory to release some resources. If the set of codes is needed for a long time, copy their values in an other collection object.getAuthorityCodes(typeothers)
getAuthorityCodes in interface AuthorityFactorytype - The spatial reference objects type (may be Object.class).FactoryException - if access to the underlying database failed.public InternationalString getDescriptionText(String code) throws FactoryException
getDescriptionText in interface AuthorityFactorycode - Value allocated by authority.null if the object corresponding to the
specified code has no description.NoSuchAuthorityCodeException - if the specified code was not found.FactoryException - if the query failed for some other reason.public IdentifiedObject createObject(String code) throws FactoryException
createCoordinateReferenceSystem(java.lang.String), createCoordinateSystem(java.lang.String), createDatum(java.lang.String),
createEllipsoid(java.lang.String), or createUnit(java.lang.String) methods according the object type.createObject in interface AuthorityFactorycreateObject in class AbstractAuthorityFactorycode - The EPSG value.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.AbstractAuthorityFactory.createCoordinateReferenceSystem(java.lang.String),
AbstractAuthorityFactory.createDatum(java.lang.String),
AbstractAuthorityFactory.createEllipsoid(java.lang.String),
AbstractAuthorityFactory.createUnit(java.lang.String)public Unit<?> createUnit(String code) throws FactoryException
createUnit in interface CSAuthorityFactorycreateUnit in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.public Ellipsoid createEllipsoid(String code) throws FactoryException
createEllipsoid in interface DatumAuthorityFactorycreateEllipsoid in class AbstractAuthorityFactorycode - The EPSG value.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.AbstractAuthorityFactory.createGeodeticDatum(java.lang.String)public PrimeMeridian createPrimeMeridian(String code) throws FactoryException
createPrimeMeridian in interface DatumAuthorityFactorycreatePrimeMeridian in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.AbstractAuthorityFactory.createGeodeticDatum(java.lang.String)public Extent createExtent(String code) throws FactoryException
createExtent in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.public Datum createDatum(String code) throws FactoryException
createDatum in interface DatumAuthorityFactorycreateDatum in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.AbstractAuthorityFactory.createGeodeticDatum(java.lang.String),
AbstractAuthorityFactory.createVerticalDatum(java.lang.String),
AbstractAuthorityFactory.createTemporalDatum(java.lang.String)public CoordinateSystemAxis createCoordinateSystemAxis(String code) throws FactoryException
createCoordinateSystemAxis in interface CSAuthorityFactorycreateCoordinateSystemAxis in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if the specified code was not found.FactoryException - if the object creation failed for some other reason.public CoordinateSystem createCoordinateSystem(String code) throws FactoryException
createCoordinateSystem in interface CSAuthorityFactorycreateCoordinateSystem in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.public CoordinateReferenceSystem createCoordinateReferenceSystem(String code) throws FactoryException
createCoordinateReferenceSystem in interface CRSAuthorityFactorycreateCoordinateReferenceSystem in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.AbstractAuthorityFactory.createGeographicCRS(java.lang.String),
AbstractAuthorityFactory.createProjectedCRS(java.lang.String),
AbstractAuthorityFactory.createVerticalCRS(java.lang.String),
AbstractAuthorityFactory.createTemporalCRS(java.lang.String),
AbstractAuthorityFactory.createCompoundCRS(java.lang.String)public ParameterDescriptor createParameterDescriptor(String code) throws FactoryException
createParameterDescriptor in class AbstractAuthorityFactorycode - The parameter descriptor code allocated by EPSG authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.public OperationMethod createOperationMethod(String code) throws FactoryException
createOperationMethod in class AbstractAuthorityFactorycode - The operation method code allocated by EPSG authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.public CoordinateOperation createCoordinateOperation(String code) throws FactoryException
createCoordinateOperation in interface CoordinateOperationAuthorityFactorycreateCoordinateOperation in class AbstractAuthorityFactorycode - Value allocated by authority.NoSuchAuthorityCodeException - if this method can't find the requested code.FactoryException - if some other kind of failure occured in the backing store. This
exception usually have SQLException as its cause.public Set createFromCoordinateReferenceSystemCodes(String sourceCode, String targetCode) throws FactoryException
createFromCoordinateReferenceSystemCodes in interface CoordinateOperationAuthorityFactorycreateFromCoordinateReferenceSystemCodes in class AbstractAuthorityFactorysourceCode - Coded value of source coordinate reference system.targetCode - Coded value of target coordinate reference system.sourceCRS to targetCRS.FactoryException - if the object creation failed.public IdentifiedObjectFinder getIdentifiedObjectFinder(Class type) throws FactoryException
getIdentifiedObjectFinder in class AbstractAuthorityFactorytype - The type of objects to look for.FactoryException - if the finder can not be created.protected abstract String adaptSQL(String statement)
PreparedStatement is about to be created from a SQL string. Since
the EPSG database is available mainly in MS-Access format,
SQL statements are formatted using some syntax specific to this particular database software
(for example "SELECT * FROM [Coordinate Reference System]"). When prociding
subclass targeting another database vendor, then this method should be overridden in order to
adapt the local SQL syntax.
For example a subclass connecting to a PostgreSQL database could replace all spaces (" ") between watching braces ("[" and "]") by underscore ("_").
statement - The statement in MS-Access syntax.protected boolean isPrimaryKey(String code) throws FactoryException
true if the specified code may be a primary key in some table. This method do
not needs to checks any entry in the database. It should just checks from the syntax if the
code looks like a valid EPSG identifier. The default implementation returns true if
all non-space characters are digits.
When this method returns false, some createFoo(...) methods look for the
code in the name column instead of the primary key column. This allows to accept the
"NTF (Paris) / France I" string (for example) in addition to the "27581"
primary key. Both should fetch the same object.
If this method returns true in all cases, then this factory never search for
matching names. In such case, an appropriate exception will be thrown in createFoo(...) methods if the code is not found in the primary key column. Subclasses can
overrides this method that way if this is the intended behavior.
code - The code the inspect.true if the code is probably a primary key.FactoryException - if an unexpected error occured while inspecting the code.public void dispose()
throws FactoryException
dispose in class AbstractAuthorityFactoryFactoryException - if an error occured while closing the connection.protected void shutdown(boolean active)
throws SQLException
ThreadedEpsgFactory at
JVM shutdown: one time before the connection is closed, and a second time
after. This shutdown hook is usefull for embedded database engine starting a
server process in addition to the client process. Just closing the connection is not enough
for them. Example:
"SHUTDOWN" statement using the
connection before it is closed.
The default implementation does nothing, which is suffisient for implementations connecting to a distant server (i.e. non-embedded database engine), for example MS-Access or PostgreSQL.
active - true if the connection is alive, or false
otherwise. This method is invoked first with active set to true, then a
second time with active set to false.SQLException - if this method failed to shutdown the database engine.protected final void finalize()
throws Throwable
dispose() when this factory is garbage collected.protected Connection getConnection() throws SQLException
SQLExceptionprotected boolean isConnectionValid(Connection conn)
conn - The connection to be validatedpublic String getValidationQuery()
public void setValidationQuery(String validationQuery)
validationQuery - Copyright © 1996–2019 Geotools. All rights reserved.