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


Reply via email to