package ch.loway.oss.ari4java;
import ch.loway.oss.ari4java.generated.Application;
import ch.loway.oss.ari4java.generated.Bridge;
import ch.loway.oss.ari4java.generated.Channel;
import ch.loway.oss.ari4java.generated.DeviceState;
import ch.loway.oss.ari4java.generated.Endpoint;
import ch.loway.oss.ari4java.tools.RestException;
import ch.loway.oss.ari4java.tools.tags.EventSource;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author lenz
*/
public class AriSubscriber {
List<String> subscriptions = new ArrayList();
public Application subscribe( ARI ari, EventSource m ) throws RestException {
String model = toModelName(m);
Application a = ari.applications().subscribe( ari.getAppName(), model );
subscriptions.add(model);
return a;
}
public void unsubscribe( ARI ari, EventSource m ) throws RestException {
String model = toModelName(m);
ari.applications().unsubscribe( ari.getAppName(), model);
subscriptions.remove(model);
}
public void unsubscribeAll( ARI ari) throws RestException {
for ( String model: subscriptions ) {
ari.applications().unsubscribe( ari.getAppName(), model);
}
subscriptions.clear();
}
/**
* Return the correct string "modeltype:id".
*
* See
* channel:{channelId},
* bridge:{bridgeId},
* endpoint:{tech}[/{resource},
* deviceState:{deviceName}
*
* @param m
* @return a string representation, e.g. "channel:1234"
*/
public String toModelName( EventSource m ) {
if ( m instanceof Bridge ) {
Bridge b = (Bridge) m;
return "bridge:" + b.getId();
} else
if ( m instanceof Channel ) {
Channel b = (Channel) m;
return "channel:" + b.getId();
} else
if ( m instanceof Endpoint ) {
Endpoint b = (Endpoint) m;
return "endpoint:" + b.getTechnology() + "/" + b.getResource();
} else
if ( m instanceof DeviceState ) {
DeviceState b = (DeviceState) m;
return "deviceState:" + b.getName();
} else
{
throw new IllegalArgumentException("Cannot subscribe model " + m.getClass().getName() );
}
}
}