Author: rgodfrey
Date: Wed Aug 21 11:32:22 2013
New Revision: 1516140

URL: http://svn.apache.org/r1516140
Log:
QPID-5087 : [Java Broker] Allow use of separate message stores and 
configuration stores

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueFactory.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java
    
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
    
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/DefaultExchangeFactory.java
 Wed Aug 21 11:32:22 2013
@@ -136,4 +136,10 @@ public class DefaultExchangeFactory impl
         Exchange e = exchType.newInstance(id, _host, exchange, durable, 
autoDelete);
         return e;
     }
+
+    @Override
+    public Exchange restoreExchange(UUID id, String exchange, String type, 
boolean autoDelete) throws AMQException
+    {
+        return createExchange(id, exchange, type, true, autoDelete);
+    }
 }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/ExchangeFactory.java
 Wed Aug 21 11:32:22 2013
@@ -38,5 +38,6 @@ public interface ExchangeFactory
     Exchange createExchange(String exchange, String type, boolean durable, 
boolean autoDelete) throws AMQException;
 
     Exchange createExchange(UUID id, String exchange, String type, boolean 
durable, boolean autoDelete) throws AMQException;
+    Exchange restoreExchange(UUID id, String exchange, String type, boolean 
autoDelete) throws AMQException;
 
 }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQQueueFactory.java
 Wed Aug 21 11:32:22 2013
@@ -28,7 +28,6 @@ import java.util.UUID;
 import org.apache.qpid.AMQException;
 import org.apache.qpid.AMQSecurityException;
 import org.apache.qpid.exchange.ExchangeDefaults;
-import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.server.configuration.BrokerProperties;
 import org.apache.qpid.server.configuration.QueueConfiguration;
 import org.apache.qpid.server.exchange.DefaultExchangeFactory;
@@ -177,19 +176,45 @@ public class AMQQueueFactory implements 
             }
     };
 
+    @Override
+    public AMQQueue restoreQueue(UUID id,
+                                 String queueName,
+                                 String owner,
+                                 boolean autoDelete,
+                                 boolean exclusive,
+                                 boolean deleteOnNoConsumer,
+                                 Map<String, Object> arguments) throws 
AMQSecurityException, AMQException
+    {
+        return createOrRestoreQueue(id, queueName, true, owner, autoDelete, 
exclusive, deleteOnNoConsumer, arguments, false);
+
+    }
+
     /**
      * @param id the id to use.
      * @param deleteOnNoConsumer
      */
     @Override
-    public AMQQueue createAMQQueueImpl(UUID id,
-                                       String queueName,
-                                       boolean durable,
-                                       String owner,
-                                       boolean autoDelete,
-                                       boolean exclusive,
-                                       boolean deleteOnNoConsumer,
-                                       Map<String, Object> arguments) throws 
AMQSecurityException, AMQException
+    public AMQQueue createQueue(UUID id,
+                                String queueName,
+                                boolean durable,
+                                String owner,
+                                boolean autoDelete,
+                                boolean exclusive,
+                                boolean deleteOnNoConsumer,
+                                Map<String, Object> arguments) throws 
AMQSecurityException, AMQException
+    {
+        return createOrRestoreQueue(id, queueName, durable, owner, autoDelete, 
exclusive, deleteOnNoConsumer, arguments, true);
+    }
+
+    private AMQQueue createOrRestoreQueue(UUID id,
+                                          String queueName,
+                                          boolean durable,
+                                          String owner,
+                                          boolean autoDelete,
+                                          boolean exclusive,
+                                          boolean deleteOnNoConsumer,
+                                          Map<String, Object> arguments,
+                                          boolean createInStore) throws 
AMQSecurityException, AMQException
     {
         if (id == null)
         {
@@ -358,7 +383,7 @@ public class AMQQueueFactory implements 
             q.setAlternateExchange(altExchange);
         }
 
-        if (q.isDurable() && !q.isAutoDelete())
+        if (createInStore && q.isDurable() && !q.isAutoDelete())
         {
             
DurableConfigurationStoreHelper.createQueue(_virtualHost.getDurableConfigurationStore(),
 q);
         }
@@ -379,7 +404,7 @@ public class AMQQueueFactory implements 
         // we need queues that are defined in config to have deterministic ids.
         UUID id = UUIDGenerator.generateQueueUUID(queueName, 
_virtualHost.getName());
 
-        AMQQueue q = createAMQQueueImpl(id, queueName, durable, owner, 
autodelete, exclusive, false, arguments);
+        AMQQueue q = createQueue(id, queueName, durable, owner, autodelete, 
exclusive, false, arguments);
         q.configure(config);
         return q;
     }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueFactory.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueFactory.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/QueueFactory.java
 Wed Aug 21 11:32:22 2013
