]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/provisioning/ModularDistributionInterceptor.java
Provisioning
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / provisioning / ModularDistributionInterceptor.java
1 package org.argeo.slc.web.mvc.provisioning;
2
3 import java.util.Iterator;
4 import java.util.Set;
5 import java.util.SortedMap;
6 import java.util.StringTokenizer;
7 import java.util.TreeMap;
8
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11
12 import org.argeo.slc.SlcException;
13 import org.argeo.slc.build.BasicNameVersion;
14 import org.argeo.slc.build.ModularDistribution;
15 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
16
17 public class ModularDistributionInterceptor extends HandlerInterceptorAdapter {
18 private Set<ModularDistribution> modularDistributions;
19
20 public final static String RELEASE = "RELEASE";
21 public final static String LATEST = "LATEST";
22
23 @Override
24 public boolean preHandle(HttpServletRequest request,
25 HttpServletResponse response, Object handler) throws Exception {
26 String path = request.getPathInfo();
27 StringTokenizer stS = new StringTokenizer(path, "/");
28 String distributionName = stS.nextToken();
29 String distributionVersion = stS.nextToken();
30
31 SortedMap<String, ModularDistribution> choices = new TreeMap<String, ModularDistribution>();
32 distribs: for (Iterator<ModularDistribution> it = modularDistributions
33 .iterator(); it.hasNext();) {
34 ModularDistribution md = it.next();
35 if (md.getName().equals(distributionName)) {
36 if (distributionVersion.equals(RELEASE)
37 && md.getVersion().contains("SNAPSHOT"))
38 continue distribs;
39
40 else if (distributionVersion.equals(LATEST))
41 choices.put(md.getVersion(), md);
42 else if (distributionVersion.equals(md.getVersion())) {
43 choices.put(md.getVersion(), md);
44 break distribs;
45 }
46 }
47 }
48
49 if (choices.size() == 0)
50 throw new SlcException("Cannot find distribution for "
51 + new BasicNameVersion(distributionName,
52 distributionVersion));
53
54 ModularDistribution modularDistribution = choices.get(choices
55 .firstKey());
56
57 request.setAttribute("modularDistribution", modularDistribution);
58
59 return true;
60 }
61
62 public void setModularDistributions(
63 Set<ModularDistribution> modularDistributions) {
64 this.modularDistributions = modularDistributions;
65 }
66
67 }