/**********************************************************************
* $Source: /cvsroot/jameica/jameica.webadmin/src/de/willuhn/jameica/webadmin/rest/Plugin.java,v $
* $Revision: 1.16 $
* $Date: 2011/09/13 09:08:31 $
* $Author: willuhn $
* $Locker: $
* $State: Exp $
*
* Copyright (c) by willuhn software & services
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.webadmin.rest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import de.willuhn.jameica.messaging.StatusBarMessage;
import de.willuhn.jameica.plugin.Dependency;
import de.willuhn.jameica.plugin.Manifest;
import de.willuhn.jameica.system.Application;
import de.willuhn.jameica.webadmin.annotation.Doc;
import de.willuhn.jameica.webadmin.annotation.Path;
import de.willuhn.jameica.webadmin.annotation.Request;
import de.willuhn.logging.Logger;
import de.willuhn.util.ApplicationException;
import de.willuhn.util.I18N;
/**
* REST-Kommando fuer den Zugriff auf Plugins.
*/
@Doc("System: Liefert Informationen �ber die installierten Plugins")
public class Plugin implements AutoRestBean
{
private final static I18N i18n = de.willuhn.jameica.system.Application.getPluginLoader().getPlugin(de.willuhn.jameica.webadmin.Plugin.class).getResources().getI18N();
@Request
private HttpServletRequest request = null;
/**
* Action-Methode zum Starten des angegebenen Services.
* @throws IOException
*/
public void start() throws IOException
{
String plugin = request.getParameter("plugin");
String service = request.getParameter("service");
try
{
if (plugin == null || plugin.length() == 0)
throw new ApplicationException(i18n.tr("Kein Plugin angegeben"));
if (service == null || service.length() == 0)
throw new ApplicationException(i18n.tr("Kein Service angegeben"));
de.willuhn.datasource.Service s = new Service().find(plugin,service);
s.start();
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Service gestartet"),StatusBarMessage.TYPE_SUCCESS));
}
catch (ApplicationException ae)
{
Application.getMessagingFactory().sendMessage(new StatusBarMessage(ae.getMessage(),StatusBarMessage.TYPE_ERROR));
}
catch (Exception e)
{
Logger.error("error while starting service",e);
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Starten des Services: {0}",e.getMessage()),StatusBarMessage.TYPE_ERROR));
}
}
/**
* Action-Methode zum Stoppen des angegebenen Services.
* @throws IOException
*/
public void stop() throws IOException
{
String plugin = request.getParameter("plugin");
String service = request.getParameter("service");
try
{
if (plugin == null || plugin.length() == 0)
throw new ApplicationException(i18n.tr("Kein Plugin angegeben"));
if (service == null || service.length() == 0)
throw new ApplicationException(i18n.tr("Kein Service angegeben"));
de.willuhn.datasource.Service s = new Service().find(plugin,service);
s.stop(true);
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Service gestoppt"),StatusBarMessage.TYPE_SUCCESS));
}
catch (ApplicationException ae)
{
Application.getMessagingFactory().sendMessage(new StatusBarMessage(ae.getMessage(),StatusBarMessage.TYPE_ERROR));
}
catch (Exception e)
{
Logger.error("error while stopping service",e);
Application.getMessagingFactory().sendMessage(new StatusBarMessage(i18n.tr("Fehler beim Stoppen des Services: {0}",e.getMessage()),StatusBarMessage.TYPE_ERROR));
}
}
/**
* Liefert die Details des angegebenen Plugins.
* @param plugin der Name des Plugins.
* @return die Details des angegebenen Plugins.
* @throws IOException
*/
@Doc(value="Liefert die Details des angegebenen Plugins",
example="plugins/get/jameica.webadmin")
@Path("/plugins/get/(.*)$")
public JSONObject getDetails(String plugin) throws IOException
{
if (plugin == null || plugin.length() == 0)
throw new IOException("no plugin given");
Manifest mf = Application.getPluginLoader().getManifestByName(plugin);
if (mf == null)
throw new IOException("plugin " + plugin + " not found");
Map data = new HashMap();
data.put("name", StringUtils.trimToEmpty(mf.getName()));
data.put("builddate", StringUtils.trimToEmpty(mf.getBuildDate()));
data.put("buildnumber", StringUtils.trimToEmpty(mf.getBuildnumber()));
data.put("description", StringUtils.trimToEmpty(mf.getDescription()));
data.put("homepage", StringUtils.trimToEmpty(mf.getHomepage()));
data.put("license", StringUtils.trimToEmpty(mf.getLicense()));
data.put("class", StringUtils.trimToEmpty(mf.getPluginClass()));
data.put("plugindir", StringUtils.trimToEmpty(mf.getPluginDir()));
data.put("url", StringUtils.trimToEmpty(mf.getURL()));
data.put("version", mf.getVersion());
ArrayList deps = new ArrayList();
Dependency[] d = mf.getDependencies();
if (d != null && d.length > 0)
{
for (int k=0;k<d.length;++k)
{
Map dep = new HashMap();
dep.put("name",d[k].getName());
dep.put("version",d[k].getVersion());
deps.add(dep);
}
}
data.put("dependencies",deps);
return new JSONObject(data);
}
/**
* Liefert die installierten Plugins.
* @return die installierten Plugins.
* @throws IOException
*/
@Doc(value="Liefert eine Liste der installierten Plugins",
example="plugins/list")
@Path("/plugins/list$")
public JSONArray getList() throws IOException
{
List<JSONObject> list = new ArrayList<JSONObject>();
List plugins = Application.getPluginLoader().getInstalledManifests();
for (int i=0;i<plugins.size();++i)
{
Manifest mf = (Manifest) plugins.get(i);
list.add(getDetails(mf.getName()));
}
return new JSONArray(list);
}
}
/**********************************************************************
* $Log: Plugin.java,v $
* Revision 1.16 2011/09/13 09:08:31 willuhn
* @C Code-Cleanup
*
* Revision 1.15 2010-11-02 00:56:30 willuhn
* @N Umstellung des Webfrontends auf Velocity/Webtools
*
* Revision 1.14 2010/05/12 10:59:20 willuhn
* @N Automatische Dokumentations-Seite fuer die REST-Beans basierend auf der Annotation "Doc"
*
* Revision 1.13 2010/05/11 14:59:48 willuhn
* @N Automatisches Deployment von REST-Beans
*
* Revision 1.12 2010/03/18 09:29:35 willuhn
* @N Wenn REST-Beans Rueckgabe-Werte liefern, werrden sie automatisch als toString() in den Response-Writer geschrieben
**********************************************************************/