@@ -27,12 +27,21 @@ import org.apache.qpid.AMQSecurityExcept
 
 public interface QueueFactory
 {
-    AMQQueue createAMQQueueImpl(UUID id,
-                                String queueName,
-                                boolean durable,
-                                String owner,
-                                boolean autoDelete,
-                                boolean exclusive,
-                                boolean deleteOnNoConsumer,
-                                Map<String, Object> arguments) throws 
AMQSecurityException, AMQException;
+    AMQQueue createQueue(UUID id,
+                         String queueName,
+                         boolean durable,
+                         String owner,
+                         boolean autoDelete,
+                         boolean exclusive,
+                         boolean deleteOnNoConsumer,
+                         Map<String, Object> arguments) throws 
AMQSecurityException, AMQException;
+
+    AMQQueue restoreQueue(UUID id,
+                          String queueName,
+                          String owner,
+                          boolean autoDelete,
+                          boolean exclusive,
+                          boolean deleteOnNoConsumer,
+                          Map<String, Object> arguments) throws 
AMQSecurityException, AMQException;
+
 }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
 Wed Aug 21 11:32:22 2013
@@ -518,8 +518,8 @@ public abstract class AbstractVirtualHos
             {
                 throw new QueueExistsException("Queue with id " + id + " 
already exists", _queueRegistry.getQueue(queueName));
             }
-            return _queueFactory.createAMQQueueImpl(id, queueName, durable, 
owner, autoDelete, exclusive, deleteOnNoConsumer,
-                            arguments);
+            return _queueFactory.createQueue(id, queueName, durable, owner, 
autoDelete, exclusive, deleteOnNoConsumer,
+                    arguments);
         }
 
     }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/ExchangeRecoverer.java
 Wed Aug 21 11:32:22 2013
@@ -77,7 +77,7 @@ public class ExchangeRecoverer extends A
                 }
                 if (_exchange == null)
                 {
-                    _exchange = _exchangeFactory.createExchange(id, 
exchangeName, exchangeType, true, autoDelete);
+                    _exchange = _exchangeFactory.restoreExchange(id, 
exchangeName, exchangeType, autoDelete);
                     _exchangeRegistry.registerExchange(_exchange);
                 }
             }

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/QueueRecoverer.java
 Wed Aug 21 11:32:22 2013
@@ -31,7 +31,6 @@ import org.apache.qpid.server.exchange.E
 import org.apache.qpid.server.exchange.ExchangeRegistry;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.queue.AMQQueue;
-import org.apache.qpid.server.queue.AMQQueueFactory;
 import org.apache.qpid.server.queue.QueueFactory;
 import org.apache.qpid.server.store.AbstractDurableConfiguredObjectRecoverer;
 import org.apache.qpid.server.store.UnresolvedDependency;
@@ -122,8 +121,8 @@ public class QueueRecoverer extends Abst
 
                 if (_queue == null)
                 {
-                    _queue = _queueFactory.createAMQQueueImpl(_id, queueName, 
true, owner, false, exclusive,
-                                                              false, 
queueArgumentsMap);
+                    _queue = _queueFactory.restoreQueue(_id, queueName, owner, 
false, exclusive,
+                            false, queueArgumentsMap);
                 }
             }
             catch (AMQException e)

Modified: 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/queue/AMQQueueFactoryTest.java
 Wed Aug 21 11:32:22 2013
@@ -116,7 +116,7 @@ public class AMQQueueFactoryTest extends
                     @Override
                     public AMQQueue answer(InvocationOnMock invocation) throws 
