/*
* DrakkarKeel - An Enterprise Collaborative Search Platform
*
* The contents of this file are subject under the terms described in the
* DRAKKARKEEL_LICENSE file included in this distribution; you may not use this
* file except in compliance with the License.
*
* 2013-2014 DrakkarKeel Platform.
*/
package drakkar.oar.callback;
import Ice.Communicator;
import drakkar.oar.Response;
import drakkar.oar.slice.action.twoway.AMI_Get_getAMID;
import drakkar.oar.slice.error.RequestException;
import drakkar.oar.util.OutputMonitor;
import java.io.IOException;
/**
* Esta clase es utilizada para la invocación del método asíncrono getAMID_async,
* y posterior notificación de los resultados al cliente
*
*/
public class GetAMIDCallback extends AMI_Get_getAMID {
private Response response = null;
private Communicator communicator;
/**
* Constructor de la Clase
*
* @param communicator objeto Communicator, empleado para la deserialización
* del objeto Response.
*/
public GetAMIDCallback(Communicator communicator) {
this.communicator = communicator;
}
/**
* Indica que la operación ha finalizado con éxito
*
* @param rsp representa el ó los valores de retorno de la operación
*/
@Override
synchronized public void ice_response(byte[] rsp) {
try {
this.response = Response.arrayToResponse(rsp, communicator);
notify();
} catch (IOException ex) {
OutputMonitor.printStream("IO", ex);
} catch (ClassNotFoundException ex) {
OutputMonitor.printStream("", ex);
}
}
/**
* Este método es invocado cuando ocurre una excepción local antes o
* después de haber invocado la petición.
*
* @param ex Ice.LocalException ocurrida
*/
public void ice_exception(Ice.LocalException ex) {
System.err.println("GetSAMI call failed:");
ex.printStackTrace();
}
/**
* Este método es invocado cuando ocurre una excepción de usuario antes o
* después de haber invocado la petición.
*
* @param ex Ice.UserException ocurrida
*/
public void ice_exception(Ice.UserException ex) {
if (ex instanceof RequestException) {
System.err.println("drakkar.oar.exceptions.RequestException");
System.err.println("reason: " + ex.toString());
} else {
ex.printStackTrace();
}
}
/**
* Devuelve el objeto Response, una vez que la operación invocada
* halla sido finalizada.
*
* @return un Objeto Response con los parámetros de salida correspondientes.
*/
synchronized public Response getResponse() {
while (response == null) {
try {
wait();
} catch (java.lang.InterruptedException ex) {
}
}
return response;
}
/**
* Devuelve un objeto Communicator de la clase
*
* @return communicator
*/
public Communicator getCommunicator() {
return communicator;
}
/**
* Modifica el objeto Communicator de la clase
*
* @param communicator nuevo objeto Communicator
*/
public void setCommunicator(Communicator communicator) {
this.communicator = communicator;
}
}