From 5d330e257314e29b873685ec65817fee2a51d7ed Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 10 Feb 2016 14:26:25 +0100 Subject: [PATCH] Tweaked ordering of modules within trains and train iterations. We're now using the global sorting of the projects defined by the topological graph analysis run at startup to implement Comparable and exposing this comparability on more upper levels like modules. --- .../data/release/model/Module.java | 15 ++++++++++++- .../data/release/model/Modules.java | 21 +++++++++++++++---- .../data/release/model/Project.java | 11 +++++++++- .../data/release/model/Train.java | 4 +--- .../data/release/model/TrainIteration.java | 1 - .../data/release/utils/Logger.java | 2 +- .../data/release/model/TrainsUnitTest.java | 16 +------------- 7 files changed, 44 insertions(+), 26 deletions(-) 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); - } }