From 38c83ae8bf936eee231aec0e1297d945ef445f51 Mon Sep 17 00:00:00 2001 From: sebastien curt <sebastien.curt@tetras-libre.fr> Date: Tue, 2 Jun 2020 23:20:58 +0200 Subject: [PATCH] Integration of PicoContainer IOC --- .idea/compiler.xml | 12 +++-- .idea/encodings.xml | 6 ++- .idea/misc.xml | 1 + .idea/modules.xml | 3 +- pom.xml | 9 ++-- unl-tools-application/pom.xml | 23 +++++++++ .../CommandHandlerResolverBuilder.java | 25 ++++++++++ .../unltools/Convert/ExportUnlDocuments.java | 31 ++++++++++++ .../Convert/ExportUnlDocumentsHandler.java | 27 ++++++++++ .../DefaultCommandHandlerResolverFactory.java | 14 ++++++ .../unl-tools-application.iml | 24 +++++++++ unl-tools-core/pom.xml | 4 +- .../tetras_libre/unltools/cqrs/Command.java | 4 ++ .../unltools/cqrs/CommandHandler.java | 5 ++ .../unltools/cqrs/CommandHandlerResolver.java | 20 ++++++++ .../tetras_libre/unltools/cqrs/Mediator.java | 16 ++++++ .../fr/tetras_libre/unltools/cqrs/Result.java | 42 ++++++++++++++++ .../unltools/cqrs/ServiceProvider.java | 7 +++ .../fr/tetras_libre/unltools/unl/Graph.java | 6 +-- .../unltools/unl/GraphImporter.java | 7 +++ .../unltools/unl/GraphRelation.java | 4 +- .../unltools/unl/UnlDocument.java | 8 +-- .../unltools/unl/UnlDocumentNode.java | 4 +- .../unltools/unl/EqualsBuilderTest.java | 30 ++++++------ unl-tools-infrastructure/pom.xml | 14 +++++- .../unltools/ApplicationStartup.java | 29 +++++++++++ .../unltools/cqrs/ServiceProviderImpl.java | 26 ++++++++++ .../unltools/unl/GraphExtensions.java | 3 -- .../unl/SubGraphReferenceNodeExtensions.java | 4 -- .../RelationLabelToUnlPropertyConverter.java | 2 +- .../rdf/UnlDocumentToRdfConverter.java | 2 - .../unl/exporters/rdf/UtilGraphNodeUri.java | 2 +- .../parser/UnlGraphImporterFromUnlParser.java | 33 +++++++++++++ .../unltools/ApplicationStartupTest.java | 49 +++++++++++++++++++ .../fr/tetras_libre/unltools/TestCommand.java | 8 +++ .../unltools/TestCommandHandler.java | 16 ++++++ .../AbstractFlyweightUnlArgumentProvider.java | 6 ++- .../fr/tetras_libre/unltools/unl/AllUnl.java | 1 - .../fr/tetras_libre/unltools/unl/CatsUnl.java | 2 +- .../fr/tetras_libre/unltools/unl/R1Unl.java | 29 ++++++----- .../fr/tetras_libre/unltools/unl/R2Unl.java | 24 ++++----- ...ntenceWithExpectedDotArgumentProvider.java | 4 -- ...lationLabelToUnlPropertyConverterTest.java | 5 +- .../unltools/unl/parser/UnlParserTest.java | 17 +++---- .../unltools/unl/parser/WrapperUnlParser.java | 3 ++ .../unl-tools-infrastructure.iml | 2 + {unl-tools-app => unl-tools-main}/pom.xml | 18 +++++-- .../src/main/java/unl2rdf/Options.java | 0 .../src/main/java/unl2rdf/OutFileType.java | 0 .../src/main/java/unl2rdf/Unl2Rdf.java | 40 +++++++-------- .../src/main/resources/META-INF/MANIFEST.MF | 0 .../src/test/java/unl2rdf/Unl2RdfTest.java | 8 +-- .../unl-tools-main.iml | 2 + 53 files changed, 554 insertions(+), 127 deletions(-) create mode 100644 unl-tools-application/pom.xml create mode 100644 unl-tools-application/src/main/java/fr/tetras_libre/unltools/CommandHandlerResolverBuilder.java create mode 100644 unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocuments.java create mode 100644 unl-tools-application/src/main/java/fr/tetras_libre/unltools/Convert/ExportUnlDocumentsHandler.java create mode 100644 unl-tools-application/src/main/java/fr/tetras_libre/unltools/DefaultCommandHandlerResolverFactory.java create mode 100644 unl-tools-application/unl-tools-application.iml create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Command.java create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandler.java create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/CommandHandlerResolver.java create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Mediator.java create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/Result.java create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProvider.java create mode 100644 unl-tools-core/src/main/java/fr/tetras_libre/unltools/unl/GraphImporter.java create mode 100644 unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/ApplicationStartup.java create mode 100644 unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/cqrs/ServiceProviderImpl.java create mode 100644 unl-tools-infrastructure/src/main/java/fr/tetras_libre/unltools/unl/parser/UnlGraphImporterFromUnlParser.java create mode 100644 unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/ApplicationStartupTest.java create mode 100644 unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommand.java create mode 100644 unl-tools-infrastructure/src/test/java/fr/tetras_libre/unltools/TestCommandHandler.java rename {unl-tools-app => unl-tools-main}/pom.xml (85%) rename {unl-tools-app => unl-tools-main}/src/main/java/unl2rdf/Options.java (100%) rename {unl-tools-app => unl-tools-main}/src/main/java/unl2rdf/OutFileType.java (100%) rename {unl-tools-app => unl-tools-main}/src/main/java/unl2rdf/Unl2Rdf.java (56%) rename {unl-tools-app => unl-tools-main}/src/main/resources/META-INF/MANIFEST.MF (100%) rename {unl-tools-app => unl-tools-main}/src/test/java/unl2rdf/Unl2RdfTest.java (92%) rename unl-tools-app/unl-tools-app.iml => unl-tools-main/unl-tools-main.iml (97%) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 112be42..9266127 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 6301566..06ab4d0 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 ba348da..dbdc2e0 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 7e06cd3..4e2ba7a 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 cd3992a..a344dcf 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 0000000..f6d18dd --- /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 0000000..692e47e --- /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 0000000..efec7a1 --- /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 0000000..62ed343 --- /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 0000000..5c0f95e --- /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 0000000..200cdea --- /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 cbdcd7d..5a2eb25 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 0000000..edf837f --- /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 0000000..2efdaef --- /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 0000000..671d579 --- /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 0000000..091200f --- /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 0000000..c9bd9c7 --- /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 0000000..3d6ca41 --- /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 6d710a7..33197d0 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 0000000..001f250 --- /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 7b56dc5..2af3468 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 eb55529..ed9116a 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 08e63d8..6d4c9f2 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 9918265..8fd693d 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 537df2b..4a0f7f5 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 0000000..d3654e7 --- /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 0000000..918647b --- /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 73bf85d..a7f838e 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 19144d2..34ae9f7 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 8715202..2ab59e8 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 1966719..5b778b4 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 f8d5e5c..5c20e56 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 0000000..f293807 --- /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 0000000..e03137e --- /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 0000000..fc18c3f --- /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 0000000..6cfccd0 --- /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 f09f058..b1569e8 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 106890e..43274be 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 d656209..951f79d 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 323ed47..8d8af44 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 7b0ad0d..78bf753 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 6245169..769aae6 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 4a7c80f..a6d4200 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 28dd3e0..7bc9410 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 97c487f..cd4cb33 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 095605e..8b05d4f 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 450e947..e4b966e 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 2761d69..555b7e7 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 b0d28da..4a9dfb9 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 f7b5b3c..a4c45eb 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" /> -- GitLab