diff --git a/.gitignore b/.gitignore index c022c2a..1016c92 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,7 @@ bin/ *.iws *.iml *.ipr -out/ +golden/ !**/src/main/**/out/ !**/src/test/**/out/ @@ -42,4 +42,4 @@ out/ *.png *.dot *.scxml.xml -Combined.java \ No newline at end of file +Combined.java diff --git a/file_combine/build.gradle b/file_combine/build.gradle new file mode 100644 index 0000000..4fa384a --- /dev/null +++ b/file_combine/build.gradle @@ -0,0 +1,38 @@ +plugins { + id 'java' +} + +group = 'click.kamil.file_combine' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + // deps for parsing java AST + implementation 'org.eclipse.jdt:org.eclipse.jdt.core:3.36.0' + + compileOnly 'org.projectlombok:lombok:1.18.46' + annotationProcessor 'org.projectlombok:lombok:1.18.46' + + testImplementation 'org.junit.jupiter:junit-jupiter-api:6.1.0' + testImplementation 'org.junit.jupiter:junit-jupiter-engine:6.1.0' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:6.1.0' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/filecombine/JavaConcatenator.java b/file_combine/src/main/java/click/kamil/file_combine/JavaConcatenator.java similarity index 97% rename from src/main/java/click/kamil/filecombine/JavaConcatenator.java rename to file_combine/src/main/java/click/kamil/file_combine/JavaConcatenator.java index 9d56ca4..d6c5a30 100644 --- a/src/main/java/click/kamil/filecombine/JavaConcatenator.java +++ b/file_combine/src/main/java/click/kamil/file_combine/JavaConcatenator.java @@ -1,6 +1,6 @@ -package click.kamil.filecombine; +package click.kamil.file_combine; -import click.kamil.springstatemachineexporter.ast.common.FileUtils; +import click.kamil.file_combine.common.FileUtils; import org.eclipse.jdt.core.dom.*; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.jface.text.Document; diff --git a/file_combine/src/main/java/click/kamil/file_combine/common/FileUtils.java b/file_combine/src/main/java/click/kamil/file_combine/common/FileUtils.java new file mode 100644 index 0000000..951aece --- /dev/null +++ b/file_combine/src/main/java/click/kamil/file_combine/common/FileUtils.java @@ -0,0 +1,26 @@ +package click.kamil.file_combine.common; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class FileUtils { + public static List findFilesWithExtension(Set startDirs, String extension) throws RuntimeException { + try (Stream paths = startDirs.stream() + .flatMap(startDir -> { + try { + return Files.walk(startDir); + } catch (IOException e) { + throw new RuntimeException(e); + } + })) { + return paths + .filter(p -> Files.isRegularFile(p) && p.toString().endsWith(extension)) + .collect(Collectors.toList()); + } + } +} diff --git a/file_combine/src/test/java/click/kamil/MyTest.java b/file_combine/src/test/java/click/kamil/MyTest.java new file mode 100644 index 0000000..c708f4a --- /dev/null +++ b/file_combine/src/test/java/click/kamil/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55..8bdaf60 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ff23a68..2e11132 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a9..adff685 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index db3a6ac..c4bdd3a 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/settings.gradle b/settings.gradle index 9b994c1..53ed2b9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,11 @@ rootProject.name = 'state machine exporter' + +include ':file_combine' +include ':state_machine_exporter' +include ':state_machine_exporter_spring_based' +include ':state_machines:complex_state_machine' +include ':state_machines:dynamic_state_machine' +include ':state_machines:enumstate_state_machine' +include ':state_machines:forkjoin_state_machine' +include ':state_machines:inheritance_state_machine' +include ':state_machines:simple_state_machine' diff --git a/src/main/java/click/kamil/springstatemachineexporter/StatemachinedemoApplication.java b/src/main/java/click/kamil/springstatemachineexporter/StatemachinedemoApplication.java deleted file mode 100644 index 33ea61c..0000000 --- a/src/main/java/click/kamil/springstatemachineexporter/StatemachinedemoApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -//package click.kamil.springstatemachineexporter; -// -//import org.springframework.boot.SpringApplication; -//import org.springframework.boot.autoconfigure.SpringBootApplication; -//import org.springframework.context.annotation.ComponentScan; -// -//@SpringBootApplication -//@ComponentScan(basePackages = {"click.kamil.examples"}) -//public class StatemachinedemoApplication { -// public static void main(String[] args) { -// SpringApplication.run(StatemachinedemoApplication.class, args); -// } -//} diff --git a/src/test/java/click/kamil/springstatemachineexporter/StatemachinedemoApplicationTests.java b/src/test/java/click/kamil/springstatemachineexporter/StatemachinedemoApplicationTests.java deleted file mode 100644 index 1ade884..0000000 --- a/src/test/java/click/kamil/springstatemachineexporter/StatemachinedemoApplicationTests.java +++ /dev/null @@ -1,18 +0,0 @@ -package click.kamil.springstatemachineexporter; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.CommandLineRunner; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.bean.override.mockito.MockitoBean; - -@SpringBootTest -class StatemachinedemoApplicationTests { - - @MockitoBean - CommandLineRunner commandLineRunner; - - @Test - void contextLoads() { - } - -} diff --git a/state_machine_exporter/.gitignore b/state_machine_exporter/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machine_exporter/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machine_exporter/build.gradle b/state_machine_exporter/build.gradle new file mode 100644 index 0000000..0ee7e13 --- /dev/null +++ b/state_machine_exporter/build.gradle @@ -0,0 +1,40 @@ +plugins { + id 'java' +} + +group = 'click.kamil.springstatemachineexporter' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + // deps for parsing java AST + implementation 'org.eclipse.jdt:org.eclipse.jdt.core:3.36.0' + + compileOnly 'org.projectlombok:lombok:1.18.46' + annotationProcessor 'org.projectlombok:lombok:1.18.46' + + testImplementation 'org.junit.jupiter:junit-jupiter-api:6.1.0' + testImplementation 'org.junit.jupiter:junit-jupiter-params:6.1.0' + testImplementation 'org.junit.jupiter:junit-jupiter-engine:6.1.0' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:6.1.0' + testImplementation 'org.assertj:assertj-core:3.27.7' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/springstatemachineexporter/Main.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/Main.java similarity index 79% rename from src/main/java/click/kamil/springstatemachineexporter/Main.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/Main.java index 4d69148..f8c9b9e 100644 --- a/src/main/java/click/kamil/springstatemachineexporter/Main.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/Main.java @@ -14,23 +14,26 @@ import click.kamil.springstatemachineexporter.ast.out.StateMachineExporter; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.MethodDeclaration; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.PrintWriter; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.HashSet; import java.util.List; import java.util.Set; public class Main { private static final String START_DIR = "."; + private static final String OUTPUT_DIR = "./out"; private static final String EXTENSION = ".java"; private static final List TARGET_ANNOTATIONS = List.of("EnableStateMachineFactory", "EnableStateMachine"); public static final Set STATE_MACHINE_RETURN_TYPES = Set.of("StateMachine"); - static void processAnnotationFoundSource(String source, Path javaFile, List outputs) throws IOException { + public static void main(String[] args) throws IOException { + runExporter(Path.of(START_DIR), Path.of(OUTPUT_DIR)); + } + + static void processAnnotationFoundSource(String source, Path javaFile, List outputs, Path outputDir) throws IOException { MethodDeclaration configureMethod = new StateMachineTransitionConfigurationMethodFinder(source).findConfigureMethod(); if (configureMethod != null) { System.out.println("Found configure method in: " + javaFile.toAbsolutePath()); @@ -60,23 +63,31 @@ public class Main { endStates.addAll(visitor.getEndStates()); String baseName = javaFile.getFileName().toString().replaceFirst("[.][^.]+$", ""); + generateOutputs(outputDir, baseName, transitions, startStates, endStates, outputs); + } + } - // Iterate over outputs and generate files dynamically - for (StateMachineExporter output : outputs) { - String content = output.export(transitions, startStates, endStates, true); - String fileName = baseName + output.getFileExtension(); - try (PrintWriter out = new PrintWriter(fileName)) { - out.println(content); - } + private static void generateOutputs(Path outputDir, String baseName, List transitions, + Set startStates, Set endStates, + List outputs) throws IOException { + + Path targetDir = outputDir.resolve(baseName); + Files.createDirectories(targetDir); + + for (StateMachineExporter output : outputs) { + String content = output.export(transitions, startStates, endStates, true); + String fileName = baseName + output.getFileExtension(); + + try (PrintWriter out = new PrintWriter(targetDir.resolve(fileName).toFile())) { + out.println(content); } } } - public static void main(String[] args) throws IOException { + public static void runExporter(Path inputDir, Path outputDir) throws IOException { AstFileFinder finder = new AstFileFinder(); - List javaFiles = FileUtils.findFilesWithExtension(Set.of(Paths.get(START_DIR)), EXTENSION); + List javaFiles = FileUtils.findFilesWithExtension(Set.of(inputDir), EXTENSION); - // List of output handlers List outputs = List.of( new PlantUml(), new Dot(), @@ -86,19 +97,17 @@ public class Main { for (Path javaFile : javaFiles) { String source = Files.readString(javaFile); if (finder.hasClassWithAnnotation(source, TARGET_ANNOTATIONS)) { - System.out.println("Found annotation in: " + javaFile.toAbsolutePath()); - processAnnotationFoundSource(source, javaFile, outputs); + processAnnotationFoundSource(source, javaFile, outputs, outputDir); } else if (finder.hasFunctionReturningType(source, STATE_MACHINE_RETURN_TYPES)) { - System.out.println("Found StateMachine return type in: " + javaFile.toAbsolutePath()); - processReturnTypeFoundSource(source, javaFile, outputs); + processReturnTypeFoundSource(source, javaFile, outputs, outputDir); } } } - static void processReturnTypeFoundSource(String source, Path javaFile, List outputs) { + static void processReturnTypeFoundSource(String source, Path javaFile, List outputs, Path outputDir) throws IOException { Set methodsWithReturnType = new StateMachineTransitionConfigurationMethodFinder(source).findMethodsWithReturnType(STATE_MACHINE_RETURN_TYPES); if (!methodsWithReturnType.isEmpty()) { - methodsWithReturnType.forEach(m -> { + for (MethodDeclaration m : methodsWithReturnType) { System.out.println("Found method returning StateMachine in: " + javaFile.toAbsolutePath()); System.out.println("Method body:\n" + m.getBody()); List transitions = AstTransitionParser.parseTransitions2(m); @@ -125,20 +134,8 @@ public class Main { endStates.addAll(visitor.getEndStates()); String baseName = javaFile.getFileName().toString().replaceFirst("[.][^.]+$", ""); - - // Iterate over outputs and generate files dynamically - for (StateMachineExporter output : outputs) { - String content = output.export(transitions, startStates, endStates, true); - String fileName = baseName + output.getFileExtension(); - try (PrintWriter out = new PrintWriter(fileName)) { - out.println(content); - } catch (FileNotFoundException e) { - throw new RuntimeException(e); - } - } - - }); - + generateOutputs(outputDir, baseName, transitions, startStates, endStates, outputs); + } } } } diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParser.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/app/QuotedExpression.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/QuotedExpression.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/app/QuotedExpression.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/QuotedExpression.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinder.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinder.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinder.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinder.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinder.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinder.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinder.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinder.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtils.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtils.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtils.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtils.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/app/domain/Transition.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/domain/Transition.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/app/domain/Transition.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/app/domain/Transition.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/common/AstUtils.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/AstUtils.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/common/AstUtils.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/AstUtils.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/common/FileUtils.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/FileUtils.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/common/FileUtils.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/FileUtils.java diff --git a/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/StringUtils.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/StringUtils.java new file mode 100644 index 0000000..8339d51 --- /dev/null +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/common/StringUtils.java @@ -0,0 +1,51 @@ +package click.kamil.springstatemachineexporter.ast.common; + +public final class StringUtils { + + public static boolean isBlank(String string) { + if (isEmpty(string)) { + return true; + } + for (int i = 0; i < string.length(); i++) { + if (!Character.isWhitespace(string.charAt(i))) { + return false; + } + } + return true; + } + + public static boolean isNotBlank(String string) { + return !isBlank(string); + } + + public static boolean isEmpty(String string) { + return string == null || string.isEmpty(); + } + + public static boolean isNotEmpty(String string) { + return !isEmpty(string); + } + + public static String truncate(String string, int maxLength) { + if (string.length() > maxLength) { + return string.substring(0, maxLength); + } + return string; + } + + public static String truncate(String string, int maxLength, String truncationIndicator) { + if (truncationIndicator.length() >= maxLength) { + throw new IllegalArgumentException("maxLength must be greater than length of truncationIndicator"); + } + if (string.length() > maxLength) { + int remainingLength = maxLength - truncationIndicator.length(); + return string.substring(0, remainingLength) + truncationIndicator; + } + + return string; + } + + private StringUtils() { + } + +} diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinder.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinder.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinder.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinder.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/out/Dot.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/Dot.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/out/Dot.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/Dot.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/out/PlantUml.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/PlantUml.java similarity index 99% rename from src/main/java/click/kamil/springstatemachineexporter/ast/out/PlantUml.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/PlantUml.java index 032c414..a6fcff3 100644 --- a/src/main/java/click/kamil/springstatemachineexporter/ast/out/PlantUml.java +++ b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/PlantUml.java @@ -1,7 +1,7 @@ package click.kamil.springstatemachineexporter.ast.out; import click.kamil.springstatemachineexporter.ast.app.domain.Transition; -import io.micrometer.common.util.StringUtils; +import click.kamil.springstatemachineexporter.ast.common.StringUtils; import java.util.*; import java.util.stream.Collectors; diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/out/Scxml.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/Scxml.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/out/Scxml.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/Scxml.java diff --git a/src/main/java/click/kamil/springstatemachineexporter/ast/out/StateMachineExporter.java b/state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/StateMachineExporter.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/ast/out/StateMachineExporter.java rename to state_machine_exporter/src/main/java/click/kamil/springstatemachineexporter/ast/out/StateMachineExporter.java diff --git a/src/main/resources/application.properties b/state_machine_exporter/src/main/resources/application.properties similarity index 100% rename from src/main/resources/application.properties rename to state_machine_exporter/src/main/resources/application.properties diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/MainTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/MainTest.java new file mode 100644 index 0000000..ebd4a4e --- /dev/null +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/MainTest.java @@ -0,0 +1,11 @@ +package click.kamil.springstatemachineexporter; + +import org.junit.jupiter.api.Test; + +class MainTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java new file mode 100644 index 0000000..ff0a73d --- /dev/null +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/RegressionTest.java @@ -0,0 +1,75 @@ +package click.kamil.springstatemachineexporter; + +import click.kamil.springstatemachineexporter.ast.out.Dot; +import click.kamil.springstatemachineexporter.ast.out.PlantUml; +import click.kamil.springstatemachineexporter.ast.out.Scxml; +import click.kamil.springstatemachineexporter.ast.out.StateMachineExporter; +import click.kamil.springstatemachineexporter.utils.TestScenario; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.nio.file.Path; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class RegressionTest { + + static List provideTestScenarios() { + return List.of( + new TestScenario( + "Complex State Machine", + Path.of("../state_machines/complex_state_machine"), + Path.of("src/test/resources/golden/ComplexStateMachineConfig"), + "ComplexStateMachineConfig" + ), + new TestScenario( + "Fork Join State Machine", + Path.of("../state_machines/forkjoin_state_machine"), + Path.of("src/test/resources/golden/ForkJoinStateMachineConfig"), + "ForkJoinStateMachineConfig" + ), + new TestScenario( + "Kamil Enum State Machine", + Path.of("../state_machines/enumstate_state_machine"), + Path.of("src/test/resources/golden/KamilEnumStateMachineConfiguration"), + "KamilEnumStateMachineConfiguration" + ), + new TestScenario( + "Simple Enum Join State Machine", + Path.of("../state_machines/simple_state_machine"), + Path.of("src/test/resources/golden/SimpleEnumStateMachineConfiguration"), + "SimpleEnumStateMachineConfiguration" + ) + ); + } + @ParameterizedTest(name = "{0}") + @MethodSource("provideTestScenarios") + void testOutputMatchesGolden(TestScenario scenario, @TempDir Path tempDir) throws Exception { + Main.runExporter(scenario.inputPath(), tempDir); + + List exporters = List.of( + new PlantUml(), + new Dot(), + new Scxml() + ); + + String baseName = scenario.baseName(); + + for (StateMachineExporter exporter : exporters) { + String fileName = baseName + exporter.getFileExtension(); + + Path actualFile = tempDir.resolve(baseName).resolve(fileName); + Path goldenFile = scenario.goldenPath().resolve(fileName); + + assertThat(actualFile) + .as("File %s should exist in output", fileName) + .exists(); + + assertThat(actualFile) + .as("Content mismatch for %s", fileName) + .hasSameTextualContentAs(goldenFile); + } + } +} diff --git a/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java similarity index 100% rename from src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java rename to state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/AstTransitionParserTest.java diff --git a/src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinderTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinderTest.java similarity index 100% rename from src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinderTest.java rename to state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineStateConfigurationMethodFinderTest.java diff --git a/src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinderTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinderTest.java similarity index 100% rename from src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinderTest.java rename to state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/StateMachineTransitionConfigurationMethodFinderTest.java diff --git a/src/test/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtilsTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtilsTest.java similarity index 100% rename from src/test/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtilsTest.java rename to state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/app/TransitionStateUtilsTest.java diff --git a/src/test/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinderTest.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinderTest.java similarity index 100% rename from src/test/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinderTest.java rename to state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/ast/in/AstFileFinderTest.java diff --git a/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/utils/TestScenario.java b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/utils/TestScenario.java new file mode 100644 index 0000000..4970f46 --- /dev/null +++ b/state_machine_exporter/src/test/java/click/kamil/springstatemachineexporter/utils/TestScenario.java @@ -0,0 +1,10 @@ +package click.kamil.springstatemachineexporter.utils; + +import java.nio.file.Path; + +public record TestScenario( + String name, + Path inputPath, + Path goldenPath, + String baseName +) {} diff --git a/state_machine_exporter_spring_based/.gitignore b/state_machine_exporter_spring_based/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machine_exporter_spring_based/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machine_exporter_spring_based/build.gradle b/state_machine_exporter_spring_based/build.gradle new file mode 100644 index 0000000..444b79f --- /dev/null +++ b/state_machine_exporter_spring_based/build.gradle @@ -0,0 +1,43 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.3' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'click.kamil' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation project(':state_machines:simple_state_machine') + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/springstatemachineexporter/springbased/SpringExporter.java b/state_machine_exporter_spring_based/src/main/java/click/kamil/SpringExporter.java similarity index 100% rename from src/main/java/click/kamil/springstatemachineexporter/springbased/SpringExporter.java rename to state_machine_exporter_spring_based/src/main/java/click/kamil/SpringExporter.java diff --git a/state_machine_exporter_spring_based/src/main/java/click/kamil/StatemachinedemoApplication.java b/state_machine_exporter_spring_based/src/main/java/click/kamil/StatemachinedemoApplication.java new file mode 100644 index 0000000..761cae9 --- /dev/null +++ b/state_machine_exporter_spring_based/src/main/java/click/kamil/StatemachinedemoApplication.java @@ -0,0 +1,13 @@ +package click.kamil.springstatemachineexporter; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +//import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +//@ComponentScan(basePackages = {"click.kamil."}) +class StatemachinedemoApplication { + public static void main(String[] args) { + SpringApplication.run(StatemachinedemoApplication.class, args); + } +} diff --git a/state_machine_exporter_spring_based/src/main/resources/application.properties b/state_machine_exporter_spring_based/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machine_exporter_spring_based/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machine_exporter_spring_based/src/test/java/click/kamil/MyTest.java b/state_machine_exporter_spring_based/src/test/java/click/kamil/MyTest.java new file mode 100644 index 0000000..c708f4a --- /dev/null +++ b/state_machine_exporter_spring_based/src/test/java/click/kamil/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machines/complex_state_machine/.gitignore b/state_machines/complex_state_machine/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machines/complex_state_machine/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/build.gradle b/state_machines/complex_state_machine/build.gradle similarity index 89% rename from build.gradle rename to state_machines/complex_state_machine/build.gradle index 0b2c2c5..0f14971 100644 --- a/build.gradle +++ b/state_machines/complex_state_machine/build.gradle @@ -13,6 +13,10 @@ java { } } +repositories { + mavenCentral() +} + configurations { compileOnly { extendsFrom annotationProcessor @@ -27,9 +31,6 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' - // deps for parsing java AST - implementation 'org.eclipse.jdt:org.eclipse.jdt.core:3.36.0' - compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/click/kamil/examples/statemachine/complex/ComplexStateMachineConfig.java b/state_machines/complex_state_machine/src/main/java/click/kamil/examples/statemachine/complex/ComplexStateMachineConfig.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/complex/ComplexStateMachineConfig.java rename to state_machines/complex_state_machine/src/main/java/click/kamil/examples/statemachine/complex/ComplexStateMachineConfig.java diff --git a/state_machines/complex_state_machine/src/main/java/click/kamil/examples/statemachine/complex/app/StateMachineApplication.java b/state_machines/complex_state_machine/src/main/java/click/kamil/examples/statemachine/complex/app/StateMachineApplication.java new file mode 100644 index 0000000..c9fbb93 --- /dev/null +++ b/state_machines/complex_state_machine/src/main/java/click/kamil/examples/statemachine/complex/app/StateMachineApplication.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine.complex.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +class StateMachineApplication { + public static void main(String[] args) { + SpringApplication.run(StateMachineApplication.class, args); + } +} diff --git a/state_machines/complex_state_machine/src/main/resources/application.properties b/state_machines/complex_state_machine/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machines/complex_state_machine/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machines/complex_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java b/state_machines/complex_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java new file mode 100644 index 0000000..95af6f1 --- /dev/null +++ b/state_machines/complex_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machines/dynamic_state_machine/.gitignore b/state_machines/dynamic_state_machine/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machines/dynamic_state_machine/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machines/dynamic_state_machine/build.gradle b/state_machines/dynamic_state_machine/build.gradle new file mode 100644 index 0000000..0f14971 --- /dev/null +++ b/state_machines/dynamic_state_machine/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.3' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'click.kamil' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/examples/statemachine/dynamic/DynamicStateMachineExample.java b/state_machines/dynamic_state_machine/src/main/java/click/kamil/examples/statemachine/dynamic/DynamicStateMachineExample.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/dynamic/DynamicStateMachineExample.java rename to state_machines/dynamic_state_machine/src/main/java/click/kamil/examples/statemachine/dynamic/DynamicStateMachineExample.java diff --git a/state_machines/dynamic_state_machine/src/main/java/click/kamil/examples/statemachine/dynamic/app/StateMachineApplication.java b/state_machines/dynamic_state_machine/src/main/java/click/kamil/examples/statemachine/dynamic/app/StateMachineApplication.java new file mode 100644 index 0000000..fa21886 --- /dev/null +++ b/state_machines/dynamic_state_machine/src/main/java/click/kamil/examples/statemachine/dynamic/app/StateMachineApplication.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine.dynamic.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +class StateMachineApplication { + public static void main(String[] args) { + SpringApplication.run(StateMachineApplication.class, args); + } +} diff --git a/state_machines/dynamic_state_machine/src/main/resources/application.properties b/state_machines/dynamic_state_machine/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machines/dynamic_state_machine/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machines/dynamic_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java b/state_machines/dynamic_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java new file mode 100644 index 0000000..95af6f1 --- /dev/null +++ b/state_machines/dynamic_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machines/enumstate_state_machine/.gitignore b/state_machines/enumstate_state_machine/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machines/enumstate_state_machine/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machines/enumstate_state_machine/build.gradle b/state_machines/enumstate_state_machine/build.gradle new file mode 100644 index 0000000..0f14971 --- /dev/null +++ b/state_machines/enumstate_state_machine/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.3' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'click.kamil' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/examples/statemachine/enumstate/KamilEnumStateMachineConfiguration.java b/state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/KamilEnumStateMachineConfiguration.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/enumstate/KamilEnumStateMachineConfiguration.java rename to state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/KamilEnumStateMachineConfiguration.java diff --git a/src/main/java/click/kamil/examples/statemachine/enumstate/OrderEvents.java b/state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/OrderEvents.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/enumstate/OrderEvents.java rename to state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/OrderEvents.java diff --git a/src/main/java/click/kamil/examples/statemachine/enumstate/OrderStates.java b/state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/OrderStates.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/enumstate/OrderStates.java rename to state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/OrderStates.java diff --git a/state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/app/StateMachineApplication.java b/state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/app/StateMachineApplication.java new file mode 100644 index 0000000..376045c --- /dev/null +++ b/state_machines/enumstate_state_machine/src/main/java/click/kamil/examples/statemachine/enumstate/app/StateMachineApplication.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine.enumstate.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +class StateMachineApplication { + public static void main(String[] args) { + SpringApplication.run(StateMachineApplication.class, args); + } +} diff --git a/state_machines/enumstate_state_machine/src/main/resources/application.properties b/state_machines/enumstate_state_machine/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machines/enumstate_state_machine/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machines/enumstate_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java b/state_machines/enumstate_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java new file mode 100644 index 0000000..95af6f1 --- /dev/null +++ b/state_machines/enumstate_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machines/forkjoin_state_machine/.gitignore b/state_machines/forkjoin_state_machine/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machines/forkjoin_state_machine/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machines/forkjoin_state_machine/build.gradle b/state_machines/forkjoin_state_machine/build.gradle new file mode 100644 index 0000000..0f14971 --- /dev/null +++ b/state_machines/forkjoin_state_machine/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.3' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'click.kamil' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/examples/statemachine/forkjoin/ForkJoinStateMachineConfig.java b/state_machines/forkjoin_state_machine/src/main/java/click/kamil/examples/statemachine/forkjoin/ForkJoinStateMachineConfig.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/forkjoin/ForkJoinStateMachineConfig.java rename to state_machines/forkjoin_state_machine/src/main/java/click/kamil/examples/statemachine/forkjoin/ForkJoinStateMachineConfig.java diff --git a/state_machines/forkjoin_state_machine/src/main/java/click/kamil/examples/statemachine/forkjoin/app/StateMachineApplication.java b/state_machines/forkjoin_state_machine/src/main/java/click/kamil/examples/statemachine/forkjoin/app/StateMachineApplication.java new file mode 100644 index 0000000..c1e6b4e --- /dev/null +++ b/state_machines/forkjoin_state_machine/src/main/java/click/kamil/examples/statemachine/forkjoin/app/StateMachineApplication.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine.forkjoin.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +class StateMachineApplication { + public static void main(String[] args) { + SpringApplication.run(StateMachineApplication.class, args); + } +} diff --git a/state_machines/forkjoin_state_machine/src/main/resources/application.properties b/state_machines/forkjoin_state_machine/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machines/forkjoin_state_machine/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machines/forkjoin_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java b/state_machines/forkjoin_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java new file mode 100644 index 0000000..95af6f1 --- /dev/null +++ b/state_machines/forkjoin_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machines/inheritance_state_machine/.gitignore b/state_machines/inheritance_state_machine/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machines/inheritance_state_machine/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machines/inheritance_state_machine/build.gradle b/state_machines/inheritance_state_machine/build.gradle new file mode 100644 index 0000000..0f14971 --- /dev/null +++ b/state_machines/inheritance_state_machine/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.3' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'click.kamil' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractOneStateMachineConfiguration.java b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractOneStateMachineConfiguration.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractOneStateMachineConfiguration.java rename to state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractOneStateMachineConfiguration.java diff --git a/src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractStateMachineConfiguration.java b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractStateMachineConfiguration.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractStateMachineConfiguration.java rename to state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/AbstractStateMachineConfiguration.java diff --git a/src/main/java/click/kamil/examples/statemachine/inheritancestate/Events.java b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/Events.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/inheritancestate/Events.java rename to state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/Events.java diff --git a/src/main/java/click/kamil/examples/statemachine/inheritancestate/OneStateMachineConfiguration.java b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/OneStateMachineConfiguration.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/inheritancestate/OneStateMachineConfiguration.java rename to state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/OneStateMachineConfiguration.java diff --git a/src/main/java/click/kamil/examples/statemachine/inheritancestate/States.java b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/States.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/inheritancestate/States.java rename to state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/States.java diff --git a/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/app/StateMachineApplication.java b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/app/StateMachineApplication.java new file mode 100644 index 0000000..b5dc57c --- /dev/null +++ b/state_machines/inheritance_state_machine/src/main/java/click/kamil/examples/statemachine/inheritancestate/app/StateMachineApplication.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine.inheritancestate.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +class StateMachineApplication { + public static void main(String[] args) { + SpringApplication.run(StateMachineApplication.class, args); + } +} diff --git a/state_machines/inheritance_state_machine/src/main/resources/application.properties b/state_machines/inheritance_state_machine/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machines/inheritance_state_machine/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machines/inheritance_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java b/state_machines/inheritance_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java new file mode 100644 index 0000000..95af6f1 --- /dev/null +++ b/state_machines/inheritance_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +} diff --git a/state_machines/simple_state_machine/.gitignore b/state_machines/simple_state_machine/.gitignore new file mode 100644 index 0000000..c022c2a --- /dev/null +++ b/state_machines/simple_state_machine/.gitignore @@ -0,0 +1,45 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + + + +#### added +*.png +*.dot +*.scxml.xml +Combined.java \ No newline at end of file diff --git a/state_machines/simple_state_machine/build.gradle b/state_machines/simple_state_machine/build.gradle new file mode 100644 index 0000000..0f14971 --- /dev/null +++ b/state_machines/simple_state_machine/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.5.3' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'click.kamil' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.springframework.statemachine:spring-statemachine-starter:3.2.0' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/src/main/java/click/kamil/examples/statemachine/simple/OrderEvents.java b/state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/OrderEvents.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/simple/OrderEvents.java rename to state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/OrderEvents.java diff --git a/src/main/java/click/kamil/examples/statemachine/simple/OrderStates.java b/state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/OrderStates.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/simple/OrderStates.java rename to state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/OrderStates.java diff --git a/src/main/java/click/kamil/examples/statemachine/simple/SimpleEnumStateMachineConfiguration.java b/state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/SimpleEnumStateMachineConfiguration.java similarity index 100% rename from src/main/java/click/kamil/examples/statemachine/simple/SimpleEnumStateMachineConfiguration.java rename to state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/SimpleEnumStateMachineConfiguration.java diff --git a/state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/app/StateMachineApplication.java b/state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/app/StateMachineApplication.java new file mode 100644 index 0000000..2030f4d --- /dev/null +++ b/state_machines/simple_state_machine/src/main/java/click/kamil/examples/statemachine/simple/app/StateMachineApplication.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine.simple.app; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +class StateMachineApplication { + public static void main(String[] args) { + SpringApplication.run(StateMachineApplication.class, args); + } +} diff --git a/state_machines/simple_state_machine/src/main/resources/application.properties b/state_machines/simple_state_machine/src/main/resources/application.properties new file mode 100644 index 0000000..1cd01ff --- /dev/null +++ b/state_machines/simple_state_machine/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=statemachinedemo diff --git a/state_machines/simple_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java b/state_machines/simple_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java new file mode 100644 index 0000000..95af6f1 --- /dev/null +++ b/state_machines/simple_state_machine/src/test/java/click/kamil/examples/statemachine/MyTest.java @@ -0,0 +1,11 @@ +package click.kamil.examples.statemachine; + +import org.junit.jupiter.api.Test; + +class MyTest { + + @Test + void contextLoads() { + } + +}