1 package it.serendigity.maven.plugin.lifecycle.helper.vo;
2
3 import java.io.Serializable;
4 import java.util.Comparator;
5 import java.util.EnumSet;
6 import java.util.Set;
7
8 import org.apache.commons.lang3.builder.CompareToBuilder;
9
10
11
12
13
14 @SuppressWarnings("serial")
15 public class MavenExecutionComparator implements Comparator<MavenExecutionInfo>, Serializable {
16
17 private final MavenExecutionAttribute orderAttribute;
18
19 public MavenExecutionComparator( MavenExecutionAttribute orderAttribute ) {
20 this.orderAttribute = orderAttribute;
21 }
22
23 @Override
24 public int compare( MavenExecutionInfo o1, MavenExecutionInfo o2 ) {
25
26 MavenExecutionAttribute orderAttr = getOrderAttribute();
27
28 CompareToBuilder builder = new CompareToBuilder();
29
30 Set<MavenExecutionAttribute> excludes = EnumSet.noneOf( MavenExecutionAttribute.class );
31
32
33 if ( orderAttr != null ) {
34 builder.append( o1.getValue( orderAttr ), o2.getValue( orderAttr ) );
35 excludes.add( orderAttr );
36 }
37
38
39 if ( orderAttr == null || orderAttr != MavenExecutionAttribute.PLAN_ORDER ) {
40 builder.append( o1.getExecutionOrder(), o2.getExecutionOrder() );
41 excludes.add( MavenExecutionAttribute.PLAN_ORDER );
42 }
43 MavenExecutionAttribute[] excludesArray = excludes.toArray( new MavenExecutionAttribute[excludes.size()] );
44
45
46 Set<MavenExecutionAttribute> complementOf = MavenExecutionAttribute.complementOf( excludesArray );
47
48 if ( complementOf != null && !complementOf.isEmpty() ) {
49 complementOf.stream().forEach( p -> builder.append( o1.getValue( p ), o2.getValue( p ) ) );
50
51 }
52
53 return builder.toComparison();
54
55 }
56
57 protected MavenExecutionAttribute getOrderAttribute() {
58 return orderAttribute;
59 }
60
61 }