blob: 4e9d94c030ab6e5695286bc48bf2232b0fab77d7 [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.server.configuration;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.qpid.exchange.ExchangeDefaults;
import org.apache.qpid.server.configuration.plugins.AbstractConfiguration;
import java.util.List;
public class QueueConfiguration extends AbstractConfiguration
{
private String _name;
private VirtualHostConfiguration _vHostConfig;
public QueueConfiguration(String name, VirtualHostConfiguration virtualHostConfiguration) throws ConfigurationException
{
_vHostConfig = virtualHostConfiguration;
_name = name;
CompositeConfiguration mungedConf = new CompositeConfiguration();
mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues.queue." + escapeTagName(name)));
setConfiguration("virtualhosts.virtualhost.queues.queue", mungedConf);
}
public String[] getElementsProcessed()
{
return new String[]{"maximumMessageSize",
"maximumQueueDepth",
"maximumMessageCount",
"maximumMessageAge",
"minimumAlertRepeatGap",
"durable",
"exchange",
"exclusive",
"queue",
"autodelete",
"priority",
"priorities",
"routingKey",
"capacity",
"flowResumeCapacity",
"lvq",
"lvqKey",
"sortKey",
"maximumDeliveryCount",
"deadLetterQueues",
"argument"
};
}
@Override
public void validateConfiguration() throws ConfigurationException
{
//Currently doesn't do validation
}
public VirtualHostConfiguration getVirtualHostConfiguration()
{
return _vHostConfig;
}
private boolean getDefaultedBoolean(String attribute)
{
final Configuration config = _vHostConfig.getConfig();
if(config.containsKey("queues."+attribute))
{
final boolean defaultValue = config.getBoolean("queues." + attribute);
return getBooleanValue(attribute, defaultValue);
}
else
{
return getBooleanValue(attribute);
}
}
public boolean getDurable()
{
return getDefaultedBoolean("boolean");
}
public boolean getExclusive()
{
return getDefaultedBoolean("exclusive");
}
public boolean getAutoDelete()
{
return getDefaultedBoolean("autodelete");
}
public String getOwner()
{
return getStringValue("owner", null);
}
public boolean getPriority()
{
return getDefaultedBoolean("priority");
}
public int getPriorities()
{
final Configuration config = _vHostConfig.getConfig();
int defaultValue;
if(config.containsKey("queues.priorities"))
{
defaultValue = config.getInt("queues.priorities");
}
else
{
defaultValue = -1;
}
return getIntValue("priorities", defaultValue);
}
public String getExchange()
{
final Configuration config = _vHostConfig.getConfig();
String defaultValue;
if(config.containsKey("queues.exchange"))
{
defaultValue = config.getString("queues.exchange");
}
else
{
defaultValue = "";
}
return getStringValue("exchange", defaultValue);
}
public List getRoutingKeys()
{
return getListValue("routingKey");
}
public String getName()
{
return _name;
}
public String getDescription()
{
return getStringValue("description");
}
public int getMaximumMessageAge()
{
return getIntValue("maximumMessageAge");
}
public long getMaximumQueueDepth()
{
return getLongValue("maximumQueueDepth");
}
public long getMaximumMessageSize()
{
return getLongValue("maximumMessageSize");
}
public long getMaximumMessageCount()
{
return getLongValue("maximumMessageCount");
}
public long getMinimumAlertRepeatGap()
{
return getLongValue("minimumAlertRepeatGap");
}
public long getCapacity()
{
return getLongValue("capacity");
}
public long getFlowResumeCapacity()
{
return getLongValue("flowResumeCapacity");
}
public boolean isLVQ()
{
return getBooleanValue("lvq");
}
public String getLVQKey()
{
return getStringValue("lvqKey", null);
}
public String getQueueSortKey()
{
return getStringValue("sortKey", null);
}
public int getMaxDeliveryCount()
{
return getIntValue("maximumDeliveryCount", _vHostConfig.getMaxDeliveryCount());
}
/**
* Check if dead letter queue delivery is enabled, deferring to the virtualhost configuration if not set.
*/
public boolean isDeadLetterQueueEnabled()
{
return getBooleanValue("deadLetterQueues", _vHostConfig.isDeadLetterQueueEnabled());
}
public Map<String,String> getArguments()
{
return getMap("argument");
}
public Map<String,String> getBindingArguments(String routingKey)
{
return getConfig().containsKey(routingKey+".bindingArgument") ? getMap(routingKey+".bindingArgument") : null;
}
}