diff --git a/src/main/java/org/springframework/data/release/model/Module.java b/src/main/java/org/springframework/data/release/model/Module.java index 84e9b31..c58abef 100644 --- a/src/main/java/org/springframework/data/release/model/Module.java +++ b/src/main/java/org/springframework/data/release/model/Module.java @@ -23,7 +23,7 @@ import org.springframework.util.Assert; * @author Oliver Gierke */ @Value -public class Module implements VersionAware { +public class Module implements VersionAware, Comparable { private final Project project; private final Version version; @@ -67,6 +67,19 @@ public class Module implements VersionAware { return this.project.equals(module.project); } + /* + * (non-Javadoc) + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + @Override + public int compareTo(Module that) { + return this.project.compareTo(that.project); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ @Override public String toString() { return String.format("Spring Data %s %s - %s", project.getName(), version, project.getKey()); diff --git a/src/main/java/org/springframework/data/release/model/Modules.java b/src/main/java/org/springframework/data/release/model/Modules.java index 4965380..33b71df 100644 --- a/src/main/java/org/springframework/data/release/model/Modules.java +++ b/src/main/java/org/springframework/data/release/model/Modules.java @@ -15,21 +15,34 @@ */ package org.springframework.data.release.model; -import lombok.RequiredArgsConstructor; - import java.util.Collection; import java.util.Iterator; +import java.util.TreeSet; import org.springframework.data.release.Streamable; /** + * A {@link Streamable} set of modules. Makes sure the stream order will match the natural dependency order of the given + * {@link Module} instances. + * * @author Oliver Gierke */ -@RequiredArgsConstructor -public class Modules implements Streamable { +class Modules implements Streamable { private final Collection modules; + private Modules(Collection modules) { + this.modules = new TreeSet<>(modules); + } + + public static Modules of(Collection modules) { + return new Modules(modules); + } + + /* + * (non-Javadoc) + * @see java.lang.Iterable#iterator() + */ public Iterator iterator() { return modules.iterator(); } diff --git a/src/main/java/org/springframework/data/release/model/Project.java b/src/main/java/org/springframework/data/release/model/Project.java index a1919b3..23786fb 100644 --- a/src/main/java/org/springframework/data/release/model/Project.java +++ b/src/main/java/org/springframework/data/release/model/Project.java @@ -29,7 +29,7 @@ import org.springframework.util.Assert; */ @ToString @EqualsAndHashCode -public class Project { +public class Project implements Comparable { private final @Getter ProjectKey key; private final @Getter String name; @@ -83,4 +83,13 @@ public class Project { return dependencies.stream().anyMatch(dependency -> dependency.equals(project) || dependency.dependsOn(project)); } + + /* + * (non-Javadoc) + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + @Override + public int compareTo(Project that) { + return Projects.PROJECTS.indexOf(this) - Projects.PROJECTS.indexOf(that); + } } diff --git a/src/main/java/org/springframework/data/release/model/Train.java b/src/main/java/org/springframework/data/release/model/Train.java index 1cc23b3..de799cc 100644 --- a/src/main/java/org/springframework/data/release/model/Train.java +++ b/src/main/java/org/springframework/data/release/model/Train.java @@ -50,7 +50,7 @@ public class Train implements Streamable { public Train(String name, Collection modules) { this.name = name; - this.modules = new Modules(modules); + this.modules = Modules.of(modules); this.iterations = Iterations.DEFAULT; } @@ -117,7 +117,6 @@ public class Train implements Streamable { return modules.stream().// filter(module -> !exclusionList.contains(module.getProject())).// map(module -> new ModuleIteration(module, new TrainIteration(this, iteration))).// - sorted().// collect(Collectors.toList()); } @@ -147,7 +146,6 @@ public class Train implements Streamable { builder.append(modules.stream().// map(Module::toString).// - sorted().// collect(Collectors.joining(OsUtils.LINE_SEPARATOR))); return builder.toString(); diff --git a/src/main/java/org/springframework/data/release/model/TrainIteration.java b/src/main/java/org/springframework/data/release/model/TrainIteration.java index 71b5f61..f82ac22 100644 --- a/src/main/java/org/springframework/data/release/model/TrainIteration.java +++ b/src/main/java/org/springframework/data/release/model/TrainIteration.java @@ -83,5 +83,4 @@ public class TrainIteration implements Streamable { public String toString() { return String.format("%s %s", train.getName(), iteration.getName()); } - } diff --git a/src/main/java/org/springframework/data/release/utils/Logger.java b/src/main/java/org/springframework/data/release/utils/Logger.java index fdbd384..fa7e48d 100644 --- a/src/main/java/org/springframework/data/release/utils/Logger.java +++ b/src/main/java/org/springframework/data/release/utils/Logger.java @@ -48,7 +48,7 @@ public class Logger { log(train.getName(), template, args); } - private void log(String context, Object template, Object... args) { + public void log(String context, Object template, Object... args) { LOGGER.info(String.format(PREFIX_TEMPLATE, context, String.format(template.toString(), args))); } } diff --git a/src/test/java/org/springframework/data/release/model/TrainsUnitTest.java b/src/test/java/org/springframework/data/release/model/TrainsUnitTest.java index 6ae3e7a..af6d61c 100644 --- a/src/test/java/org/springframework/data/release/model/TrainsUnitTest.java +++ b/src/test/java/org/springframework/data/release/model/TrainsUnitTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,18 +39,4 @@ public class TrainsUnitTest { public void addsNewlyAddedModule() { assertThat(ReleaseTrains.HOPPER.getModule(Projects.ENVERS), is(notNullValue())); } - - @Test - public void testname() { - - Iterable iterations = ReleaseTrains.HOPPER.getModuleIterations(Iteration.M1); - - for (ModuleIteration iteration : iterations) { - System.out.println(iteration); - } - - System.out.println(); - - iterations.forEach(System.out::println); - } }