From 21642ad47d7781101eb4123275ee22673e7c6f37 Mon Sep 17 00:00:00 2001 From: kohsuke Date: Fri, 13 Jun 2008 17:15:50 +0000 Subject: [PATCH] "upload plugin" form was not working anymore when I moved the page. git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@10073 71c3de6d-444a-0410-be80-ed276b4c234a --- core/src/main/java/hudson/PluginManager.java | 50 +++++++++++++++++-- core/src/main/java/hudson/model/Hudson.java | 40 --------------- .../main/java/hudson/model/UpdateCenter.java | 4 +- .../hudson/PluginManager/installed.jelly | 2 +- .../hudson/model/Hudson/managePlugins.jelly | 2 +- 5 files changed, 52 insertions(+), 46 deletions(-) diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index b07123e55e..3a05b02d48 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -1,8 +1,6 @@ package hudson; -import hudson.model.Hudson; -import hudson.model.UpdateCenter; -import hudson.model.AbstractModelObject; +import hudson.model.*; import hudson.util.Service; import java.util.Enumeration; @@ -22,6 +20,9 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.logging.LogFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.FileItem; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import org.kohsuke.stapler.QueryParameter; @@ -60,6 +61,13 @@ public final class PluginManager extends AbstractModelObject { // and load plugin-contributed classes. public final ClassLoader uberClassLoader = new UberClassLoader(); + /** + * Once plugin is uploaded, this flag becomes true. + * This is used to report a message that Hudson needs to be restarted + * for new plugins to take effect. + */ + public transient volatile boolean pluginUploaded =false; + public PluginManager(ServletContext context) { this.context = context; rootDir = new File(Hudson.getInstance().getRootDir(),"plugins"); @@ -100,6 +108,13 @@ public final class PluginManager extends AbstractModelObject { } } + /** + * Retrurns true if any new plugin was added, which means a restart is required for the change to take effect. + */ + public boolean isPluginUploaded() { + return pluginUploaded; + } + public List getPlugins() { return plugins; } @@ -184,6 +199,35 @@ public final class PluginManager extends AbstractModelObject { else System.setProperty(key,value); } + /** + * Uploads a plugin. + */ + public void doUploadPlugin( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { + try { + Hudson.getInstance().checkPermission(Hudson.ADMINISTER); + + ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); + + // Parse the request + FileItem fileItem = (FileItem) upload.parseRequest(req).get(0); + String fileName = Util.getFileName(fileItem.getName()); + if(!fileName.endsWith(".hpi")) { + sendError(hudson.model.Messages.Hudson_NotAPlugin(fileName),req,rsp); + return; + } + fileItem.write(new File(rootDir, fileName)); + fileItem.delete(); + + pluginUploaded=true; + + rsp.sendRedirect2("."); + } catch (IOException e) { + throw e; + } catch (Exception e) {// grrr. fileItem.write throws this + throw new ServletException(e); + } + } + private final class UberClassLoader extends ClassLoader { public UberClassLoader() { super(PluginManager.class.getClassLoader()); diff --git a/core/src/main/java/hudson/model/Hudson.java b/core/src/main/java/hudson/model/Hudson.java index 6e1756fdcb..95b815ad6c 100644 --- a/core/src/main/java/hudson/model/Hudson.java +++ b/core/src/main/java/hudson/model/Hudson.java @@ -272,13 +272,6 @@ public final class Hudson extends View implements ItemGroup, Node, */ private int slaveAgentPort =0; - /** - * Once plugin is uploaded, this flag becomes true. - * This is used to report a message that Hudson needs to be restarted - * for new plugins to take effect. - */ - private transient boolean pluginUploaded =false; - /** * All labels known to Hudson. This allows us to reuse the same label instances * as much as possible, even though that's not a strict requirement. @@ -1899,39 +1892,6 @@ public final class Hudson extends View implements ItemGroup, Node, }.start(); } - public boolean isPluginUploaded() { - return pluginUploaded; - } - - /** - * Uploads a plugin. - */ - public void doUploadPlugin( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { - try { - checkPermission(ADMINISTER); - - ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - - // Parse the request - FileItem fileItem = (FileItem) upload.parseRequest(req).get(0); - String fileName = Util.getFileName(fileItem.getName()); - if(!fileName.endsWith(".hpi")) { - sendError(Messages.Hudson_NotAPlugin(fileName),req,rsp); - return; - } - fileItem.write(new File(getPluginManager().rootDir, fileName)); - fileItem.delete(); - - pluginUploaded=true; - - rsp.sendRedirect2("managePlugins"); - } catch (IOException e) { - throw e; - } catch (Exception e) {// grrr. fileItem.write throws this - throw new ServletException(e); - } - } - /** * Do a finger-print check. */ diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java index a26fad32ee..3e5a27d5ba 100644 --- a/core/src/main/java/hudson/model/UpdateCenter.java +++ b/core/src/main/java/hudson/model/UpdateCenter.java @@ -405,7 +405,8 @@ public class UpdateCenter implements ModelObject { byte[] buf = new byte[8192]; int len; - File baseDir = Hudson.getInstance().getPluginManager().rootDir; + PluginManager pm = Hudson.getInstance().getPluginManager(); + File baseDir = pm.rootDir; File target = new File(baseDir, plugin.name + ".tmp"); OutputStream out = new FileOutputStream(target); @@ -425,6 +426,7 @@ public class UpdateCenter implements ModelObject { } LOGGER.info("Installation successful: "+plugin.name); + pm.pluginUploaded = true; status = new Success(); } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failed to install "+plugin.name,e); diff --git a/core/src/main/resources/hudson/PluginManager/installed.jelly b/core/src/main/resources/hudson/PluginManager/installed.jelly index a1d878cc4d..58b3bead90 100644 --- a/core/src/main/resources/hudson/PluginManager/installed.jelly +++ b/core/src/main/resources/hudson/PluginManager/installed.jelly @@ -57,7 +57,7 @@ - +
${%New plugins will take effect once you restart Hudson} diff --git a/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly b/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly index 15bd577ef6..b541d8c5ef 100644 --- a/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly +++ b/core/src/main/resources/hudson/model/Hudson/managePlugins.jelly @@ -10,7 +10,7 @@

${%Installed Plugins}

- +
${%New plugins will take effect once you restart Hudson} -- GitLab