TSK-967: Refactor new module taskana-data
This commit is contained in:
parent
5acfbc9c5b
commit
ab5d16d624
|
@ -14,22 +14,20 @@
|
|||
</parent>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mybatis</groupId>
|
||||
<artifactId>mybatis</artifactId>
|
||||
<version>${version.mybatis}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
<version>${version.slf4j}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-slf4j-impl</artifactId>
|
||||
<version>${version.log4j}</version>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
<version>${version.slf4j}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
|
|
@ -6,6 +6,7 @@ import java.io.PrintWriter;
|
|||
import java.io.StringReader;
|
||||
import java.io.StringWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
@ -27,68 +28,96 @@ import org.slf4j.LoggerFactory;
|
|||
public class SampleDataGenerator {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(SampleDataGenerator.class);
|
||||
private static final String SQL = "/sql";
|
||||
private static final String TEST_DATA = "/sample-data";
|
||||
private static final String CLEAR = SQL + TEST_DATA + "/clear-db.sql";
|
||||
private static final String CLEAR_HISTORY_EVENTS = SQL + TEST_DATA + "/clear-history-events.sql";
|
||||
private static final String TASK = SQL + TEST_DATA + "/task.sql";
|
||||
private static final String WORKBASKET = SQL + TEST_DATA + "/workbasket.sql";
|
||||
private static final String DISTRIBUTION_TARGETS = SQL + TEST_DATA + "/distribution-targets.sql";
|
||||
private static final String WORKBASKET_ACCESS_LIST = SQL + TEST_DATA + "/workbasket-access-list.sql";
|
||||
private static final String CLASSIFICATION = SQL + TEST_DATA + "/classification.sql";
|
||||
private static final String OBJECT_REFERENCE = SQL + TEST_DATA + "/object-reference.sql";
|
||||
private static final String ATTACHMENT = SQL + TEST_DATA + "/attachment.sql";
|
||||
private static final String HISTORY_EVENT = SQL + TEST_DATA + "/history-event.sql";
|
||||
private static final String CHECK_HISTORY_EVENT_EXIST = SQL + TEST_DATA + "/check-history-event-exist.sql";
|
||||
|
||||
private static final String RELATIVE_DATE_REGEX = "RELATIVE_DATE\\((-?\\d+)\\)";
|
||||
private static final Pattern RELATIVE_DATE_PATTERN = Pattern.compile(RELATIVE_DATE_REGEX);
|
||||
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
||||
private static final String SQL_SAMPLE_DATA = "/sql/sample-data";
|
||||
|
||||
private DataSource dataSource;
|
||||
private ScriptRunner runner;
|
||||
private static final String CLEAR = SQL_SAMPLE_DATA + "/clear-db.sql";
|
||||
private static final String CLEAR_HISTORY_EVENTS = SQL_SAMPLE_DATA + "/clear-history-events.sql";
|
||||
private static final String TASK = SQL_SAMPLE_DATA + "/task.sql";
|
||||
private static final String WORKBASKET = SQL_SAMPLE_DATA + "/workbasket.sql";
|
||||
private static final String DISTRIBUTION_TARGETS = SQL_SAMPLE_DATA + "/distribution-targets.sql";
|
||||
private static final String WORKBASKET_ACCESS_LIST = SQL_SAMPLE_DATA + "/workbasket-access-list.sql";
|
||||
private static final String CLASSIFICATION = SQL_SAMPLE_DATA + "/classification.sql";
|
||||
private static final String OBJECT_REFERENCE = SQL_SAMPLE_DATA + "/object-reference.sql";
|
||||
private static final String ATTACHMENT = SQL_SAMPLE_DATA + "/attachment.sql";
|
||||
private static final String HISTORY_EVENT = SQL_SAMPLE_DATA + "/history-event.sql";
|
||||
private static final String CHECK_HISTORY_EVENT_EXIST = SQL_SAMPLE_DATA + "/check-history-event-exist.sql";
|
||||
|
||||
public SampleDataGenerator(DataSource dataSource) throws SQLException {
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
LOGGER.trace(dataSource.getConnection().getMetaData().toString());
|
||||
}
|
||||
this.dataSource = dataSource;
|
||||
static final String RELATIVE_DATE_REGEX = "RELATIVE_DATE\\((-?\\d+)\\)";
|
||||
static final Pattern RELATIVE_DATE_PATTERN = Pattern.compile(RELATIVE_DATE_REGEX);
|
||||
static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
|
||||
|
||||
runner = new ScriptRunner(dataSource.getConnection());
|
||||
private final DataSource dataSource;
|
||||
private final LocalDateTime now;
|
||||
|
||||
public SampleDataGenerator(DataSource dataSource) {
|
||||
this(dataSource, LocalDateTime.now());
|
||||
}
|
||||
|
||||
public void generateSampleData(String schemaName) {
|
||||
StringWriter outWriter = new StringWriter();
|
||||
PrintWriter logWriter = new PrintWriter(outWriter);
|
||||
public SampleDataGenerator(DataSource dataSource, LocalDateTime now) {
|
||||
this.dataSource = dataSource;
|
||||
this.now = now;
|
||||
}
|
||||
|
||||
StringWriter errorWriter = new StringWriter();
|
||||
PrintWriter errorLogWriter = new PrintWriter(errorWriter);
|
||||
try {
|
||||
runner.runScript(
|
||||
selectSchemaScript(dataSource.getConnection().getMetaData().getDatabaseProductName(), schemaName));
|
||||
runner.setStopOnError(false);
|
||||
runner.runScript(getScriptBufferedStream(CLEAR));
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("caught Exception {}", e);
|
||||
public void generateSampleData(String schemaName) throws SQLException {
|
||||
try (Connection connection = dataSource.getConnection()) {
|
||||
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
LOGGER.trace(connection.getMetaData().toString());
|
||||
}
|
||||
|
||||
StringWriter outWriter = new StringWriter();
|
||||
StringWriter errorWriter = new StringWriter();
|
||||
|
||||
ScriptRunner runner = getScriptRunner(schemaName, connection, outWriter, errorWriter);
|
||||
|
||||
Stream<String> scriptsList = getDefaultScripts();
|
||||
try {
|
||||
runner.runScript(getScriptBufferedStream(CHECK_HISTORY_EVENT_EXIST));
|
||||
runner.runScript(getScriptBufferedStream(CLEAR_HISTORY_EVENTS));
|
||||
scriptsList = Stream.concat(scriptsList, Stream.of(HISTORY_EVENT));
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("The HISTORY_EVENTS table is not created");
|
||||
}
|
||||
|
||||
executeScripts(runner, scriptsList);
|
||||
runner.closeConnection();
|
||||
|
||||
if (LOGGER.isTraceEnabled()) {
|
||||
LOGGER.trace(outWriter.toString());
|
||||
String trimmedErrorString = errorWriter.toString().trim();
|
||||
if (!trimmedErrorString.isEmpty()) {
|
||||
LOGGER.error(trimmedErrorString);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
runner.setStopOnError(true);
|
||||
runner.setLogWriter(logWriter);
|
||||
runner.setErrorLogWriter(errorLogWriter);
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
getScriptList()
|
||||
private void executeScripts(ScriptRunner runner, Stream<String> scriptsList) {
|
||||
scriptsList
|
||||
.map(s -> SampleDataGenerator.parseAndReplace(now, s))
|
||||
.map(StringReader::new)
|
||||
.map(BufferedReader::new)
|
||||
.forEachOrdered(runner::runScript);
|
||||
}
|
||||
|
||||
runner.closeConnection();
|
||||
private ScriptRunner getScriptRunner(String schemaName, Connection connection, StringWriter outWriter,
|
||||
StringWriter errorWriter) throws SQLException {
|
||||
|
||||
LOGGER.trace(outWriter.toString());
|
||||
if (!errorWriter.toString().trim().isEmpty()) {
|
||||
LOGGER.error(errorWriter.toString());
|
||||
}
|
||||
PrintWriter logWriter = new PrintWriter(outWriter);
|
||||
PrintWriter errorLogWriter = new PrintWriter(errorWriter);
|
||||
ScriptRunner runner = new ScriptRunner(connection);
|
||||
|
||||
String databaseProductName = connection.getMetaData().getDatabaseProductName();
|
||||
|
||||
runner.runScript(selectSchemaScript(databaseProductName, schemaName));
|
||||
runner.setStopOnError(false);
|
||||
runner.runScript(getScriptBufferedStream(CLEAR));
|
||||
|
||||
runner.setStopOnError(true);
|
||||
runner.setLogWriter(logWriter);
|
||||
runner.setErrorLogWriter(errorLogWriter);
|
||||
return runner;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -105,12 +134,13 @@ public class SampleDataGenerator {
|
|||
* sql statement which may contain the above declared custom function.
|
||||
* @return sql statement with the given function resolved, if the 'sql' parameter contained any.
|
||||
*/
|
||||
private static String replaceRelativeTimeFunction(LocalDateTime now, String sql) {
|
||||
static String replaceRelativeTimeFunction(LocalDateTime now, String sql) {
|
||||
Matcher m = RELATIVE_DATE_PATTERN.matcher(sql);
|
||||
StringBuffer sb = new StringBuffer(sql.length());
|
||||
while (m.find()) {
|
||||
m.appendReplacement(sb,
|
||||
"'" + now.plusDays(Long.parseLong(m.group(1))).format(DATE_TIME_FORMATTER) + "'");
|
||||
long days = Long.parseLong(m.group(1));
|
||||
String daysAsStringDate = "'" + now.plusDays(days).format(DATE_TIME_FORMATTER) + "'";
|
||||
m.appendReplacement(sb, daysAsStringDate);
|
||||
}
|
||||
m.appendTail(sb);
|
||||
return sb.toString();
|
||||
|
@ -122,23 +152,6 @@ public class SampleDataGenerator {
|
|||
: "SET SCHEMA " + schemaName + ";");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a array with the necessary script.
|
||||
* @return a array with the corresponding scripts files
|
||||
*/
|
||||
private Stream<String> getScriptList() {
|
||||
Stream<String> scriptsList = getDefaultScripts();
|
||||
|
||||
try {
|
||||
runner.runScript(getScriptBufferedStream(CHECK_HISTORY_EVENT_EXIST));
|
||||
runner.runScript(getScriptBufferedStream(CLEAR_HISTORY_EVENTS));
|
||||
return Stream.concat(scriptsList, Stream.of(HISTORY_EVENT));
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("The HISTORY_EVENTS table is not created");
|
||||
}
|
||||
return scriptsList;
|
||||
}
|
||||
|
||||
private static String parseAndReplace(LocalDateTime now, String script) {
|
||||
return replaceRelativeTimeFunction(now,
|
||||
getScriptBufferedStream(script).lines().collect(Collectors.joining(System.lineSeparator())));
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package pro.taskana.sampledata;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import org.hamcrest.CoreMatchers;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
|
@ -25,4 +31,54 @@ class SampleDataGeneratorTest {
|
|||
.forEach(Assertions::assertNotNull);
|
||||
}
|
||||
|
||||
@Test
|
||||
void replaceRelativeTimeFunctionSameDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String dateFormatted = now.format(SampleDataGenerator.DATE_TIME_FORMATTER);
|
||||
String sqlStringReplaced = SampleDataGenerator.replaceRelativeTimeFunction(now,
|
||||
"... RELATIVE_DATE(0) ...");
|
||||
assertThat(sqlStringReplaced, CoreMatchers.containsString(dateFormatted));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDateRegex() {
|
||||
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("RELATIVE_DATE(123)").matches());
|
||||
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(5) ...").find());
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(0) ...").find());
|
||||
Assertions.assertTrue(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(-123) ...").find());
|
||||
|
||||
Assertions.assertFalse(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE() ...").find());
|
||||
Assertions.assertFalse(
|
||||
SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_DATE(ABCDE) ...").find());
|
||||
Assertions.assertFalse(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("... RELATIVE_NO(5) ...").find());
|
||||
Assertions.assertFalse(SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("...").find());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testDateRegexExtractGroup() {
|
||||
Matcher matcher = SampleDataGenerator.RELATIVE_DATE_PATTERN.matcher("RELATIVE_DATE(123)");
|
||||
Assertions.assertTrue(matcher.find());
|
||||
Assertions.assertEquals("123", matcher.group(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
void replaceRelativeTimeFunctionPosDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String dateFormatted = now.plusDays(5).format(SampleDataGenerator.DATE_TIME_FORMATTER);
|
||||
String sqlStringReplaced = SampleDataGenerator.replaceRelativeTimeFunction(now,
|
||||
"... RELATIVE_DATE(5) ...");
|
||||
assertThat(sqlStringReplaced, CoreMatchers.containsString(dateFormatted));
|
||||
}
|
||||
|
||||
@Test
|
||||
void replaceRelativeTimeFunctionNegDate() {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String dateFormatted = now.plusDays(-10).format(SampleDataGenerator.DATE_TIME_FORMATTER);
|
||||
String sqlStringReplaced = SampleDataGenerator.replaceRelativeTimeFunction(now,
|
||||
"... RELATIVE_DATE(-10) ...");
|
||||
assertThat(sqlStringReplaced, CoreMatchers.containsString(dateFormatted));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -57,13 +57,13 @@ public class ExampleRestApplication {
|
|||
|
||||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) throws SQLException {
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
private void init() throws SQLException {
|
||||
if (!ldapClient.useLdap()) {
|
||||
AccessIdController.setLdapCache(ldapCacheTest);
|
||||
}
|
||||
|
|
|
@ -57,13 +57,13 @@ public class ExampleRestApplication {
|
|||
|
||||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) throws SQLException {
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
private void init() throws SQLException {
|
||||
if (!ldapClient.useLdap()) {
|
||||
AccessIdController.setLdapCache(ldapCacheTest);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
package pro.taskana;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Properties;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.naming.Context;
|
||||
import javax.naming.InitialContext;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -16,6 +25,7 @@ import org.springframework.context.annotation.Primary;
|
|||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
|
||||
import pro.taskana.jobs.TransactionalJobsConfiguration;
|
||||
import pro.taskana.ldap.LdapCacheTestImpl;
|
||||
import pro.taskana.ldap.LdapClient;
|
||||
|
@ -25,14 +35,6 @@ import pro.taskana.rest.RestConfiguration;
|
|||
import pro.taskana.rest.WebMvcConfig;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.naming.Context;
|
||||
import javax.naming.InitialContext;
|
||||
import javax.sql.DataSource;
|
||||
import java.io.InputStream;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Example Application showing the implementation of taskana-rest-spring for jboss application server.
|
||||
*/
|
||||
|
@ -96,13 +98,13 @@ public class TaskanaWildFlyApplication extends SpringBootServletInitializer {
|
|||
|
||||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) throws SQLException {
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
private void init() throws SQLException {
|
||||
if (!ldapClient.useLdap()) {
|
||||
AccessIdController.setLdapCache(ldapCacheTest);
|
||||
}
|
||||
|
|
|
@ -63,13 +63,13 @@ public class ExampleDocumentationApp {
|
|||
|
||||
@Bean
|
||||
@DependsOn("getTaskanaEngine") // generate sample data after schema was inserted
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) throws SQLException {
|
||||
public SampleDataGenerator generateSampleData(DataSource dataSource) {
|
||||
sampleDataGenerator = new SampleDataGenerator(dataSource);
|
||||
return sampleDataGenerator;
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
private void init() {
|
||||
private void init() throws SQLException {
|
||||
AccessIdController.setLdapCache(new LdapCacheTestImpl());
|
||||
sampleDataGenerator.generateSampleData(schemaName);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue