package org.argeo.slc.web.mvc.provisioning;
+import java.util.Comparator;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.argeo.slc.build.BasicNameVersion;
+import org.argeo.slc.build.BuildConstants;
import org.argeo.slc.build.ModularDistribution;
+import org.argeo.slc.build.NameVersion;
import org.argeo.slc.msg.ObjectList;
import org.argeo.slc.msg.build.ModularDistributionDescriptor;
import org.argeo.slc.web.mvc.AbstractServiceController;
import org.springframework.web.servlet.ModelAndView;
/** List of distributions. */
-public class ListModularDistributions extends AbstractServiceController {
+public class ListModularDistributions extends AbstractServiceController
+ implements Comparator<ModularDistributionDescriptor> {
private Set<ModularDistribution> modularDistributions;
+ private String provisioningServletPath = "/dist";
+
@Override
protected void handleServiceRequest(HttpServletRequest request,
HttpServletResponse response, ModelAndView modelAndView)
throws Exception {
String baseUrl = "http://" + request.getServerName() + ":"
- + request.getServerPort() + request.getContextPath() + "/dist"
- + "/";
+ + request.getServerPort() + request.getContextPath()
+ + provisioningServletPath + "/";
- ObjectList ol = new ObjectList();
+ SortedSet<ModularDistributionDescriptor> descriptors = new TreeSet<ModularDistributionDescriptor>(
+ this);
+ Set<String> names = new HashSet<String>();
+ Set<String> namesRelease = new HashSet<String>();
+
+ // Scan distributions
for (Iterator<ModularDistribution> it = modularDistributions.iterator(); it
.hasNext();) {
ModularDistribution md = it.next();
- String moduleBase = baseUrl + md.getName() + "/" + md.getVersion()
- + "/";
- ModularDistributionDescriptor mdd = new ModularDistributionDescriptor();
- mdd.setName(md.getName());
- mdd.setVersion(md.getVersion());
-
- mdd.getModulesDescriptors().put("modularDistribution",
- moduleBase + "modularDistribution");
- mdd.getModulesDescriptors().put("eclipse", moduleBase + "site.xml");
+ ModularDistributionDescriptor mdd = fromNameVersion(baseUrl, md);
- ol.getObjects().add(mdd);
+ descriptors.add(mdd);
+ names.add(mdd.getName());
+ if (!md.getVersion().contains(BuildConstants.SNAPSHOT))
+ namesRelease.add(mdd.getName());
}
- modelAndView.addObject(ol);
+ // Add LATESTs and RELEASEs
+ for (String name : names)
+ descriptors.add(fromNameVersion(baseUrl, new BasicNameVersion(name,
+ BuildConstants.LATEST)));
+ for (String name : namesRelease)
+ descriptors.add(fromNameVersion(baseUrl, new BasicNameVersion(name,
+ BuildConstants.RELEASE)));
+
+ modelAndView.addObject(new ObjectList(descriptors));
}
public void setModularDistributions(
this.modularDistributions = modularDistributions;
}
+ public void setProvisioningServletPath(String provisioningServletPath) {
+ this.provisioningServletPath = provisioningServletPath;
+ }
+
+ protected ModularDistributionDescriptor fromNameVersion(String baseUrl,
+ NameVersion md) {
+ String moduleBase = baseUrl + md.getName() + "/" + md.getVersion()
+ + "/";
+ ModularDistributionDescriptor mdd = new ModularDistributionDescriptor();
+ mdd.setName(md.getName());
+ mdd.setVersion(md.getVersion());
+
+ mdd.getModulesDescriptors().put("modularDistribution",
+ moduleBase + "modularDistribution");
+ mdd.getModulesDescriptors().put("eclipse", moduleBase + "site.xml");
+ return mdd;
+
+ }
+
+ /** RELEASEs first, then LATESTs, then version */
+ public int compare(ModularDistributionDescriptor mdd1,
+ ModularDistributionDescriptor mdd2) {
+ final int BEFORE = -1;
+ final int AFTER = 1;
+
+ String n1 = mdd1.getName();
+ String v1 = mdd1.getVersion();
+ String n2 = mdd2.getName();
+ String v2 = mdd2.getVersion();
+
+ if (v1.equals(BuildConstants.RELEASE))
+ if (v2.equals(BuildConstants.RELEASE))
+ return n1.compareTo(n2);
+ else
+ return BEFORE;
+ else if (v2.equals(BuildConstants.RELEASE))
+ return AFTER;// we know 1 not RELEASE
+ else if (v1.equals(BuildConstants.LATEST))
+ if (v2.equals(BuildConstants.LATEST))
+ return n1.compareTo(n2);
+ else
+ return BEFORE;
+ else if (v2.equals(BuildConstants.LATEST))
+ return AFTER;// we know 1 not LATEST or RELEASE
+ else if (n1.equals(n2))
+ return v1.compareTo(v2);
+ else
+ return n1.compareTo(n2);
+ }
+
}
import org.argeo.slc.SlcException;
import org.argeo.slc.build.BasicNameVersion;
+import org.argeo.slc.build.BuildConstants;
import org.argeo.slc.build.ModularDistribution;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class ModularDistributionInterceptor extends HandlerInterceptorAdapter {
private Set<ModularDistribution> modularDistributions;
- public final static String RELEASE = "RELEASE";
- public final static String LATEST = "LATEST";
-
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
.iterator(); it.hasNext();) {
ModularDistribution md = it.next();
if (md.getName().equals(distributionName)) {
- if (distributionVersion.equals(RELEASE)
- && md.getVersion().contains("SNAPSHOT"))
+ if (distributionVersion.equals(BuildConstants.RELEASE)
+ && md.getVersion().contains(BuildConstants.SNAPSHOT))
continue distribs;
- else if (distributionVersion.equals(LATEST))
+ else if (distributionVersion.equals(BuildConstants.LATEST))
choices.put(md.getVersion(), md);
else if (distributionVersion.equals(md.getVersion())) {
choices.put(md.getVersion(), md);