Author: orudyy
Date: Fri Apr 24 09:51:42 2015
New Revision: 1675811
URL: http://svn.apache.org/r1675811
Log:
QPID-6507: Remove HelperServlet from http-management and replace all calls to
the servlet in web management console with calls to metadata or specialized
servlets
Added:
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/TimeZoneServlet.java
- copied, changed from r1675661,
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListTimeZones.java
Removed:
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/HelperServlet.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/AbstractSpecialisedAttributeLister.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListAccessControlProviderAttributes.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListBrokerAttribute.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListGroupProviderAttributes.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListTimeZones.java
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/timezone.js
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/DefaultConnectionProviderFactory.java
Fri Apr 24 09:51:42 2015
@@ -21,8 +21,10 @@
package org.apache.qpid.server.store.jdbc;
import org.apache.qpid.server.plugin.JDBCConnectionProviderFactory;
+import org.apache.qpid.server.plugin.PluggableFactoryLoader;
import org.apache.qpid.server.plugin.PluggableService;
+import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
@@ -30,6 +32,9 @@ import java.util.Set;
@PluggableService
public class DefaultConnectionProviderFactory implements
JDBCConnectionProviderFactory
{
+
+ public static PluggableFactoryLoader<JDBCConnectionProviderFactory>
FACTORY_LOADER = new
PluggableFactoryLoader(JDBCConnectionProviderFactory.class);
+
public static final String TYPE = "NONE";
@Override
@@ -50,4 +55,8 @@ public class DefaultConnectionProviderFa
return Collections.emptySet();
}
+ public static Collection<String> getAllAvailableConnectionProviderTypes()
+ {
+ return FACTORY_LOADER.getSupportedTypes();
+ }
}
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhost/jdbc/JDBCVirtualHost.java
Fri Apr 24 09:51:42 2015
@@ -32,7 +32,8 @@ public interface JDBCVirtualHost<X exten
@ManagedAttribute(mandatory=true)
String getConnectionUrl();
- @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE)
+ @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE,
+ validValues =
{"org.apache.qpid.server.store.jdbc.DefaultConnectionProviderFactory#getAllAvailableConnectionProviderTypes()"}
)
String getConnectionPoolType();
@ManagedAttribute
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/virtualhostnode/jdbc/JDBCVirtualHostNode.java
Fri Apr 24 09:51:42 2015
@@ -30,7 +30,8 @@ public interface JDBCVirtualHostNode<X e
@ManagedAttribute(mandatory=true)
String getConnectionUrl();
- @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE)
+ @ManagedAttribute(defaultValue=DefaultConnectionProviderFactory.TYPE,
+ validValues =
{"org.apache.qpid.server.store.jdbc.DefaultConnectionProviderFactory#getAllAvailableConnectionProviderTypes()"}
)
String getConnectionPoolType();
@ManagedAttribute
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/add.js
Fri Apr 24 09:51:42 2015
@@ -26,12 +26,12 @@ define(["dojo/_base/xhr",
"dojo/store/Memory",
"dijit/registry",
"dojo/text!virtualhost/jdbc/add.html",
-
"dojo/text!service/helper?action=pluginList&plugin=JDBCConnectionProviderFactory",
+ "qpid/common/metadata",
"qpid/common/util",
"dijit/form/ValidationTextBox",
"dijit/form/CheckBox",
"dojo/domReady!"],
- function (xhr, array, parser, dom, domConstruct, json, string, Memory,
registry, template, poolTypeJsonString, util)
+ function (xhr, array, parser, dom, domConstruct, json, string, Memory,
registry, template, metadata, util)
{
return {
show: function (data)
@@ -48,12 +48,17 @@ define(["dojo/_base/xhr",
var that = this;
registry.byId("addVirtualHost.connectionUrl").set("regExpGen",
util.jdbcUrlOrContextVarRegexp);
registry.byId("addVirtualHost.username").set("regExpGen",
util.nameOrContextVarRegexp);
- var poolTypes = json.parse(poolTypeJsonString);
+
+ var typeMetaData = metadata.getMetaData("VirtualHost", "JDBC");
+ var poolTypes =
typeMetaData.attributes.connectionPoolType.validValues;
var poolTypesData = [];
- for (var i =0 ; i < poolTypes.length; i++)
- {
- poolTypesData[i]= {id: poolTypes[i], name: poolTypes[i]};
- }
+ array.forEach(poolTypes,
+ function(item)
+ {
+ poolTypesData.push({id: item, name: item});
+ }
+ );
+
var poolTypesStore = new Memory({ data: poolTypesData });
var poolTypeControl =
registry.byId("addVirtualHost.connectionPoolType");
poolTypeControl.set("store", poolTypesStore);
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhost/jdbc/edit.js
Fri Apr 24 09:51:42 2015
@@ -17,7 +17,7 @@
* under the License.
*/
define(["qpid/common/util",
-
"dojo/text!service/helper?action=pluginList&plugin=JDBCConnectionProviderFactory",
+ "qpid/common/metadata",
"dojo/_base/array",
"dojo/json",
"dojo/string",
@@ -26,7 +26,7 @@ define(["qpid/common/util",
"dojo/dom-construct",
"dijit/registry",
"dojo/domReady!"],
- function (util, poolTypeJsonString, array, json, string, Memory, dom,
domConstruct, registry)
+ function (util, metadata, array, json, string, Memory, dom, domConstruct,
registry)
{
return {
@@ -41,12 +41,16 @@ define(["qpid/common/util",
registry.byId("editVirtualHost.connectionUrl").set("regExpGen",
util.jdbcUrlOrContextVarRegexp);
registry.byId("editVirtualHost.username").set("regExpGen",
util.nameOrContextVarRegexp);
- var poolTypes = json.parse(poolTypeJsonString);
+ var typeMetaData = metadata.getMetaData("VirtualHost", "JDBC");
+ var poolTypes =
typeMetaData.attributes.connectionPoolType.validValues;
var poolTypesData = [];
- for (var i =0 ; i < poolTypes.length; i++)
- {
- poolTypesData[i]= {id: poolTypes[i], name: poolTypes[i]};
- }
+ array.forEach(poolTypes,
+ function(item)
+ {
+ poolTypesData.push({id: item, name: item});
+ }
+ );
+
var poolTypesStore = new Memory({ data: poolTypesData });
var poolTypeControl =
registry.byId("editVirtualHost.connectionPoolType");
poolTypeControl.set("store", poolTypesStore);
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/add.js
Fri Apr 24 09:51:42 2015
@@ -28,12 +28,12 @@ define(["dojo/_base/xhr",
"dojo/store/Memory",
"dijit/registry",
"dojo/text!virtualhostnode/jdbc/add.html",
-
"dojo/text!service/helper?action=pluginList&plugin=JDBCConnectionProviderFactory",
+ "qpid/common/metadata",
"qpid/common/util",
"dijit/form/ValidationTextBox",
"dijit/form/CheckBox",
"dojo/domReady!"],
- function (xhr, array, parser, dom, domConstruct, json, string, Memory,
registry, template, poolTypeJsonString, util)
+ function (xhr, array, parser, dom, domConstruct, json, string, Memory,
registry, template, metadata, util)
{
return {
show: function (data)
@@ -51,12 +51,15 @@ define(["dojo/_base/xhr",
registry.byId("addVirtualHostNode.connectionUrl").set("regExpGen",
util.jdbcUrlOrContextVarRegexp);
registry.byId("addVirtualHostNode.username").set("regExpGen",
util.nameOrContextVarRegexp);
- var poolTypes = json.parse(poolTypeJsonString);
+ var typeMetaData = metadata.getMetaData("VirtualHostNode", "JDBC");
+ var poolTypes =
typeMetaData.attributes.connectionPoolType.validValues;
var poolTypesData = [];
- for (var i =0 ; i < poolTypes.length; i++)
- {
- poolTypesData[i]= {id: poolTypes[i], name: poolTypes[i]};
- }
+ array.forEach(poolTypes,
+ function(item)
+ {
+ poolTypesData.push({id: item, name: item});
+ }
+ );
var poolTypesStore = new Memory({ data: poolTypesData });
var poolTypeControl =
registry.byId("addVirtualHostNode.connectionPoolType");
poolTypeControl.set("store", poolTypesStore);
Modified:
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
(original)
+++
qpid/java/trunk/broker-plugins/jdbc-store/src/main/java/resources/js/qpid/management/virtualhostnode/jdbc/edit.js
Fri Apr 24 09:51:42 2015
@@ -17,7 +17,7 @@
* under the License.
*/
define(["qpid/common/util",
-
"dojo/text!service/helper?action=pluginList&plugin=JDBCConnectionProviderFactory",
+ "qpid/common/metadata",
"dojo/_base/array",
"dojo/json",
"dojo/string",
@@ -26,7 +26,7 @@ define(["qpid/common/util",
"dojo/dom-construct",
"dijit/registry",
"dojo/domReady!"],
- function (util, poolTypeJsonString, array, json, string, Memory, dom,
domConstruct, registry)
+ function (util, metadata, array, json, string, Memory, dom, domConstruct,
registry)
{
return {
show: function(data)
@@ -39,12 +39,15 @@ define(["qpid/common/util",
registry.byId("editVirtualHostNode.connectionUrl").set("regExpGen",
util.jdbcUrlOrContextVarRegexp);
registry.byId("editVirtualHostNode.username").set("regExpGen",
util.nameOrContextVarRegexp);
- var poolTypes = json.parse(poolTypeJsonString);
+ var typeMetaData = metadata.getMetaData("VirtualHostNode",
"JDBC");
+ var poolTypes =
typeMetaData.attributes.connectionPoolType.validValues;
var poolTypesData = [];
- for (var i =0 ; i < poolTypes.length; i++)
- {
- poolTypesData[i]= {id: poolTypes[i], name: poolTypes[i]};
- }
+ array.forEach(poolTypes,
+ function(item)
+ {
+ poolTypesData.push({id: item, name: item});
+ }
+ );
var poolTypesStore = new Memory({ data: poolTypesData });
var poolTypeControl =
registry.byId("editVirtualHostNode.connectionPoolType");
poolTypeControl.set("store", poolTypesStore);
Modified:
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
(original)
+++
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
Fri Apr 24 09:51:42 2015
@@ -43,6 +43,7 @@ import javax.servlet.http.HttpServletReq
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
+import org.apache.qpid.server.management.plugin.servlet.rest.TimeZoneServlet;
import org.eclipse.jetty.io.EndPoint;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Request;
@@ -69,7 +70,6 @@ import org.apache.qpid.server.management
import org.apache.qpid.server.management.plugin.servlet.FileServlet;
import org.apache.qpid.server.management.plugin.servlet.LogFileServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.ApiDocsServlet;
-import org.apache.qpid.server.management.plugin.servlet.rest.HelperServlet;
import
org.apache.qpid.server.management.plugin.servlet.rest.LogFileListingServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.LogRecordsServlet;
import
org.apache.qpid.server.management.plugin.servlet.rest.LoggedOnUserPreferencesServlet;
@@ -360,7 +360,7 @@ public class HttpManagement extends Abst
root.addServlet(new ServletHolder(new FileServlet()), "*.json");
root.addServlet(new ServletHolder(new FileServlet()), "*.txt");
root.addServlet(new ServletHolder(new FileServlet()), "*.xsl");
- root.addServlet(new ServletHolder(new HelperServlet()),
"/service/helper");
+ root.addServlet(new ServletHolder(new TimeZoneServlet()),
"/service/timezones");
root.addServlet(new ServletHolder(new LogFileListingServlet()),
"/service/logfilenames");
root.addServlet(new ServletHolder(new LogFileServlet()),
"/service/logfile");
Copied:
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/TimeZoneServlet.java
(from r1675661,
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListTimeZones.java)
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/TimeZoneServlet.java?p2=qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/TimeZoneServlet.java&p1=qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListTimeZones.java&r1=1675661&r2=1675811&rev=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/action/ListTimeZones.java
(original)
+++
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/TimeZoneServlet.java
Fri Apr 24 09:51:42 2015
@@ -1,49 +1,48 @@
-/*
- *
- * 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.management.plugin.servlet.rest;
-package org.apache.qpid.server.management.plugin.servlet.rest.action;
+import java.io.IOException;
+import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.Map;
import java.util.TimeZone;
-import org.apache.qpid.server.management.plugin.servlet.rest.Action;
-import org.apache.qpid.server.model.Broker;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
-public class ListTimeZones implements Action
+
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
+
+public class TimeZoneServlet extends AbstractServlet
{
private static final String[] TIMEZONE_REGIONS = { "Africa", "America",
"Antarctica", "Arctic", "Asia", "Atlantic", "Australia",
"Europe", "Indian", "Pacific" };
- @Override
- public String getName()
+ private final ObjectMapper _mapper;
+
+ public TimeZoneServlet()
{
- return ListTimeZones.class.getSimpleName();
+ super();
+ _mapper = new ObjectMapper();
+ _mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
}
@Override
- public Object perform(Map<String, Object> request, Broker broker)
+ protected void doGetWithSubjectAndActor(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
+ IOException
+ {
+ response.setContentType("application/json");
+ final Writer writer = getOutputWriter(request, response);
+ _mapper.writeValue(writer, getTimeZones());
+
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+
+ public List<TimeZoneDetails> getTimeZones()
{
List<TimeZoneDetails> timeZoneDetails = new
ArrayList<TimeZoneDetails>();
String[] ids = TimeZone.getAvailableIDs();
Modified:
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/timezone.js
URL:
http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/timezone.js?rev=1675811&r1=1675810&r2=1675811&view=diff
==============================================================================
---
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/timezone.js
(original)
+++
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/timezone.js
Fri Apr 24 09:51:42 2015
@@ -38,7 +38,7 @@ define(["dojo/_base/xhr"], function (xhr
function loadTimezones()
{
xhr.get({
- url: "service/helper?action=ListTimeZones",
+ url: "service/timezones",
sync: true,
handleAs: "json",
load: function(zones)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]