From 413e9b486b1a84960d4c8ddac130e87280f64c6a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 19:00:52 -0400
Subject: [PATCH] Split administration commands into a plugin, enhance plugin manager

---
 src/main/java/com/gitblit/manager/PluginManager.java |   32 +++++++++++++++++++++++++++-----
 1 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/gitblit/manager/PluginManager.java b/src/main/java/com/gitblit/manager/PluginManager.java
index 5eb00e9..e23aaec 100644
--- a/src/main/java/com/gitblit/manager/PluginManager.java
+++ b/src/main/java/com/gitblit/manager/PluginManager.java
@@ -15,12 +15,16 @@
  */
 package com.gitblit.manager;
 
+import java.io.File;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import ro.fortsoft.pf4j.DefaultPluginManager;
+import ro.fortsoft.pf4j.PluginWrapper;
 
 import com.gitblit.Keys;
+import com.gitblit.utils.FileUtils;
 
 /**
  * The plugin manager maintains the lifecycle of plugins. It is exposed as
@@ -30,27 +34,45 @@
  * @author David Ostrovsky
  * 
  */
-public class PluginManager extends DefaultPluginManager implements
-		IPluginManager {
+public class PluginManager extends DefaultPluginManager implements IPluginManager {
 
 	private final Logger logger = LoggerFactory.getLogger(getClass());
+	
+	private final IRuntimeManager runtimeManager;
 
 	public PluginManager(IRuntimeManager runtimeManager) {
-		super(runtimeManager.getFileOrFolder(Keys.plugins.folder,
-				"${baseFolder}/plugins"));
+		super(runtimeManager.getFileOrFolder(Keys.plugins.folder, "${baseFolder}/plugins"));
+		this.runtimeManager = runtimeManager;
 	}
 
 	@Override
 	public PluginManager start() {
-		logger.info("Plugin manager started");
+		logger.info("Loading plugins...");
 		loadPlugins();
+		logger.info("Starting loaded plugins...");
 		startPlugins();
 		return this;
 	}
 
 	@Override
 	public PluginManager stop() {
+		logger.info("Stopping loaded plugins...");
 		stopPlugins();
 		return null;
 	}
+	
+	@Override
+	public boolean deletePlugin(PluginWrapper pw) {
+		File folder = runtimeManager.getFileOrFolder(Keys.plugins.folder, "${baseFolder}/plugins");
+		File pluginFolder = new File(folder, pw.getPluginPath());
+		File pluginZip = new File(folder, pw.getPluginPath() + ".zip");
+		
+		if (pluginFolder.exists()) {
+			FileUtils.delete(pluginFolder);
+		}
+		if (pluginZip.exists()) {
+			FileUtils.delete(pluginZip);
+		}
+		return true;
+	}
 }

--
Gitblit v1.9.1