]> 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
3d3d2e6e21f45cd73248be6d511db47a26be0700
[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.BuildConstants;
15 import org.argeo.slc.build.ModularDistribution;
16 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
17
18 public class ModularDistributionInterceptor extends HandlerInterceptorAdapter {
19 private Set<ModularDistribution> modularDistributions;
20
21 @Override
22 public boolean preHandle(HttpServletRequest request,
23 HttpServletResponse response, Object handler) throws Exception {
24 String path = request.getPathInfo();
25 StringTokenizer stS = new StringTokenizer(path, "/");
26 String distributionName = stS.nextToken();
27 String distributionVersion = stS.nextToken();
28
29 SortedMap<String, ModularDistribution> choices = new TreeMap<String, ModularDistribution>();
30 distribs: for (Iterator<ModularDistribution> it = modularDistributions
31 .iterator(); it.hasNext();) {
32 ModularDistribution md = it.next();
33 if (md.getName().equals(distributionName)) {
34 if (distributionVersion.equals(BuildConstants.RELEASE)
35 && md.getVersion().contains(BuildConstants.SNAPSHOT))
36 continue distribs;
37
38 else if (distributionVersion.equals(BuildConstants.LATEST))
39 choices.put(md.getVersion(), md);
40 else if (distributionVersion.equals(md.getVersion())) {
41 choices.put(md.getVersion(), md);
42 break distribs;
43 }
44 }
45 }
46
47 if (choices.size() == 0)
48 throw new SlcException("Cannot find distribution for "
49 + new BasicNameVersion(distributionName,
50 distributionVersion));
51
52 ModularDistribution modularDistribution = choices.get(choices
53 .firstKey());
54
55 request.setAttribute("modularDistribution", modularDistribution);
56
57 return true;
58 }
59
60 public void setModularDistributions(
61 Set<ModularDistribution> modularDistributions) {
62 this.modularDistributions = modularDistributions;
63 }
64
65 }