From 663a2453e7236c1bd802b045392b8a7267f40fb3 Mon Sep 17 00:00:00 2001 From: Jorge Ortiz Date: Tue, 9 Jul 2024 19:20:50 +0200 Subject: [PATCH] MET-5961 add initial definition for debias processing state in db --- pom.xml | 8 +- .../metis/sandbox/common/debias/Event.java | 10 +++ .../metis/sandbox/common/debias/State.java | 11 +++ .../metis/sandbox/config/DebiasConfig.java | 55 ++++++++++++ .../entity/debias/DetectionEntity.java | 85 +++++++++++++++++++ .../debias/DebiasStateMachineService.java | 8 ++ src/main/resources/database/schema.sql | 11 +++ src/main/resources/database/schema_drop.sql | 1 + 8 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 src/main/java/eu/europeana/metis/sandbox/common/debias/Event.java create mode 100644 src/main/java/eu/europeana/metis/sandbox/common/debias/State.java create mode 100644 src/main/java/eu/europeana/metis/sandbox/config/DebiasConfig.java create mode 100644 src/main/java/eu/europeana/metis/sandbox/entity/debias/DetectionEntity.java create mode 100644 src/main/java/eu/europeana/metis/sandbox/service/debias/DebiasStateMachineService.java diff --git a/pom.xml b/pom.xml index 2ffaa290..f766a760 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,7 @@ 8.1.1 32.1.3-jre 5.8.0 + 4.0.0 @@ -369,7 +370,12 @@ aws-java-sdk-s3 ${version.aws.s3} - + + + org.springframework.statemachine + spring-statemachine-starter + ${spring-statemachine.version} + org.springframework.boot diff --git a/src/main/java/eu/europeana/metis/sandbox/common/debias/Event.java b/src/main/java/eu/europeana/metis/sandbox/common/debias/Event.java new file mode 100644 index 00000000..0f50fb9f --- /dev/null +++ b/src/main/java/eu/europeana/metis/sandbox/common/debias/Event.java @@ -0,0 +1,10 @@ +package eu.europeana.metis.sandbox.common.debias; + +/** + * Verbs Event + */ +public enum Event { + PROCESS, + SUCCEED, + FAIL +} diff --git a/src/main/java/eu/europeana/metis/sandbox/common/debias/State.java b/src/main/java/eu/europeana/metis/sandbox/common/debias/State.java new file mode 100644 index 00000000..96753b26 --- /dev/null +++ b/src/main/java/eu/europeana/metis/sandbox/common/debias/State.java @@ -0,0 +1,11 @@ +package eu.europeana.metis.sandbox.common.debias; + +/** + * Nouns/Adjectives State + */ +public enum State { + START, + PROCESSING, + COMPLETED, + ERROR +} diff --git a/src/main/java/eu/europeana/metis/sandbox/config/DebiasConfig.java b/src/main/java/eu/europeana/metis/sandbox/config/DebiasConfig.java new file mode 100644 index 00000000..dbc5c984 --- /dev/null +++ b/src/main/java/eu/europeana/metis/sandbox/config/DebiasConfig.java @@ -0,0 +1,55 @@ +package eu.europeana.metis.sandbox.config; + +import eu.europeana.metis.sandbox.common.debias.Event; +import eu.europeana.metis.sandbox.common.debias.State; +import org.springframework.context.annotation.Configuration; +import org.springframework.statemachine.config.EnableStateMachine; +import org.springframework.statemachine.config.StateMachineConfigurerAdapter; +import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; +import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; + +@Configuration +@EnableStateMachine +public class DebiasConfig extends StateMachineConfigurerAdapter { + + @Override + public void configure(StateMachineStateConfigurer states) throws Exception { + states + .withStates() + .initial(State.START) + .state(State.PROCESSING) + .state(State.ERROR) + .end(State.COMPLETED); + } + + @Override + public void configure(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(State.START).target(State.PROCESSING) + .event(Event.PROCESS) + .and() + .withExternal() + .source(State.PROCESSING).target(State.ERROR) + .event(Event.FAIL) + .and() + .withExternal() + .source(State.ERROR).target(State.PROCESSING) + .event(Event.PROCESS) + .and() + .withExternal() + .source(State.PROCESSING).target(State.COMPLETED) + .event(Event.SUCCEED); + } + + // @Bean + // public StateMachineRuntimePersister stringStateMachineRuntimePersister() { + // return new JpaPersistingStateMachineInterceptor<>(jpaStateMachineRepository);; + // } + // @Override + // public void configure(StateMachineConfigurationConfigurer config) throws Exception { + // config.withPersistence() + // .runtimePersister() + // } +} + diff --git a/src/main/java/eu/europeana/metis/sandbox/entity/debias/DetectionEntity.java b/src/main/java/eu/europeana/metis/sandbox/entity/debias/DetectionEntity.java new file mode 100644 index 00000000..7389b209 --- /dev/null +++ b/src/main/java/eu/europeana/metis/sandbox/entity/debias/DetectionEntity.java @@ -0,0 +1,85 @@ +package eu.europeana.metis.sandbox.entity.debias; + +import eu.europeana.metis.sandbox.entity.DatasetEntity; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import java.time.ZonedDateTime; + +/** + * The type Detection entity. + */ +@Entity +@Table(name = "dataset_debias_detect") +public class DetectionEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @OneToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "dataset_id", referencedColumnName = "datasetId") + private DatasetEntity datasetId; + + private String state; + + @Column(insertable = false, updatable = false) + private ZonedDateTime createdDate; + + + /** + * Instantiates a new Detection entity. + */ + public DetectionEntity() { + // provide explicit no-args constructor as it is required for Hibernate + } + + /** + * Instantiates a new Detection entity. + * + * @param datasetId the dataset id + * @param state the state + */ + public DetectionEntity(DatasetEntity datasetId, String state) { + this.datasetId = datasetId; + this.state = state; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public DatasetEntity getDatasetId() { + return datasetId; + } + + public void setDatasetId(DatasetEntity datasetId) { + this.datasetId = datasetId; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public ZonedDateTime getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(ZonedDateTime createdDate) { + this.createdDate = createdDate; + } +} diff --git a/src/main/java/eu/europeana/metis/sandbox/service/debias/DebiasStateMachineService.java b/src/main/java/eu/europeana/metis/sandbox/service/debias/DebiasStateMachineService.java new file mode 100644 index 00000000..76114474 --- /dev/null +++ b/src/main/java/eu/europeana/metis/sandbox/service/debias/DebiasStateMachineService.java @@ -0,0 +1,8 @@ +package eu.europeana.metis.sandbox.service.debias; + +import org.springframework.stereotype.Service; + +@Service +public class DebiasStateMachineService { + +} diff --git a/src/main/resources/database/schema.sql b/src/main/resources/database/schema.sql index eb31335a..9111487c 100644 --- a/src/main/resources/database/schema.sql +++ b/src/main/resources/database/schema.sql @@ -97,6 +97,17 @@ CREATE TABLE IF NOT EXISTS harvesting_parameter FOREIGN KEY (dataset_id) REFERENCES dataset (dataset_id) ); +CREATE TABLE IF NOT EXISTS dataset_debias_detect +( + id BIGSERIAL, + dataset_id BIGINT NOT NULL, + state VARCHAR(30) NOT NULL, + created_date TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + PRIMARY KEY (id), + FOREIGN KEY (dataset_id) REFERENCES dataset (dataset_id) +); + +CREATE INDEX ON dataset_debias_detect (dataset_id); CREATE INDEX ON harvesting_parameter (dataset_id); CREATE INDEX ON dataset_log (dataset_id); CREATE INDEX ON record_log (record_id); diff --git a/src/main/resources/database/schema_drop.sql b/src/main/resources/database/schema_drop.sql index 4322feff..78994525 100644 --- a/src/main/resources/database/schema_drop.sql +++ b/src/main/resources/database/schema_drop.sql @@ -1,4 +1,5 @@ BEGIN; +DROP TABLE IF EXISTS dataset_debias_detect; DROP TABLE IF EXISTS dataset_log; DROP TABLE IF EXISTS harvesting_parameter; DROP TABLE IF EXISTS dataset;