diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 112be4284359582cc9505d8af7adb74fc241ce76..92661275c51542eb15ed4e155b228cc91d4d32ed 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,26 +6,29 @@ <sourceOutputDir name="target/generated-sources/annotations" /> <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> <outputRelativeToContentRoot value="true" /> - <module name="unl-tools-infrastructure" /> + <module name="unl-tools-application" /> <module name="unl-tools-core" /> + <module name="unl-tools-infrastructure" /> </profile> - <profile name="Annotation profile for unl-tools-main" enabled="true"> + <profile name="Annotation profile for unl-tools" enabled="true"> <sourceOutputDir name="target/generated-sources/annotations" /> <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> <outputRelativeToContentRoot value="true" /> - <option name="project" value="fr.tetras_libre.unl/unl-tools-app" /> + <option name="project" value="fr.tetras_libre.unl/unl-tools-main" /> <processorPath useClasspath="false"> <entry name="$MAVEN_REPOSITORY$/info/picocli/picocli-codegen/4.2.0/picocli-codegen-4.2.0.jar" /> <entry name="$MAVEN_REPOSITORY$/info/picocli/picocli/4.2.0/picocli-4.2.0.jar" /> </processorPath> - <module name="unl-tools-app" /> + <module name="unl-tools-main" /> </profile> </annotationProcessing> <bytecodeTargetLevel target="11"> <module name="unl-parser" target="11" /> <module name="unl-tools-app" target="11" /> + <module name="unl-tools-application" target="11" /> <module name="unl-tools-core" target="11" /> <module name="unl-tools-infrastructure" target="11" /> + <module name="unl-tools-main" target="11" /> <module name="unl2rdf" target="11" /> <module name="unl2rdf-app" target="11" /> <module name="unlTools" target="11" /> @@ -35,6 +38,7 @@ <option name="ADDITIONAL_OPTIONS_OVERRIDE"> <module name="unl-parser" options="" /> <module name="unl-tools-app" options="-Aproject=fr.tetras_libre.unl/unl-tools-app" /> + <module name="unl-tools-main" options="-Aproject=fr.tetras_libre.unl/unl-tools-main" /> <module name="unl2rdf" options="-Aproject=unl2rdf/unl2rdf" /> <module name="unl2rdf-app" options="-Aproject=fr.tetras_libre.unl/unl2rdf-app" /> </option> diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 63015661248eb3b451adc962d2e580f43ff4f262..06ab4d0d5212b06f6f6710c4caaca3d4beb484b0 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,10 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="Encoding"> - <file url="file://$PROJECT_DIR$/unl-tools-app/src/main/java" charset="UTF-8" /> - <file url="file://$PROJECT_DIR$/unl-tools-app/src/main/resources" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/unl-tools-application/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/unl-tools-application/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/unl-tools-core/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/unl-tools-infrastructure/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/unl-tools-infrastructure/src/main/resources" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/unl-tools-main/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/unl-tools-main/src/main/resources" charset="UTF-8" /> </component> </project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ba348da52a2036664ece6f26fd26a12926a42c27..dbdc2e08bd7bf88ae3851fbcccbd8ff0293f142d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,6 +5,7 @@ <list> <option value="$PROJECT_DIR$/pom.xml" /> <option value="$PROJECT_DIR$/../rdf/pom.xml" /> + <option value="$PROJECT_DIR$/unl-tools-main/pom.xml" /> </list> </option> </component> diff --git a/.idea/modules.xml b/.idea/modules.xml index 7e06cd3831aed4b348841c6396e6e389af854885..4e2ba7aaa0d9ef3bee6e1be5b8b77c3500bb2e8a 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,9 +2,10 @@ <project version="4"> <component name="ProjectModuleManager"> <modules> - <module fileurl="file://$PROJECT_DIR$/unl-tools-app/unl-tools-app.iml" filepath="$PROJECT_DIR$/unl-tools-app/unl-tools-app.iml" /> + <module fileurl="file://$PROJECT_DIR$/unl-tools-application/unl-tools-application.iml" filepath="$PROJECT_DIR$/unl-tools-application/unl-tools-application.iml" /> <module fileurl="file://$PROJECT_DIR$/unl-tools-core/unl-tools-core.iml" filepath="$PROJECT_DIR$/unl-tools-core/unl-tools-core.iml" /> <module fileurl="file://$PROJECT_DIR$/unl-tools-infrastructure/unl-tools-infrastructure.iml" filepath="$PROJECT_DIR$/unl-tools-infrastructure/unl-tools-infrastructure.iml" /> + <module fileurl="file://$PROJECT_DIR$/unl-tools-main/unl-tools-main.iml" filepath="$PROJECT_DIR$/unl-tools-main/unl-tools-main.iml" /> <module fileurl="file://$PROJECT_DIR$/unlTools.iml" filepath="$PROJECT_DIR$/unlTools.iml" /> </modules> </component> diff --git a/pom.xml b/pom.xml index cd3992aa66c9b50064b1ac1ed070d7b6ab3c047d..a344dcf2c47ca7fc7024f6fb6b9f6a5007ed3e07 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -13,12 +13,13 @@ <packaging>pom</packaging> - <name>unl-tools-main</name> + <name>unl-tools</name> <modules> <module>unl-tools-core</module> - <module>unl-tools-app</module> + <module>unl-tools-main</module> <module>unl-tools-infrastructure</module> + <module>unl-tools-application</module> </modules> <build> diff --git a/unl-tools-application/pom.xml b/unl-tools-application/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f6d18dd2e9d9758160fba569f0790a6a90546bdd --- /dev/null +++ b/unl-tools-application/pom.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>unlTools</artifactId> + <groupId>fr.tetras_libre.unl</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>unl-tools-application</artifactId> + + <dependencies> + <dependency> + <groupId>fr.tetras_libre.unl</groupId> + <artifactId>unl-tools-core</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> + </dependencies> + + +</project> \ No newline at end of file diff --git a/unl-tools-application/src/main/java/fr/tetras_libre/unltools/CommandHandlerResolverBuilder.java b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/CommandHandlerResolverBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..692e47e33fe6323365cd0d2b2c146ca4cbe585bb --- /dev/null +++ b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/CommandHandlerResolverBuilder.java @@ -0,0 +1,25 @@ +package fr.tetras_libre.unltools; + +import fr.tetras_libre.unltools.cqrs.Command; +import fr.tetras_libre.unltools.cqrs.CommandHandler; +import fr.tetras_libre.unltools.cqrs.CommandHandlerResolver; + +import java.util.Dictionary; +import java.util.Hashtable; + +public class CommandHandlerResolverBuilder { + private final Dictionary<Class<? extends Command>, Class<? extends CommandHandler>> map; + + public CommandHandlerResolverBuilder() { + this.map = new Hashtable<>(); + } + + public <TResult, THandler extends CommandHandler<TCommand, TResult>, TCommand extends Command<TResult>> CommandHandlerResolverBuilder addHandler(Class<THandler> handler, Class<TCommand> command) { + this.map.put(command, handler); + return this; + } + + public CommandHandlerResolver createCommandResolver() { + return new CommandHandlerResolver(this.map); + } +} diff --git a/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocuments.java b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocuments.java new file mode 100644 index 0000000000000000000000000000000000000000..efec7a17bbf3df4ea5cc9d74f09619d43d979314 --- /dev/null +++ b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocuments.java @@ -0,0 +1,31 @@ +package fr.tetras_libre.unltools.Convert; + +import fr.tetras_libre.unltools.cqrs.Command; +import fr.tetras_libre.unltools.cqrs.Result; +import fr.tetras_libre.unltools.unl.GraphImporter; + +import java.io.Writer; + +public class ExportUnlDocuments implements Command<Result> { + private final GraphImporter graphImporter; + private final String exporterName; + private final Writer writer; + + public ExportUnlDocuments(GraphImporter graphImporter, String exporterName, Writer writer) { + this.graphImporter = graphImporter; + this.exporterName = exporterName; + this.writer = writer; + } + + public GraphImporter getGraphImporter() { + return this.graphImporter; + } + + public String getExporterName() { + return this.exporterName; + } + + public Writer getWriter() { + return this.writer; + } +} diff --git a/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..62ed3433b85252679ebb70ff5cd605ee980ff57e --- /dev/null +++ b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java @@ -0,0 +1,27 @@ +package fr.tetras_libre.unltools.Convert; + +import fr.tetras_libre.unltools.cqrs.CommandHandler; +import fr.tetras_libre.unltools.cqrs.Result; +import fr.tetras_libre.unltools.unl.GraphExporterFactory; + +import java.io.IOException; + +public class ExportUnlDocumentsHandler implements CommandHandler<ExportUnlDocuments, Result> { + private final GraphExporterFactory factory; + + public ExportUnlDocumentsHandler(GraphExporterFactory factory) { + this.factory = factory; + } + + @Override + public Result handle(ExportUnlDocuments command) { + try { + var graphExporter = factory.createGraphExporter(command.getWriter(), command.getExporterName()); + graphExporter.write(command.getGraphImporter().Import()); + } catch (IOException e) { + return Result.Failure(String.format("Cannot export unl documents to format '%s'", command.getExporterName()), + e); + } + return Result.Success(); + } +} diff --git a/unl-tools-application/src/main/java/fr/tetras_libre/unltools/DefaultCommandHandlerResolverFactory.java b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/DefaultCommandHandlerResolverFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5c0f95e525cdbe37e435b2746976117d4e7dc4e7 --- /dev/null +++ b/unl-tools-application/src/main/java/fr/tetras_libre/unltools/DefaultCommandHandlerResolverFactory.java @@ -0,0 +1,14 @@ +package fr.tetras_libre.unltools; + +import fr.tetras_libre.unltools.Convert.ExportUnlDocuments; +import fr.tetras_libre.unltools.Convert.ExportUnlDocumentsHandler; +import fr.tetras_libre.unltools.cqrs.CommandHandlerResolver; + +public class DefaultCommandHandlerResolverFactory { + public static CommandHandlerResolver create() { + var builder = new CommandHandlerResolverBuilder() + .addHandler(ExportUnlDocumentsHandler.class, ExportUnlDocuments.class); + + return builder.createCommandResolver(); + } +} diff --git a/unl-tools-application/unl-tools-application.iml b/unl-tools-application/unl-tools-application.iml new file mode 100644 index 0000000000000000000000000000000000000000..200cdeaa5287029d1a596c76d68f6181bcf03153 --- /dev/null +++ b/unl-tools-application/unl-tools-application.iml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_11"> + <output url="file://$MODULE_DIR$/target/classes" /> + <output-test url="file://$MODULE_DIR$/target/test-classes" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/target" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="unl-tools-core" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.0-M1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0-M1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.7.0-M1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.7.0-M1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.7.0-M1" level="project" /> + <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.7.0-M1" level="project" /> + </component> +</module> \ No newline at end of file diff --git a/unl-tools-core/pom.xml b/unl-tools-core/pom.xml index cbdcd7d89703384cc11fb49ce8392987f2055587..5a2eb25b12d8cbb2becd02266ab2c3d3dfeb5cda 100644 --- a/unl-tools-core/pom.xml +++ b/unl-tools-core/pom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Command.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Command.java new file mode 100644 index 0000000000000000000000000000000000000000..edf837f17845e31d44690493df30c278eb3c2dd0 --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Command.java @@ -0,0 +1,4 @@ +package fr.tetras_libre.unltools.cqrs; + +public interface Command<TResult> { +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandler.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..2efdaef8637a96cf47e975132b4f472e8b11b137 --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandler.java @@ -0,0 +1,5 @@ +package fr.tetras_libre.unltools.cqrs; + +public interface CommandHandler<Cmd extends Command<TResult>, TResult> { + TResult handle(Cmd command); +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandlerResolver.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandlerResolver.java new file mode 100644 index 0000000000000000000000000000000000000000..671d5791c237b6fd26fb54c3567da583ce38e7af --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandlerResolver.java @@ -0,0 +1,20 @@ +package fr.tetras_libre.unltools.cqrs; + +import java.util.Dictionary; +import java.util.Enumeration; + +public class CommandHandlerResolver { + private Dictionary<Class<? extends Command>, Class<? extends CommandHandler>> associations; + + public CommandHandlerResolver(Dictionary<Class<? extends Command>, Class<? extends CommandHandler>> associations) { + this.associations = associations; + } + + public Class<? extends CommandHandler> getHandler(Class<?> cmd) { + return associations.get(cmd); + } + + public Enumeration<Class<? extends CommandHandler>> getHandlers() { + return associations.elements(); + } +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Mediator.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Mediator.java new file mode 100644 index 0000000000000000000000000000000000000000..091200f072fca051e7cc9e74de208b1e71f6eb14 --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Mediator.java @@ -0,0 +1,16 @@ +package fr.tetras_libre.unltools.cqrs; + +public class Mediator { + + private final ServiceProvider serviceProvider; + + public Mediator(ServiceProvider serviceProvider) { + this.serviceProvider = serviceProvider; + } + + public <TCmd extends Command<TResult>, TResult> TResult Dispatch(TCmd cmd) { + var handlerResolver = (CommandHandlerResolver) serviceProvider.getService(CommandHandlerResolver.class); + var handler = (CommandHandler<Command<TResult>, TResult>) serviceProvider.getService(handlerResolver.getHandler(cmd.getClass())); + return handler.handle(cmd); + } +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Result.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Result.java new file mode 100644 index 0000000000000000000000000000000000000000..c9bd9c71435e095bb4cd9ac40fd4c60d29e5a683 --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Result.java @@ -0,0 +1,42 @@ +package fr.tetras_libre.unltools.cqrs; + +public class Result { + private static Result success = new Result(true); + + private boolean isSuccess; + private String message; + private Exception e; + + private Result(boolean isSuccess) { + this(isSuccess, null, null); + } + + private Result(boolean isSuccess, String message, Exception e) { + if (isSuccess) { + this.isSuccess = true; + } + + if (!isSuccess && null != message) { + this.message = message; + } + + if (!isSuccess && null != e) { + this.e = e; + if (null == this.message || this.message.isBlank()) { + this.message = e.getMessage(); + } + } + } + + public static Result Success() { + return success; + } + + public static Result Failure(String message) { + return new Result(false, message, null); + } + + public static Result Failure(String message, Exception exception) { + return new Result(false, message, exception); + } +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProvider.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..3d6ca418c94b8f901c470f2508f4da28ed78d62a --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProvider.java @@ -0,0 +1,7 @@ +package fr.tetras_libre.unltools.cqrs; + +public interface ServiceProvider { + Object getService(Class<?> service); + + <TCmd extends Command<TResult>, TResult> CommandHandler<Command<TResult>, TResult> getHandler(Class<? extends TCmd> command); +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/Graph.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/Graph.java index 6d710a787ace2d6bf8eb9736abd75c77703bf0d9..33197d0d85d44bd13ac62076a486991bb149b41d 100644 --- a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/Graph.java +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/Graph.java @@ -142,18 +142,18 @@ public class Graph { @Override public boolean equals(Object obj) { - if(null == obj) { + if (null == obj) { return false; } - if(!(obj instanceof Graph)) { + if (!(obj instanceof Graph)) { return false; } return equals((Graph) obj); } - private boolean equals(Graph other){ + private boolean equals(Graph other) { return this.nodes.equals(other.nodes) && this.relations.equals(other.relations); } diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphImporter.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphImporter.java new file mode 100644 index 0000000000000000000000000000000000000000..001f25097062857ae3bc10759e9758508d0da435 --- /dev/null +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphImporter.java @@ -0,0 +1,7 @@ +package fr.tetras_libre.unltools.unl; + +import java.util.List; + +public interface GraphImporter { + List<UnlDocument> Import(); +} diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphRelation.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphRelation.java index 7b56dc5279f05b3f20337ccf7b9fe91cebaa73d9..2af346870121f0c00f033c4375e4097004d56d61 100644 --- a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphRelation.java +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphRelation.java @@ -52,11 +52,11 @@ public class GraphRelation { @Override public boolean equals(Object obj) { - if(null == obj) { + if (null == obj) { return false; } - if(!(obj instanceof GraphRelation)) { + if (!(obj instanceof GraphRelation)) { return false; } diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocument.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocument.java index eb5552965911d1fec14a3be07c5a2573f3de1241..ed9116ac88c1a896db8abd5b9b748ed1a9810a3c 100644 --- a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocument.java +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocument.java @@ -73,17 +73,17 @@ public class UnlDocument { @Override public boolean equals(Object obj) { - if(obj == null) { + if (obj == null) { return false; } - if(!(obj instanceof UnlDocument)){ + if (!(obj instanceof UnlDocument)) { return false; } - return equals((UnlDocument)obj); + return equals((UnlDocument) obj); } - private boolean equals(UnlDocument other){ + private boolean equals(UnlDocument other) { return this.docElements.equals(other.docElements) && (this.hasError() == other.hasError()); } diff --git a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocumentNode.java b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocumentNode.java index 08e63d8380013bdc45a106e47bf14cb5b02664e3..6d4c9f25b56035900a7e7f2901bad553658609d5 100644 --- a/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocumentNode.java +++ b/unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/UnlDocumentNode.java @@ -75,11 +75,11 @@ public class UnlDocumentNode { @Override public boolean equals(Object obj) { - if(null == obj){ + if (null == obj) { return false; } - if(!(obj instanceof UnlDocumentNode)){ + if (!(obj instanceof UnlDocumentNode)) { return false; } diff --git a/unl-tools-core/src/test/java/fr/tetras_libre/unltools/unl/EqualsBuilderTest.java b/unl-tools-core/src/test/java/fr/tetras_libre/unltools/unl/EqualsBuilderTest.java index 9918265676dbd518249eac9869bf1cf15be69c03..8fd693d581637da9c50bf20d670f09086db35d42 100644 --- a/unl-tools-core/src/test/java/fr/tetras_libre/unltools/unl/EqualsBuilderTest.java +++ b/unl-tools-core/src/test/java/fr/tetras_libre/unltools/unl/EqualsBuilderTest.java @@ -4,21 +4,21 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; class EqualsBuilderTest { - @Test - void isEqual() { - String s1 = "qdfsf"; - int i1 = 1; - long l1 = 2L; - EqualsBuilder builder = new EqualsBuilder() - .append(s1) - .append(i1) - .append(l1); + @Test + void isEqual() { + String s1 = "qdfsf"; + int i1 = 1; + long l1 = 2L; + EqualsBuilder builder = new EqualsBuilder() + .append(s1) + .append(i1) + .append(l1); - EqualsBuilder builder2 = new EqualsBuilder() - .append(s1) - .append(i1) - .append(l1); + EqualsBuilder builder2 = new EqualsBuilder() + .append(s1) + .append(i1) + .append(l1); - Assertions.assertTrue(() -> builder.isEqual(builder2)); - } + Assertions.assertTrue(() -> builder.isEqual(builder2)); + } } \ No newline at end of file diff --git a/unl-tools-infrastructure/pom.xml b/unl-tools-infrastructure/pom.xml index 537df2bcb9d23ca0659008738e030e12f130198c..4a0f7f55293dc4d064e21c81bd943fd35f9fe5f5 100644 --- a/unl-tools-infrastructure/pom.xml +++ b/unl-tools-infrastructure/pom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -38,6 +38,16 @@ <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>org.picocontainer</groupId> + <artifactId>picocontainer</artifactId> + <version>2.15</version> + </dependency> + <dependency> + <groupId>fr.tetras_libre.unl</groupId> + <artifactId>unl-tools-application</artifactId> + <version>1.0-SNAPSHOT</version> + </dependency> </dependencies> diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/ApplicationStartup.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/ApplicationStartup.java new file mode 100644 index 0000000000000000000000000000000000000000..d3654e77fcd8398acf428745154e7d9d733a3e52 --- /dev/null +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/ApplicationStartup.java @@ -0,0 +1,29 @@ +package fr.tetras_libre.unltools; + +import fr.tetras_libre.unltools.cqrs.CommandHandlerResolver; +import fr.tetras_libre.unltools.cqrs.Mediator; +import fr.tetras_libre.unltools.cqrs.ServiceProvider; +import fr.tetras_libre.unltools.cqrs.ServiceProviderImpl; +import fr.tetras_libre.unltools.unl.GraphExporterFactory; +import fr.tetras_libre.unltools.unl.exporters.DefaultGraphExporterFactory; +import org.picocontainer.MutablePicoContainer; +import org.picocontainer.containers.TransientPicoContainer; + +public class ApplicationStartup { + + public static ServiceProvider Initialize(CommandHandlerResolver commandHandlerResolver) { + MutablePicoContainer picoContainer = new TransientPicoContainer(); + + picoContainer.addComponent(commandHandlerResolver); + for (var handlerToRegister = commandHandlerResolver.getHandlers(); handlerToRegister.hasMoreElements(); ) { + picoContainer.addComponent(handlerToRegister.nextElement()); + } + + picoContainer.addComponent(GraphExporterFactory.class, DefaultGraphExporterFactory.class); + + var result = new ServiceProviderImpl(picoContainer); + picoContainer.addComponent(ServiceProvider.class, result); + picoContainer.addComponent(Mediator.class); + return result; + } +} diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProviderImpl.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProviderImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..918647b63b8b9a90f657d99580849e4c68575962 --- /dev/null +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProviderImpl.java @@ -0,0 +1,26 @@ +package fr.tetras_libre.unltools.cqrs; + +import org.picocontainer.PicoContainer; + +public class ServiceProviderImpl implements ServiceProvider { + PicoContainer container; + + public ServiceProviderImpl(PicoContainer container) { + this.container = container; + } + + @Override + public Object getService(Class<?> service) { + return this.container.getComponent(service); + } + + public <T> T getInternalService(Class<T> s) { + return (T) getService(s); + } + + @Override + public <TCmd extends Command<TResult>, TResult> CommandHandler<Command<TResult>, TResult> getHandler(Class<? extends TCmd> command) { + var commandResolver = getInternalService(CommandHandlerResolver.class); + return getInternalService(commandResolver.getHandler(command)); + } +} diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/GraphExtensions.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/GraphExtensions.java index 73bf85de6124c9c7eacdbf95b41a9c2834988a45..a7f838ec73c7d74318a364783212ec2677359fd3 100644 --- a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/GraphExtensions.java +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/GraphExtensions.java @@ -1,8 +1,5 @@ package fr.tetras_libre.unltools.unl; -import fr.tetras_libre.unltools.unl.Graph; -import fr.tetras_libre.unltools.unl.GraphRelation; - import java.util.Collection; import java.util.LinkedList; import java.util.stream.Stream; diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/SubGraphReferenceNodeExtensions.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/SubGraphReferenceNodeExtensions.java index 19144d2e570cec690bec0560e6020b25743ac4b6..34ae9f7e9dc7a847f4f00196037166e7b7a9ccd8 100644 --- a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/SubGraphReferenceNodeExtensions.java +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/SubGraphReferenceNodeExtensions.java @@ -1,9 +1,5 @@ package fr.tetras_libre.unltools.unl; -import fr.tetras_libre.unltools.unl.Graph; -import fr.tetras_libre.unltools.unl.NoEntryNodeException; -import fr.tetras_libre.unltools.unl.SubGraphReferenceNode; - public class SubGraphReferenceNodeExtensions { public static String getScopeNameFromSubGraphReferenceNode(SubGraphReferenceNode g) { return g.getReferenceNumber().substring(1); diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverter.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverter.java index 87152027a7d342539b5278ea45db98c4ee6d4c3f..2ab59e8c738215b4ac0260ed2ef491f631b37174 100644 --- a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverter.java +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverter.java @@ -1,8 +1,8 @@ package fr.tetras_libre.unltools.unl.exporters.rdf; +import fr.tetras_libre.rdf.vocabulary.UNL; import org.apache.jena.ontology.ObjectProperty; import org.apache.jena.ontology.OntModel; -import fr.tetras_libre.rdf.vocabulary.UNL; public class RelationLabelToUnlPropertyConverter { diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UnlDocumentToRdfConverter.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UnlDocumentToRdfConverter.java index 19667199cf77c4b3346bcc13d96f28d05689406a..5b778b41582dfb77d57672ee49b2df7349f485ff 100644 --- a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UnlDocumentToRdfConverter.java +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UnlDocumentToRdfConverter.java @@ -2,8 +2,6 @@ package fr.tetras_libre.unltools.unl.exporters.rdf; import fr.tetras_libre.rdf.vocabulary.UNL; import fr.tetras_libre.unltools.unl.*; -import fr.tetras_libre.unltools.unl.GraphExtensions; -import fr.tetras_libre.unltools.unl.SubGraphReferenceNodeExtensions; import org.apache.jena.ontology.Individual; import org.apache.jena.ontology.OntModel; import org.apache.jena.ontology.Ontology; diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UtilGraphNodeUri.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UtilGraphNodeUri.java index f8d5e5c5d2952823d25c1dced45f9b5c51068e5b..5c20e5658328b1598552a858c13ab21650461a5b 100644 --- a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UtilGraphNodeUri.java +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/exporters/rdf/UtilGraphNodeUri.java @@ -2,8 +2,8 @@ package fr.tetras_libre.unltools.unl.exporters.rdf; import fr.tetras_libre.unltools.unl.GraphNode; import fr.tetras_libre.unltools.unl.SubGraphReferenceNode; -import fr.tetras_libre.unltools.unl.UniversalWordNode; import fr.tetras_libre.unltools.unl.SubGraphReferenceNodeExtensions; +import fr.tetras_libre.unltools.unl.UniversalWordNode; import static fr.tetras_libre.unltools.unl.exporters.rdf.Slugify.slugify; diff --git a/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java new file mode 100644 index 0000000000000000000000000000000000000000..f293807504a8bc545bdd7fa27ee2f18c7c2d8518 --- /dev/null +++ b/unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java @@ -0,0 +1,33 @@ +package fr.tetras_libre.unltools.unl.parser; + +import fr.tetras_libre.unltools.unl.GraphImporter; +import fr.tetras_libre.unltools.unl.UnlDocument; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.List; + +public class UnlGraphImporterFromUnlParser implements GraphImporter { + private List<UnlDocument> documents; + private BufferedReader bufferedReader; + + public UnlGraphImporterFromUnlParser(BufferedReader bufferedReader) { + this.bufferedReader = bufferedReader; + } + + public static UnlGraphImporterFromUnlParser FromInputReader(InputStreamReader inputStreamReader) { + return new UnlGraphImporterFromUnlParser(new BufferedReader(inputStreamReader)); + } + + @Override + public List<UnlDocument> Import() { + if (documents == null) { + try { + documents = new UnlParser(this.bufferedReader).createUnlDocumentList(); + } catch (ParseException e) { + e.printStackTrace(); + } + } + return documents; + } +} diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/ApplicationStartupTest.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/ApplicationStartupTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e03137e20b486b6a049467884b6306f0f6602ee5 --- /dev/null +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/ApplicationStartupTest.java @@ -0,0 +1,49 @@ +package fr.tetras_libre.unltools; + +import fr.tetras_libre.unltools.Convert.ExportUnlDocuments; +import fr.tetras_libre.unltools.Convert.ExportUnlDocumentsHandler; +import fr.tetras_libre.unltools.cqrs.CommandHandlerResolver; +import fr.tetras_libre.unltools.cqrs.Result; +import fr.tetras_libre.unltools.unl.CatsUnl; +import fr.tetras_libre.unltools.unl.exporters.GraphExporterNames; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.concurrent.atomic.AtomicReference; + +public class ApplicationStartupTest { + + @Test + public void ApplicationShouldCreateSimpleHandlerWithoutException() { + var appService = ApplicationStartup.Initialize(CreateDefaultCommandResolver()); + var testCommand = new TestCommand(); + var handler = appService.getHandler(TestCommand.class); + + + AtomicReference<Result> resultAtomicReference = new AtomicReference<>(); + Assertions.assertDoesNotThrow(() -> resultAtomicReference.set(handler.handle(testCommand))); + Assertions.assertSame(resultAtomicReference.get(), Result.Success()); + } + + @Test + public void ApplicationShouldCreateHandlerWithContructorInjectionWithoutException() throws IOException { + var appService = ApplicationStartup.Initialize(CreateDefaultCommandResolver()); + var stringWriter = new StringWriter(); + var exportCommand = new ExportUnlDocuments(new CatsUnl(), GraphExporterNames.DOT_EXPORTER, stringWriter); + var handler = appService.getHandler(ExportUnlDocuments.class); + AtomicReference<Result> resultAtomicReference = new AtomicReference<>(); + + Assertions.assertDoesNotThrow(() -> resultAtomicReference.set(handler.handle(exportCommand))); + Assertions.assertFalse(stringWriter.toString().isBlank()); + stringWriter.close(); + } + + CommandHandlerResolver CreateDefaultCommandResolver() { + return new CommandHandlerResolverBuilder() + .addHandler(TestCommandHandler.class, TestCommand.class) + .addHandler(ExportUnlDocumentsHandler.class, ExportUnlDocuments.class) + .createCommandResolver(); + } +} \ No newline at end of file diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommand.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..fc18c3fced86679d5156b6df6db5fdcc5744bea4 --- /dev/null +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommand.java @@ -0,0 +1,8 @@ +package fr.tetras_libre.unltools; + +import fr.tetras_libre.unltools.cqrs.Command; +import fr.tetras_libre.unltools.cqrs.Result; + +public class TestCommand implements Command<Result> { + +} diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommandHandler.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommandHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..6cfccd0b142ac0fc472080ca54d2f4a809d9f308 --- /dev/null +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommandHandler.java @@ -0,0 +1,16 @@ +package fr.tetras_libre.unltools; + +import fr.tetras_libre.unltools.cqrs.CommandHandler; +import fr.tetras_libre.unltools.cqrs.Result; + +public class TestCommandHandler implements CommandHandler<TestCommand, Result> { + + public TestCommandHandler() { + + } + + @Override + public Result handle(TestCommand command) { + return Result.Success(); + } +} diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AbstractFlyweightUnlArgumentProvider.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AbstractFlyweightUnlArgumentProvider.java index f09f058b3c27203c99c9669a8e13ec43f58f65f5..b1569e89e9f8173d09dad09d3470792b249f9568 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AbstractFlyweightUnlArgumentProvider.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AbstractFlyweightUnlArgumentProvider.java @@ -4,7 +4,7 @@ import java.util.Dictionary; import java.util.Hashtable; import java.util.List; -public abstract class AbstractFlyweightUnlArgumentProvider extends AbstractUnlArgumentProvider { +public abstract class AbstractFlyweightUnlArgumentProvider extends AbstractUnlArgumentProvider implements GraphImporter { private static final Dictionary<Class<?>, List<UnlDocument>> values = new Hashtable<>(); protected abstract List<UnlDocument> buildUnlDocuments(); @@ -21,5 +21,7 @@ public abstract class AbstractFlyweightUnlArgumentProvider extends AbstractUnlAr return values.get(this.getClass()); } - + final public List<UnlDocument> Import() { + return getUnlDocuments(); + } } diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AllUnl.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AllUnl.java index 106890ec237eb60ef0abd93fbd3caa633c761b4b..43274beb44c472e96ea37a9739ec652c46c62084 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AllUnl.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/AllUnl.java @@ -1,6 +1,5 @@ package fr.tetras_libre.unltools.unl; -import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/CatsUnl.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/CatsUnl.java index d6562094eb97d53be9f02df63ad450a72a3873ef..951f79d7bb43909b9b76eccb287ce12f671a3ac5 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/CatsUnl.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/CatsUnl.java @@ -2,7 +2,7 @@ package fr.tetras_libre.unltools.unl; import java.util.*; -public class CatsUnl extends AbstractFlyweightUnlArgumentProvider { +public class CatsUnl extends AbstractFlyweightUnlArgumentProvider implements GraphImporter { public static UnlDocumentNode buildSentenceNode() { var graph = new Graph(); diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R1Unl.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R1Unl.java index 323ed470cc681605c3db02e147ec9f9fd4530179..8d8af44297fde4546b232eafec06667d57d0d8da 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R1Unl.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R1Unl.java @@ -1,21 +1,12 @@ package fr.tetras_libre.unltools.unl; -import java.util.*; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.TreeSet; public class R1Unl extends AbstractFlyweightUnlArgumentProvider { - @Override - final protected List<UnlDocument> buildUnlDocuments() { - - var unlDocument = new UnlDocument("[D]"); - - UnlDocumentNode unlDocumentNode = buildSentenceNode(); - - unlDocument.add(unlDocumentNode); - - return Collections.singletonList(unlDocument); - } - public static UnlDocumentNode buildSentenceNode() { var graph = new Graph(); @@ -143,4 +134,16 @@ public class R1Unl extends AbstractFlyweightUnlArgumentProvider { return new UnlDocumentNode(UnlDocumentNodeType.Sentence, "[S:R1]", graph); } + + @Override + final protected List<UnlDocument> buildUnlDocuments() { + + var unlDocument = new UnlDocument("[D]"); + + UnlDocumentNode unlDocumentNode = buildSentenceNode(); + + unlDocument.add(unlDocumentNode); + + return Collections.singletonList(unlDocument); + } } diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R2Unl.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R2Unl.java index 7b0ad0d6e42cfe27281f95fe89d649e7cae53083..78bf75398a11eb551c2efa6fe29efc70d934a963 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R2Unl.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/R2Unl.java @@ -4,18 +4,6 @@ import java.util.*; public class R2Unl extends AbstractFlyweightUnlArgumentProvider { - @Override - final protected List<UnlDocument> buildUnlDocuments() { - - var unlDocument = new UnlDocument("[D]"); - - UnlDocumentNode unlDocumentNode = buildSentenceNode(); - - unlDocument.add(unlDocumentNode); - - return Collections.singletonList(unlDocument); - } - public static UnlDocumentNode buildSentenceNode() { var graph = new Graph(); @@ -142,4 +130,16 @@ public class R2Unl extends AbstractFlyweightUnlArgumentProvider { return new UnlDocumentNode(UnlDocumentNodeType.Sentence, "[S:R2]", graph); } + + @Override + final protected List<UnlDocument> buildUnlDocuments() { + + var unlDocument = new UnlDocument("[D]"); + + UnlDocumentNode unlDocumentNode = buildSentenceNode(); + + unlDocument.add(unlDocumentNode); + + return Collections.singletonList(unlDocument); + } } diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/dot/SentenceWithExpectedDotArgumentProvider.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/dot/SentenceWithExpectedDotArgumentProvider.java index 62451693695ae5291dd96a25fc9874829e73101c..769aae6efab7482cfc9a4b0fd64fa17dc2e6c8d6 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/dot/SentenceWithExpectedDotArgumentProvider.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/dot/SentenceWithExpectedDotArgumentProvider.java @@ -1,9 +1,5 @@ package fr.tetras_libre.unltools.unl.exporters.dot; -import fr.tetras_libre.unltools.unl.exporters.dot.AllSetenceWithExpectedDotChecker; -import fr.tetras_libre.unltools.unl.exporters.dot.CatSentenceWithExpectedDotChecker; -import fr.tetras_libre.unltools.unl.exporters.dot.R1SentenceWithExpectedDotChecker; -import fr.tetras_libre.unltools.unl.exporters.dot.R2SentenceWithExpectedDotChecker; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverterTest.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverterTest.java index 4a7c80f97dea84ded2a3932f10dd180801cf1a6f..a6d4200b0ecd8623b6c54f0560c3358546a822e7 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverterTest.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/exporters/rdf/RelationLabelToUnlPropertyConverterTest.java @@ -1,7 +1,6 @@ package fr.tetras_libre.unltools.unl.exporters.rdf; import org.apache.jena.ontology.ObjectProperty; -import org.apache.jena.ontology.OntModel; import org.apache.jena.rdf.model.ModelFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -11,14 +10,14 @@ import java.util.concurrent.atomic.AtomicReference; class RelationLabelToUnlPropertyConverterTest { @Test - public void getObjectPropertyShouldGiveAssociatedUNLressource(){ + public void getObjectPropertyShouldGiveAssociatedUNLressource() { var relationLabelToUnlProperty = new RelationLabelToUnlPropertyConverter(); Assertions.assertDoesNotThrow(() -> relationLabelToUnlProperty.getObjectProperty("aoj", null)); } @Test - public void getObjectPropertyShouldNotThrowOnUnknownResource(){ + public void getObjectPropertyShouldNotThrowOnUnknownResource() { AtomicReference<ObjectProperty> objectPropertyAtomicReference = new AtomicReference<>(); var relationLabelToUnlProperty = new RelationLabelToUnlPropertyConverter(); var unknownProperty = "dfadsfijoplknkjadfljgliukjelkjkdm"; diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/UnlParserTest.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/UnlParserTest.java index 28dd3e0cf93a31e05bbbdd17c5050e82f02bd47e..7bc9410c46b7cfd8b6c8a661f7b236345b116839 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/UnlParserTest.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/UnlParserTest.java @@ -4,7 +4,6 @@ import fr.tetras_libre.unltools.unl.UnlDocument; import fr.tetras_libre.unltools.unl.UnlSentences; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ArgumentsSources; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; @@ -13,6 +12,13 @@ import java.util.stream.Stream; class UnlParserTest { + private static Stream<SentenceWithExpectedUnlDocumentsChecker> unlParserShouldParseSentenceAndGetExpectedUnlDocuments() { + return Stream.of(new R1SentenceWithExpectedUnlDocumentsChecker(), + new R2SentenceWithExpectedUnlDocumentsChecker(), + new CatsSentenceWithExpectedUnlDocumentsChecker(), + new AllSentenceWithExpectedUnlDocumentsChecker()); + } + @ParameterizedTest @ValueSource(strings = {UnlSentences.R1, UnlSentences.R2, UnlSentences.Cats, UnlSentences.All}) void unlParserShouldParseSimpleSentenceWithoutException(String input) { @@ -43,8 +49,6 @@ class UnlParserTest { return unlParser.get(); } - - @ParameterizedTest @MethodSource void unlParserShouldParseSentenceAndGetExpectedUnlDocuments(SentenceWithExpectedUnlDocumentsChecker input) { @@ -55,11 +59,4 @@ class UnlParserTest { input.assetSameAsExpected(); } - private static Stream<SentenceWithExpectedUnlDocumentsChecker> unlParserShouldParseSentenceAndGetExpectedUnlDocuments(){ - return Stream.of(new R1SentenceWithExpectedUnlDocumentsChecker(), - new R2SentenceWithExpectedUnlDocumentsChecker(), - new CatsSentenceWithExpectedUnlDocumentsChecker(), - new AllSentenceWithExpectedUnlDocumentsChecker()); - } - } \ No newline at end of file diff --git a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java index 97c487f78ef0d51b8dab9343b510dcdf93f4bc35..cd4cb337aadada7a853575000b0aaa1e96f7b9c1 100644 --- a/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java +++ b/unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/unl/parser/WrapperUnlParser.java @@ -17,6 +17,7 @@ public class WrapperUnlParser { /** * get UnlDocuments once the parsing is done + * * @return A list of UnlDocuments */ public Vector<UnlDocument> getUnlDocumentList() { @@ -68,6 +69,7 @@ public class WrapperUnlParser { /** * An error as occured during the parsing + * * @return true if an error occured, false otherwise */ public boolean hasError() { @@ -77,6 +79,7 @@ public class WrapperUnlParser { /** * Get errors of parsing + * * @return A vector of errors */ public Vector<String> getErrors() { diff --git a/unl-tools-infrastructure/unl-tools-infrastructure.iml b/unl-tools-infrastructure/unl-tools-infrastructure.iml index 095605ea887b71d3fd448e107c5a36bbf7367980..8b05d4fbb418ccaad01f7e2f69d3fd727a5d8b11 100644 --- a/unl-tools-infrastructure/unl-tools-infrastructure.iml +++ b/unl-tools-infrastructure/unl-tools-infrastructure.iml @@ -46,6 +46,8 @@ <orderEntry type="library" name="Maven: fr.tetras_libre.rdf:rdf-unl-java-vocabulary:1.0-SNAPSHOT" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.slf4j:slf4j-nop:1.7.30" level="project" /> <orderEntry type="module" module-name="unl-tools-core" /> + <orderEntry type="library" name="Maven: org.picocontainer:picocontainer:2.15" level="project" /> + <orderEntry type="module" module-name="unl-tools-application" /> <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.0-M1" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0-M1" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" /> diff --git a/unl-tools-app/pom.xml b/unl-tools-main/pom.xml similarity index 85% rename from unl-tools-app/pom.xml rename to unl-tools-main/pom.xml index 450e947391aaf51b1276ed61ba6907df113b4bd8..e4b966ef7deecc219bedba4e4446ab785d17fcd1 100644 --- a/unl-tools-app/pom.xml +++ b/unl-tools-main/pom.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> @@ -10,7 +10,7 @@ <version>1.0-SNAPSHOT</version> </parent> - <artifactId>unl-tools-app</artifactId> + <artifactId>unl-tools-main</artifactId> <packaging>jar</packaging> @@ -66,13 +66,15 @@ </excludes> </artifactSet> <transformers> - <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> + <transformer + implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <ManifestEntries> <mainClass>unl2rdf.Unl2Rdf</mainClass> <Build-Number>1</Build-Number> </ManifestEntries> </transformer> - <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer"> + <transformer + implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer"> </transformer> </transformers> <relocations> @@ -104,6 +106,12 @@ <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>fr.tetras_libre.unl</groupId> + <artifactId>unl-tools-application</artifactId> + <version>1.0-SNAPSHOT</version> + <scope>compile</scope> + </dependency> </dependencies> diff --git a/unl-tools-app/src/main/java/unl2rdf/Options.java b/unl-tools-main/src/main/java/unl2rdf/Options.java similarity index 100% rename from unl-tools-app/src/main/java/unl2rdf/Options.java rename to unl-tools-main/src/main/java/unl2rdf/Options.java diff --git a/unl-tools-app/src/main/java/unl2rdf/OutFileType.java b/unl-tools-main/src/main/java/unl2rdf/OutFileType.java similarity index 100% rename from unl-tools-app/src/main/java/unl2rdf/OutFileType.java rename to unl-tools-main/src/main/java/unl2rdf/OutFileType.java diff --git a/unl-tools-app/src/main/java/unl2rdf/Unl2Rdf.java b/unl-tools-main/src/main/java/unl2rdf/Unl2Rdf.java similarity index 56% rename from unl-tools-app/src/main/java/unl2rdf/Unl2Rdf.java rename to unl-tools-main/src/main/java/unl2rdf/Unl2Rdf.java index 2761d69efabc367227fe6f839e378c1fd9e77698..555b7e7be9d9ec4eeb8e61124ca2f5574b562dfa 100644 --- a/unl-tools-app/src/main/java/unl2rdf/Unl2Rdf.java +++ b/unl-tools-main/src/main/java/unl2rdf/Unl2Rdf.java @@ -1,22 +1,21 @@ package unl2rdf; -import fr.tetras_libre.unltools.unl.GraphExporter; -import fr.tetras_libre.unltools.unl.UnlDocument; -import fr.tetras_libre.unltools.unl.exporters.DefaultGraphExporterFactory; +import fr.tetras_libre.unltools.ApplicationStartup; +import fr.tetras_libre.unltools.Convert.ExportUnlDocuments; +import fr.tetras_libre.unltools.DefaultCommandHandlerResolverFactory; +import fr.tetras_libre.unltools.cqrs.ServiceProvider; import fr.tetras_libre.unltools.unl.exporters.GraphExporterNames; -import fr.tetras_libre.unltools.unl.parser.ParseException; -import fr.tetras_libre.unltools.unl.parser.UnlParser; +import fr.tetras_libre.unltools.unl.parser.UnlGraphImporterFromUnlParser; import picocli.CommandLine; -import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; -import java.util.Vector; public class Unl2Rdf { - private static DefaultGraphExporterFactory defaultGraphExporterFactory = new DefaultGraphExporterFactory(); - public static void main(String[] args) throws IOException, ParseException { + private static ServiceProvider serviceProvider; + + public static void main(String[] args) throws IOException { Options options = new Options(); @@ -24,6 +23,7 @@ public class Unl2Rdf { CommandLine.ParseResult parseResult = new CommandLine(options).parseArgs(args); if (!CommandLine.printHelpIfRequested(parseResult)) { + serviceProvider = ApplicationStartup.Initialize(DefaultCommandHandlerResolverFactory.create()); runProgram(options); } } catch (CommandLine.ParameterException e) { @@ -32,17 +32,19 @@ public class Unl2Rdf { } } - private static void runProgram(Options options) throws ParseException, IOException { + private static void runProgram(Options options) throws IOException { System.out.println(String.format("Source file : '%s'", options.getInputFile().getAbsolutePath())); - BufferedReader bufferedReader = new BufferedReader(options.getInputStream()); - UnlParser parser = new UnlParser(bufferedReader); - Vector<UnlDocument> documents = parser.createUnlDocumentList(); + + + var importer = UnlGraphImporterFromUnlParser.FromInputReader(options.getInputStream()); + var handler = serviceProvider.getHandler(ExportUnlDocuments.class); for (OutFileType outType : options.getOutputFileType()) { String extension = ToExtension(outType); String outfileName = options.getOutputFile() + extension; FileWriter fileWriter = new FileWriter(outfileName, false); - GetExporter(outType, fileWriter).write(documents); + var convertCommand = new ExportUnlDocuments(importer, GetExporterName(outType), fileWriter); + handler.handle(convertCommand); fileWriter.close(); System.out.println(String.format("Graph writen into file '%s'", outfileName)); } @@ -59,18 +61,16 @@ public class Unl2Rdf { throw new IllegalArgumentException(String.format("unknown fileType '%s", outFileType.toString())); } - private static GraphExporter GetExporter(OutFileType fileType, FileWriter writer) { + private static String GetExporterName(OutFileType fileType) { String exporterName = null; switch (fileType) { case rdf: - exporterName = GraphExporterNames.RDF_EXPORTER; - break; + return GraphExporterNames.RDF_EXPORTER; case dot: - exporterName = GraphExporterNames.DOT_EXPORTER; - break; + return GraphExporterNames.DOT_EXPORTER; } - return defaultGraphExporterFactory.createGraphExporter(writer, exporterName); + throw new IllegalArgumentException(); } } diff --git a/unl-tools-app/src/main/resources/META-INF/MANIFEST.MF b/unl-tools-main/src/main/resources/META-INF/MANIFEST.MF similarity index 100% rename from unl-tools-app/src/main/resources/META-INF/MANIFEST.MF rename to unl-tools-main/src/main/resources/META-INF/MANIFEST.MF diff --git a/unl-tools-app/src/test/java/unl2rdf/Unl2RdfTest.java b/unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java similarity index 92% rename from unl-tools-app/src/test/java/unl2rdf/Unl2RdfTest.java rename to unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java index b0d28dac74dcde47cebdd1b36982e5ae9fa8de33..4a9dfb91cf582313bae6e2e722270098042db815 100644 --- a/unl-tools-app/src/test/java/unl2rdf/Unl2RdfTest.java +++ b/unl-tools-main/src/test/java/unl2rdf/Unl2RdfTest.java @@ -22,25 +22,25 @@ class Unl2RdfTest { @Tag("integration") @Test - public void r1ShouldBeConvertedToRdfFile(){ + public void r1ShouldBeConvertedToRdfFile() { Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/r1.txt", "--output-file", "r1", "--output-type", "rdf"})); } @Tag("integration") @Test - public void r2ShouldBeConvertedToRdfFile(){ + public void r2ShouldBeConvertedToRdfFile() { Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/r2.txt", "--output-file", "r2", "--output-type", "rdf"})); } @Tag("integration") @Test - public void catShouldBeConvertedToRdfFile(){ + public void catShouldBeConvertedToRdfFile() { Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/cat.txt", "--output-file", "cat", "--output-type", "rdf"})); } @Tag("integration") @Test - public void exemplesShouldBeConvertedToRdfFile(){ + public void exemplesShouldBeConvertedToRdfFile() { Assertions.assertDoesNotThrow(() -> Unl2Rdf.main(new String[]{"--input-file", "../Examples/exemples_unl.txt", "--output-file", "exemples_unl", "--output-type", "rdf"})); } diff --git a/unl-tools-app/unl-tools-app.iml b/unl-tools-main/unl-tools-main.iml similarity index 97% rename from unl-tools-app/unl-tools-app.iml rename to unl-tools-main/unl-tools-main.iml index f7b5b3cb5757c81444b3202361e561f99827e677..a4c45eb599074bee25daa7121406845abbee6f92 100644 --- a/unl-tools-app/unl-tools-app.iml +++ b/unl-tools-main/unl-tools-main.iml @@ -48,6 +48,8 @@ <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.26" level="project" /> <orderEntry type="library" name="Maven: fr.tetras_libre.rdf:rdf-unl-java-vocabulary:1.0-SNAPSHOT" level="project" /> <orderEntry type="module" module-name="unl-tools-core" /> + <orderEntry type="library" name="Maven: org.picocontainer:picocontainer:2.15" level="project" /> + <orderEntry type="module" module-name="unl-tools-application" /> <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.7.0-M1" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.7.0-M1" level="project" /> <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.0" level="project" />