@Override
public void exchangeDelete(Session session, ExchangeDelete method)
{
VirtualHost virtualHost = getVirtualHost(session);
ExchangeRegistry exchangeRegistry = virtualHost.getExchangeRegistry();
try
{
if (nameNullOrEmpty(method.getExchange()))
{
exception(session, method, ExecutionErrorCode.INVALID_ARGUMENT, "Delete not allowed for default exchange");
return;
}
Exchange exchange = getExchange(session, method.getExchange());
if(exchange == null)
{
exception(session, method, ExecutionErrorCode.NOT_FOUND, "No such exchange '" + method.getExchange() + "'");
}
else if(exchange.hasReferrers())
{
exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Exchange in use as an alternate exchange");
}
else if(isStandardExchange(exchange, virtualHost.getExchangeFactory().getRegisteredTypes()))
{
exception(session, method, ExecutionErrorCode.NOT_ALLOWED, "Exchange '"+method.getExchange()+"' cannot be deleted");
}
else
{
exchangeRegistry.unregisterExchange(method.getExchange(), method.getIfUnused());
if (exchange.isDurable() && !exchange.isAutoDelete())
{
DurableConfigurationStore store = virtualHost.getDurableConfigurationStore();
store.removeExchange(exchange);