Author: arnaudsimon
Date: Fri Aug 17 05:44:40 2007
New Revision: 567047
URL: http://svn.apache.org/viewvc?view=rev&rev=567047
Log:
added destination URL handling
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java
(with props)
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java
(with props)
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/BindingURLImpl.java
(with props)
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java
(with props)
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java
(with props)
Removed:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/AMQBindingURL.java
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java?view=auto&rev=567047
==============================================================================
---
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java
(added)
+++
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java
Fri Aug 17 05:44:40 2007
@@ -0,0 +1,115 @@
+/* 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.qpidity;
+
+/**
+ * This interface represents a broker and provides the basic information
+ * required for opening a connection with a broker.
+ */
+public interface BrokerDetails
+{
+ /**
+ * Those are the supported protocols
+ */
+ public static final String PROTOCOL_TCP = "tcp";
+ public static final String PROTOCOL_TLS = "tls";
+
+ /**
+ * Get the broker host name.
+ *
+ * @return The broker host name.
+ */
+ public String getHost();
+
+ /**
+ * Get the broker port number.
+ *
+ * @return The broker port number.
+ */
+ public int getPort();
+
+ /**
+ * Get the virtual host to connect to.
+ *
+ * @return The virtual host of this broker.
+ */
+ public String getVirtualHost();
+
+ /**
+ * Get the user name.
+ *
+ * @return The user name
+ */
+ public String getUserName();
+
+ /**
+ * Get the user password
+ *
+ * @return The user password
+ */
+ public String getPassword();
+
+ /**
+ * Get the protocol used to connect to hise broker.
+ *
+ * @return the protocol used to connect to the broker.
+ */
+ public String getProtocol();
+
+ /**
+ * Set the broker host name.
+ *
+ * @param host The broker host name.
+ */
+ public void setHost(String host);
+
+ /**
+ * Set the broker port number.
+ *
+ * @param port The broker port number.
+ */
+ public void setPort(int port);
+
+ /**
+ * Set the virtual host to connect to.
+ *
+ * @param virtualHost The virtual host of this broker.
+ */
+ public void setVirtualHost(String virtualHost);
+
+ /**
+ * Set the user name.
+ *
+ * @param userName The user name
+ */
+ public void getUserName(String userName);
+
+ /**
+ * Set the user password
+ *
+ * @param password The user password
+ */
+ public void setPassword(String password);
+
+ /**
+ * Set the protocol used to connect to hise broker.
+ *
+ * @param protocol the protocol used to connect to the broker.
+ */
+ public void setProtocol(String protocol);
+}
Propchange:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetails.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java?view=auto&rev=567047
==============================================================================
---
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java
(added)
+++
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java
Fri Aug 17 05:44:40 2007
@@ -0,0 +1,204 @@
+/* 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.qpidity;
+
+/**
+ * Implements the interface BrokerDetails
+ */
+public class BrokerDetailsImpl implements BrokerDetails
+{
+ //--- Those are the default values
+ private final String DEFAULT_USERNAME = "guest";
+ private final String DEFAULT_PASSWORD = "guest";
+ private final String DEFAULT_VIRTUALHOST = "";
+
+ //---- The brker details
+ private String _host;
+ private int _port;
+ private String _virtualHost;
+ private String _userName;
+ private String _password;
+ private String _protocol;
+ //--- Constructors
+
+ /**
+ * Create a new broker details given all the reuqired information
+ *
+ * @param protocol The protocol used for this broker connection
+ * @param host The host name.
+ * @param port The port number.
+ * @param virtualHost The virtual host.
+ * @param userName The user name.
+ * @param password The user password.
+ */
+ public BrokerDetailsImpl(String protocol, String host, int port, String
virtualHost, String userName,
+ String password)
+ {
+ _protocol = protocol;
+ _host = host;
+ _port = port;
+ _virtualHost = virtualHost;
+ _userName = userName;
+ _password = password;
+ }
+
+ /**
+ * Create a new broker details given the host name and the procol type,
+ * default values are used for the other details.
+ *
+ * @param protocol The protocol used for this broker connection
+ * @param host The host name.
+ */
+ public BrokerDetailsImpl(String protocol, String host)
+ {
+ _protocol = protocol;
+ _host = host;
+ if (protocol.equals(BrokerDetails.PROTOCOL_TCP))
+ {
+ _port = 1234;
+ }
+ else if (protocol.equals(BrokerDetails.PROTOCOL_TLS))
+ {
+ _port = 5555;
+ }
+ _virtualHost = DEFAULT_VIRTUALHOST;
+ _userName = DEFAULT_USERNAME;
+ _password = DEFAULT_PASSWORD;
+ }
+
+ //--- API BrokerDetails
+ /**
+ * Get the user password
+ *
+ * @return The user password
+ */
+ public String getPassword()
+ {
+ return _password;
+ }
+
+ /**
+ * Get the broker host name.
+ *
+ * @return The broker host name.
+ */
+ public String getHost()
+ {
+ return _host;
+ }
+
+ /**
+ * Get the broker port number.
+ *
+ * @return The broker port number.
+ */
+ public int getPort()
+ {
+ return _port;
+ }
+
+ /**
+ * Get the virtual host to connect to.
+ *
+ * @return The virtual host of this broker.
+ */
+ public String getVirtualHost()
+ {
+ return _virtualHost;
+ }
+
+ /**
+ * Get the user name.
+ *
+ * @return The user name
+ */
+ public String getUserName()
+ {
+ return _userName;
+ }
+
+ /**
+ * Get the protocol used to connect to hise broker.
+ *
+ * @return the protocol used to connect to the broker.
+ */
+ public String getProtocol()
+ {
+ return _protocol;
+ }
+
+ /**
+ * Set the broker host name.
+ *
+ * @param host The broker host name.
+ */
+ public void setHost(String host)
+ {
+ _host = host;
+ }
+
+ /**
+ * Set the broker port number.
+ *
+ * @param port The broker port number.
+ */
+ public void setPort(int port)
+ {
+ _port = port;
+ }
+
+ /**
+ * Set the virtual host to connect to.
+ *
+ * @param virtualHost The virtual host of this broker.
+ */
+ public void setVirtualHost(String virtualHost)
+ {
+ _virtualHost = virtualHost;
+ }
+
+ /**
+ * Set the user name.
+ *
+ * @param userName The user name
+ */
+ public void getUserName(String userName)
+ {
+ _userName = userName;
+ }
+
+ /**
+ * Set the user password
+ *
+ * @param password The user password
+ */
+ public void setPassword(String password)
+ {
+ _password = password;
+ }
+
+ /**
+ * Set the protocol used to connect to hise broker.
+ *
+ * @param protocol the protocol used to connect to the broker.
+ */
+ public void setProtocol(String protocol)
+ {
+ _protocol = protocol;
+ }
+}
Propchange:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/BrokerDetailsImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/BindingURLImpl.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/BindingURLImpl.java?view=auto&rev=567047
==============================================================================
---
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/BindingURLImpl.java
(added)
+++
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/BindingURLImpl.java
Fri Aug 17 05:44:40 2007
@@ -0,0 +1,261 @@
+/* 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.qpidity.url;
+
+import org.apache.qpidity.exchange.ExchangeDefaults;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Logger;
+
+import java.util.HashMap;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class BindingURLImpl implements BindingURL
+{
+ private static final Logger _logger =
LoggerFactory.getLogger(BindingURLImpl.class);
+
+ String _url;
+ String _exchangeClass;
+ String _exchangeName;
+ String _destinationName;
+ String _queueName;
+ private HashMap<String, String> _options;
+
+ public BindingURLImpl(String url) throws URLSyntaxException
+ {
+ // format:
+ //
<exch_class>://<exch_name>/[<destination>]/[<queue>]?<option>='<value>'[,<option>='<value>']*
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("Parsing URL: " + url);
+ }
+ _url = url;
+ _options = new HashMap<String, String>();
+ parseBindingURL();
+ }
+
+ private void parseBindingURL() throws URLSyntaxException
+ {
+ try
+ {
+ URI connection = new URI(_url);
+ String exchangeClass = connection.getScheme();
+ if (exchangeClass == null)
+ {
+ _url = ExchangeDefaults.DIRECT_EXCHANGE_CLASS + "://" + "" +
"//" + _url;
+ // URLHelper.parseError(-1, "Exchange Class not specified.",
_url);
+ parseBindingURL();
+ return;
+ }
+ else
+ {
+ setExchangeClass(exchangeClass);
+ }
+ String exchangeName = connection.getHost();
+ if (exchangeName == null)
+ {
+ if
(getExchangeClass().equals(ExchangeDefaults.DIRECT_EXCHANGE_CLASS))
+ {
+ setExchangeName("");
+ }
+ else
+ {
+ throw URLHelper.parseError(-1, "Exchange Name not
specified.", _url);
+ }
+ }
+ else
+ {
+ setExchangeName(exchangeName);
+ }
+ String queueName;
+ if ((connection.getPath() == null) ||
connection.getPath().equals(""))
+ {
+ throw URLHelper.parseError(_url.indexOf(_exchangeName) +
_exchangeName.length(),
+ "Destination or Queue requried",
_url);
+ }
+ else
+ {
+ int slash = connection.getPath().indexOf("/", 1);
+ if (slash == -1)
+ {
+ throw URLHelper.parseError(_url.indexOf(_exchangeName) +
_exchangeName.length(),
+ "Destination requried", _url);
+ }
+ else
+ {
+ String path = connection.getPath();
+ setDestinationName(path.substring(1, slash));
+
+ // We don't set queueName yet as the actual value we use
depends on options set
+ // when we are dealing with durable subscriptions
+
+ queueName = path.substring(slash + 1);
+
+ }
+ }
+
+ URLHelper.parseOptions(_options, connection.getQuery());
+ processOptions();
+ // We can now call setQueueName as the URL is full parsed.
+ setQueueName(queueName);
+ // Fragment is #string (not used)
+ if (_logger.isDebugEnabled())
+ {
+ _logger.debug("URL Parsed: " + this);
+ }
+ }
+ catch (URISyntaxException uris)
+ {
+ throw URLHelper.parseError(uris.getIndex(), uris.getReason(),
uris.getInput());
+ }
+ }
+
+
+ private void processOptions()
+ {
+ // this is where we would parse any options that needed more than just
storage.
+ }
+
+ public String getURL()
+ {
+ return _url;
+ }
+
+ public String getExchangeClass()
+ {
+ return _exchangeClass;
+ }
+
+ private void setExchangeClass(String exchangeClass)
+ {
+
+ _exchangeClass = exchangeClass;
+ if (exchangeClass.equals(ExchangeDefaults.TOPIC_EXCHANGE_CLASS))
+ {
+ setOption(BindingURL.OPTION_EXCLUSIVE, "true");
+ }
+
+ }
+
+ public String getExchangeName()
+ {
+ return _exchangeName;
+ }
+
+ private void setExchangeName(String name)
+ {
+ _exchangeName = name;
+ }
+
+ public String getDestinationName()
+ {
+ return _destinationName;
+ }
+
+ private void setDestinationName(String name)
+ {
+ _destinationName = name;
+ }
+
+ public String getQueueName()
+ {
+ return _queueName;
+ }
+
+ public void setQueueName(String name) throws URLSyntaxException
+ {
+ if (_exchangeClass.equals(ExchangeDefaults.TOPIC_EXCHANGE_CLASS))
+ {
+ if (Boolean.parseBoolean(getOption(OPTION_DURABLE)))
+ {
+ if (containsOption(BindingURL.OPTION_CLIENTID) &&
containsOption(BindingURL.OPTION_SUBSCRIPTION))
+ {
+ _queueName = getOption(BindingURL.OPTION_CLIENTID + ":" +
BindingURL.OPTION_SUBSCRIPTION);
+ }
+ else
+ {
+ throw URLHelper.parseError(-1,
+ "Durable subscription must have
values for " + BindingURL.OPTION_CLIENTID + " and " +
BindingURL.OPTION_SUBSCRIPTION + ".",
+ _url);
+
+ }
+ }
+ else
+ {
+ _queueName = null;
+ }
+ }
+ else
+ {
+ _queueName = name;
+ }
+
+ }
+
+ public String getOption(String key)
+ {
+ return _options.get(key);
+ }
+
+ public void setOption(String key, String value)
+ {
+ _options.put(key, value);
+ }
+
+ public boolean containsOption(String key)
+ {
+ return _options.containsKey(key);
+ }
+
+ public String getRoutingKey()
+ {
+ if (_exchangeClass.equals(ExchangeDefaults.DIRECT_EXCHANGE_CLASS))
+ {
+ return getQueueName();
+ }
+
+ if (containsOption(BindingURL.OPTION_ROUTING_KEY))
+ {
+ return getOption(OPTION_ROUTING_KEY);
+ }
+
+ return getDestinationName();
+ }
+
+ public void setRoutingKey(String key)
+ {
+ setOption(OPTION_ROUTING_KEY, key);
+ }
+
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append(_exchangeClass);
+ sb.append("://");
+ sb.append(_exchangeName);
+ sb.append('/');
+ sb.append(_destinationName);
+ sb.append('/');
+ sb.append(_queueName);
+
+ sb.append(URLHelper.printOptions(_options));
+
+ return sb.toString();
+ }
+}
Propchange:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/BindingURLImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java?view=auto&rev=567047
==============================================================================
---
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java
(added)
+++
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java
Fri Aug 17 05:44:40 2007
@@ -0,0 +1,57 @@
+/* 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.qpidity.url;
+
+import org.apache.qpidity.BrokerDetails;
+
+import java.util.List;
+
+/**
+ * The format of the Qpid URL is based on the AMQP one.
+ * The grammar is as follows:
+ * <p> qpid_url = "qpid:" prot_addr_list ["/" future-parameters]
+ * <p> prot_addr_list = [prot_addr ","]* prot_addr
+ * <p> prot_addr = tcp_prot_addr | tls_prot_addr | future_prot_addr
+ * <p> tcp_prot_addr = tcp_id tcp_addr
+ * <p> tcp_id = "tcp:" | ""
+ * <p> tcp_addr = [host [":" port] ]
+ * <p> host = <as per [2]>
+ * <p> port = number
+ * <p> tls_prot_addr = tls_id tls_addr
+ * <p> tls_id = "tls:" | ""
+ * <p> tls_addr = [host [":" port] ]
+ * <p> future_prot_addr = future_prot_id future_prot_addr
+ * <p> future_prot_id = <placeholder, must end in ":". Example "sctp:">
+ * <p> future_prot_addr = <placeholder, protocl-specific address>
+ * <p> future_parameters = <placeholder, not used in failover addresses>
+ */
+public interface QpidURL
+{
+ /**
+ * Get all the broker details
+ *
+ * @return A list of BrokerDetails.
+ */
+ public List<BrokerDetails> getAllBrokerDetails();
+
+ /**
+ * Get this URL string form
+ * @return This URL string form.
+ */
+ public String getURL();
+}
Propchange:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURL.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java?view=auto&rev=567047
==============================================================================
---
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java
(added)
+++
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java
Fri Aug 17 05:44:40 2007
@@ -0,0 +1,65 @@
+/* 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.qpidity.url;
+
+import org.apache.qpidity.BrokerDetails;
+
+import java.util.List;
+
+/**
+ * The format Qpid URL is based on the AMQP one.
+ * The grammar is as follows:
+ * <p> qpid_url = "qpid:" port_addr_list ["/" future-parameters]
+ * <p> port_addr_list = [port_addr ","]* port_addr
+ * <p> port_addr = tcp_port_addr | tls_prot_addr | future_prot_addr
+ * <p> tcp_port_addr = tcp_id tcp_addr
+ * <p> tcp_id = "tcp:" | ""
+ * <p> tcp_addr = [host [":" port] ]
+ * <p> host = <as per [2]>
+ * <p> port = number
+ * <p> tls_prot_addr = tls_id tls_addr
+ * <p> tls_id = "tls:" | ""
+ * <p> tls_addr = [host [":" port] ]
+ * <p> future_prot_addr = future_prot_id future_prot_addr
+ * <p> future_prot_id = <placeholder, must end in ":". Example "sctp:">
+ * <p> future_prot_addr = <placeholder, protocl-specific address>
+ * <p> future_parameters = <placeholder, not used in failover addresses>
+ */
+public class QpidURLImpl implements QpidURL
+{
+ //-- Constructors
+
+ public QpidURLImpl(String url)
+ {
+ // todo pars this URL
+ }
+
+ //-- interface QpidURL
+
+ public List<BrokerDetails> getAllBrokerDetails()
+ {
+ // TODO
+ return null;
+ }
+
+ public String getURL()
+ {
+ //TODO
+ return "";
+ }
+}
Propchange:
incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpidity/url/QpidURLImpl.java
------------------------------------------------------------------------------
svn:eol-style = native