Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle/layers.versions.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[versions]
xtraplatform-core = '7.0.0-SNAPSHOT'
xtraplatform-core = '7.0.0-ldp-95-audit-logging-new-module-SNAPSHOT'
xtraplatform-native = '2.6.0-SNAPSHOT'

2 changes: 1 addition & 1 deletion xtraplatform-features-gml/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

maturity = 'CANDIDATE'
maintenance = 'NONE'
description = 'WFS feature provider and GML features.'
Expand All @@ -9,6 +8,7 @@ dependencies {
provided 'de.interactive_instruments:xtraplatform-streams'
provided 'de.interactive_instruments:xtraplatform-values'
provided 'de.interactive_instruments:xtraplatform-web'
provided 'de.interactive_instruments:xtraplatform-services'
provided project(':xtraplatform-codelists')
provided project(':xtraplatform-cql')
provided project(':xtraplatform-crs')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
import de.ii.xtraplatform.features.gml.domain.FeatureProviderWfsData;
import de.ii.xtraplatform.features.gml.domain.WfsConnector;
import de.ii.xtraplatform.features.gml.domain.XMLNamespaceNormalizer;
import de.ii.xtraplatform.services.domain.AuditLog;
import de.ii.xtraplatform.streams.domain.Reactive;
import de.ii.xtraplatform.streams.domain.Reactive.Stream;
import de.ii.xtraplatform.values.domain.ValueStore;
Expand Down Expand Up @@ -142,6 +143,7 @@ public FeatureProviderWfs(
Reactive reactive,
ValueStore valueStore,
ProviderExtensionRegistry extensionRegistry,
AuditLog auditLog,
VolatileRegistry volatileRegistry,
@Assisted FeatureProviderDataV2 data) {
super(
Expand All @@ -151,6 +153,7 @@ public FeatureProviderWfs(
crsInfo,
extensionRegistry,
valueStore.forType(Codelist.class),
auditLog,
data,
volatileRegistry);

Expand Down Expand Up @@ -227,10 +230,9 @@ protected FeatureQueryEncoder<String, QueryOptions> getQueryEncoder() {
private FeatureTokenDecoder<
byte[], FeatureSchema, SchemaMapping, ModifiableContext<FeatureSchema, SchemaMapping>>
getDecoder(Query query, Map<String, SchemaMapping> mappings, boolean passThrough) {
if (!(query instanceof FeatureQuery)) {
if (!(query instanceof FeatureQuery featureQuery)) {
throw new IllegalArgumentException();
}
FeatureQuery featureQuery = (FeatureQuery) query;
Map<String, String> namespaces = getData().getConnectionInfo().getNamespaces();
XMLNamespaceNormalizer namespaceNormalizer = new XMLNamespaceNormalizer(namespaces);
FeatureSchema featureSchema = getData().getTypes().get(featureQuery.getType());
Expand Down Expand Up @@ -376,6 +378,7 @@ public FeatureStream getFeatureStreamPassThrough(FeatureQuery query) {
nativeCrsIs3d,
getCodelists(),
this::runQuery,
false);
false,
auditLog);
}
}
1 change: 1 addition & 0 deletions xtraplatform-features-graphql/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ dependencies {
provided 'de.interactive_instruments:xtraplatform-streams'
provided 'de.interactive_instruments:xtraplatform-values'
provided 'de.interactive_instruments:xtraplatform-web'
provided 'de.interactive_instruments:xtraplatform-services'
provided project(':xtraplatform-codelists')
provided project(':xtraplatform-cql')
provided project(':xtraplatform-crs')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import de.ii.xtraplatform.features.domain.transform.OnlySortables;
import de.ii.xtraplatform.features.graphql.domain.FeatureProviderGraphQlData;
import de.ii.xtraplatform.features.graphql.domain.GraphQlConnector;
import de.ii.xtraplatform.services.domain.AuditLog;
import de.ii.xtraplatform.streams.domain.Reactive;
import de.ii.xtraplatform.streams.domain.Reactive.Stream;
import de.ii.xtraplatform.values.domain.ValueStore;
Expand Down Expand Up @@ -197,6 +198,7 @@ public FeatureProviderGraphQl(
Reactive reactive,
ValueStore valueStore,
ProviderExtensionRegistry extensionRegistry,
AuditLog auditLog,
VolatileRegistry volatileRegistry,
@Assisted FeatureProviderDataV2 data) {
super(
Expand All @@ -206,6 +208,7 @@ public FeatureProviderGraphQl(
crsInfo,
extensionRegistry,
valueStore.forType(Codelist.class),
auditLog,
data,
volatileRegistry);

Expand Down Expand Up @@ -271,10 +274,9 @@ protected FeatureQueryEncoder<String, QueryOptions> getQueryEncoder() {
protected FeatureTokenDecoder<
byte[], FeatureSchema, SchemaMapping, ModifiableContext<FeatureSchema, SchemaMapping>>
getDecoder(Query query, Map<String, SchemaMapping> mappings) {
if (!(query instanceof FeatureQuery)) {
if (!(query instanceof FeatureQuery featureQuery)) {
throw new IllegalArgumentException();
}
FeatureQuery featureQuery = (FeatureQuery) query;
FeatureSchema featureSchema = getSourceSchemas().get(featureQuery.getType()).get(0);
String name =
featureSchema.getSourcePath().map(sourcePath -> sourcePath.substring(1)).orElse(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import de.ii.xtraplatform.features.sql.domain.SqlQueryOptions;
import de.ii.xtraplatform.features.sql.domain.SqlRow;
import de.ii.xtraplatform.geometries.domain.transcode.wktwkb.WkbDialect;
import de.ii.xtraplatform.services.domain.AuditLog;
import de.ii.xtraplatform.services.domain.Scheduler;
import de.ii.xtraplatform.streams.domain.Reactive;
import de.ii.xtraplatform.values.domain.ValueStore;
Expand Down Expand Up @@ -126,6 +127,7 @@ public FeatureProviderOracle(
VolatileRegistry volatileRegistry,
Cache cache,
Scheduler scheduler,
AuditLog auditLog,
@Assisted FeatureProviderDataV2 data) {
super(
crsTransformerFactory,
Expand All @@ -140,6 +142,7 @@ public FeatureProviderOracle(
volatileRegistry,
cache,
scheduler,
auditLog,
data,
Map.of());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@
import de.ii.xtraplatform.features.sql.domain.SqlQueryColumn.Operation;
import de.ii.xtraplatform.features.sql.infra.db.SourceSchemaValidatorSql;
import de.ii.xtraplatform.geometries.domain.transcode.wktwkb.WkbDialect;
import de.ii.xtraplatform.services.domain.AuditLog;
import de.ii.xtraplatform.services.domain.Scheduler;
import de.ii.xtraplatform.streams.domain.Reactive;
import de.ii.xtraplatform.streams.domain.Reactive.RunnableStream;
Expand Down Expand Up @@ -483,6 +484,7 @@ public FeatureProviderSql(
VolatileRegistry volatileRegistry,
Cache cache,
Scheduler scheduler,
AuditLog auditLog,
@Assisted FeatureProviderDataV2 data) {
this(
crsTransformerFactory,
Expand All @@ -497,6 +499,7 @@ public FeatureProviderSql(
volatileRegistry,
cache,
scheduler,
auditLog,
data,
decoderFactories.getConnectorDecoders());
}
Expand All @@ -514,6 +517,7 @@ protected FeatureProviderSql(
VolatileRegistry volatileRegistry,
Cache cache,
Scheduler scheduler,
AuditLog auditLog,
FeatureProviderDataV2 data,
Map<String, DecoderFactory> subdecoders) {
super(
Expand All @@ -523,6 +527,7 @@ protected FeatureProviderSql(
crsInfo,
extensionRegistry,
valueStore.forType(Codelist.class),
auditLog,
data,
volatileRegistry);

Expand Down Expand Up @@ -945,11 +950,7 @@ public boolean supportsMutationsInternal() {
if (!Objects.equals(getData().getConnectionInfo().getDialect(), SqlDbmsPgis.ID)) {
return false;
}
if (!getData().getDatasetChanges().isModeCrud()) {
return false;
}

return true;
return getData().getDatasetChanges().isModeCrud();
}

@Override
Expand Down Expand Up @@ -1335,7 +1336,7 @@ private MutationResult writeFeatures(
crsTransformerFactory,
getData().getNativeTimeZone(),
partial ? Optional.of(FeatureTransactions.PATCH_NULL_VALUE) : Optional.empty()))
.via(Transformer.map(feature -> (FeatureDataSql) feature));
.via(Transformer.map(feature -> feature));

if (partial) {
featureSqlSource =
Expand Down Expand Up @@ -1449,7 +1450,8 @@ public FeatureStream getFeatureStream(MultiFeatureQuery query) {
nativeCrsIs3d,
getCodelists(),
this::runQuery,
!query.hitsOnly());
!query.hitsOnly(),
auditLog);
}

@Override
Expand Down
3 changes: 2 additions & 1 deletion xtraplatform-features/build.gradle
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@

maturity = 'MATURE'
maintenance = 'FULL'
description = 'Feature providers and transformations.'
descriptionDe = 'Feature-Provider und Transformationen.'

dependencies {
provided 'de.interactive_instruments:xtraplatform-base'
provided 'de.interactive_instruments:xtraplatform-entities'
provided 'de.interactive_instruments:xtraplatform-streams'
provided 'de.interactive_instruments:xtraplatform-values'
provided 'de.interactive_instruments:xtraplatform-services'
provided project(':xtraplatform-codelists')
provided project(':xtraplatform-cql')
provided project(':xtraplatform-crs')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import de.ii.xtraplatform.features.domain.transform.WithScope;
import de.ii.xtraplatform.features.domain.transform.WithoutProperties;
import de.ii.xtraplatform.geometries.domain.GeometryType;
import de.ii.xtraplatform.services.domain.AuditLog;
import de.ii.xtraplatform.streams.domain.Reactive;
import de.ii.xtraplatform.streams.domain.Reactive.Runner;
import de.ii.xtraplatform.streams.domain.Reactive.Stream;
Expand Down Expand Up @@ -85,13 +86,16 @@ public abstract class AbstractFeatureProvider<
private boolean datasetChangedForced;
private String previousDataset;

protected AuditLog auditLog;

protected AbstractFeatureProvider(
ConnectorFactory connectorFactory,
Reactive reactive,
CrsTransformerFactory crsTransformerFactory,
CrsInfo crsInfo,
ProviderExtensionRegistry extensionRegistry,
Values<Codelist> codelistStore,
AuditLog auditLog,
FeatureProviderDataV2 data,
VolatileRegistry volatileRegistry) {
super(data, volatileRegistry);
Expand All @@ -101,6 +105,7 @@ protected AbstractFeatureProvider(
this.crsInfo = crsInfo;
this.extensionRegistry = extensionRegistry;
this.codelistStore = codelistStore;
this.auditLog = auditLog;
this.volatileRegistry = volatileRegistry;
this.changeHandler = new FeatureChangeHandlerImpl();
this.connector =
Expand Down Expand Up @@ -520,7 +525,8 @@ public FeatureStream getFeatureStream(FeatureQuery query) {
nativeCrsIs3d,
getCodelists(),
this::runQuery,
!query.hitsOnly());
!query.hitsOnly(),
auditLog);
}

// TODO: more tests
Expand Down Expand Up @@ -587,8 +593,7 @@ private FeatureTokenSource getFeatureTokenSource(

private Map<String, SchemaMapping> createMapping(
Query query, Map<String, PropertyTransformations> propertyTransformations) {
if (query instanceof FeatureQuery) {
FeatureQuery featureQuery = (FeatureQuery) query;
if (query instanceof FeatureQuery featureQuery) {

WithScope withScope =
featureQuery.getSchemaScope() == SchemaBase.Scope.RETURNABLE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ public interface FeatureSchema
String CONCAT_ELEMENT = "_CONCAT_ELEMENT_";
String COALESCE_ELEMENT = "_COALESCE_ELEMENT_";

Optional<Boolean> getAudit();

@JsonIgnore
@Override
String getName();
Expand Down Expand Up @@ -1146,8 +1148,7 @@ default FeatureSchema accept(FeatureSchemaTransformer visitor, List<FeatureSchem
.map(
entry ->
new SimpleEntry<>(
entry.getKey(),
(FeatureSchema) visit.apply(entry.getValue())))
entry.getKey(), visit.apply(entry.getValue())))
.collect(
ImmutableMap.toImmutableMap(
Map.Entry::getKey, Map.Entry::getValue)))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ enum PipelineSteps {
CLEAN,
ETAG,
METADATA,
AUDIT,
ALL
}

Expand Down Expand Up @@ -148,23 +149,39 @@ default boolean isSuccess() {

default CompletionStage<Result> runWith(
Sink<Object> sink, Map<String, PropertyTransformations> propertyTransformations) {
return runWith(sink, propertyTransformations, new CompletableFuture<>());
return runWith(sink, propertyTransformations, new CompletableFuture<>(), Optional.empty());
}

default CompletionStage<Result> runWith(
Sink<Object> sink,
Map<String, PropertyTransformations> propertyTransformations,
CompletableFuture<CollectionMetadata> onCollectionMetadata) {
return runWith(sink, propertyTransformations, onCollectionMetadata, Optional.empty());
}

CompletionStage<Result> runWith(
Sink<Object> sink,
Map<String, PropertyTransformations> propertyTransformations,
CompletableFuture<CollectionMetadata> onCollectionMetadata);
CompletableFuture<CollectionMetadata> onCollectionMetadata,
Optional<String> requestId);

default <X> CompletionStage<ResultReduced<X>> runWith(
SinkReduced<Object, X> sink, Map<String, PropertyTransformations> propertyTransformations) {
return runWith(sink, propertyTransformations, new CompletableFuture<>());
return runWith(sink, propertyTransformations, new CompletableFuture<>(), Optional.empty());
}

default <X> CompletionStage<ResultReduced<X>> runWith(
SinkReduced<Object, X> sink,
Map<String, PropertyTransformations> propertyTransformations,
CompletableFuture<CollectionMetadata> onCollectionMetadata) {
return runWith(sink, propertyTransformations, onCollectionMetadata, Optional.empty());
}

<X> CompletionStage<ResultReduced<X>> runWith(
SinkReduced<Object, X> sink,
Map<String, PropertyTransformations> propertyTransformations,
CompletableFuture<CollectionMetadata> onCollectionMetadata);
CompletableFuture<CollectionMetadata> onCollectionMetadata,
Optional<String> requestId);

// CompletionStage<Result> runWith(SinkTransformed<Object, byte[]> sink,
// Optional<PropertyTransformations> propertyTransformations);
Expand Down
Loading
Loading