/*
Transit - Remote procedure calls made simple
Copyright (c) 2012 Ulrich Hilger
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
package de.uhilger.transit;
import java.lang.reflect.Method;
/**
* Klassen, die Java-Klassen und deren Methoden zur Ausfuehrung
* bereitstellen, muessen diese Schnittstelle implementieren
*
* @author Copyright (c) Ulrich Hilger, http://uhilger.de
* @author Published under the terms and conditions of
* the GNU Affero General Public License
*
* @version 1, September 16, 2012
*/
public interface JavaDienst {
/**
* Eine Klasse heraussuchen
*
* @param klassenName voller Name der gesuchten Klasse, z.B. java.lang.String
* @return die Klasse oder null, wenn keine Klasse mit diesem Namen gefunden wurde
*/
@SuppressWarnings("rawtypes")
public Class klasseFinden(String klassenName) throws Exception;
/**
* Eine Methode heraussuchen
*
* Diese Methode sieht vor, dass ein Methodenname nur einmal in einer
* Klasse vorkommt. In Faellen, wo mehrere Methoden einer Klasse den
* selben Namen haben, wird die erste Methode dieses Namens geliefert.
*
* @param klassenName Name der Klasse
* @param methodenName Name der gesuchten Mthode
* @return die Methode oder null, wenn keine Methode mit diesem Namen
* in der angegebenen Klasse gefunden wurde
*/
public Method methodeFinden(String klassenName, String methodenName) throws Exception;
/**
* Eine Methode ausfuehren
*
* Diese Methode sieht vor, dass ein Methodenname nur einmal in einer
* Klasse vorkommt. In Faellen, wo mehrere Methoden einer Klasse den
* selben Namen haben, wird die erste Methode dieses Namens verwendet.
*
* @param klassenName Name der Klasse
* @param methodenName Name der Methode
* @param format das Format, das Parameter und Rueckgabewert haben, z.B. "JSON"
* @param parameter die Parameter der Methode
* @return der Rueckgabewert der Methode nach der Ausfuehrung
*/
public Object methodeAusfuehren(String klassenName, String methodenName, String format, Object... parameter) throws Exception;
/**
* Eine Methode ausfuehren
*
* Diese Methode sieht vor, dass ein Methodenname nur einmal in einer
* Klasse vorkommt. In Faellen, wo mehrere Methoden einer Klasse den
* selben Namen haben, wird die erste Methode dieses Namens verwendet.
*
* @param o ein Objekt der Klasse, die die auszufuehrende Methode enthaelt
* @param methodenName Name der Methode
* @param format das Format, das Parameter und Rueckgabewert haben, z.B. "JSON"
* @param parameter die Parameter der Methode
* @return der Rueckgabewert der Methode nach der Ausfuehrung
*/
public Object methodeAusfuehren(Object o, String methodenName, String format, Object... parameter) throws Exception;
/**
* Eine Methode ausfuehren
*
* @param o ein Objekt der Klasse, die die auszufuehrende Methode enthaelt
* @param methode das Methodenobjekt, das ausgefuehrt werden soll
* @param format das Format, das Parameter und Rueckgabewert haben, z.B. "JSON"
* @param parameter die Parameter der Methode
* @return der Rueckgabewert der Methode nach der Ausfuehrung
*/
public Object methodeAusfuehren(Object o, Method methode, String format, Object... parameter) throws Exception;
/**
* Einen Wandler hinzufuegen
*
* @param wandler der Wandler, der hinzugefuegt werden soll
*/
public void wandlerHinzufuegen(Wandler wandler);
/**
* Einen Wandler entfernen
*
* @param wandler der Wandler, der entfernt werden soll
*/
public void wandlerEntfernen(Wandler wandler);
/**
* Diesen Dienst aufloesen
*/
public void aufloesen();
}