Throwable
                     {
-                        return _queueFactory.createAMQQueueImpl(id.getValue(),
+                        return _queueFactory.createQueue(id.getValue(),
                                 queueName.getValue(),
                                 durable.getValue(),
                                 owner.getValue(),
@@ -222,8 +222,12 @@ public class AMQQueueFactoryTest extends
         Map<String,Object> attributes = 
Collections.singletonMap(Queue.PRIORITIES, (Object) 5);
 
 
-        AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), 
"testPriorityQueue", false, "owner", false,
-                                           false,
+        AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                "testPriorityQueue",
+                false,
+                "owner",
+                false,
+                false,
                 false,
                 attributes);
 
@@ -238,8 +242,8 @@ public class AMQQueueFactoryTest extends
         String queueName = getName();
         String dlQueueName = queueName + 
AMQQueueFactory.DEFAULT_DLQ_NAME_SUFFIX;
 
-        AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner", false,
-                                           false,
+        AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(), queueName, false, 
"owner", false,
+                false,
                 false,
                 null);
         assertEquals("Queue not a simple queue", SimpleAMQQueue.class, 
queue.getClass());
@@ -269,7 +273,12 @@ public class AMQQueueFactoryTest extends
         assertNull("The DLQ should not yet exist", 
_virtualHost.getQueue(dlQueueName));
         assertNull("The alternate exchange should not yet exist", 
_virtualHost.getExchange(dlExchangeName));
 
-        AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner", false, false,
+        AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                queueName,
+                false,
+                "owner",
+                false,
+                false,
                 false,
                 attributes);
 
@@ -309,7 +318,12 @@ public class AMQQueueFactoryTest extends
         assertNull("The DLQ should not yet exist", 
_virtualHost.getQueue(dlQueueName));
         assertNull("The alternate exchange should not yet exist", 
_virtualHost.getExchange(dlExchangeName));
 
-        AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner", false, false,
+        AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                queueName,
+                false,
+                "owner",
+                false,
+                false,
                 false,
                 null);
 
@@ -348,7 +362,12 @@ public class AMQQueueFactoryTest extends
         assertNull("The DLQ should not yet exist", 
_virtualHost.getQueue(dlQueueName));
         assertNull("The alternate exchange should not exist", 
_virtualHost.getExchange(dlExchangeName));
 
-        AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner", false, false,
+        AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                queueName,
+                false,
+                "owner",
+                false,
+                false,
                 false,
                 attributes);
 
@@ -379,7 +398,12 @@ public class AMQQueueFactoryTest extends
         assertNull("The alternate exchange should not exist", 
_virtualHost.getExchange(dlExchangeName));
 
         //create an autodelete queue
-        AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner", true, false,
+        AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                queueName,
+                false,
+                "owner",
+                true,
+                false,
                 false,
                 attributes);
         assertTrue("Queue should be autodelete", queue.isAutoDelete());
@@ -401,7 +425,12 @@ public class AMQQueueFactoryTest extends
     {
         Map<String,Object> attributes = 
Collections.singletonMap(Queue.MAXIMUM_DELIVERY_ATTEMPTS, (Object) 5);
 
-        final AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), 
"testMaximumDeliveryCount", false, "owner", false, false,
+        final AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                "testMaximumDeliveryCount",
+                false,
+                "owner",
+                false,
+                false,
                 false,
                 attributes);
 
@@ -417,7 +446,12 @@ public class AMQQueueFactoryTest extends
      */
     public void testMaximumDeliveryCountDefault() throws Exception
     {
-        final AMQQueue queue = 
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), 
"testMaximumDeliveryCount", false, "owner", false, false,
+        final AMQQueue queue = 
_queueFactory.createQueue(UUIDGenerator.generateRandomUUID(),
+                "testMaximumDeliveryCount",
+                false,
+                "owner",
+                false,
+                false,
                 false,
                 null);
 
