package org.argeo.slc.web.mvc.provisioning; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import java.util.jar.JarInputStream; import java.util.jar.Manifest; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.core.io.Resource; import org.springframework.web.HttpRequestHandler; /** An Eclipse update site, serving site.xml features/* and plugins/*. */ public class EclipseUpdateSiteHandler implements HttpRequestHandler { private FileProvider provider; private String baseVersion = "0.9.4-SNAPSHOT"; private EclipseUpdateSite updateSite; public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String path = request.getPathInfo(); StringTokenizer stS = new StringTokenizer(path, "/"); String distribution = stS.nextToken(); StringBuffer buf = new StringBuffer(""); buf.append(""); List usedCategories = new ArrayList(); for (EclipseUpdateSiteFeature feature : updateSite.getFeatures()) { Resource bundle = provider.getBundle(distribution, feature .getName(), baseVersion); JarInputStream in = new JarInputStream(bundle.getInputStream()); Manifest mf = in.getManifest(); String version = mf.getMainAttributes().getValue("Bundle-Version"); String featureId = feature.getName(); buf.append("\n"); for (EclipseUpdateSiteCategory category : feature.getCategories()) { usedCategories.add(category); buf.append(" \n"); } buf.append("\n\n"); } for (EclipseUpdateSiteCategory category : usedCategories) { buf.append("\n"); buf.append(" ").append(category.getDescription()) .append("\n"); buf.append("\n\n"); } buf.append(""); response.getWriter().print(buf.toString()); } public void setProvider(FileProvider provider) { this.provider = provider; } public void setBaseVersion(String baseVersion) { this.baseVersion = baseVersion; } public void setUpdateSite(EclipseUpdateSite updateSite) { this.updateSite = updateSite; } }