blob: 7f5b1f9cd1060050a59300ec5ffcd8a4a5d1dfa6 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.qpid.messaging.address;
import static org.apache.qpid.messaging.address.AddressProperty.*;
import org.apache.qpid.configuration.Accessor;
import org.apache.qpid.configuration.Accessor.NestedMapAccessor;
import org.apache.qpid.messaging.Address;
import org.apache.qpid.messaging.Address.PolicyType;
import org.apache.qpid.messaging.Address.AddressType;
import org.apache.qpid.messaging.QpidDestination.CheckMode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AddressHelper
{
private static final Logger _logger = LoggerFactory.getLogger(AddressHelper.class);
protected Address address;
protected Accessor addressProps;
public AddressHelper(Address address)
{
this.address = address;
addressProps = new NestedMapAccessor(address.getOptions());
}
public PolicyType getCreate()
{
return PolicyType.getPolicyType(addressProps.getString(CREATE));
}
public PolicyType getAssert()
{
return PolicyType.getPolicyType(addressProps.getString(ASSERT));
}
public PolicyType getDelete()
{
return PolicyType.getPolicyType(addressProps.getString(DELETE));
}
public boolean isBrowseOnly()
{
String mode = addressProps.getString(MODE);
return mode != null && mode.equals(BROWSE) ? true : false;
}
public AddressType getNodeType()
{
String type = addressProps.getString(getFQN(NODE,TYPE));
if ("topic".equalsIgnoreCase(type))
{
return AddressType.TOPIC_ADDRESS;
}
else if ("queue".equalsIgnoreCase(type))
{
return AddressType.QUEUE_ADDRESS;
}
else
{
return AddressType.UNSPECIFIED;
}
}
public boolean isNodeDurable()
{
Boolean b = addressProps.getBoolean(getFQN(NODE,DURABLE));
return b == null ? false : b.booleanValue();
}
public String getLinkName()
{
return addressProps.getString(getFQN(LINK,NAME));
}
public boolean isLinkDurable()
{
Boolean b = addressProps.getBoolean(getFQN(LINK,DURABLE));
return b == null ? false : b.booleanValue();
}
public String getLinkReliability()
{
return addressProps.getString(getFQN(LINK,RELIABILITY));
}
public int getLinkProducerCapacity()
{
return getCapacity(CheckMode.FOR_SENDER);
}
public int getLinkConsumerCapacity()
{
return getCapacity(CheckMode.FOR_RECEIVER);
}
private int getCapacity(CheckMode mode)
{
int capacity = 0;
try
{
capacity = addressProps.getInt(getFQN(LINK,CAPACITY));
}
catch(Exception e)
{
try
{
if (mode == CheckMode.FOR_RECEIVER)
{
capacity = addressProps.getInt(getFQN(LINK,CAPACITY,CAPACITY_SOURCE));
}
else
{
capacity = addressProps.getInt(getFQN(LINK,CAPACITY,CAPACITY_TARGET));
}
}
catch(Exception ex)
{
if (ex instanceof NumberFormatException && !ex.getMessage().equals("null"))
{
_logger.info("Unable to retrieve capacity from address: " + address,ex);
}
}
}
return capacity;
}
public static boolean isAllowed(PolicyType policy, CheckMode mode)
{
return (policy == PolicyType.ALWAYS ||
(policy == PolicyType.RECEIVER && mode == CheckMode.FOR_RECEIVER) ||
(policy == PolicyType.SENDER && mode == CheckMode.FOR_SENDER)
);
}
}