@@ -434,7 +468,7 @@ public class AMQQueueFactoryTest extends
     {
         try
         {
-            
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), null, 
false, "owner", true, false,
+            _queueFactory.createQueue(UUIDGenerator.generateRandomUUID(), 
null, false, "owner", true, false,
                     false,
                     null);
             fail("queue with null name can not be created!");
@@ -459,7 +493,7 @@ public class AMQQueueFactoryTest extends
             
setTestSystemProperty(BrokerProperties.PROPERTY_DEAD_LETTER_EXCHANGE_SUFFIX, 
"_DLE");
             
setTestSystemProperty(BrokerProperties.PROPERTY_DEAD_LETTER_QUEUE_SUFFIX, 
"_DLQUEUE");
             Map<String,Object> attributes = 
Collections.singletonMap(Queue.CREATE_DLQ_ON_CREATION, (Object) true);
-            
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner",
+            _queueFactory.createQueue(UUIDGenerator.generateRandomUUID(), 
queueName, false, "owner",
                     false, false, false, attributes);
             fail("queue with DLQ name having more than 255 characters can not 
be created!");
         }
@@ -484,7 +518,7 @@ public class AMQQueueFactoryTest extends
             
setTestSystemProperty(BrokerProperties.PROPERTY_DEAD_LETTER_EXCHANGE_SUFFIX, 
"_DLEXCHANGE");
             
setTestSystemProperty(BrokerProperties.PROPERTY_DEAD_LETTER_QUEUE_SUFFIX, 
"_DLQ");
             Map<String,Object> attributes = 
Collections.singletonMap(Queue.CREATE_DLQ_ON_CREATION, (Object) true);
-            
_queueFactory.createAMQQueueImpl(UUIDGenerator.generateRandomUUID(), queueName, 
false, "owner",
+            _queueFactory.createQueue(UUIDGenerator.generateRandomUUID(), 
queueName, false, "owner",
                     false, false, false, attributes);
             fail("queue with DLE name having more than 255 characters can not 
be created!");
         }

Modified: 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java?rev=1516140&r1=1516139&r2=1516140&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/virtualhost/DurableConfigurationRecovererTest.java
 Wed Aug 21 11:32:22 2013
@@ -28,10 +28,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.UUID;
 import org.apache.qpid.AMQStoreException;
-import org.apache.qpid.framing.AMQShortString;
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
-import org.apache.qpid.server.configuration.QueueConfiguration;
-import org.apache.qpid.server.configuration.VirtualHostConfiguration;
 import org.apache.qpid.server.exchange.DirectExchange;
 import org.apache.qpid.server.exchange.Exchange;
 import org.apache.qpid.server.exchange.ExchangeFactory;
@@ -39,17 +36,12 @@ import org.apache.qpid.server.exchange.E
 import org.apache.qpid.server.exchange.HeadersExchange;
 import org.apache.qpid.server.exchange.TopicExchange;
 import org.apache.qpid.server.logging.LogActor;
-import org.apache.qpid.server.logging.RootMessageLogger;
 import org.apache.qpid.server.logging.actors.CurrentActor;
 import org.apache.qpid.server.model.Binding;
 import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.plugin.ExchangeType;
 import org.apache.qpid.server.queue.AMQQueue;
-import org.apache.qpid.server.queue.AMQQueueFactory;
 import org.apache.qpid.server.queue.QueueFactory;
-import org.apache.qpid.server.queue.QueueRegistry;
-import org.apache.qpid.server.security.*;
-import org.apache.qpid.server.security.SecurityManager;
 import org.apache.qpid.server.store.ConfiguredObjectRecord;
 import org.apache.qpid.server.store.DurableConfigurationRecoverer;
 import org.apache.qpid.server.store.DurableConfigurationStore;
@@ -131,7 +123,7 @@ public class DurableConfigurationRecover
 
         _queueFactory = mock(QueueFactory.class);
 
-        when(_queueFactory.createAMQQueueImpl(idArg.capture(), 
queueArg.capture(),
+        when(_queueFactory.createQueue(idArg.capture(), queueArg.capture(),
                 anyBoolean(), anyString(), anyBoolean(), anyBoolean(), 
anyBoolean(), argsArg.capture())).then(
                 new Answer()
                 {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to