if(previousLink == null)
{
Target target = (Target) endpoint.getTarget();
Source source = (Source) endpoint.getSource();
if(source != null)
{
if(Boolean.TRUE.equals(source.getDynamic()))
{
AMQQueue tempQueue = createTemporaryQueue(source.getDynamicNodeProperties());
source.setAddress(tempQueue.getName());
}
String addr = source.getAddress();
if(!addr.startsWith("/") && addr.contains("/"))
{
String[] parts = addr.split("/",2);
ExchangeImpl exchg = getVirtualHost().getExchange(parts[0]);
if(exchg != null)
{
ExchangeDestination exchangeDestination =
new ExchangeDestination(exchg, source.getDurable(), source.getExpiryPolicy());
exchangeDestination.setInitialRoutingAddress(parts[1]);
destination = exchangeDestination;
}
else
{
endpoint.setSource(null);
destination = null;
}
}
else
{
MessageSource queue = getVirtualHost().getMessageSource(addr);
if(queue != null)
{
destination = new MessageSourceDestination(queue);
}
else
{
ExchangeImpl exchg = getVirtualHost().getExchange(addr);
if(exchg != null)
{
destination = new ExchangeDestination(exchg, source.getDurable(), source.getExpiryPolicy());
}
else
{
endpoint.setSource(null);
destination = null;
}
}
}
}
else
{
destination = null;
}
if(destination != null)
{
final SendingLinkEndpoint sendingLinkEndpoint = (SendingLinkEndpoint) endpoint;
try
{
final SendingLink_1_0 sendingLink = new SendingLink_1_0(new SendingLinkAttachment(this, sendingLinkEndpoint),
getVirtualHost(),
(SendingDestination) destination
);
sendingLinkEndpoint.setLinkEventListener(new SubjectSpecificSendingLinkListener(sendingLink));
registerConsumer(sendingLink.getConsumer());
link = sendingLink;
if(TerminusDurability.UNSETTLED_STATE.equals(source.getDurable()))
{
linkRegistry.registerSendingLink(endpoint.getName(), sendingLink);
}
}
catch(AmqpErrorException e)
{
_logger.error("Error creating sending link", e);
destination = null;
sendingLinkEndpoint.setSource(null);
error = e.getError();
}
}
}
else
{
Source newSource = (Source) endpoint.getSource();
Source oldSource = (Source) previousLink.getEndpoint().getSource();
final TerminusDurability newSourceDurable = newSource == null ? null : newSource.getDurable();
if(newSourceDurable != null)
{
oldSource.setDurable(newSourceDurable);
if(newSourceDurable.equals(TerminusDurability.NONE))
{
linkRegistry.unregisterSendingLink(endpoint.getName());
}
}