in endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/factory/sql/EPSGDataAccess.java [2120:2237]
public synchronized CoordinateSystem createCoordinateSystem(final String code)
throws NoSuchAuthorityCodeException, FactoryException
{
ArgumentChecks.ensureNonNull("code", code);
CoordinateSystem returnValue = null;
try (ResultSet result = executeQuery("Coordinate System", "COORD_SYS_CODE", "COORD_SYS_NAME",
"SELECT COORD_SYS_CODE," +
" COORD_SYS_NAME," +
" COORD_SYS_TYPE," +
" DIMENSION," +
" REMARKS," +
" DEPRECATED" +
" FROM [Coordinate System]" +
" WHERE COORD_SYS_CODE = ?", code))
{
while (result.next()) {
final Integer epsg = getInteger (code, result, 1);
final String name = getString (code, result, 2);
final String type = getString (code, result, 3);
final int dimension = getInteger (code, result, 4);
final String remarks = getOptionalString (result, 5);
final boolean deprecated = getOptionalBoolean(result, 6);
final CoordinateSystemAxis[] axes = createCoordinateSystemAxes(epsg, dimension);
@SuppressWarnings("LocalVariableHidesMemberVariable")
final Map<String,Object> properties = createProperties("Coordinate System", name, epsg, remarks, deprecated); // Must be after axes.
/*
* The following switch statement should have a case for all "epsg_cs_kind" values enumerated
* in the "EPSG_Prepare.sql" file, except that the values in this Java code are in lower cases.
*/
final CSFactory csFactory = owner.csFactory;
CoordinateSystem cs = null;
switch (type.toLowerCase(Locale.US)) {
case WKTKeywords.ellipsoidal: {
switch (dimension) {
case 2: cs = csFactory.createEllipsoidalCS(properties, axes[0], axes[1]); break;
case 3: cs = csFactory.createEllipsoidalCS(properties, axes[0], axes[1], axes[2]); break;
}
break;
}
case "cartesian": { // Need lower-case "c"
switch (dimension) {
case 2: cs = csFactory.createCartesianCS(properties, axes[0], axes[1]); break;
case 3: cs = csFactory.createCartesianCS(properties, axes[0], axes[1], axes[2]); break;
}
break;
}
case WKTKeywords.spherical: {
switch (dimension) {
case 2: if (csFactory instanceof GeodeticObjectFactory) {
cs = ((GeodeticObjectFactory) csFactory).createSphericalCS(properties, axes[0], axes[1]);
}
break;
case 3: cs = csFactory.createSphericalCS(properties, axes[0], axes[1], axes[2]); break;
}
break;
}
case WKTKeywords.vertical:
case "gravity-related": {
switch (dimension) {
case 1: cs = csFactory.createVerticalCS(properties, axes[0]); break;
}
break;
}
case "time":
case WKTKeywords.temporal: {
switch (dimension) {
case 1: cs = csFactory.createTimeCS(properties, axes[0]); break;
}
break;
}
case WKTKeywords.parametric: {
switch (dimension) {
case 1: cs = ServicesForMetadata.createParametricCS(properties, axes[0], csFactory); break;
}
break;
}
case WKTKeywords.linear: {
switch (dimension) {
case 1: cs = csFactory.createLinearCS(properties, axes[0]); break;
}
break;
}
case WKTKeywords.polar: {
switch (dimension) {
case 2: cs = csFactory.createPolarCS(properties, axes[0], axes[1]); break;
}
break;
}
case WKTKeywords.cylindrical: {
switch (dimension) {
case 3: cs = csFactory.createCylindricalCS(properties, axes[0], axes[1], axes[2]); break;
}
break;
}
case WKTKeywords.affine: {
switch (dimension) {
case 2: cs = csFactory.createAffineCS(properties, axes[0], axes[1]); break;
case 3: cs = csFactory.createAffineCS(properties, axes[0], axes[1], axes[2]); break;
}
break;
}
default: {
throw new FactoryDataException(error().getString(Errors.Keys.UnknownType_1, type));
}
}
if (cs == null) {
throw new FactoryDataException(resources().getString(Resources.Keys.UnexpectedDimensionForCS_1, type));
}
returnValue = ensureSingleton(cs, returnValue, code);
}
} catch (SQLException exception) {
throw databaseFailure(CoordinateSystem.class, code, exception);
}
if (returnValue == null) {
throw noSuchAuthorityCode(CoordinateSystem.class, code);
}
return returnValue;
}