diff --git a/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/FeatureProviderOracleFactory.java b/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/FeatureProviderOracleFactory.java index 37626b17..573850fd 100644 --- a/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/FeatureProviderOracleFactory.java +++ b/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/FeatureProviderOracleFactory.java @@ -41,7 +41,6 @@ import de.ii.xtraplatform.features.sql.domain.ImmutablePoolSettings; import de.ii.xtraplatform.features.sql.domain.ImmutableQueryGeneratorSettings; import de.ii.xtraplatform.features.sql.domain.ImmutableSqlPathDefaults; -import de.ii.xtraplatform.features.sql.domain.SqlClientBasicFactory; import java.util.List; import java.util.Map; import java.util.Optional; @@ -53,6 +52,7 @@ @Singleton @AutoBind +@SuppressWarnings("PMD.TooManyMethods") public class FeatureProviderOracleFactory extends AbstractEntityFactory implements EntityFactory { @@ -74,9 +74,15 @@ public FeatureProviderOracleFactory( } // for ldproxy-cfg - public FeatureProviderOracleFactory(SqlClientBasicFactory sqlClientBasicFactory) { + public FeatureProviderOracleFactory() { super(null); - this.schemaResolvers = null; + this.schemaResolvers = + new Lazy<>() { + @Override + public Set get() { + return Set.of(); + } + }; this.skipHydration = true; this.connectors = Set.of(); } @@ -145,12 +151,12 @@ public Optional auto() { @Override public EntityData hydrateData(EntityData entityData) { - FeatureProviderSqlData data = (FeatureProviderSqlData) entityData; - if (skipHydration) { return entityData; } + FeatureProviderSqlData data = (FeatureProviderSqlData) entityData; + try { List resolvers = List.of( @@ -190,7 +196,8 @@ private FeatureProviderSqlData applyTypesResolver( while (resolver.needsResolving(types)) { types = resolver.resolve(types); - if (++rounds >= resolver.maxRounds()) { + rounds++; + if (rounds >= resolver.maxRounds()) { resolver.maxRoundsWarning().ifPresent(LOGGER::warn); break; } diff --git a/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDbmsAdapterOras.java b/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDbmsAdapterOras.java index df81d879..69e85be8 100644 --- a/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDbmsAdapterOras.java +++ b/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDbmsAdapterOras.java @@ -16,9 +16,6 @@ import de.ii.xtraplatform.features.sql.domain.SqlDialect; import java.lang.module.Configuration; import java.lang.module.ModuleFinder; -import java.nio.file.Path; -import java.sql.Connection; -import java.sql.SQLException; import java.text.Collator; import java.util.List; import java.util.Map; @@ -90,13 +87,13 @@ public DataSource createDataSource(String providerId, ConnectionInfoSql connecti .invoke(ds, String.format(applicationName, providerId)); oracleDataSource.getDeclaredMethod("setDriverType", String.class).invoke(ds, "thin"); - if (host.contains(":")) { + if (host.indexOf(':') >= 0) { oracleDataSource .getDeclaredMethod("setServerName", String.class) - .invoke(ds, host.substring(0, host.indexOf(":"))); + .invoke(ds, host.substring(0, host.indexOf(':'))); oracleDataSource .getDeclaredMethod("setPortNumber", int.class) - .invoke(ds, Integer.parseInt(host.substring(host.lastIndexOf(":") + 1))); + .invoke(ds, Integer.parseInt(host.substring(host.lastIndexOf(':') + 1))); } else { oracleDataSource.getDeclaredMethod("setServerName", String.class).invoke(ds, host); } @@ -111,7 +108,8 @@ public DataSource createDataSource(String providerId, ConnectionInfoSql connecti private Class loadDriver() { try { - Path driverPath = driverStore.asLocalPath(Path.of(""), false).get(); + java.nio.file.Path driverPath = + driverStore.asLocalPath(java.nio.file.Path.of(""), false).get(); ModuleFinder finder = ModuleFinder.of(driverPath); ModuleLayer parent = ModuleLayer.boot(); Configuration cf = @@ -150,12 +148,13 @@ public List getSystemTables() { } @Override - public Map getGeoInfo(Connection connection, DbInfo dbInfo) throws SQLException { + public Map getGeoInfo(java.sql.Connection connection, DbInfo dbInfo) + throws java.sql.SQLException { return Map.of(); } @Override - public DbInfo getDbInfo(Connection connection) throws SQLException { + public DbInfo getDbInfo(java.sql.Connection connection) throws java.sql.SQLException { return new DbInfo() {}; } diff --git a/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDialectOras.java b/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDialectOras.java index 0940eba9..c1edced4 100644 --- a/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDialectOras.java +++ b/xtraplatform-features-oracle/src/main/java/de/ii/xtraplatform/features/oracle/app/SqlDialectOras.java @@ -13,7 +13,6 @@ import de.ii.xtraplatform.crs.domain.BoundingBox; import de.ii.xtraplatform.crs.domain.EpsgCrs; import de.ii.xtraplatform.features.domain.Tuple; -import de.ii.xtraplatform.features.sql.domain.FeatureProviderSqlData.QueryGeneratorSettings; import de.ii.xtraplatform.features.sql.domain.SchemaSql.PropertyTypeInfo; import de.ii.xtraplatform.features.sql.domain.SqlDialect; import java.time.Instant; @@ -31,16 +30,27 @@ // - only 2D geometries are supported / have been tested // - S_CROSSES not supported // - identifiers must be unquoted, that is, in uppercase in Oracle +@SuppressWarnings("PMD.TooManyMethods") public class SqlDialectOras implements SqlDialect { private static final Splitter BBOX_SPLITTER = Splitter.onPattern("[(), ]").omitEmptyStrings().trimResults(); - private QueryGeneratorSettings settings; + private final Map>> spatialOperators = + new ImmutableMap.Builder>>() + .put(SpatialFunction.S_EQUALS, Tuple.of("SDO_EQUAL", Optional.empty())) + .put(SpatialFunction.S_DISJOINT, Tuple.of("SDO_RELATE", Optional.of("DISJOINT"))) + .put(SpatialFunction.S_TOUCHES, Tuple.of("SDO_TOUCH", Optional.empty())) + .put(SpatialFunction.S_WITHIN, Tuple.of("SDO_INSIDE", Optional.empty())) + .put(SpatialFunction.S_OVERLAPS, Tuple.of("SDO_OVERLAPS", Optional.empty())) + // S_CROSSES is not supported + .put(SpatialFunction.S_INTERSECTS, Tuple.of("SDO_ANYINTERACT", Optional.empty())) + .put(SpatialFunction.S_CONTAINS, Tuple.of("SDO_CONTAINS", Optional.empty())) + .build(); @Override public String applyToWkt(String column, boolean forcePolygonCCW, boolean linearizeCurves) { - StringBuilder queryBuilder = new StringBuilder("SDO_UTIL.TO_WKTGEOMETRY("); + StringBuilder queryBuilder = new StringBuilder(128).append("SDO_UTIL.TO_WKTGEOMETRY("); if (linearizeCurves) { queryBuilder.append("SDO_GEOM.SDO_ARC_DENSIFY("); } @@ -54,7 +64,7 @@ public String applyToWkt(String column, boolean forcePolygonCCW, boolean lineari if (linearizeCurves) { queryBuilder.append(",0.001,'arc_tolerance=0.1')"); } - return queryBuilder.append(")").toString(); + return queryBuilder.append(')').toString(); } @Override @@ -64,7 +74,7 @@ public String applyToWkt(String wkt, int srid) { @Override public String applyToWkb(String column, boolean forcePolygonCCW, boolean linearizeCurves) { - StringBuilder queryBuilder = new StringBuilder("SDO_UTIL.TO_WKBGEOMETRY("); + StringBuilder queryBuilder = new StringBuilder(128).append("SDO_UTIL.TO_WKBGEOMETRY("); if (linearizeCurves) { queryBuilder.append("SDO_GEOM.SDO_ARC_DENSIFY("); } @@ -78,7 +88,7 @@ public String applyToWkb(String column, boolean forcePolygonCCW, boolean lineari if (linearizeCurves) { queryBuilder.append(",0.001,'arc_tolerance=0.1')"); } - return queryBuilder.append(")").toString(); + return queryBuilder.append(')').toString(); } @Override @@ -225,7 +235,7 @@ public Tuple> getSpatialOperator( throw new IllegalArgumentException( "3D spatial operators are not supported for Oracle feature providers."); } - Tuple> op = SPATIAL_OPERATORS.get(spatialFunction); + Tuple> op = spatialOperators.get(spatialFunction); if (Objects.isNull(op)) { throw new IllegalArgumentException( String.format( @@ -235,18 +245,6 @@ public Tuple> getSpatialOperator( return op; } - private final Map>> SPATIAL_OPERATORS = - new ImmutableMap.Builder>>() - .put(SpatialFunction.S_EQUALS, Tuple.of("SDO_EQUAL", Optional.empty())) - .put(SpatialFunction.S_DISJOINT, Tuple.of("SDO_RELATE", Optional.of("DISJOINT"))) - .put(SpatialFunction.S_TOUCHES, Tuple.of("SDO_TOUCH", Optional.empty())) - .put(SpatialFunction.S_WITHIN, Tuple.of("SDO_INSIDE", Optional.empty())) - .put(SpatialFunction.S_OVERLAPS, Tuple.of("SDO_OVERLAPS", Optional.empty())) - // S_CROSSES is not supported - .put(SpatialFunction.S_INTERSECTS, Tuple.of("SDO_ANYINTERACT", Optional.empty())) - .put(SpatialFunction.S_CONTAINS, Tuple.of("SDO_CONTAINS", Optional.empty())) - .build(); - @Override public String getSpatialOperatorMatch(SpatialFunction spatialFunction) { return " = 'TRUE'";