filter nuget.commandline versions
[teamcity/dotNetPackagesSupport.git] / nuget-server / src / jetbrains / buildServer / nuget / server / toolRegistry / impl / AvailableToolsState.java
1 /*\r
2  * Copyright 2000-2011 JetBrains s.r.o.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package jetbrains.buildServer.nuget.server.toolRegistry.impl;\r
18 \r
19 import jetbrains.buildServer.nuget.server.feed.reader.FeedConstants;\r
20 import jetbrains.buildServer.nuget.server.feed.reader.FeedPackage;\r
21 import jetbrains.buildServer.nuget.server.feed.reader.NuGetFeedReader;\r
22 import jetbrains.buildServer.nuget.server.toolRegistry.NuGetTool;\r
23 import jetbrains.buildServer.util.CollectionsUtil;\r
24 import jetbrains.buildServer.util.Converter;\r
25 import jetbrains.buildServer.util.filters.Filter;\r
26 import org.jetbrains.annotations.NotNull;\r
27 \r
28 import java.io.IOException;\r
29 import java.util.Collection;\r
30 import java.util.Collections;\r
31 \r
32 /**\r
33  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
34  * Date: 15.08.11 16:33\r
35  */\r
36 public class AvailableToolsState {\r
37   private final NuGetFeedReader myReader;\r
38 \r
39   public AvailableToolsState(@NotNull final NuGetFeedReader reader) {\r
40     myReader = reader;\r
41   }\r
42 \r
43   public Collection<NuGetTool> getAvailable() {\r
44     try {\r
45       final Collection<FeedPackage> packages = myReader.queryPackageVersions(FeedConstants.FEED_URL, FeedConstants.NUGET_COMMANDLINE);\r
46       return CollectionsUtil.filterAndConvertCollection(\r
47               packages,\r
48               new Converter<NuGetTool, FeedPackage>() {\r
49                 public NuGetTool createFrom(@NotNull FeedPackage source) {\r
50                   return new InstallableTool(source);\r
51                 }\r
52               },\r
53               new Filter<FeedPackage>() {\r
54                 public boolean accept(@NotNull FeedPackage data) {\r
55                   final String[] version = data.getInfo().getVersion().split("\\.");\r
56                   if (version.length < 2) return false;\r
57                   int major = parse(version[0]);\r
58                   if (major < 1) return false;\r
59 \r
60                   int minor = parse(version[1]);\r
61                   if (minor < 4) return false;\r
62 \r
63                   return true;\r
64                 }\r
65 \r
66                 private int parse(String s) {\r
67                   try {\r
68                     return Integer.parseInt(s.trim());\r
69                   } catch (Exception e) {\r
70                     return -1;\r
71                   }\r
72                 }\r
73               }\r
74       );\r
75 \r
76     } catch (IOException e) {\r
77       e.printStackTrace();\r
78       //TODO: handle exception\r
79       return Collections.emptyList();\r
80     }\r
81   }\r
82 \r
83   private static class InstallableTool implements NuGetTool {\r
84     private final FeedPackage myPackage;\r
85 \r
86     private InstallableTool(@NotNull final FeedPackage aPackage) {\r
87       myPackage = aPackage;\r
88     }\r
89 \r
90     @NotNull\r
91     public String getId() {\r
92       return myPackage.getAtomId();\r
93     }\r
94 \r
95     @NotNull\r
96     public String getVersion() {\r
97       return myPackage.getInfo().getVersion();\r
98     }\r
99 \r
100     @NotNull\r
101     public FeedPackage getPackage() {\r
102       return myPackage;\r
103     }\r
104   }\r
105 }\r