From 2f95086fe92f1b8d7e03432ee28a0f769fcbd24f Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 28 Aug 2015 18:16:56 +0000 Subject: [PATCH] CCM NG: Some code clean up git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3591 8810af33-2d31-482b-a856-94f89814c4df --- .../core/modules/DependencyException.java | 2 + .../core/modules/DependencyTreeManager.java | 225 ++++++++++-------- .../core/modules/InstalledModule.java | 4 +- .../org/libreccm/core/modules/ModuleInfo.java | 215 +++++++++++++---- .../DependencyTreeManagerCycleTest.java | 50 +++- .../modules/DependencyTreeManagerTest.java | 59 +++-- 6 files changed, 375 insertions(+), 180 deletions(-) diff --git a/ccm-core/src/main/java/org/libreccm/core/modules/DependencyException.java b/ccm-core/src/main/java/org/libreccm/core/modules/DependencyException.java index 7e3b38d74..f17b2c10b 100644 --- a/ccm-core/src/main/java/org/libreccm/core/modules/DependencyException.java +++ b/ccm-core/src/main/java/org/libreccm/core/modules/DependencyException.java @@ -31,6 +31,8 @@ public class DependencyException extends Exception { * message. */ public DependencyException() { + super(); + //Nothin more } /** diff --git a/ccm-core/src/main/java/org/libreccm/core/modules/DependencyTreeManager.java b/ccm-core/src/main/java/org/libreccm/core/modules/DependencyTreeManager.java index 8f4b53664..366813e79 100644 --- a/ccm-core/src/main/java/org/libreccm/core/modules/DependencyTreeManager.java +++ b/ccm-core/src/main/java/org/libreccm/core/modules/DependencyTreeManager.java @@ -45,10 +45,10 @@ import org.apache.maven.artifact.versioning.ComparableVersion; final class DependencyTreeManager { private static final Logger LOGGER = LogManager.getLogger( - DependencyTreeManager.class); + DependencyTreeManager.class); public List generateTree(final Iterable modules) - throws DependencyException { + throws DependencyException { LOGGER.info("Starting to generate dependency tree..."); @@ -57,6 +57,11 @@ final class DependencyTreeManager { for (final CcmModule module : modules) { createTreeNode(module, nodes); } + + for (final CcmModule module : modules) { + addDependencyRelations(module, nodes); + } + final List nodeList = new ArrayList<>(); for (final Map.Entry entry : nodes.entrySet()) { nodeList.add(entry.getValue()); @@ -68,22 +73,19 @@ final class DependencyTreeManager { } public List orderModules(final List dependencyTree) - throws DependencyException { + throws DependencyException { LOGGER.info("Creating an ordered list from the dependency tree..."); final List orderedModules = new ArrayList<>(); final List resolvedModules = new ArrayList<>(); LOGGER.info("Looking for modules which do not depend on any other " - + "modules..."); + + "modules..."); for (final TreeNode node : dependencyTree) { if (node.getDependsOn().isEmpty()) { -// LOGGER.info( -// "\tModule \"{}\" does not depend on any other module", -// ModuleUtil.getModuleName(node.getModule())); LOGGER.info( - "\tModule \"{}\" does not depend on any other module", - node.getModuleInfo().getModuleName()); + "\tModule \"{}\" does not depend on any other module", + node.getModuleInfo().getModuleName()); resolvedModules.add(node); } } @@ -92,8 +94,6 @@ final class DependencyTreeManager { while (!resolvedModules.isEmpty()) { final TreeNode current = resolvedModules.remove(0); -// LOGGER.info("\tProcessing node for module \"{}\"...", -// ModuleUtil.getModuleName(current.getModule())); LOGGER.info("\tProcessing node for module \"{}\"...", current.getModuleInfo().getModuleName()); @@ -110,9 +110,8 @@ final class DependencyTreeManager { if (orderedModules.size() == dependencyTree.size()) { LOGGER.info("Dependency graph proceessed successfully. " - + "Modules in order:"); + + "Modules in order:"); for (final TreeNode node : orderedModules) { - //LOGGER.info("\t{}", ModuleUtil.getModuleName(node.getModule())); LOGGER.info("\t{}", node.getModuleInfo().getModuleName()); } @@ -120,7 +119,7 @@ final class DependencyTreeManager { } else { LOGGER.fatal("The dependency graph has a least one cycle."); throw new DependencyException( - "The dependency graph has a least one cycle."); + "The dependency graph has a least one cycle."); } } @@ -128,118 +127,140 @@ final class DependencyTreeManager { final Map nodes) { final TreeNode node = new TreeNode(module); -// LOGGER.info("Creating node for module \"{}\"...", -// ModuleUtil.getModuleName(module)); LOGGER.info("Creating node for module \"{}\"...", node.getModuleInfo().getModuleName()); -// nodes.put(ModuleUtil.getModuleName(module), node); nodes.put(node.getModuleInfo().getModuleName(), node); } private void addDependencyRelations(final CcmModule module, final Map nodes) - throws DependencyException { + throws DependencyException { final ModuleInfo moduleInfo = new ModuleInfo(); moduleInfo.load(module); -// LOGGER.info("Adding dependency relations for module \"{}\"...", -// ModuleUtil.getModuleName(module)); LOGGER.info("Adding dependency relations for module \"{}\"...", moduleInfo.getModuleName()); - //final String moduleName = ModuleUtil.getModuleName(module) final String moduleName = moduleInfo.getModuleName(); if (!nodes.containsKey(moduleName)) { -// LOGGER.fatal("Modules nodes map does contain an entry for \"{}\". " -// + "That should not happen.", -// ModuleUtil.getModuleName(module)); LOGGER.fatal("Modules nodes map does contain an entry for \"{}\". " - + "That should not happen.", + + "That should not happen.", moduleInfo.getModuleName()); throw new IllegalArgumentException(String.format( - "The nodes map does not contain a node for module \"%s\". " - + "That should not happen.", - moduleName)); + "The nodes map does not contain a node for module \"%s\". " + + "That should not happen.", + moduleName)); } final TreeNode node = nodes.get(moduleName); -// LOGGER.info("Processing required modules for module \"{}\"...", -// ModuleUtil.getModuleName(module)); LOGGER.info("Processing required modules for module \"{}\"...", node.getModuleInfo().getModuleName()); -// for (final RequiredModule requiredModule : ModuleUtil -// .getRequiredModules( -// module)) { for (final RequiredModule requiredModule : node.getModuleInfo(). - getRequiredModules()) { - - final ModuleInfo requiredModuleInfo = new ModuleInfo(); - requiredModuleInfo.load(requiredModule.module()); + getRequiredModules()) { +// final ModuleInfo requiredModuleInfo = new ModuleInfo(); +// requiredModuleInfo.load(requiredModule.module()); +// // LOGGER.info("\tModule \"{}\" requires module \"{}\".", -// ModuleUtil.getModuleName(module), -// ModuleUtil.getModuleName(requiredModule.module())); - LOGGER.info("\tModule \"{}\" requires module \"{}\".", - node.getModuleInfo().getModuleName(), - requiredModuleInfo.getModuleName()); - -// if (!nodes.containsKey(ModuleUtil.getModuleName(requiredModule -// .module()))) { - if (!nodes.containsKey(requiredModuleInfo.getModuleName())) { - - LOGGER.fatal("Required module \"{}\" no found.", - requiredModuleInfo.getModuleName()); - - throw new DependencyException(String.format( - "Module \"%s\" depends on module \"%s\" but the dependency " - + "tree does contain an entry for module \"%s\".", - moduleInfo.getModuleName(), - requiredModuleInfo.getModuleName(), - requiredModuleInfo.getModuleName())); - } - -// final TreeNode dependencyNode = nodes.get(ModuleUtil.getModuleName( -// requiredModule.module())); - final TreeNode dependencyNode = nodes.get(requiredModuleInfo. - getModuleName()); - - //Check version -// if (!validateVersion(ModuleUtil.getVersion(dependencyNode -// .getModule()), - if (!validateVersion(dependencyNode.getModuleInfo(). - getModuleVersion(), - requiredModule.minVersion(), - requiredModule.maxVersion())) { - throw new DependencyException(String.format( - "The required module is avialable but in the correct " - + "version. " - + "Available version: \"%s\"; " - + "minimal required version: \"%s\"; " - + "maximum required version: \"%s\"", - dependencyNode.getModuleInfo().getModuleVersion(), - requiredModule.minVersion(), - requiredModule.maxVersion())); - } - - node.addDependsOn(dependencyNode); - dependencyNode.addDependentModule(node); +// node.getModuleInfo().getModuleName(), +// requiredModuleInfo.getModuleName()); +// +// if (!nodes.containsKey(requiredModuleInfo.getModuleName())) { +// +// LOGGER.fatal("Required module \"{}\" no found.", +// requiredModuleInfo.getModuleName()); +// +// throw new DependencyException(String.format( +// "Module \"%s\" depends on module \"%s\" but the dependency " +// + "tree does contain an entry for module \"%s\".", +// moduleInfo.getModuleName(), +// requiredModuleInfo.getModuleName(), +// requiredModuleInfo.getModuleName())); +// } +// +// final TreeNode dependencyNode = nodes.get(requiredModuleInfo. +// getModuleName()); +// +// //Check version +// if (!validateVersion(dependencyNode.getModuleInfo(). +// getModuleVersion(), +// requiredModule.minVersion(), +// requiredModule.maxVersion())) { +// throw new DependencyException(String.format( +// "The required module is avialable but in the correct " +// + "version. " +// + "Available version: \"%s\"; " +// + "minimal required version: \"%s\"; " +// + "maximum required version: \"%s\"", +// dependencyNode.getModuleInfo().getModuleVersion(), +// requiredModule.minVersion(), +// requiredModule.maxVersion())); +// } +// +// node.addDependsOn(dependencyNode); +// dependencyNode.addDependentModule(node); + addDependencyRelation(nodes, node, requiredModule); } + + } + + private void addDependencyRelation(final Map nodes, + final TreeNode node, + final RequiredModule requiredModule) + throws DependencyException { + final ModuleInfo requiredInfo = new ModuleInfo(); + requiredInfo.load(requiredModule.module()); + + LOGGER.info("\tModule \"{}\" requires module \"{}\".", + node.getModuleInfo().getModuleName(), + requiredInfo.getModuleName()); + + if (!nodes.containsKey(requiredInfo.getModuleName())) { + LOGGER.fatal("Required module \"{}\" no found.", + requiredInfo.getModuleName()); + throw new DependencyException(String.format( + "Module \"%s\" depends on module \"%s\" but the dependency " + + "tree does contain an entry for module \"%s\".", + node.getModuleInfo().getModuleName(), + requiredInfo.getModuleName(), + requiredInfo.getModuleName())); + } + + final TreeNode dependencyNode = nodes.get(requiredInfo. + getModuleName()); + if (!validateVersion(dependencyNode.getModuleInfo(). + getModuleVersion(), + requiredModule.minVersion(), + requiredModule.maxVersion())) { + throw new DependencyException(String.format( + "The required module is avialable but in the correct " + + "version. " + + "Available version: \"%s\"; " + + "minimal required version: \"%s\"; " + + "maximum required version: \"%s\"", + dependencyNode.getModuleInfo().getModuleVersion(), + requiredModule.minVersion(), + requiredModule.maxVersion())); + } + + node.addDependsOn(dependencyNode); + dependencyNode.addDependentModule(node); } /** * Helper method for checking if an dependency is available in the required * version. * - * @param availableVersion The available version. Can't be {@code null} or - * empty. + * @param availableVersion The available version. Can't be {@code null} or + * empty. * @param minRequiredVersion The minimal version required. Can be - * {@code null} or empty. + * {@code null} or empty. * @param maxRequiredVersion The maximum version required. Can be - * {@code null} or empty. + * {@code null} or empty. * * @return {@code true} if the available version is in the required range, - * {@code false} if not. + * {@code false} if not. */ //The names are fine. Shorter names would be less readable. Also removing //the parentheses in the ifs would make the conditions less readable. @@ -254,36 +275,36 @@ final class DependencyTreeManager { } if ((minRequiredVersion == null || minRequiredVersion.isEmpty()) - && (maxRequiredVersion == null || maxRequiredVersion. - isEmpty())) { + && (maxRequiredVersion == null || maxRequiredVersion. + isEmpty())) { return true; } else if ((minRequiredVersion != null && !minRequiredVersion.isEmpty()) - && (maxRequiredVersion == null || maxRequiredVersion - .isEmpty())) { + && (maxRequiredVersion == null || maxRequiredVersion + .isEmpty())) { final ComparableVersion minVersion = new ComparableVersion( - minRequiredVersion); + minRequiredVersion); final ComparableVersion version = new ComparableVersion( - availableVersion); + availableVersion); return minVersion.compareTo(version) <= 0; } else if ((minRequiredVersion == null || minRequiredVersion.isEmpty()) - && (maxRequiredVersion != null && !maxRequiredVersion - .isEmpty())) { + && (maxRequiredVersion != null && !maxRequiredVersion + .isEmpty())) { final ComparableVersion maxVersion = new ComparableVersion( - maxRequiredVersion); + maxRequiredVersion); final ComparableVersion version = new ComparableVersion( - availableVersion); + availableVersion); return version.compareTo(maxVersion) <= 0; } else { final ComparableVersion minVersion = new ComparableVersion( - minRequiredVersion); + minRequiredVersion); final ComparableVersion maxVersion = new ComparableVersion( - (maxRequiredVersion)); + (maxRequiredVersion)); final ComparableVersion version = new ComparableVersion( - availableVersion); + availableVersion); return minVersion.compareTo(version) <= 0 && version.compareTo( - maxVersion) <= 0; + maxVersion) <= 0; } } diff --git a/ccm-core/src/main/java/org/libreccm/core/modules/InstalledModule.java b/ccm-core/src/main/java/org/libreccm/core/modules/InstalledModule.java index c2f28d3df..017651227 100644 --- a/ccm-core/src/main/java/org/libreccm/core/modules/InstalledModule.java +++ b/ccm-core/src/main/java/org/libreccm/core/modules/InstalledModule.java @@ -51,7 +51,7 @@ public class InstalledModule implements Serializable { return moduleClassName; } - public void setModuleClassName(String moduleClassName) { + public void setModuleClassName(final String moduleClassName) { this.moduleClassName = moduleClassName; } @@ -59,7 +59,7 @@ public class InstalledModule implements Serializable { return status; } - public void setStatus(ModuleStatus status) { + public void setStatus(final ModuleStatus status) { this.status = status; } diff --git a/ccm-core/src/main/java/org/libreccm/core/modules/ModuleInfo.java b/ccm-core/src/main/java/org/libreccm/core/modules/ModuleInfo.java index 82f1c61c2..2e020aaa2 100644 --- a/ccm-core/src/main/java/org/libreccm/core/modules/ModuleInfo.java +++ b/ccm-core/src/main/java/org/libreccm/core/modules/ModuleInfo.java @@ -21,13 +21,13 @@ package org.libreccm.core.modules; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; -import java.sql.SQLDataException; import java.sql.SQLException; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Properties; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -43,11 +43,11 @@ public class ModuleInfo { private static final Logger LOGGER = LogManager.getLogger(ModuleInfo.class); - private String moduleName; - private String moduleDataPackage; - private Class[] moduleEntities; - private String moduleVersion; - private RequiredModule[] requiredModules; + private transient String moduleName; + private transient String moduleDataPackage; + private transient Class[] moduleEntities; + private transient String moduleVersion; + private transient RequiredModule[] requiredModules; public ModuleInfo() { //Nothing @@ -66,8 +66,9 @@ public class ModuleInfo { } public String getDbScriptsLocation(final Connection connection) - throws SQLException { - final StringBuffer buffer = new StringBuffer("classpath:/db/migrations/"); + throws SQLException { + final StringBuffer buffer + = new StringBuffer("classpath:/db/migrations/"); buffer.append(moduleDataPackage); switch (connection.getMetaData().getDatabaseProductName()) { case "H2": { @@ -82,9 +83,9 @@ public class ModuleInfo { break; default: throw new IntegrationException(String.format( - "Integration failed. Database \"%s\" is not supported yet.", - connection.getMetaData(). - getDatabaseProductName())); + "Integration failed. Database \"%s\" is not supported yet.", + connection.getMetaData(). + getDatabaseProductName())); } return buffer.toString(); @@ -109,8 +110,93 @@ public class ModuleInfo { public void load(final Class moduleClass) { LOGGER.info("Reading module info for {}...", moduleClass.getName()); final Module annotation = moduleClass.getAnnotation(Module.class); - final Properties properties = new Properties(); + final Properties properties = loadModuleInfoFile(moduleClass); +// final Properties properties = new Properties(); +// +// final String path = String.format("/module-info/%s.properties", +// moduleClass.getName()); +// LOGGER.info("Trying to retrieve module info for module {} from {}...", +// moduleClass.getName(), +// path); +// final InputStream stream = moduleClass.getResourceAsStream(path); +// if (stream == null) { +// LOGGER.warn("No module info for {} found at {}", +// moduleClass.getName(), +// path); +// } else { +// try { +// properties.load(stream); +// } catch (IOException ex) { +// LOGGER.error("Failed to read module info for {} at {}.", +// moduleClass.getName(), +// path); +// LOGGER.error("Cause: ", ex); +// } +// } + + LOGGER.info("Reading module name..."); +// if (annotation.name() != null && !annotation.name().isEmpty()) { +// moduleName = annotation.name(); +// } else if (properties.getProperty(ARTIFACT_ID) != null +// && !properties.getProperty(ARTIFACT_ID).isEmpty()) { +// moduleName = properties.getProperty(ARTIFACT_ID); +// } else { +// LOGGER.warn( +// "The module was not specificied by the module annotation " +// + "or by the module info file. Creating name from " +// + "simple name of the module class."); +// moduleName = moduleClass.getSimpleName().toLowerCase(); +// } + LOGGER.info("Reading module name..."); + moduleName = readModuleName(moduleClass, annotation, properties); + LOGGER.info("Module name is \"{}\".", moduleName); + + LOGGER.info("Reading module package name..."); +// if (annotation.packageName() != null +// && !annotation.packageName().isEmpty()) { +// moduleDataPackage = annotation.packageName(); +// } else if (properties.getProperty(GROUP_ID) != null +// && !properties.getProperty(GROUP_ID).isEmpty()) { +// moduleDataPackage = String.format("%s/%s", +// properties.getProperty(GROUP_ID), +// properties. +// getProperty(ARTIFACT_ID).replace( +// "-", "_")); +// } else { +// LOGGER.warn("The module data package was specified by the module " +// + "annotation nore was an group id found in the module info" +// + "file. Creating data package name from the name of the " +// + "module class."); +// moduleDataPackage = moduleClass.getName().toLowerCase(); +// } + moduleDataPackage = readModulePackageName(moduleClass, + annotation, + properties); + LOGGER.info("Module data package is \"{}\".", moduleDataPackage); + + LOGGER.info("Reading module version..."); +// if (annotation.version() != null && !annotation.version().isEmpty()) { +// moduleVersion = annotation.version(); +// } else if (properties.getProperty(VERSION) != null +// && !properties.getProperty(VERSION).isEmpty()) { +// moduleVersion = properties.getProperty(VERSION); +// } else { +// LOGGER.warn("Module version is not specified by the module " +// + "annotation or in the module info file. Module version is " +// + "undefinied. This can lead to all sorts of strange errors!"); +// } + moduleVersion = readModuleVersion(annotation, properties); + LOGGER.info("Module version is \"{}.\"", moduleVersion); + + requiredModules = annotation.requiredModules(); + moduleEntities = annotation.entities(); + } + + private Properties loadModuleInfoFile( + final Class moduleClass) { + + final Properties moduleInfo = new Properties(); final String path = String.format("/module-info/%s.properties", moduleClass.getName()); LOGGER.info("Trying to retrieve module info for module {} from {}...", @@ -123,62 +209,95 @@ public class ModuleInfo { path); } else { try { - properties.load(stream); + moduleInfo.load(stream); } catch (IOException ex) { LOGGER.error("Failed to read module info for {} at {}.", moduleClass.getName(), path); + LOGGER.error("Cause: ", ex); } } - LOGGER.info("Reading module name..."); - if (annotation.name() != null && !annotation.name().isEmpty()) { - moduleName = annotation.name(); - } else if (properties.getProperty(ARTIFACT_ID) != null - && !properties.getProperty(ARTIFACT_ID).isEmpty()) { - moduleName = properties.getProperty(ARTIFACT_ID); + return moduleInfo; + } + + private String readModuleName(final Class moduleClass, + final Module annotation, + final Properties moduleInfo) { + @SuppressWarnings("PMD.LongVariable") + final boolean annotationHasModuleName = annotation.name() != null + && !annotation.name().isEmpty(); + @SuppressWarnings("PMD.LongVariable") + final boolean moduleInfoHasModuleName = moduleInfo.getProperty(ARTIFACT_ID) + != null && !moduleInfo + .getProperty(ARTIFACT_ID).isEmpty(); + + if (annotationHasModuleName) { + return annotation.name(); + } else if (moduleInfoHasModuleName) { + return moduleInfo.getProperty(ARTIFACT_ID); } else { LOGGER.warn( - "The module was not specificied by the module annotation " - + "or by the module info file. Creating name from " - + "simple name of the module class."); - moduleName = moduleClass.getSimpleName().toLowerCase(); + "The module was not specificied by the module annotation " + + "or by the module info file. Creating name from " + + "simple name of the module class."); + return moduleClass.getSimpleName().toLowerCase(); } - LOGGER.info("Module name is \"{}\".", moduleName); + } - LOGGER.info("Reading module package name..."); - if (annotation.packageName() != null - && !annotation.packageName().isEmpty()) { - moduleDataPackage = annotation.packageName(); - } else if (properties.getProperty(GROUP_ID) != null - && !properties.getProperty(GROUP_ID).isEmpty()) { - moduleDataPackage = String.format("%s/%s", - properties.getProperty(GROUP_ID), - properties. - getProperty(ARTIFACT_ID).replace( - "-", "_")); + private String readModulePackageName( + final Class moduleClass, + final Module annotation, + final Properties moduleInfo) { + + @SuppressWarnings("PMD.LongVariable") + final boolean annotationHasPackageName = annotation.packageName() != null + && !annotation.packageName() + .isEmpty(); + @SuppressWarnings("PMD.LongVariable") + final boolean moduleInfoHasPackageName = moduleInfo.getProperty(GROUP_ID) + != null + && !moduleInfo.getProperty( + GROUP_ID).isEmpty(); + if (annotationHasPackageName) { + return annotation.packageName(); + } else if (moduleInfoHasPackageName) { + return String.format("%s/%s", + moduleInfo.getProperty(GROUP_ID), + moduleInfo. + getProperty(ARTIFACT_ID).replace( + "-", "_")); } else { LOGGER.warn("The module data package was specified by the module " - + "annotation nore was an group id found in the module info" + + "annotation nore was an group id found in the module info" + "file. Creating data package name from the name of the " + "module class."); - moduleDataPackage = moduleClass.getName().toLowerCase(); + return moduleClass.getName().toLowerCase(); } - LOGGER.info("Module data package is \"{}\".", moduleDataPackage); + } - if (annotation.version() != null && !annotation.version().isEmpty()) { - moduleVersion = annotation.version(); - } else if (properties.getProperty(VERSION) != null - && !properties.getProperty(VERSION).isEmpty()) { - moduleVersion = properties.getProperty(VERSION); + private String readModuleVersion( + final Module annotation, + final Properties moduleInfo) { + + @SuppressWarnings("PMD.LongVariable") + final boolean annotationHasVersion = annotation.version() != null + && !annotation.version().isEmpty(); + @SuppressWarnings("PMD.LongVariable") + final boolean moduleInfoHasVersion = moduleInfo.getProperty(VERSION) != null + && !moduleInfo.getProperty(VERSION) + .isEmpty(); + + if (annotationHasVersion) { + return annotation.version(); + } else if (moduleInfoHasVersion) { + return moduleInfo.getProperty(VERSION); } else { LOGGER.warn("Module version is not specified by the module " - + "annotation or in the module info file. Module version is " + + "annotation or in the module info file. Module version is " + "undefinied. This can lead to all sorts of strange errors!"); + return ""; } - LOGGER.info("Module version is \"{}.\"", moduleVersion); - - requiredModules = annotation.requiredModules(); - moduleEntities = annotation.entities(); } + } diff --git a/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerCycleTest.java b/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerCycleTest.java index 6f16fa22c..c986cf3c9 100644 --- a/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerCycleTest.java +++ b/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerCycleTest.java @@ -47,8 +47,6 @@ import org.libreccm.tests.categories.IntegrationTest; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.ServiceLoader; - /** * @@ -58,7 +56,7 @@ import java.util.ServiceLoader; @RunWith(Arquillian.class) public class DependencyTreeManagerCycleTest { - private transient ServiceLoader modules; + private transient Iterable modules; public DependencyTreeManagerCycleTest() { } @@ -73,7 +71,12 @@ public class DependencyTreeManagerCycleTest { @Before public void setUp() { - modules = ServiceLoader.load(CcmModule.class); + final List moduleList = new ArrayList<>(); + moduleList.add(new TestModuleRoot()); + moduleList.add(new TestModuleA()); + moduleList.add(new TestModuleB()); + moduleList.add(new TestModuleC()); + modules = moduleList; } @After @@ -96,18 +99,41 @@ public class DependencyTreeManagerCycleTest { return ShrinkWrap .create(WebArchive.class, - "LibreCCM-org.libreccm.modules.dependencytree.DependencyTreeManager.war") - .addPackage(DependencyTreeManager.class.getPackage()) - .addPackage(Module.class - .getPackage()) + "LibreCCM-org.libreccm.modules.dependencytree.DependencyTreeManagerCycleTest.war") .addPackage(org.libreccm.tests.categories.IntegrationTest.class .getPackage()) - .addPackage(org.libreccm.core.modules.dependencytree.test.cycle.TestModuleRoot.class - .getPackage()) - .addPackage(CcmModule.class.getPackage()) + .addClass(DependencyTreeManager.class) + .addClass(DependencyException.class) + .addClass(IntegrationException.class) + .addClass(TreeNode.class) + .addClass(CcmModule.class) + .addClass(ModuleInfo.class) + .addClass(ModuleStatus.class) + .addClass(Module.class) + .addClass(RequiredModule.class) + .addClass(InitEvent.class) + .addClass(InstallEvent.class) + .addClass(ShutdownEvent.class) + .addClass(UnInstallEvent.class) + .addClass(TestModuleRoot.class) + .addClass(TestModuleA.class) + .addClass(TestModuleB.class) + .addClass(TestModuleC.class) .addAsLibraries(libs) .addAsWebInfResource("test-web.xml", "web.xml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + .addAsResource( + "module-info/dependency-tree-manager-cycle-test/module-root.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.cycle.TestModuleRoot.properties") + .addAsResource( + "module-info/dependency-tree-manager-cycle-test/module-a.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.cycle.TestModuleA.properties") + .addAsResource( + "module-info/dependency-tree-manager-cycle-test/module-b.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.cycle.TestModuleB.properties") + .addAsResource( + "module-info/dependency-tree-manager-cycle-test/module-c.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.cycle.TestModuleC.properties"); } @Test diff --git a/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerTest.java b/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerTest.java index 7484db8c3..6a2a4a47d 100644 --- a/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerTest.java +++ b/ccm-core/src/test/java/org/libreccm/core/modules/DependencyTreeManagerTest.java @@ -47,8 +47,6 @@ import org.libreccm.tests.categories.IntegrationTest; import java.io.File; import java.util.ArrayList; import java.util.List; -import java.util.ServiceLoader; - /** * @@ -58,7 +56,7 @@ import java.util.ServiceLoader; @RunWith(Arquillian.class) public class DependencyTreeManagerTest { - private transient ServiceLoader modules; + private transient Iterable modules; public DependencyTreeManagerTest() { } @@ -73,7 +71,13 @@ public class DependencyTreeManagerTest { @Before public void setUp() { - modules = ServiceLoader.load(CcmModule.class); + final List moduleList = new ArrayList<>(); + moduleList.add(new TestModuleRoot()); + moduleList.add(new TestModuleA()); + moduleList.add(new TestModuleB()); + moduleList.add(new TestModuleC()); + + modules = moduleList; } @After @@ -96,18 +100,41 @@ public class DependencyTreeManagerTest { return ShrinkWrap .create(WebArchive.class, - "LibreCCM-org.libreccm.modules.dependencytree.DependencyTreeManager.war") - .addPackage(DependencyTreeManager.class.getPackage()) - .addPackage(Module.class - .getPackage()) + "LibreCCM-org.libreccm.modules.dependencytree.DependencyTreeManagerTest.war") .addPackage(org.libreccm.tests.categories.IntegrationTest.class .getPackage()) - .addPackage(org.libreccm.core.modules.dependencytree.test.valid.TestModuleRoot.class - .getPackage()) - .addPackage(CcmModule.class.getPackage()) + .addClass(DependencyTreeManager.class) + .addClass(DependencyException.class) + .addClass(IntegrationException.class) + .addClass(TreeNode.class) + .addClass(CcmModule.class) + .addClass(ModuleInfo.class) + .addClass(ModuleStatus.class) + .addClass(Module.class) + .addClass(RequiredModule.class) + .addClass(InitEvent.class) + .addClass(InstallEvent.class) + .addClass(ShutdownEvent.class) + .addClass(UnInstallEvent.class) + .addClass(TestModuleRoot.class) + .addClass(TestModuleA.class) + .addClass(TestModuleB.class) + .addClass(TestModuleC.class) .addAsLibraries(libs) .addAsWebInfResource("test-web.xml", "web.xml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + .addAsResource( + "module-info/dependency-tree-manager-test/module-root.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.valid.TestModuleRoot.properties") + .addAsResource( + "module-info/dependency-tree-manager-test/module-a.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.valid.TestModuleA.properties") + .addAsResource( + "module-info/dependency-tree-manager-test/module-b.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.valid.TestModuleB.properties") + .addAsResource( + "module-info/dependency-tree-manager-test/module-c.properties", + "module-info/org.libreccm.core.modules.dependencytree.test.valid.TestModuleC.properties"); } @Test @@ -138,10 +165,10 @@ public class DependencyTreeManagerTest { } assertThat(modulesInOrder, - contains("org.libreccm.core.ccm-testmodule-root", - "org.libreccm.core.ccm-testmodule-a", - "org.libreccm.core.ccm-testmodule-b", - "org.libreccm.core.ccm-testmodule-c")); + contains("test-module-root", + "test-module-a", + "test-module-b", + "test-module-c")); } }