You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jd...@apache.org on 2006/08/04 20:24:40 UTC
svn commit: r428815 - in
/geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src:
./ java/org/apache/geronimo/console/car/GeronimoAsMavenServlet.java
Author: jdillon
Date: Fri Aug 4 11:24:39 2006
New Revision: 428815
URL: http://svn.apache.org/viewvc?rev=428815&view=rev
Log:
r627@jason-dillons-computer (orig r427996): jdillon | 2006-08-02 07:14:45 -0700
r612@dyn456093 (orig r427669): ammulder | 2006-08-01 11:16:31 -0700
Merge fix for GERONIMO-2228 (and plumbing for GERONIMO-1869) to trunk.
Modified:
geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/ (props changed)
geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/java/org/apache/geronimo/console/car/GeronimoAsMavenServlet.java
Propchange: geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Fri Aug 4 11:24:39 2006
@@ -1 +1 @@
-13f79535-47bb-0310-9956-ffa450edef68:/geronimo/sandbox/svkmerge/trunk/applications/console/console-standard/src:427995
+13f79535-47bb-0310-9956-ffa450edef68:/geronimo/sandbox/svkmerge/trunk/applications/console/console-standard/src:427996
Modified: geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/java/org/apache/geronimo/console/car/GeronimoAsMavenServlet.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/java/org/apache/geronimo/console/car/GeronimoAsMavenServlet.java?rev=428815&r1=428814&r2=428815&view=diff
==============================================================================
--- geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/java/org/apache/geronimo/console/car/GeronimoAsMavenServlet.java (original)
+++ geronimo/sandbox/svkmerge/m2migration/applications/console/console-standard/src/java/org/apache/geronimo/console/car/GeronimoAsMavenServlet.java Fri Aug 4 11:24:39 2006
@@ -51,6 +51,7 @@
import org.apache.geronimo.kernel.config.ConfigurationStore;
import org.apache.geronimo.kernel.config.ConfigurationUtil;
import org.apache.geronimo.kernel.config.NoSuchStoreException;
+import org.apache.geronimo.kernel.config.NoSuchConfigException;
import org.apache.geronimo.kernel.repository.Artifact;
import org.apache.geronimo.kernel.repository.Repository;
import org.apache.geronimo.kernel.repository.Version;
@@ -116,54 +117,54 @@
if(path.startsWith("/")) {
path = path.substring(1);
}
- String[] parts = path.split("/");
- if(parts.length != 3) {
- response.sendError(404, "Unrecognized path form "+path);
+ String configId = parsePath(path, response);
+ if(configId == null) { // we already sent the 404
return;
}
- String groupId = parts[0];
- String type = parts[1].substring(0, parts[1].length()-1);
- if(!parts[2].endsWith("."+type)) {
- response.sendError(404, "Unrecognized path structure "+path);
- }
- parts[2] = parts[2].substring(0, parts[2].length()-(type.length()+1));
- int pos = parts[2].lastIndexOf("-");
- String version = parts[2].substring(pos+1);
- if(version.equalsIgnoreCase("SNAPSHOT")) {
- pos = parts[2].lastIndexOf("-", pos-1);
- version = parts[2].substring(pos+1);
- }
- String artifactId = parts[2].substring(0, pos);
- String configId = groupId+"/"+artifactId+"/"+version+"/"+type;
if(!produceDownloadFile(kernel, Artifact.create(configId), response, reply)) {
response.sendError(404, "Cannot locate download file "+path);
}
}
}
+ private static String parsePath(String path, HttpServletResponse response) throws IOException {
+ String[] parts = path.split("/");
+ String groupId, artifactId, version, type;
+ if(parts.length < 4) {
+ response.sendError(404, "Unrecognized path form "+path);
+ return null;
+ } else { // e.g. console/MyDatabase/1.0-SNAPSHOT/MyDatabase-1.0-SNAPSHOT.rar
+ groupId = parts[0];
+ for(int i=4; i<parts.length; i++) {
+ groupId = groupId+"."+parts[i-3];
+ }
+ artifactId = parts[parts.length-3];
+ version = parts[parts.length-2];
+ if(!parts[parts.length-1].startsWith(artifactId+"-"+version)) {
+ response.sendError(404, "Unrecognized path structure "+path);
+ return null;
+ }
+ type = parts[parts.length-1].substring(artifactId.length()+version.length()+2);
+ }
+ return groupId+"/"+artifactId+"/"+version+"/"+type;
+ }
+
private boolean produceDownloadFile(Kernel kernel, Artifact configId, HttpServletResponse response, boolean reply) throws IOException {
//todo: replace kernel mumbo jumbo with JSR-77 navigation
// Step 1: check if it's in a configuration store
ConfigurationManager mgr = ConfigurationUtil.getConfigurationManager(kernel);
- List stores = mgr.listStores();
- for (int i = 0; i < stores.size(); i++) {
- AbstractName name = (AbstractName) stores.get(i);
- //todo: this is bad!!!
- if(name.getName().get(NameFactory.J2EE_NAME).equals("Local")) {
- ConfigurationStore store = (ConfigurationStore) kernel.getProxyManager().createProxy(name, ConfigurationStore.class);
- if(store.containsConfiguration(configId)) {
- response.setContentType("application/zip");
- if(!reply) {
- return true;
- }
- try {
- kernel.invoke(name, "exportConfiguration", new Object[]{configId.toString(), response.getOutputStream()}, new String[]{String.class.getName(), OutputStream.class.getName()});
- return true;
- } catch (Exception e) {
- log.error("Unable to export configuration ZIP", e);
- throw new IOException("Unable to write ZIP file: "+e.getMessage());
- }
- }
+ if(mgr.isConfiguration(configId)) {
+ ConfigurationStore store = mgr.getStoreForConfiguration(configId);
+ response.setContentType("application/zip");
+ if(!reply) {
+ return true;
+ }
+ try {
+ store.exportConfiguration(configId, response.getOutputStream());
+ return true;
+ } catch (NoSuchConfigException e) {
+ log.error("Inconsistent ConfigurationStore data; ConfigManager claims it has configuration "+configId+" but store claims it doesn't",e);
+ throw new IOException("Unable to write ZIP file; see server log for details");
}
}
// Step 2: check if it's in a repository
@@ -173,7 +174,7 @@
Repository repo = (Repository) kernel.getProxyManager().createProxy(name, Repository.class);
if(repo.contains(configId)) {
File path = repo.getLocation(configId);
- if(!path.exists()) throw new IllegalStateException("Can't find file '"+path.getAbsolutePath()+"'");
+ if(!path.exists()) throw new IllegalStateException("Can't find file '"+path.getAbsolutePath()+"' though repository said there's an artifact there!");
response.setContentType("application/zip");
if(!reply) {
return true;
@@ -202,6 +203,7 @@
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElementNS("http://geronimo.apache.org/xml/ns/plugins-1.1", "geronimo-plugin-list");
+ root.setAttribute("xmlns", "http://geronimo.apache.org/xml/ns/plugins-1.1");
doc.appendChild(root);
List stores = mgr.listStores();
for (int i = 0; i < stores.size(); i++) {
@@ -255,7 +257,7 @@
// Skip repositories since we want the download to come from here
}
}
- String repo = request.getProtocol()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+request.getServletPath();
+ String repo = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+request.getServletPath();
if(!repo.endsWith("/")) repo += "/";
createText(doc, root, "default-repository", repo);
TransformerFactory xfactory = TransformerFactory.newInstance();