minor
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / trigger / NamedPackagesUpdateChecker.java
1 package jetbrains.buildServer.nuget.server.trigger;\r
2 \r
3 import jetbrains.buildServer.buildTriggers.BuildTriggerDescriptor;\r
4 import jetbrains.buildServer.buildTriggers.BuildTriggerException;\r
5 import jetbrains.buildServer.nuget.server.exec.ListPackagesCommand;\r
6 import jetbrains.buildServer.nuget.server.exec.PackageInfo;\r
7 import jetbrains.buildServer.serverSide.CustomDataStorage;\r
8 import org.jetbrains.annotations.NotNull;\r
9 \r
10 import java.io.File;\r
11 import java.util.*;\r
12 \r
13 /**\r
14  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
15  * Date: 14.07.11 15:41\r
16  */\r
17 public class NamedPackagesUpdateChecker implements TriggerUpdateChecker {\r
18   public static final String KEY = "hash";\r
19   private final ListPackagesCommand myCommand;\r
20 \r
21   public NamedPackagesUpdateChecker(@NotNull final ListPackagesCommand command) {\r
22     myCommand = command;\r
23   }\r
24 \r
25   public BuildStartReason checkChanges(@NotNull BuildTriggerDescriptor descriptor,\r
26                                        @NotNull CustomDataStorage storage) throws BuildTriggerException {\r
27     final String path = descriptor.getProperties().get(TriggerConstants.NUGET_EXE);\r
28     final String pkgId = descriptor.getProperties().get(TriggerConstants.PACKAGE);\r
29     final String version = descriptor.getProperties().get(TriggerConstants.VERSION);\r
30     final String source = descriptor.getProperties().get(TriggerConstants.SOURCE);\r
31 \r
32     Collection<PackageInfo> result = myCommand.checkForChanges(new File(path), source, pkgId, version);\r
33     final String hash = serializeHashcode(result);\r
34 \r
35     String oldHash = storage.getValue(KEY);\r
36     if (!hash.equals(oldHash)) {\r
37       storage.putValue(KEY, hash);\r
38       storage.flush();\r
39       return new BuildStartReason("NuGet Package " + pkgId + " updated");\r
40     }\r
41 \r
42     return null;\r
43   }\r
44 \r
45   private String serializeHashcode(@NotNull final Collection<PackageInfo> _packages) {\r
46     List<PackageInfo> sorted = new ArrayList<PackageInfo>(_packages);\r
47     Collections.sort(sorted, new Comparator<PackageInfo>() {\r
48       public int compare(PackageInfo o1, PackageInfo o2) {\r
49         int i;\r
50         if (0 != (i = o1.getSource().compareTo(o2.getSource()))) return i;\r
51         if (0 != (i = o1.getPackageId().compareTo(o2.getPackageId()))) return i;\r
52         if (0 != (i = o1.getVersion().compareTo(o2.getVersion()))) return i;\r
53         return 0;\r
54       }\r
55     });\r
56 \r
57     StringBuilder sb = new StringBuilder();\r
58     for (PackageInfo info : sorted) {\r
59       sb.append("|s:").append(info.getSource());\r
60       sb.append("|p:").append(info.getPackageId());\r
61       sb.append("|v:").append(info.getVersion());\r
62     }\r
63     return sb.toString();\r
64   }\r
65 }\r