/* * * 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) ); } }