diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index b4f7099aa..a24058167 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -137,6 +137,11 @@ test + + org.apache.maven + maven-artifact + + com.h2database h2 @@ -399,6 +404,7 @@ **/DateFormatter.java **/DateFormatterConfig.java **/DateTimeFormatter.java + **/DispatcherConfig.java **/Document.java **/Element.java **/EmailParameter.java @@ -407,13 +413,17 @@ **/ExceptionUnwrapper.java **/Exceptions.java **/FileParameter.java + **/FormBuilderConfig.java **/FullDateFormatter.java + **/GlobalizationConfig.java **/IntegerParameter.java **/JavaPropertyReader.java **/JavaPropertyWriter.java **/KernelConfig.java **/LockableImpl.java + **/MailConfig.java **/MapParameter.java + **/NotificationConfig.java **/Parameter.java **/ParameterError.java **/ParameterException.java @@ -425,8 +435,11 @@ **/SpecificClassParameter.java **/StringParameter.java **/TimeFormatter.java + **/UIConfig.java **/UncheckedWrapperException.java + **/WorkflowConfig.java **/XML.java + **/XMLConfig.java diff --git a/ccm-core/src/main/java/org/libreccm/auditing/CcmRevision.java b/ccm-core/src/main/java/org/libreccm/auditing/CcmRevision.java index a7d150fed..688cf8f2c 100644 --- a/ccm-core/src/main/java/org/libreccm/auditing/CcmRevision.java +++ b/ccm-core/src/main/java/org/libreccm/auditing/CcmRevision.java @@ -21,6 +21,8 @@ package org.libreccm.auditing; import org.hibernate.envers.DefaultRevisionEntity; import org.hibernate.envers.RevisionEntity; +import java.util.Objects; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; @@ -51,4 +53,31 @@ public class CcmRevision extends DefaultRevisionEntity { this.userName = userName; } + @Override + public int hashCode() { + int hash = super.hashCode(); + + hash = 17 * hash + Objects.hashCode(this.userName); + + return hash; + } + + + + @Override + public boolean equals(final Object object) { + if(!super.equals(object)) { + return false; + } + + if (!(object instanceof CcmRevision)) { + return false; + } + + final CcmRevision other = (CcmRevision) object; + return userName.equals(other.getUserName()); + } + + + } diff --git a/ccm-core/src/main/java/org/libreccm/jpa/AuditReaderProducer.java b/ccm-core/src/main/java/org/libreccm/jpa/AuditReaderProducer.java new file mode 100644 index 000000000..9bd4445de --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/jpa/AuditReaderProducer.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.jpa; + +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; + +import javax.enterprise.inject.Produces; +import javax.inject.Inject; +import javax.persistence.EntityManager; + +/** + * + * @author Jens Pelzetter + */ +public class AuditReaderProducer { + + @Inject + private transient EntityManager entityManager; + + @Produces + public AuditReader auditReader() { + return AuditReaderFactory.get(entityManager); + } +} diff --git a/ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java b/ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java index cd2c36572..2226968cb 100644 --- a/ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java +++ b/ccm-core/src/main/java/org/libreccm/jpa/EntityManagerProducer.java @@ -1,8 +1,5 @@ package org.libreccm.jpa; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; - import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Produces; import javax.persistence.EntityManager; @@ -15,12 +12,9 @@ import javax.persistence.PersistenceContext; @ApplicationScoped @SuppressWarnings("PMD.UnusedPrivateField") public class EntityManagerProducer { - + @Produces @PersistenceContext(name = "LibreCCM") private EntityManager entityManager; - - @Produces - private AuditReader auditReader = AuditReaderFactory.get(entityManager); - + } diff --git a/ccm-core/src/main/java/org/libreccm/modules/Bar.java b/ccm-core/src/main/java/org/libreccm/modules/Bar.java deleted file mode 100644 index 93770758c..000000000 --- a/ccm-core/src/main/java/org/libreccm/modules/Bar.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2015 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.libreccm.modules; - -/** - * - * @author Jens Pelzetter - */ -public class Bar implements Module { - - @Override - public void prepare() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void uninstall() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void init() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void shutdown() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/modules/Example.java b/ccm-core/src/main/java/org/libreccm/modules/Example.java deleted file mode 100644 index 606181e19..000000000 --- a/ccm-core/src/main/java/org/libreccm/modules/Example.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2015 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.libreccm.modules; - -/** - * - * @author Jens Pelzetter - */ -public class Example implements Module { - - @Override - public void prepare() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void uninstall() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void init() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void shutdown() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/modules/Foo.java b/ccm-core/src/main/java/org/libreccm/modules/Foo.java deleted file mode 100644 index 738a25689..000000000 --- a/ccm-core/src/main/java/org/libreccm/modules/Foo.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2015 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.libreccm.modules; - -import org.libreccm.modules.annotations.RequiredModule; - -/** - * - * @author Jens Pelzetter - */ -@org.libreccm.modules.annotations.Module(name = "org.libreccm.foo.Foo", - version = "1.0.0-beta.1", - requiredModules = { - @RequiredModule(module = Bar.class, version = "1.0.0"), - @RequiredModule(module= Example.class, version = "6.6.7")}) -public class Foo implements Module { - - @Override - public void prepare() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void uninstall() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void init() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void shutdown() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/modules/Module.java b/ccm-core/src/main/java/org/libreccm/modules/ModuleDescriptor.java similarity index 97% rename from ccm-core/src/main/java/org/libreccm/modules/Module.java rename to ccm-core/src/main/java/org/libreccm/modules/ModuleDescriptor.java index d8cf09005..e37b404d9 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/Module.java +++ b/ccm-core/src/main/java/org/libreccm/modules/ModuleDescriptor.java @@ -22,7 +22,7 @@ package org.libreccm.modules; * * @author Jens Pelzetter */ -public interface Module { +public interface ModuleDescriptor { /** * Called by the {@link ModuleManager} after the database tables for the diff --git a/ccm-core/src/main/java/org/libreccm/modules/ModuleManager.java b/ccm-core/src/main/java/org/libreccm/modules/ModuleManager.java index 6731765c1..844684b47 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/ModuleManager.java +++ b/ccm-core/src/main/java/org/libreccm/modules/ModuleManager.java @@ -30,7 +30,7 @@ import javax.inject.Inject; public class ModuleManager { @Inject - private transient Instance modules; + private transient Instance modules; diff --git a/ccm-core/src/main/java/org/libreccm/modules/ModuleUtil.java b/ccm-core/src/main/java/org/libreccm/modules/ModuleUtil.java index 3a0807bf6..6176524c8 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/ModuleUtil.java +++ b/ccm-core/src/main/java/org/libreccm/modules/ModuleUtil.java @@ -18,23 +18,22 @@ */ package org.libreccm.modules; +import org.libreccm.modules.annotations.Module; import org.libreccm.modules.annotations.RequiredModule; /** * * @author Jens Pelzetter */ -public class ModuleUtil { +public final class ModuleUtil { private ModuleUtil() { //Nothing } - private static org.libreccm.modules.annotations.Module getModuleAnnotation( - final Module module) { - final org.libreccm.modules.annotations.Module annotation = module - .getClass().getAnnotation( - org.libreccm.modules.annotations.Module.class); + private static Module getModuleAnnotation( + final ModuleDescriptor module) { + final Module annotation = module.getClass().getAnnotation(Module.class); if (annotation == null) { throw new IllegalArgumentException(String.format( @@ -47,21 +46,22 @@ public class ModuleUtil { } } - public static String getModuleName(final Module module) { + public static String getModuleName(final ModuleDescriptor module) { return getModuleAnnotation(module).name(); } - public static String getVersion(final Module module) { + public static String getVersion(final ModuleDescriptor module) { return getModuleAnnotation(module).version(); } - public static RequiredModule[] getRequiredModules(final Module module) { + public static RequiredModule[] getRequiredModules(final ModuleDescriptor module) { return getModuleAnnotation(module).requiredModules(); } - public static String getModuleName(Class module) { - final org.libreccm.modules.annotations.Module annotation = module - .getAnnotation(org.libreccm.modules.annotations.Module.class); + public static String getModuleName( + final Class module) { + + final Module annotation = module.getAnnotation(Module.class); if (annotation == null) { throw new IllegalArgumentException(String.format( diff --git a/ccm-core/src/main/java/org/libreccm/modules/annotations/Module.java b/ccm-core/src/main/java/org/libreccm/modules/annotations/Module.java index 6015af003..486c7a262 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/annotations/Module.java +++ b/ccm-core/src/main/java/org/libreccm/modules/annotations/Module.java @@ -18,7 +18,7 @@ */ package org.libreccm.modules.annotations; -import org.jboss.as.server.moduleservice.ModuleDefinition; +import org.libreccm.modules.ModuleDescriptor; import static java.lang.annotation.ElementType.*; @@ -30,7 +30,7 @@ import javax.enterprise.util.Nonbinding; import javax.inject.Qualifier; /** - * Annotate an implementation of the {@link ModuleDefinition} interface with + * Annotate an implementation of the {@link ModuleDescriptor} interface with * this annotation to use it as a module. * * @author Jens Pelzetter diff --git a/ccm-core/src/main/java/org/libreccm/modules/annotations/RequiredModule.java b/ccm-core/src/main/java/org/libreccm/modules/annotations/RequiredModule.java index edc5c7741..a165608b2 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/annotations/RequiredModule.java +++ b/ccm-core/src/main/java/org/libreccm/modules/annotations/RequiredModule.java @@ -24,8 +24,10 @@ package org.libreccm.modules.annotations; */ public @interface RequiredModule { - Class module(); + Class module(); - String version() default ""; + String minVersion() default ""; + + String maxVersion() default ""; } diff --git a/ccm-core/src/main/java/org/libreccm/modules/dependencytree/DependencyTreeManager.java b/ccm-core/src/main/java/org/libreccm/modules/dependencytree/DependencyTreeManager.java index 648fc0660..3c63bd7fb 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/dependencytree/DependencyTreeManager.java +++ b/ccm-core/src/main/java/org/libreccm/modules/dependencytree/DependencyTreeManager.java @@ -20,7 +20,8 @@ package org.libreccm.modules.dependencytree; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.libreccm.modules.Module; +import org.apache.maven.artifact.versioning.ComparableVersion; +import org.libreccm.modules.ModuleDescriptor; import org.libreccm.modules.ModuleUtil; import org.libreccm.modules.annotations.RequiredModule; @@ -32,6 +33,18 @@ import java.util.Map; import javax.enterprise.inject.Instance; /** + * This class implements topological sorting to determine the order in which the + * modules are loaded and initialised. + * + * The class is used by creating an instance with the parameterless constructor. + * To create the tree/graph call the + * {@link #generateTree(javax.enterprise.inject.Instance)} method. With the + * returned list of nodes call the the {@link #orderModules(java.util.List)} + * method. The list returned by {@link #orderModules(java.util.List)} contains + * all modules in order. + * + * More information about topological sorting: + * https://en.wikipedia.org/wiki/Topological_sorting * * @author Jens Pelzetter */ @@ -40,23 +53,23 @@ public class DependencyTreeManager { private static final Logger LOGGER = LogManager.getLogger( DependencyTreeManager.class); - public List generateTree(final Instance modules) throws - DependencyException { + public List generateTree(final Instance modules) + throws DependencyException { LOGGER.info("Starting to generate dependency tree..."); final Map nodes = new HashMap<>(); - for (final Module module : modules) { + for (final ModuleDescriptor module : modules) { createTreeNode(module, nodes); } - for (final Module module : modules) { + for (final ModuleDescriptor module : modules) { addDependencyRelations(module, nodes); } final List nodeList = new ArrayList<>(); - for (Map.Entry entry : nodes.entrySet()) { + for (final Map.Entry entry : nodes.entrySet()) { nodeList.add(entry.getValue()); } @@ -116,7 +129,7 @@ public class DependencyTreeManager { } } - private void createTreeNode(final Module module, + private void createTreeNode(final ModuleDescriptor module, final Map nodes) { final TreeNode node = new TreeNode(module); @@ -125,7 +138,7 @@ public class DependencyTreeManager { nodes.put(ModuleUtil.getModuleName(module), node); } - private void addDependencyRelations(final Module module, + private void addDependencyRelations(final ModuleDescriptor module, final Map nodes) throws DependencyException { @@ -147,8 +160,9 @@ public class DependencyTreeManager { final TreeNode node = nodes.get(moduleName); LOGGER.info("Processing required modules for module \"{}\"...", ModuleUtil.getModuleName(module)); - for (RequiredModule requiredModule : ModuleUtil.getRequiredModules( - module)) { + for (final RequiredModule requiredModule : ModuleUtil + .getRequiredModules( + module)) { LOGGER.info("\tModule \"{}\" requires module \"{}\".", ModuleUtil.getModuleName(module), @@ -171,9 +185,84 @@ public class DependencyTreeManager { final TreeNode dependencyNode = nodes.get(ModuleUtil.getModuleName( requiredModule.module())); - node.addDependsOn(node); + //Check version + if (!validateVersion(ModuleUtil.getVersion(dependencyNode + .getModule()), + 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\"", + ModuleUtil.getVersion(dependencyNode.getModule()), + 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 minRequiredVersion The minimal version required. Can be + * {@code null} or empty. + * @param maxRequiredVersion The maximum version required. Can be + * {@code null} or empty. + * + * @return {@code true} if the available version is in the required range, + * {@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. + @SuppressWarnings({"PMD.LongVariable", + "PMD.UselessParentheses", + "PMD.CyclomaticComplexity"}) + private boolean validateVersion(final String availableVersion, + final String minRequiredVersion, + final String maxRequiredVersion) { + if (availableVersion == null || availableVersion.isEmpty()) { + throw new IllegalArgumentException("No available version specified."); + } + + if ((minRequiredVersion == null || minRequiredVersion.isEmpty()) + && (maxRequiredVersion == null || maxRequiredVersion.isEmpty())) { + return true; + } else if ((minRequiredVersion != null && !minRequiredVersion.isEmpty()) + && (maxRequiredVersion == null || maxRequiredVersion + .isEmpty())) { + final ComparableVersion minVersion = new ComparableVersion( + minRequiredVersion); + final ComparableVersion version = new ComparableVersion( + availableVersion); + + return minVersion.compareTo(version) <= 0; + } else if ((minRequiredVersion == null || minRequiredVersion.isEmpty()) + && (maxRequiredVersion != null && !maxRequiredVersion + .isEmpty())) { + final ComparableVersion maxVersion = new ComparableVersion( + maxRequiredVersion); + final ComparableVersion version = new ComparableVersion( + availableVersion); + + return version.compareTo(maxVersion) <= 0; + } else { + final ComparableVersion minVersion = new ComparableVersion( + minRequiredVersion); + final ComparableVersion maxVersion = new ComparableVersion( + (maxRequiredVersion)); + final ComparableVersion version = new ComparableVersion( + availableVersion); + return minVersion.compareTo(version) <= 0 && version.compareTo( + maxVersion) <= 0; + } + } + } diff --git a/ccm-core/src/main/java/org/libreccm/modules/dependencytree/TreeNode.java b/ccm-core/src/main/java/org/libreccm/modules/dependencytree/TreeNode.java index 3a5542624..a96580feb 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/dependencytree/TreeNode.java +++ b/ccm-core/src/main/java/org/libreccm/modules/dependencytree/TreeNode.java @@ -18,7 +18,7 @@ */ package org.libreccm.modules.dependencytree; -import org.libreccm.modules.Module; +import org.libreccm.modules.ModuleDescriptor; import org.libreccm.modules.ModuleUtil; import java.util.ArrayList; @@ -27,12 +27,15 @@ import java.util.List; import java.util.Objects; /** - * + * Represents a node in the dependency tree. + * + * @see DependencyTreeManager + * * @author Jens Pelzetter */ public final class TreeNode { - private Module module; + private ModuleDescriptor module; private List dependentModules; private List dependsOn; @@ -40,20 +43,20 @@ public final class TreeNode { super(); dependentModules = new ArrayList<>(); - dependentModules = new ArrayList<>(); + dependsOn = new ArrayList<>(); } - public TreeNode(final Module module) { + public TreeNode(final ModuleDescriptor module) { this(); this.module = module; } - public Module getModule() { + public ModuleDescriptor getModule() { return module; } - public void setModule(final Module module) { + public void setModule(final ModuleDescriptor module) { this.module = module; } @@ -61,15 +64,15 @@ public final class TreeNode { return Collections.unmodifiableList(dependentModules); } - protected void setDependentModules(final List dependentModules) { + void setDependentModules(final List dependentModules) { this.dependentModules = dependentModules; } - protected void addDependentModule(final TreeNode node) { + void addDependentModule(final TreeNode node) { dependentModules.add(node); } - protected void removeDependentModule(final TreeNode node) { + void removeDependentModule(final TreeNode node) { dependentModules.remove(node); } @@ -77,15 +80,15 @@ public final class TreeNode { return Collections.unmodifiableList(dependsOn); } - protected void setDependsOn(final List dependsOn) { + void setDependsOn(final List dependsOn) { this.dependsOn = dependsOn; } - protected void addDependsOn(final TreeNode node) { + void addDependsOn(final TreeNode node) { dependsOn.add(node); } - protected void removeDependsOn(final TreeNode node) { + void removeDependsOn(final TreeNode node) { dependsOn.remove(node); } diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/ComparableVersionTest.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/ComparableVersionTest.java new file mode 100644 index 000000000..70e8b7661 --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/ComparableVersionTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules.dependencytree; + +import org.apache.maven.artifact.versioning.ComparableVersion; + +import static org.hamcrest.Matchers.*; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.libreccm.tests.categories.UnitTest; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.junit.Assert.*; + +/** + * + * @author Jens Pelzetter + */ +@Category(UnitTest.class) +public class ComparableVersionTest { + + public ComparableVersionTest() { + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Test + public void compareVersions() { + final ComparableVersion version001 = new ComparableVersion("0.0.1"); + final ComparableVersion version010 = new ComparableVersion("0.1.0"); + final ComparableVersion version015 = new ComparableVersion("0.1.5"); + final ComparableVersion version100alpha1 = new ComparableVersion( + "1.0.0-alpha.1"); + final ComparableVersion version100alpha2 = new ComparableVersion( + "1.0.0-alpha.2"); + final ComparableVersion version100beta1 = new ComparableVersion( + "1.0.0-beta.1"); + final ComparableVersion version100beta2 = new ComparableVersion( + "1.0.0-beta.2"); + final ComparableVersion version100 = new ComparableVersion("1.0.0"); + final ComparableVersion version100final = new ComparableVersion("1.0.0"); + final ComparableVersion version100ga = new ComparableVersion("1.0.0-ga"); + final ComparableVersion version157 = new ComparableVersion("1.5.7"); + final ComparableVersion version273beta3 = new ComparableVersion( + "2.7.3-beta.3"); + final ComparableVersion emptyVersion = new ComparableVersion(""); + + final List versions = new ArrayList<>(); + versions.add(version001); + versions.add(version157); + versions.add(version100alpha2); + versions.add(version100beta2); + versions.add(version100alpha1); + versions.add(version273beta3); + versions.add(version100); + versions.add(version010); + versions.add(version015); + versions.add(version100beta1); + versions.add(version100ga); + versions.add(version100final); + versions.add(emptyVersion); + + Collections.sort(versions); + + assertThat(versions.size(), is(13)); + + assertThat(versions, + contains(emptyVersion, + version001, + version010, + version015, + version100alpha1, + version100alpha2, + version100beta1, + version100beta2, + version100final, + version100ga, + version100, + version157, + version273beta3)); + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerCycleTest.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerCycleTest.java new file mode 100644 index 000000000..21ef69a14 --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerCycleTest.java @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules.dependencytree; + +import static org.hamcrest.Matchers.*; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.ShouldThrowException; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; +import org.junit.After; +import org.junit.AfterClass; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.libreccm.modules.ModuleDescriptor; +import org.libreccm.modules.annotations.Module; +import org.libreccm.modules.dependencytree.test.cycle.TestModuleA; +import org.libreccm.modules.dependencytree.test.cycle.TestModuleB; +import org.libreccm.modules.dependencytree.test.cycle.TestModuleC; +import org.libreccm.modules.dependencytree.test.cycle.TestModuleRoot; +import org.libreccm.tests.categories.IntegrationTest; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.enterprise.inject.Instance; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@Category(IntegrationTest.class) +@RunWith(Arquillian.class) +public class DependencyTreeManagerCycleTest { + + @Inject + @Module + private transient Instance modules; + + public DependencyTreeManagerCycleTest() { + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Deployment + public static WebArchive createDeployment() { + final PomEquippedResolveStage pom = Maven + .resolver() + .loadPomFromFile("pom.xml"); + final PomEquippedResolveStage dependencies = pom + .importCompileAndRuntimeDependencies(); + final File[] libs = dependencies.resolve().withTransitivity().asFile(); + + for (File lib : libs) { + System.err.printf("Adding file '%s' to test archive...%n", + lib.getName()); + } + + return ShrinkWrap + .create(WebArchive.class, + "LibreCCM-org.libreccm.modules.dependencytree.DependencyTreeManager.war") + .addPackage(DependencyTreeManager.class.getPackage()) + .addPackage(Module.class + .getPackage()) + .addPackage(org.libreccm.tests.categories.IntegrationTest.class + .getPackage()) + .addPackage( + org.libreccm.modules.dependencytree.test.cycle.TestModuleRoot.class + .getPackage()) + .addClass(org.libreccm.modules.ModuleDescriptor.class) + .addClass(org.libreccm.modules.ModuleUtil.class) + .addAsLibraries(libs) + .addAsWebInfResource("test-web.xml", "web.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + } + + @Test + @SuppressWarnings("unchecked") + public void allModulesInjected() { + final List> moduleList = new ArrayList<>(); + for (final ModuleDescriptor module : modules) { + moduleList.add((Class) module.getClass()); + } + + assertThat(moduleList.size(), is(4)); + assertThat(moduleList, containsInAnyOrder(TestModuleRoot.class, + TestModuleA.class, + TestModuleB.class, + TestModuleC.class)); + } + + @Test(expected = DependencyException.class) + @ShouldThrowException(DependencyException.class) + public void verifyModuleOrder() throws DependencyException { + final DependencyTreeManager treeManager = new DependencyTreeManager(); + + final List tree = treeManager.generateTree(modules); + treeManager.orderModules(tree); + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerTest.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerTest.java index 27fb120e8..d13e8d647 100644 --- a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerTest.java +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/DependencyTreeManagerTest.java @@ -18,6 +18,11 @@ */ package org.libreccm.modules.dependencytree; +import org.libreccm.modules.dependencytree.test.valid.TestModuleB; +import org.libreccm.modules.dependencytree.test.valid.TestModuleC; +import org.libreccm.modules.dependencytree.test.valid.TestModuleA; +import org.libreccm.modules.dependencytree.test.valid.TestModuleRoot; + import static org.hamcrest.Matchers.*; import org.jboss.arquillian.container.test.api.Deployment; @@ -37,7 +42,9 @@ import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; -import org.libreccm.modules.Module; +import org.libreccm.modules.ModuleDescriptor; +import org.libreccm.modules.ModuleUtil; +import org.libreccm.modules.annotations.Module; import org.libreccm.tests.categories.IntegrationTest; import java.io.File; @@ -56,8 +63,8 @@ import javax.inject.Inject; public class DependencyTreeManagerTest { @Inject - @org.libreccm.modules.annotations.Module - private transient Instance modules; + @Module + private transient Instance modules; public DependencyTreeManagerTest() { } @@ -96,12 +103,16 @@ public class DependencyTreeManagerTest { .create(WebArchive.class, "LibreCCM-org.libreccm.modules.dependencytree.DependencyTreeManager.war") .addPackage(DependencyTreeManager.class.getPackage()) - .addPackage(org.libreccm.modules.annotations.Module.class + .addPackage(Module.class .getPackage()) .addPackage(org.libreccm.tests.categories.IntegrationTest.class .getPackage()) - .addClass(org.libreccm.modules.Module.class) + .addPackage( + org.libreccm.modules.dependencytree.test.valid.TestModuleRoot.class + .getPackage()) + .addClass(org.libreccm.modules.ModuleDescriptor.class) .addClass(org.libreccm.modules.ModuleUtil.class) + .addAsLibraries(libs) .addAsWebInfResource("test-web.xml", "web.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); } @@ -109,10 +120,9 @@ public class DependencyTreeManagerTest { @Test @SuppressWarnings("unchecked") public void allModulesInjected() { - - final List> moduleList = new ArrayList<>(); - for (final Module module : modules) { - moduleList.add((Class) module.getClass()); + final List> moduleList = new ArrayList<>(); + for (final ModuleDescriptor module : modules) { + moduleList.add((Class) module.getClass()); } assertThat(moduleList.size(), is(4)); @@ -120,7 +130,25 @@ public class DependencyTreeManagerTest { TestModuleA.class, TestModuleB.class, TestModuleC.class)); + } + @Test + public void verifyModuleOrder() throws DependencyException { + final DependencyTreeManager treeManager = new DependencyTreeManager(); + + final List tree = treeManager.generateTree(modules); + final List ordered = treeManager.orderModules(tree); + + final List modulesInOrder = new ArrayList<>(); + for (final TreeNode node : ordered) { + modulesInOrder.add(ModuleUtil.getModuleName(node.getModule())); + } + + 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")); } } diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleA.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleA.java similarity index 86% rename from ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleA.java rename to ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleA.java index 09a007910..44375017a 100644 --- a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleA.java +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleA.java @@ -16,9 +16,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package org.libreccm.modules.dependencytree; +package org.libreccm.modules.dependencytree.test.cycle; -import org.libreccm.modules.Module; +import org.libreccm.modules.dependencytree.test.valid.*; +import org.libreccm.modules.ModuleDescriptor; import org.libreccm.modules.annotations.RequiredModule; /** @@ -29,7 +30,7 @@ import org.libreccm.modules.annotations.RequiredModule; name = "org.libreccm.core.ccm-testmodule-a", version = "1.0.0", requiredModules = { @RequiredModule(module = TestModuleRoot.class)}) -public class TestModuleA implements Module { +public class TestModuleA implements ModuleDescriptor { @Override public void prepare() { diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleB.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleB.java similarity index 82% rename from ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleB.java rename to ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleB.java index b2fd15e32..1ce7922c5 100644 --- a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleB.java +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleB.java @@ -16,9 +16,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package org.libreccm.modules.dependencytree; +package org.libreccm.modules.dependencytree.test.cycle; -import org.libreccm.modules.Module; +import org.libreccm.modules.dependencytree.test.valid.*; +import org.libreccm.modules.ModuleDescriptor; import org.libreccm.modules.annotations.RequiredModule; /** @@ -26,10 +27,10 @@ import org.libreccm.modules.annotations.RequiredModule; * @author Jens Pelzetter */ @org.libreccm.modules.annotations.Module( - name = "org.libreccm.core.ccm-testmodule-a", version = "1.0.0", + name = "org.libreccm.core.ccm-testmodule-b", version = "1.0.0", requiredModules = { @RequiredModule(module = TestModuleRoot.class)}) -public class TestModuleB implements Module { +public class TestModuleB implements ModuleDescriptor { @Override public void prepare() { diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleC.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleC.java new file mode 100644 index 000000000..a83d97bee --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleC.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules.dependencytree.test.cycle; + +import org.libreccm.modules.dependencytree.test.valid.*; +import org.libreccm.modules.ModuleDescriptor; +import org.libreccm.modules.annotations.RequiredModule; + +/** + * + * @author Jens Pelzetter + */ +@org.libreccm.modules.annotations.Module( + name = "org.libreccm.core.ccm-testmodule-c", version = "1.0.0", + requiredModules = { + @RequiredModule(module = TestModuleRoot.class), + @RequiredModule(module = TestModuleA.class)}) +public class TestModuleC implements ModuleDescriptor { + + @Override + public void prepare() { + //Nothing + } + + @Override + public void uninstall() { + //Nothing + } + + @Override + public void init() { + //Nothing + } + + @Override + public void shutdown() { + //Nothing + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleRoot.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleRoot.java new file mode 100644 index 000000000..e5c7aa24e --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/cycle/TestModuleRoot.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules.dependencytree.test.cycle; + +import org.libreccm.modules.ModuleDescriptor; +import org.libreccm.modules.annotations.RequiredModule; + +/** + * + * @author Jens Pelzetter + */ +@org.libreccm.modules.annotations.Module( + name = "org.libreccm.core.ccm-testmodule-root", + version = "1.0.0", + requiredModules = { + @RequiredModule(module = TestModuleB.class)}) +public class TestModuleRoot implements ModuleDescriptor { + + @Override + public void prepare() { + //Nothing + } + + @Override + public void uninstall() { + //Nothing + } + + @Override + public void init() { + //Nothing + } + + @Override + public void shutdown() { + //Nothing + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleC.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleA.java similarity index 85% rename from ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleC.java rename to ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleA.java index e11ee48b6..d7cc355ea 100644 --- a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleC.java +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleA.java @@ -16,9 +16,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package org.libreccm.modules.dependencytree; +package org.libreccm.modules.dependencytree.test.valid; -import org.libreccm.modules.Module; +import org.libreccm.modules.ModuleDescriptor; import org.libreccm.modules.annotations.RequiredModule; /** @@ -28,9 +28,8 @@ import org.libreccm.modules.annotations.RequiredModule; @org.libreccm.modules.annotations.Module( name = "org.libreccm.core.ccm-testmodule-a", version = "1.0.0", requiredModules = { - @RequiredModule(module = TestModuleRoot.class), - @RequiredModule(module = TestModuleA.class)}) -public class TestModuleC implements Module { + @RequiredModule(module = TestModuleRoot.class, minVersion = "1.0.0")}) +public class TestModuleA implements ModuleDescriptor { @Override public void prepare() { diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleB.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleB.java new file mode 100644 index 000000000..9c739a7ad --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleB.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules.dependencytree.test.valid; + +import org.libreccm.modules.ModuleDescriptor; +import org.libreccm.modules.annotations.RequiredModule; + +/** + * + * @author Jens Pelzetter + */ +@org.libreccm.modules.annotations.Module( + name = "org.libreccm.core.ccm-testmodule-b", version = "1.0.0", + requiredModules = { + @RequiredModule(module = TestModuleRoot.class, minVersion = "1.0.0")}) +public class TestModuleB implements ModuleDescriptor { + + @Override + public void prepare() { + //Nothing + } + + @Override + public void uninstall() { + //Nothing + } + + @Override + public void init() { + //Nothing + } + + @Override + public void shutdown() { + //Nothing + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleC.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleC.java new file mode 100644 index 000000000..c9086e45f --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleC.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2015 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules.dependencytree.test.valid; + +import org.libreccm.modules.ModuleDescriptor; +import org.libreccm.modules.annotations.RequiredModule; + +/** + * + * @author Jens Pelzetter + */ +@org.libreccm.modules.annotations.Module( + name = "org.libreccm.core.ccm-testmodule-c", version = "1.0.0", + requiredModules = { + @RequiredModule(module = TestModuleRoot.class, minVersion = "1.0.0"), + @RequiredModule(module = TestModuleA.class, minVersion = "1.0.0")}) +public class TestModuleC implements ModuleDescriptor { + + @Override + public void prepare() { + //Nothing + } + + @Override + public void uninstall() { + //Nothing + } + + @Override + public void init() { + //Nothing + } + + @Override + public void shutdown() { + //Nothing + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleRoot.java b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleRoot.java similarity index 83% rename from ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleRoot.java rename to ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleRoot.java index 49e7df808..e95cd48b3 100644 --- a/ccm-core/src/test/java/org/libreccm/modules/dependencytree/TestModuleRoot.java +++ b/ccm-core/src/test/java/org/libreccm/modules/dependencytree/test/valid/TestModuleRoot.java @@ -16,17 +16,17 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package org.libreccm.modules.dependencytree; +package org.libreccm.modules.dependencytree.test.valid; -import org.libreccm.modules.Module; +import org.libreccm.modules.ModuleDescriptor; /** * * @author Jens Pelzetter */ @org.libreccm.modules.annotations.Module( - name = "org.libreccm.core.ccm-testmodule-a", version = "1.0.0") -public class TestModuleRoot implements Module { + name = "org.libreccm.core.ccm-testmodule-root", version = "1.0.0") +public class TestModuleRoot implements ModuleDescriptor { @Override public void prepare() { diff --git a/pom.xml b/pom.xml index 7fcac0bb0..d0e690a93 100644 --- a/pom.xml +++ b/pom.xml @@ -369,7 +369,6 @@ 1.46 - org.imgscalr imgscalr-lib @@ -382,6 +381,12 @@ 1.8.2 + + org.apache.maven + maven-artifact + 3.3.3 + + oro oro