From 82eb2c565e5d0a65d2e19ac4f884df5f430a8d22 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Tue, 27 Jan 2015 16:04:13 +0000 Subject: QPID-6337: [Java Broker] Upgrade Dojo version to 1.10.3 git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655067 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/java/broker-plugins/management-http/pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/pom.xml b/qpid/java/broker-plugins/management-http/pom.xml index 47066874ed..50ff3e20f3 100644 --- a/qpid/java/broker-plugins/management-http/pom.xml +++ b/qpid/java/broker-plugins/management-http/pom.xml @@ -29,6 +29,10 @@ Qpid HTTP Management Broker Plug-in HTTP Management broker plug-in + + 1.10.3 + + org.apache.qpid @@ -84,6 +88,7 @@ org.dojotoolkit dojo ${dojo-version} + distribution zip @@ -124,7 +129,7 @@ it gets picked up when using classpath wildcard expansion, which only collects .jar files --> - dojo-${dojo-version}.zip + dojo-${dojo-version}-distribution.zip -- cgit v1.2.1 From 18471caa60a353ace6cebf4d175579a3c7228467 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Tue, 27 Jan 2015 16:04:31 +0000 Subject: QPID-6337: Fix javascript error occuring in IE8 after dojo upgrade git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655068 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/resources/js/qpid/common/metadata.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js index c62ba5d5d4..1520cb8f7a 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js @@ -29,7 +29,7 @@ define(["dojo/_base/xhr", _init: function () { var that = this; - xhr.get({sync: true, handleAs: "json", url: "service/metadata", load: function(metadata){that._onMetadata(metadata)}}); + xhr.get({sync: true, handleAs: "json", url: "service/metadata", load: function(data){that._onMetadata(data)}}); }, _onMetadata: function (metadata) { @@ -68,7 +68,8 @@ define(["dojo/_base/xhr", }, implementsManagedInterface: function (category, type, managedInterfaceName) { - return this.getMetaData(category, type).managedInterfaces.indexOf(managedInterfaceName) >= 0; + var managedInterfaces = this.getMetaData(category, type).managedInterfaces; + return array.indexOf(managedInterfaces, managedInterfaceName) >= 0 ; }, validChildTypes: function (category, type, childCategory) { -- cgit v1.2.1 From 5853d2d3c8261f30590ee1b0406d9a2422ede00b Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Tue, 27 Jan 2015 16:04:58 +0000 Subject: QPID-6337: Fix renediring of dialog action bar git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655071 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/resources/addAccessControlProvider.html | 2 +- .../src/main/java/resources/addAuthenticationProvider.html | 2 +- .../management-http/src/main/java/resources/addBinding.html | 2 +- .../management-http/src/main/java/resources/addExchange.html | 2 +- .../management-http/src/main/java/resources/addPort.html | 2 +- .../src/main/java/resources/addPreferencesProvider.html | 2 +- .../management-http/src/main/java/resources/addQueue.html | 2 +- .../management-http/src/main/java/resources/addStore.html | 2 +- .../src/main/java/resources/addVirtualHostNodeAndVirtualHost.html | 2 +- .../management-http/src/main/java/resources/css/common.css | 8 ++++++++ .../management-http/src/main/java/resources/editBroker.html | 2 +- .../management-http/src/main/java/resources/editQueue.html | 2 +- .../management-http/src/main/java/resources/editVirtualHost.html | 2 +- .../src/main/java/resources/editVirtualHostNode.html | 2 +- .../src/main/java/resources/grid/showColumnDefDialog.html | 2 +- .../src/main/java/resources/grid/showRowNumberLimitDialog.html | 2 +- .../management-http/src/main/java/resources/index.html | 2 +- .../management-http/src/main/java/resources/login.html | 2 +- .../src/main/java/resources/logs/showLogFileDownloadDialog.html | 2 +- .../management-http/src/main/java/resources/showPreferences.html | 4 ++-- 20 files changed, 28 insertions(+), 20 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addAccessControlProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addAccessControlProvider.html index 07a0c4cf83..64f8078314 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addAccessControlProvider.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addAccessControlProvider.html @@ -58,7 +58,7 @@ -
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html index cf38cd425c..5a565e72e3 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html @@ -56,7 +56,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html index 1b30c6ddcc..d4ac5877cb 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addBinding.html @@ -56,7 +56,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html index 77d5ed0bc1..25e9752392 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html @@ -66,7 +66,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html index c76a230382..b787e701ec 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html @@ -234,7 +234,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addPreferencesProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addPreferencesProvider.html index e850f5ac7f..e3984e1ae2 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addPreferencesProvider.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addPreferencesProvider.html @@ -19,7 +19,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html index 042d6d7ad7..61f0de22d8 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html @@ -334,7 +334,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addStore.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addStore.html index dd6e7a3d38..a1903d456e 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addStore.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addStore.html @@ -58,7 +58,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html index 383c782d60..a2ee2c1b4b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHostNodeAndVirtualHost.html @@ -128,7 +128,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css b/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css index a18562fa1a..ec31709987 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/css/common.css @@ -329,3 +329,11 @@ div .messages { max-height: 140px; overflow: auto; } + +.qpidDialogPaneActionBar +{ + margin-left:-10px; + margin-right:-10px; + margin-bottom:-10px; + margin-top:5px; +} \ No newline at end of file diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html index 85ca617c10..993a2c7505 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/editBroker.html @@ -109,7 +109,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/editQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/editQueue.html index aff2b5dfa5..e7b33ed6f9 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/editQueue.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/editQueue.html @@ -289,7 +289,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html index f4826016ec..8e03dfdd17 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHost.html @@ -127,7 +127,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html index 46e76c31f0..cee18f7185 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/editVirtualHostNode.html @@ -44,7 +44,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/grid/showColumnDefDialog.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/grid/showColumnDefDialog.html index 5b6b8ad774..535b9a1fe5 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/grid/showColumnDefDialog.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/grid/showColumnDefDialog.html @@ -23,7 +23,7 @@
Select columns to display:
-
+
-
+
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/login.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/login.html index aaa2855bd2..6e7f05e41b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/login.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/login.html @@ -104,7 +104,7 @@
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/logs/showLogFileDownloadDialog.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/logs/showLogFileDownloadDialog.html index bc633d059a..d48682a566 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/logs/showLogFileDownloadDialog.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/logs/showLogFileDownloadDialog.html @@ -23,7 +23,7 @@
Select log files to download
-
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html index 2695d8f099..8dff5132bd 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferences.html @@ -40,7 +40,7 @@
-
+
@@ -70,7 +70,7 @@ -
+
-- cgit v1.2.1 From 971b6ce109b19231bb0514b45a343ced822dd404 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 27 Jan 2015 19:36:48 +0000 Subject: QPID-6339 : Use variable interpolation for help url and initial virtual host config git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655125 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/management/plugin/HttpManagementConfiguration.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java index 445ce996ef..018b23daaf 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagementConfiguration.java @@ -45,6 +45,10 @@ public interface HttpManagementConfiguration Date: Tue, 27 Jan 2015 20:39:01 +0000 Subject: QPID-6331 : Allow AMQP 1.0 message content to be evicted to disk git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655154 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/protocol/v1_0/Message_1_0.java | 46 +++++++++++++++------- 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java index 36796851e0..18f5ba9e2e 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Message_1_0.java @@ -21,23 +21,42 @@ package org.apache.qpid.server.protocol.v1_0; +import java.lang.ref.SoftReference; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; + import org.apache.qpid.server.message.AbstractServerMessageImpl; import org.apache.qpid.server.store.StoredMessage; public class Message_1_0 extends AbstractServerMessageImpl { - private List _fragments; + private volatile SoftReference> _fragmentsRef; private long _arrivalTime; + private final long _size; public Message_1_0(final StoredMessage storedMessage) { super(storedMessage, null); - _fragments = restoreFragments(storedMessage); + final List fragments = restoreFragments(getStoredMessage()); + _fragmentsRef = new SoftReference<>(fragments); + _size = calculateSize(fragments); + } + + private long calculateSize(final List fragments) + { + + long size = 0l; + if(fragments != null) + { + for(ByteBuffer buf : fragments) + { + size += buf.remaining(); + } + } + return size; } private static List restoreFragments(StoredMessage storedMessage) @@ -65,7 +84,8 @@ public class Message_1_0 extends AbstractServerMessageImpl(fragments); + _size = calculateSize(fragments); _arrivalTime = System.currentTimeMillis(); } @@ -94,16 +114,7 @@ public class Message_1_0 extends AbstractServerMessageImpl getFragments() { - return _fragments; + + List fragments = _fragmentsRef.get(); + if(fragments == null) + { + fragments = restoreFragments(getStoredMessage()); + _fragmentsRef = new SoftReference<>(fragments); + } + return fragments; } } -- cgit v1.2.1 From dd4f19afa2a6fa19bb365d9416e824bacdb63b3f Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 27 Jan 2015 21:17:48 +0000 Subject: QPID-6341 : Enchacements to the meta data model git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655160 13f79535-47bb-0310-9956-ffa450edef68 --- .../rest/ConfiguredObjectToMapConverter.java | 50 +++++++++++------- .../plugin/servlet/rest/MetaDataServlet.java | 13 +++++ .../plugin/servlet/rest/RestServlet.java | 26 ++++++---- .../rest/ConfiguredObjectToMapConverterTest.java | 59 ++++++++++++++++++---- 4 files changed, 111 insertions(+), 37 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 7d86bd3c8c..24fb272186 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -50,27 +50,20 @@ public class ConfiguredObjectToMapConverter ConfiguredObject.LAST_UPDATED_BY, ConfiguredObject.LAST_UPDATED_TIME)); - public Map convertObjectToMap(final ConfiguredObject confObject, - Class clazz, - int depth, - final boolean useActualValues, - final boolean includeSystemContext, - final boolean extractAsConfig) - { - return convertObjectToMap(confObject, clazz, depth, useActualValues, false, includeSystemContext, extractAsConfig); - } - public Map convertObjectToMap(final ConfiguredObject confObject, Class clazz, int depth, final boolean useActualValues, final boolean inheritedActuals, final boolean includeSystemContext, - final boolean extractAsConfig) + final boolean extractAsConfig, + final int oversizeThreshold + ) { Map object = new LinkedHashMap<>(); - incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext, extractAsConfig); + incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext, + extractAsConfig, oversizeThreshold); if(!extractAsConfig) { incorporateStatisticsIntoMap(confObject, object); @@ -78,7 +71,8 @@ public class ConfiguredObjectToMapConverter if(depth > 0) { - incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals, includeSystemContext, extractAsConfig); + incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals, + includeSystemContext, extractAsConfig, oversizeThreshold); } return object; } @@ -90,7 +84,8 @@ public class ConfiguredObjectToMapConverter final boolean useActualValues, final boolean inheritedActuals, final boolean includeSystemContext, - final boolean extractAsConfig) + final boolean extractAsConfig, + final int oversizeThreshold) { // if extracting as config add a fake attribute for each secondary parent if(extractAsConfig && confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1) @@ -160,7 +155,26 @@ public class ConfiguredObjectToMapConverter } else if (value != null) { - object.put(name, value); + ConfiguredObjectAttribute attribute = confObject.getModel() + .getTypeRegistry() + .getAttributeTypes(confObject.getClass()) + .get(name); + if(attribute.isOversized() && !extractAsConfig) + { + String valueString = String.valueOf(value); + if(valueString.length() > oversizeThreshold) + { + object.put(name, String.valueOf(value).substring(0,oversizeThreshold-4) + "..."); + } + else + { + object.put(name, value); + } + } + else + { + object.put(name, value); + } } else if (extractAsConfig) { @@ -220,7 +234,8 @@ public class ConfiguredObjectToMapConverter final boolean useActualValues, final boolean inheritedActuals, final boolean includeSystemContext, - final boolean extractAsConfig) + final boolean extractAsConfig, + final int oversizeThreshold) { List> childTypes = new ArrayList<>(confObject.getModel().getChildTypes(clazz)); @@ -262,7 +277,8 @@ public class ConfiguredObjectToMapConverter useActualValues, inheritedActuals, includeSystemContext, - extractAsConfig)); + extractAsConfig, + oversizeThreshold)); } } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java index 01dd873aa5..9b384cd36f 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java @@ -43,6 +43,7 @@ import org.apache.qpid.server.model.ConfiguredAutomatedAttribute; import org.apache.qpid.server.model.ConfiguredObject; import org.apache.qpid.server.model.ConfiguredObjectAttribute; import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry; +import org.apache.qpid.server.model.ManagedObject; import org.apache.qpid.server.model.Model; public class MetaDataServlet extends AbstractServlet @@ -103,6 +104,18 @@ public class MetaDataServlet extends AbstractServlet typeDetails.put("attributes", processAttributes(type)); typeDetails.put("managedInterfaces", getManagedInterfaces(type)); typeDetails.put("validChildTypes", getValidChildTypes(type)); + ManagedObject annotation = type.getAnnotation(ManagedObject.class); + if(annotation != null) + { + if(annotation.deprecated()) + { + typeDetails.put("deprecated",true); + } + if(!"".equals(annotation.description() ) ) + { + typeDetails.put("description", annotation.description()); + } + } return typeDetails; } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java index 71ec6e786f..1ed0741a8e 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java @@ -56,6 +56,7 @@ public class RestServlet extends AbstractServlet private static final String HIERARCHY_INIT_PARAMETER = "hierarchy"; public static final String DEPTH_PARAM = "depth"; + public static final String OVERSIZE_PARAM = "oversize"; public static final String ACTUALS_PARAM = "actuals"; public static final String SORT_PARAM = "sort"; public static final String INCLUDE_SYS_CONTEXT_PARAM = "includeSysContext"; @@ -71,6 +72,7 @@ public class RestServlet extends AbstractServlet public static final Set RESERVED_PARAMS = new HashSet<>(Arrays.asList(DEPTH_PARAM, SORT_PARAM, + OVERSIZE_PARAM, ACTUALS_PARAM, INCLUDE_SYS_CONTEXT_PARAM, EXTRACT_INITIAL_CONFIG_PARAM, @@ -345,17 +347,20 @@ public class RestServlet extends AbstractServlet boolean actuals; boolean includeSystemContext; boolean inheritedActuals; + int oversizeThreshold; if(extractInitialConfig) { depth = Integer.MAX_VALUE; + oversizeThreshold = Integer.MAX_VALUE; actuals = true; includeSystemContext = false; inheritedActuals = false; } else { - depth = getDepthParameterFromRequest(request); + depth = getIntParameterFromRequest(request, DEPTH_PARAM, 1); + oversizeThreshold = getIntParameterFromRequest(request, OVERSIZE_PARAM, 120); actuals = getBooleanParameterFromRequest(request, ACTUALS_PARAM); includeSystemContext = getBooleanParameterFromRequest(request, INCLUDE_SYS_CONTEXT_PARAM); inheritedActuals = getBooleanParameterFromRequest(request, INHERITED_ACTUALS_PARAM); @@ -364,8 +369,9 @@ public class RestServlet extends AbstractServlet List> output = new ArrayList<>(); for(ConfiguredObject configuredObject : allObjects) { + output.add(_objectConverter.convertObjectToMap(configuredObject, getConfiguredClass(), - depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig)); + depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig, oversizeThreshold)); } @@ -679,22 +685,24 @@ public class RestServlet extends AbstractServlet response.setDateHeader ("Expires", 0); } - private int getDepthParameterFromRequest(HttpServletRequest request) + private int getIntParameterFromRequest(final HttpServletRequest request, + final String paramName, + final int defaultValue) { - int depth = 1; - final String depthString = request.getParameter(DEPTH_PARAM); - if(depthString!=null) + int intValue = defaultValue; + final String stringValue = request.getParameter(paramName); + if(stringValue!=null) { try { - depth = Integer.parseInt(depthString); + intValue = Integer.parseInt(stringValue); } catch (NumberFormatException e) { - LOGGER.warn("Could not parse " + depthString + " as integer"); + LOGGER.warn("Could not parse " + stringValue + " as integer for parameter " + paramName); } } - return depth; + return intValue; } private boolean getBooleanParameterFromRequest(HttpServletRequest request, final String paramName) diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index ac595154bb..f22135ef61 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -57,8 +57,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase when(_configuredObject.getStatistics()).thenReturn(Collections.singletonMap(statisticName, (Number) statisticValue)); - Map resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0, - false, false, false); + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 0, + false, + false, + false, + false, + 120); Map statsAsMap = (Map) resultMap.get(STATISTICS_MAP_KEY); assertNotNull("Statistics should be part of map", statsAsMap); assertEquals("Unexpected number of statistics", 1, statsAsMap.size()); @@ -71,8 +77,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase final String attributeValue = "value"; configureMockToReturnOneAttribute(_configuredObject, attributeName, attributeValue); - Map resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0, - false, false, false); + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 0, + false, + false, + false, + false, + 120); assertEquals("Unexpected number of attributes", 1, resultMap.size()); assertEquals("Unexpected attribute value", attributeValue, resultMap.get(attributeName)); } @@ -89,8 +101,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase configureMockToReturnOneAttribute(_configuredObject, attributeName, attributeValue); - Map resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 0, - false, false, false); + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 0, + false, + false, + false, + false, + 120); assertEquals("Unexpected number of attributes", 1, resultMap.size()); assertEquals("Unexpected attribute value", "attributeConfiguredObjectName", resultMap.get(attributeName)); } @@ -108,8 +126,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase configureMockToReturnOneAttribute(mockChild, childAttributeName, childAttributeValue); when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild)); - Map resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 1, - false, false, false); + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 120); assertEquals("Unexpected parent map size", 1, resultMap.size()); final List> childList = (List>) resultMap.get("testchilds"); @@ -146,8 +170,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild)); - Map resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 1, true, - false, false); + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + true, + false, + false, + false, + 120); assertEquals("Unexpected parent map size", 2, resultMap.size()); assertEquals("Incorrect context", resultMap.get(ConfiguredObject.CONTEXT), actualContext); List> childList = (List>) resultMap.get("testchilds"); @@ -158,7 +188,14 @@ public class ConfiguredObjectToMapConverterTest extends TestCase assertEquals("Unexpected child attribute value", childActualAttributeValue, childMap.get(childAttributeName)); - resultMap = _converter.convertObjectToMap(_configuredObject, ConfiguredObject.class, 1, false, false, false); + resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 120); assertEquals("Unexpected parent map size", 2, resultMap.size()); Map inheritedContext = new HashMap<>(); inheritedContext.put("key","value"); -- cgit v1.2.1 From 5adf702b6e2c66ad0f7098ed53fcbc7dd568b2d2 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 27 Jan 2015 22:23:04 +0000 Subject: QPID-6341 : Fix test git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655180 13f79535-47bb-0310-9956-ffa450edef68 --- .../servlet/rest/ConfiguredObjectToMapConverterTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index f22135ef61..8687330d49 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -20,6 +20,7 @@ package org.apache.qpid.server.management.plugin.servlet.rest; import static org.apache.qpid.server.management.plugin.servlet.rest.ConfiguredObjectToMapConverter.STATISTICS_MAP_KEY; +import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; @@ -37,6 +38,8 @@ import java.util.Set; import junit.framework.TestCase; import org.apache.qpid.server.model.ConfiguredObject; +import org.apache.qpid.server.model.ConfiguredObjectAttribute; +import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry; import org.apache.qpid.server.model.Model; public class ConfiguredObjectToMapConverterTest extends TestCase @@ -75,6 +78,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase { final String attributeName = "attribute"; final String attributeValue = "value"; + Model model = createTestModel(); + when(_configuredObject.getModel()).thenReturn(model); configureMockToReturnOneAttribute(_configuredObject, attributeName, attributeValue); Map resultMap = _converter.convertObjectToMap(_configuredObject, @@ -217,6 +222,11 @@ public class ConfiguredObjectToMapConverterTest extends TestCase final List> list = new ArrayList>(); list.add(TestChild.class); when(model.getChildTypes(ConfiguredObject.class)).thenReturn(list); + final ConfiguredObjectTypeRegistry typeRegistry = mock(ConfiguredObjectTypeRegistry.class); + final Map> attrTypes = mock(Map.class); + when(attrTypes.get(any(String.class))).thenReturn(mock(ConfiguredObjectAttribute.class)); + when(typeRegistry.getAttributeTypes(any(Class.class))).thenReturn(attrTypes); + when(model.getTypeRegistry()).thenReturn(typeRegistry); return model; } -- cgit v1.2.1 From 60089dfd1a12303822b3f82816905f0a29a6a746 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 27 Jan 2015 22:59:46 +0000 Subject: QPID-6342 : Fail fast when commands sent in wrong order git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655186 13f79535-47bb-0310-9956-ffa450edef68 --- .../server/protocol/v0_8/AMQProtocolEngine.java | 45 ++++++++++++++++++++-- .../protocol/v0_8/InternalTestProtocolSession.java | 6 +++ 2 files changed, 47 insertions(+), 4 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java index 4212505d75..3783cd70ac 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java @@ -96,6 +96,16 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQConnectionModel, ServerMethodProcessor { + enum ConnectionState + { + INIT, + AWAIT_START_OK, + AWAIT_SECURE_OK, + AWAIT_TUNE_OK, + AWAIT_OPEN, + OPEN + } + private static final Logger _logger = Logger.getLogger(AMQProtocolEngine.class); // to save boxing the channelId and looking up in a map... cache in an array the low numbered @@ -123,6 +133,8 @@ public class AMQProtocolEngine implements ServerProtocolEngine, private final AMQChannel[] _cachedChannels = new AMQChannel[CHANNEL_CACHE_SIZE + 1]; + private ConnectionState _state = ConnectionState.INIT; + /** * The channels that the latest call to {@link #received(ByteBuffer)} applied to. * Used so we know which channels we need to call {@link AMQChannel#receivedComplete()} @@ -469,16 +481,15 @@ public class AMQProtocolEngine implements ServerProtocolEngine, serverProperties, mechanisms.getBytes(), locales.getBytes()); - _sender.send(asByteBuffer(responseBody.generateFrame(0))); - _sender.flush(); + writeFrame(responseBody.generateFrame(0)); + _state = ConnectionState.AWAIT_START_OK; } catch (AMQException e) { _logger.info("Received unsupported protocol initiation for protocol version: " + getProtocolVersion()); - _sender.send(asByteBuffer(new ProtocolInitiation(ProtocolVersion.getLatestSupportedVersion()))); - _sender.flush(); + writeFrame(new ProtocolInitiation(ProtocolVersion.getLatestSupportedVersion())); } } @@ -1467,6 +1478,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, { _logger.debug("RECV[" + channelId + "] ChannelOpen"); } + assertState(ConnectionState.OPEN); // Protect the broker against out of order frame request. if (_virtualHost == null) @@ -1503,6 +1515,15 @@ public class AMQProtocolEngine implements ServerProtocolEngine, } } + void assertState(final ConnectionState requiredState) + { + if(_state != requiredState) + { + closeConnection(AMQConstant.COMMAND_INVALID, "Command Invalid", 0); + + } + } + @Override public void receiveConnectionOpen(AMQShortString virtualHostName, AMQShortString capabilities, @@ -1555,6 +1576,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQMethodBody responseBody = methodRegistry.createConnectionOpenOkBody(virtualHostName); writeFrame(responseBody.generateFrame(0)); + _state = ConnectionState.OPEN; } catch (AccessControlException e) { @@ -1625,6 +1647,8 @@ public class AMQProtocolEngine implements ServerProtocolEngine, _logger.debug("RECV ConnectionSecureOk[ response: ******** ] "); } + assertState(ConnectionState.AWAIT_SECURE_OK); + Broker broker = getBroker(); SubjectCreator subjectCreator = getSubjectCreator(); @@ -1665,6 +1689,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, frameMax, broker.getConnection_heartBeatDelay()); writeFrame(tuneBody.generateFrame(0)); + _state = ConnectionState.AWAIT_TUNE_OK; setAuthorizedSubject(authResult.getSubject()); disposeSaslServer(); break; @@ -1713,6 +1738,8 @@ public class AMQProtocolEngine implements ServerProtocolEngine, + " ]"); } + assertState(ConnectionState.AWAIT_START_OK); + Broker broker = getBroker(); _logger.info("SASL Mechanism selected: " + mechanism); @@ -1774,11 +1801,14 @@ public class AMQProtocolEngine implements ServerProtocolEngine, frameMax, broker.getConnection_heartBeatDelay()); writeFrame(tuneBody.generateFrame(0)); + _state = ConnectionState.AWAIT_TUNE_OK; break; case CONTINUE: ConnectionSecureBody secureBody = methodRegistry.createConnectionSecureBody(authResult.getChallenge()); writeFrame(secureBody.generateFrame(0)); + + _state = ConnectionState.AWAIT_SECURE_OK; } } } @@ -1797,6 +1827,8 @@ public class AMQProtocolEngine implements ServerProtocolEngine, _logger.debug("RECV ConnectionTuneOk[" +" channelMax: " + channelMax + " frameMax: " + frameMax + " heartbeat: " + heartbeat + " ]"); } + assertState(ConnectionState.AWAIT_TUNE_OK); + initHeartbeats(heartbeat); int brokerFrameMax = getBroker().getContextValue(Integer.class, Broker.BROKER_FRAME_SIZE); @@ -1828,7 +1860,10 @@ public class AMQProtocolEngine implements ServerProtocolEngine, setMaximumNumberOfChannels( ((channelMax == 0l) || (channelMax > 0xFFFFL)) ? 0xFFFFL : channelMax); + } + _state = ConnectionState.AWAIT_OPEN; + } public int getBinaryDataLimit() @@ -1928,6 +1963,8 @@ public class AMQProtocolEngine implements ServerProtocolEngine, @Override public ServerChannelMethodProcessor getChannelMethodProcessor(final int channelId) { + assertState(ConnectionState.OPEN); + ServerChannelMethodProcessor channelMethodProcessor = getChannel(channelId); if(channelMethodProcessor == null) { diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java index 7407890b58..6c6b746cf2 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/InternalTestProtocolSession.java @@ -275,6 +275,12 @@ public class InternalTestProtocolSession extends AMQProtocolEngine implements Pr } } + void assertState(final ConnectionState requiredState) + { + // no-op + } + + private static final AtomicInteger portNumber = new AtomicInteger(0); private static class TestNetworkConnection implements NetworkConnection -- cgit v1.2.1 From 8aee348935e03db6b183a04a0a4525f4b2a9b7de Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Wed, 28 Jan 2015 20:34:16 +0000 Subject: QPID-6345 : Allow enabled cipher suites to be configured git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655457 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/management/plugin/HttpManagement.java | 11 +++++++++++ .../apache/qpid/server/jmx/JMXManagedObjectRegistry.java | 2 +- .../qpid/server/jmx/QpidSslRMIServerSocketFactory.java | 13 +++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index 7b3e06f7fe..75f4e59242 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -352,6 +352,17 @@ public class HttpManagement extends AbstractPluginAdapter implem } SslContextFactory factory = new SslContextFactory(); factory.addExcludeProtocols(SSLUtil.SSLV3_PROTOCOL); + + if(port.getDisabledCipherSuites() != null) + { + factory.addExcludeCipherSuites(port.getDisabledCipherSuites().toArray(new String[port.getDisabledCipherSuites().size()])); + } + + if(port.getEnabledCipherSuites() != null && !port.getEnabledCipherSuites().isEmpty()) + { + factory.setIncludeCipherSuites(port.getEnabledCipherSuites().toArray(new String[port.getEnabledCipherSuites().size()])); + } + boolean needClientCert = port.getNeedClientAuth() || port.getWantClientAuth(); if (needClientCert && trustStores.isEmpty()) diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java index 78eba66158..8fc1ea1d8e 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java @@ -146,7 +146,7 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry //create the SSL RMI socket factories csf = new SslRMIClientSocketFactory(); - ssf = new QpidSslRMIServerSocketFactory(sslContext); + ssf = new QpidSslRMIServerSocketFactory(sslContext,_connectorPort.getEnabledCipherSuites(), _connectorPort.getDisabledCipherSuites()); } else { diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java index 5c15a40427..8af9d87672 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/QpidSslRMIServerSocketFactory.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; +import java.util.Collection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocket; @@ -35,6 +36,8 @@ import org.apache.qpid.transport.network.security.ssl.SSLUtil; public class QpidSslRMIServerSocketFactory extends SslRMIServerSocketFactory { private final SSLContext _sslContext; + private final Collection _enabledCipherSuites; + private final Collection _disabledCipherSuites; /** * SslRMIServerSocketFactory which creates the ServerSocket using the @@ -43,9 +46,12 @@ public class QpidSslRMIServerSocketFactory extends SslRMIServerSocketFactory * key store. * * @param sslContext previously created sslContext using the desired key store. - * @throws NullPointerException if the provided {@link SSLContext} is null. + * @param enabledCipherSuites + *@param disabledCipherSuites @throws NullPointerException if the provided {@link SSLContext} is null. */ - public QpidSslRMIServerSocketFactory(SSLContext sslContext) throws NullPointerException + public QpidSslRMIServerSocketFactory(SSLContext sslContext, + final Collection enabledCipherSuites, + final Collection disabledCipherSuites) throws NullPointerException { super(); @@ -55,6 +61,8 @@ public class QpidSslRMIServerSocketFactory extends SslRMIServerSocketFactory } _sslContext = sslContext; + _enabledCipherSuites = enabledCipherSuites; + _disabledCipherSuites = disabledCipherSuites; //TODO: settings + implementation for SSL client auth, updating equals and hashCode appropriately. } @@ -77,6 +85,7 @@ public class QpidSslRMIServerSocketFactory extends SslRMIServerSocketFactory true); sslSocket.setUseClientMode(false); SSLUtil.removeSSLv3Support(sslSocket); + SSLUtil.updateEnabledCipherSuites(sslSocket, _enabledCipherSuites, _disabledCipherSuites); return sslSocket; } }; -- cgit v1.2.1 From 119b5b63a4d508e4acf8ee5f67bd91df214a268f Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Thu, 29 Jan 2015 09:30:58 +0000 Subject: QPID-6346: [Java Broker] Add UI for uploading of pem/der keys and certificates for non-java keystores/truststores into web management console git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655560 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/resources/js/qpid/management/addStore.js | 1 + .../qpid/management/store/nonjavakeystore/add.js | 162 +++++++++++++++++++++ .../qpid/management/store/nonjavakeystore/show.js | 42 ++++++ .../qpid/management/store/nonjavatruststore/add.js | 162 +++++++++++++++++++++ .../management/store/nonjavatruststore/show.js | 66 +++++++++ .../java/resources/store/nonjavakeystore/add.html | 153 +++++++++++++++++++ .../java/resources/store/nonjavakeystore/show.html | 35 +++++ .../resources/store/nonjavatruststore/add.html | 67 +++++++++ .../resources/store/nonjavatruststore/show.html | 31 ++++ 9 files changed, 719 insertions(+) create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/show.html (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js index 98068f2376..c6ce218530 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js @@ -90,6 +90,7 @@ define(["dojo/_base/lang", } this.storeName.set("disabled", effectiveData == null ? false : true); this.storeType.set("disabled", effectiveData == null ? false : true); + this.dialog.set("title", effectiveData == null ? "Add Key Store" : "Edit Key Store - " + effectiveData.name) this.dialog.show(); }, _initFields:function(data) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js new file mode 100644 index 0000000000..7488ad93d6 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js @@ -0,0 +1,162 @@ +/* + * + * 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. + * + */ +define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"], + function (dom, query, array, registry, util, metadata) + { + var addKeyStore = + { + init: function() + { + }, + show: function(data) + { + var that=this; + util.parseHtmlIntoDiv(data.containerNode, "store/nonjavakeystore/add.html"); + + this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); + this.addButton = data.parent.addButton; + this.containerNode = data.containerNode; + + if (!window.FileReader) + { + this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; + this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); + } + + this._initUploadFields("privateKey", "private key"); + this._initUploadFields("certificate", "certificate"); + this._initUploadFields("intermediateCertificate", "intermediate certificate"); + }, + _initUploadFields: function(fieldName, description) + { + var that=this; + this[fieldName] = registry.byId("addStore." + fieldName); + this[fieldName + "UploadFields"] = dom.byId("addStore." + fieldName +"UploadFields"); + this[fieldName + "UploadContainer"] = dom.byId("addStore." + fieldName + "UploadContainer"); + this[fieldName + "UploadStatusContainer"] = dom.byId("addStore." + fieldName + "UploadStatusContainer"); + this[fieldName + "File"] = registry.byId("addStore." + fieldName + "File"); + this[fieldName + "FileClearButton"] = registry.byId("addStore." + fieldName + "FileClearButton"); + + // field to submit + this[fieldName + "Url"] = registry.byId("addStore." + fieldName + "Url"); + + if (window.FileReader) + { + this[fieldName + "Reader"] = new FileReader(); + this[fieldName + "Reader"].onload = function(evt) {that._uploadFileComplete(evt, fieldName);}; + this[fieldName + "Reader"].onerror = function(ex) {console.error("Failed to load " + description + " file", ex);}; + this[fieldName + "File"].on("change", function(selected){that._fileChanged(selected, fieldName)}); + this[fieldName + "FileClearButton"].on("click", function(event){that._fileClearButtonClicked(event, fieldName)}); + } + else + { + // Fall back for IE8/9 which do not support FileReader + this[fieldName + "UploadFields"].style.display = "none"; + } + + this[fieldName].on("blur", function(){that._pathChanged(fieldName)}); + }, + _fileChanged: function (evt, fieldName) + { + var file = this[fieldName + "File"].domNode.children[0].files[0]; + + this[fieldName + "UploadContainer"].innerHTML = file.name; + this[fieldName + "UploadStatusContainer"].className = "loadingIcon"; + + console.log("Beginning to read file " + file.name + " for " + fieldName ); + this[fieldName + "Reader"].readAsDataURL(file); + }, + _uploadFileComplete: function(evt, fieldName) + { + var reader = evt.target; + var result = reader.result; + console.log(fieldName + " file read complete, contents " + result); + + this[fieldName + "UploadStatusContainer"].className = "loadedIcon"; + + this[fieldName].set("value", ""); + this[fieldName].setDisabled(true); + this[fieldName].set("required", false); + + this[fieldName + "FileClearButton"].setDisabled(false); + + this[fieldName + "Url"].set("value", result); + }, + _fileClearButtonClicked: function(event, fieldName) + { + this[fieldName + "File"].reset(); + this[fieldName + "UploadStatusContainer"].className = ""; + this[fieldName + "UploadContainer"].innerHTML = ""; + this[fieldName].set("required", true); + this[fieldName].setDisabled(false); + this[fieldName + "FileClearButton"].setDisabled(true); + + this[fieldName + "Url"].set("value", ""); + }, + _pathChanged: function(fieldName) + { + var serverPathValue = this[fieldName].get("value"); + this[fieldName + "Url"].set("value", serverPathValue); + }, + update: function(effectiveData) + { + var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; + var widgets = registry.findWidgets(this.containerNode); + var that=this; + array.forEach(widgets, function(item) + { + var name = item.id.replace("addStore.",""); + var val = effectiveData[name]; + item.set("value", val); + + if (name.indexOf("Url") != -1) + { + var isDataUrl = val && val.indexOf("data:") == 0; + var fieldName = name.substring(0, name.length - 3); + if (isDataUrl) + { + that[fieldName + "UploadStatusContainer"].className = "loadedIcon"; + that[fieldName + "UploadContainer"].innerHTML = "uploaded.jks"; + that[fieldName].setDisabled(true); + that[fieldName].set("required", false); + that[fieldName + "FileClearButton"].setDisabled(false); + } + else + { + that[fieldName].set("value", val); + } + } + }); + + } + }; + + try + { + addKeyStore.init(); + } + catch(e) + { + console.warn(e); + } + return addKeyStore; + } +); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js new file mode 100644 index 0000000000..1985410e57 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js @@ -0,0 +1,42 @@ +/* + * 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. + */ + +define(["qpid/common/util", "qpid/common/metadata", "dojo/domReady!"], + function (util, metadata) + { + + function NonJavaKeyStore(data) + { + this.fields = []; + var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; + for(var name in attributes) + { + this.fields.push(name); + } + util.buildUI(data.containerNode, data.parent, "store/nonjavakeystore/show.html", this.fields, this); + } + + NonJavaKeyStore.prototype.update = function(data) + { + util.updateUI(data, this.fields, this); + } + + return NonJavaKeyStore; + } +); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js new file mode 100644 index 0000000000..2cff365f60 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js @@ -0,0 +1,162 @@ +/* + * + * 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. + * + */ +define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"], + function (dom, query, array, registry, util, metadata) + { + var addKeyStore = + { + init: function() + { + }, + show: function(data) + { + var that=this; + util.parseHtmlIntoDiv(data.containerNode, "store/nonjavatruststore/add.html"); + + this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); + this.addButton = data.parent.addButton; + this.containerNode = data.containerNode; + + if (!window.FileReader) + { + this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; + this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); + } + + this._initUploadFields("certificates", "certificates"); + }, + _initUploadFields: function(fieldName, description) + { + var that=this; + this[fieldName] = registry.byId("addStore." + fieldName); + this[fieldName + "UploadFields"] = dom.byId("addStore." + fieldName +"UploadFields"); + this[fieldName + "UploadContainer"] = dom.byId("addStore." + fieldName + "UploadContainer"); + this[fieldName + "UploadStatusContainer"] = dom.byId("addStore." + fieldName + "UploadStatusContainer"); + this[fieldName + "File"] = registry.byId("addStore." + fieldName + "File"); + this[fieldName + "FileClearButton"] = registry.byId("addStore." + fieldName + "FileClearButton"); + + // field to submit + this[fieldName + "Url"] = registry.byId("addStore." + fieldName + "Url"); + + if (window.FileReader) + { + this[fieldName + "Reader"] = new FileReader(); + this[fieldName + "Reader"].onload = function(evt) {that._uploadFileComplete(evt, fieldName);}; + this[fieldName + "Reader"].onerror = function(ex) {console.error("Failed to load " + description + " file", ex);}; + this[fieldName + "File"].on("change", function(selected){that._fileChanged(selected, fieldName)}); + this[fieldName + "FileClearButton"].on("click", function(event){that._fileClearButtonClicked(event, fieldName)}); + } + else + { + // Fall back for IE8/9 which do not support FileReader + this[fieldName + "UploadFields"].style.display = "none"; + } + + this[fieldName].on("blur", function(){that._pathChanged(fieldName)}); + }, + _fileChanged: function (evt, fieldName) + { + var file = this[fieldName + "File"].domNode.children[0].files[0]; + + this[fieldName + "UploadContainer"].innerHTML = file.name; + this[fieldName + "UploadStatusContainer"].className = "loadingIcon"; + + console.log("Beginning to read file " + file.name + " for " + fieldName ); + this[fieldName + "Reader"].readAsDataURL(file); + }, + _uploadFileComplete: function(evt, fieldName) + { + var reader = evt.target; + var result = reader.result; + console.log(fieldName + " file read complete, contents " + result); + + // it is not clear the purpose of this operation + //this.addButton.setDisabled(false); + this[fieldName + "UploadStatusContainer"].className = "loadedIcon"; + + this[fieldName].set("value", ""); + this[fieldName].setDisabled(true); + this[fieldName].set("required", false); + + this[fieldName + "FileClearButton"].setDisabled(false); + + this[fieldName + "Url"].set("value", result); + }, + _fileClearButtonClicked: function(event, fieldName) + { + this[fieldName + "File"].reset(); + this[fieldName + "UploadStatusContainer"].className = ""; + this[fieldName + "UploadContainer"].innerHTML = ""; + this[fieldName].set("required", true); + this[fieldName].setDisabled(false); + this[fieldName + "FileClearButton"].setDisabled(true); + + this[fieldName + "Url"].set("value", ""); + }, + _pathChanged: function(fieldName) + { + var serverPathValue = this[fieldName].get("value"); + this[fieldName + "Url"].set("value", serverPathValue); + }, + update: function(effectiveData) + { + var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes; + var widgets = registry.findWidgets(this.containerNode); + var that=this; + array.forEach(widgets, function(item) + { + var name = item.id.replace("addStore.",""); + var val = effectiveData[name]; + item.set("value", val); + + if (name.indexOf("Url") != -1) + { + var isDataUrl = val && val.indexOf("data:") == 0; + var fieldName = name.substring(0, name.length - 3); + if (isDataUrl) + { + that[fieldName + "UploadStatusContainer"].className = "loadedIcon"; + that[fieldName + "UploadContainer"].innerHTML = "uploaded.jks"; + that[fieldName].setDisabled(true); + that[fieldName].set("required", false); + that[fieldName + "FileClearButton"].setDisabled(false); + } + else + { + that[fieldName].set("value", val); + } + } + }); + + } + }; + + try + { + addKeyStore.init(); + } + catch(e) + { + console.warn(e); + } + return addKeyStore; + } +); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js new file mode 100644 index 0000000000..ac210ea4be --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js @@ -0,0 +1,66 @@ +/* + * 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. + */ + +define(["dojo/query", + "qpid/common/util", + "qpid/common/metadata", + "dojox/grid/DataGrid", + "qpid/common/UpdatableStore", + "qpid/management/UserPreferences", + "dojo/domReady!"], + function (query, util, metadata, DataGrid, UpdatableStore, UserPreferences) + { + + + function NonJavaTrustStore(data) + { + this.fields = []; + var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes; + for(var name in attributes) + { + this.fields.push(name); + } + util.buildUI(data.containerNode, data.parent, "store/nonjavatruststore/show.html", this.fields, this); + var gridNode = query(".details", data.containerNode)[0] + this.detailsGrid = new UpdatableStore([], + gridNode, + [ + { name: 'Subject', field: 'SUBJECT_NAME', width: '25%' }, + { name: 'Issuer', field: 'ISSUER_NAME', width: '25%' }, + { name: 'Valid from', field: 'VALID_START', width: '25%', formatter: function(value){ return value ? UserPreferences.formatDateTime(value) : "";}}, + { name: 'Valid to', field: 'VALID_END', width: '25%', formatter: function(value){ return value ? UserPreferences.formatDateTime(value) : "";}} + ]); + } + + NonJavaTrustStore.prototype.update = function(data) + { + util.updateUI(data, this.fields, this); + var details = data.certificateDetails; + for(var i=0; i < details.length; i++) + { + details[i].id = details[i].SUBJECT_NAME + "_" + details[i].ISSUER_NAME + "_" + details[i].VALID_START + "_" + details[i].VALID_END; + } + this.detailsGrid.grid.beginUpdate(); + this.detailsGrid.update(details); + this.detailsGrid.grid.endUpdate(); + } + + return NonJavaTrustStore; + } +); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html new file mode 100644 index 0000000000..5272537bdf --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html @@ -0,0 +1,153 @@ + + + +
+ + +
+
Private Key URL or Path*:
+
+ + + + + + +
+ +
+ + +
+ +
+ + +
+
+
+
+
+ +
+
Certificate URL or Path*:
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
+
+ +
+
Intermediate Certificate URL or Path:
+
+ + + + +
+ +
+
+ + +
+ +
+ + +
+
+
+
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html new file mode 100644 index 0000000000..e0dd896d7b --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html @@ -0,0 +1,35 @@ + + +
+
+
Private Key:
+
+
+
+
Certificate:
+
+
+
+
Intermediate Certificate:
+
+
+
+
+ diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html new file mode 100644 index 0000000000..9de25877cb --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html @@ -0,0 +1,67 @@ + + + +
+ + +
+
Certificate URL or Path*:
+
+ + + + + + +
+
+ + +
+ +
+ + +
+
+
+
+
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/show.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/show.html new file mode 100644 index 0000000000..b45f457e41 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/show.html @@ -0,0 +1,31 @@ + + +
+
+
Certificate:
+
+
+
+
+
+
+
+
+ -- cgit v1.2.1 From b4d09a6ec40150e13ecb116c24a68150077a325a Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Fri, 30 Jan 2015 10:12:07 +0000 Subject: QPID-6346: [Java Broker] Encapsulate duplicate UI for uploading of broker resources into widget and use the widget in keystores and truststore UI git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655974 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/resources/common/ResourceWidget.html | 48 ++++++ .../resources/js/qpid/common/FormWidgetMixin.js | 102 ++++++++++++ .../resources/js/qpid/common/ResourceWidget.js | 173 +++++++++++++++++++++ .../java/resources/js/qpid/management/addStore.js | 2 +- .../js/qpid/management/store/filekeystore/add.js | 96 ++---------- .../js/qpid/management/store/filetruststore/add.js | 94 ++--------- .../qpid/management/store/nonjavakeystore/add.js | 96 +----------- .../qpid/management/store/nonjavatruststore/add.js | 92 ----------- .../java/resources/store/filekeystore/add.html | 34 +--- .../java/resources/store/filetruststore/add.html | 31 +--- .../java/resources/store/nonjavakeystore/add.html | 117 ++------------ .../resources/store/nonjavatruststore/add.html | 35 +---- 12 files changed, 371 insertions(+), 549 deletions(-) create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/common/ResourceWidget.html create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/FormWidgetMixin.js create mode 100644 qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ResourceWidget.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ResourceWidget.html new file mode 100644 index 0000000000..e47fa6ca6d --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/common/ResourceWidget.html @@ -0,0 +1,48 @@ + + + diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/FormWidgetMixin.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/FormWidgetMixin.js new file mode 100644 index 0000000000..11160e9608 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/FormWidgetMixin.js @@ -0,0 +1,102 @@ +/* + * + * 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. + * + */ +define(["dojo/_base/declare"], function(declare) +{ + return declare("qpid.common.FormWidgetMixin", null, + { + name: "", + value: "", + _onChangeActive: false, + + compare: function(val1, val2) + { + if(typeof val1 == "number" && typeof val2 == "number") + { + return (isNaN(val1) && isNaN(val2)) ? 0 : val1 - val2; + } + else if(val1 > val2) + { + return 1; + } + else if(val1 < val2) + { + return -1; + } + else + { + return 0; + } + }, + onChange: function() + { + }, + _setValueAttr: function(newValue, priorityChange) + { + this._handleOnChange(newValue, priorityChange); + }, + _handleOnChange: function(newValue, priorityChange) + { + this._set("value", newValue); + if(this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)) + { + this._resetValue = this._lastValueReported = newValue; + } + this._pendingOnChange = this._pendingOnChange || (typeof newValue != typeof this._lastValueReported) + || (this.compare(newValue, this._lastValueReported) != 0); + if(( priorityChange || priorityChange === undefined) && this._pendingOnChange) + { + this._lastValueReported = newValue; + this._pendingOnChange = false; + if(this._onChangeActive) + { + if(this._onChangeHandle) + { + this._onChangeHandle.remove(); + } + this._onChangeHandle = this.defer(function() { this._onChangeHandle = null; this.onChange(newValue); }); + } + } + }, + create: function() + { + this.inherited(arguments); + this._onChangeActive = true; + }, + destroy: function() + { + if(this._onChangeHandle) + { + this._onChangeHandle.remove(); + this.onChange(this._lastValueReported); + } + this.inherited(arguments); + }, + undo: function() + { + this._setValueAttr(this._lastValueReported, false); + }, + reset: function() + { + this._hasBeenBlurred = false; + this._setValueAttr(this._resetValue, true); + } + }); +}); \ No newline at end of file diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js new file mode 100644 index 0000000000..0082c7524f --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js @@ -0,0 +1,173 @@ +/* + * + * 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. + * + */ +define([ + "dojo/_base/declare", + "dojo/_base/array", + "dojo/_base/lang", + "qpid/common/util", + "dijit/_Widget", + "dijit/_TemplatedMixin", + "dijit/_WidgetsInTemplateMixin", + "qpid/common/FormWidgetMixin", + "dojo/text!common/ResourceWidget.html", + "dojox/html/entities", + "dojox/form/Uploader", + "dijit/form/Button", + "dijit/form/ValidationTextBox", + "dojox/validate/us", + "dojox/validate/web", + "dojo/domReady!"], +function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, FormWidgetMixin, template, entities) +{ + + return declare("qpid.common.ResourceWidget", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, FormWidgetMixin], + { + templateString: template, + fileReaderSupported: window.FileReader ? true : false, + displayWarningWhenFileReaderUnsupported: false, + isDebug: false, + + buildRendering: function() + { + //Strip out the apache comment header from the template html as comments unsupported. + this.templateString = this.templateString.replace(//g, ""); + this.inherited(arguments); + }, + postCreate: function() + { + this.inherited(arguments); + + if(this._resetValue === undefined) + { + this._lastValueReported = this._resetValue = this.value; + } + + var that = this; + + if (this.fileReaderSupported) + { + this.fileReader= new FileReader(); + this.fileReader.onload = function(evt) {that._uploadFileComplete(evt);}; + this.fileReader.onerror = function(ex) {console.error("Failed to load file for " + this.name, ex);}; + this.uploader.on("change", function(selected){that._fileChanged(selected)}); + this.clearButton.on("click", function(event){that._fileClearButtonClicked(event)}); + } + else + { + // Fall back for IE8/9 which do not support FileReader + this.uploadFields.style.display = "none"; + if (displayWarningWhenFileReaderUnsupported) + { + this.unsupportedWarning.className = this.unsupportedWarning.className.replace("hidden", ""); + } + } + this.resourceLocation.on("blur", function(){that._pathChanged()}); + this._originalValue = arguments.value; + if (this.placeHolder) + { + this.resourceLocation.set("placeHolder", this.placeHolder); + } + if (this.promptMessage) + { + this.resourceLocation.set("promptMessage", this.promptMessage); + } + if (this.title) + { + this.resourceLocation.set("title", this.title); + } + this.uploadData.style.display = "none"; + }, + startup: function() + { + if (this.fileReaderSupported) + { + this.uploader.startup(); + } + }, + _fileChanged: function (evt) + { + var file = this.uploader.domNode.children[0].files[0]; + this.selectedFileName = file.name; + this.selectedFile.innerHTML = file.name; + this.selectedFileStatus.className = "loadingIcon"; + if (this.isDebug) + { + this._log("Beginning to read file " + file.name + " for " + this.name); + } + this.fileReader.readAsDataURL(file); + }, + _uploadFileComplete: function(evt) + { + var reader = evt.target; + var result = reader.result; + if (this.isDebug) + { + this._log(this.name + " file read complete, contents " + result); + } + this.set("value", result); + }, + _fileClearButtonClicked: function(event) + { + this.uploader.reset(); + this.set("value", this._resetValue); + }, + _pathChanged: function() + { + var serverPathValue = this.resourceLocation.get("value") || this._resetValue; + this.set("value", serverPathValue); + }, + _setValueAttr: function(newValue, priorityChange) + { + var isDataUrl = newValue && newValue.indexOf("data:") == 0; + if (isDataUrl) + { + this.uploadData.style.display = "block"; + this.selectedFileStatus.className = "loadedIcon"; + this.selectedFile.innerHTML = this.selectedFileName || "uploaded data"; + this.resourceLocation.set("value", ""); + this.resourceLocation.setDisabled(true); + this.resourceLocation.set("required", false); + this.clearButton.setDisabled(false); + this.selectedFileStatus.className = "loadedIcon"; + } + else + { + this.resourceLocation.set("value", newValue); + this.selectedFileName = null; + this.selectedFileStatus.className = ""; + this.selectedFile.innerHTML = ""; + this.resourceLocation.set("required", true); + this.resourceLocation.setDisabled(false); + this.clearButton.setDisabled(true); + this.uploadData.style.display = "none"; + } + this.inherited(arguments); + }, + _log: function(message) + { + if (this.isDebug) + { + console.log(message); + } + } + } + ); +}); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js index c6ce218530..5a42f12870 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js @@ -80,11 +80,11 @@ define(["dojo/_base/lang", }, show: function(effectiveData) { + this.effectiveData = effectiveData; this.storeForm.reset(); if (effectiveData) { - this.effectiveData = effectiveData; this._destroyTypeFields(this.containerNode); this._initFields(effectiveData); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js index b158b9e051..feb7da1864 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js @@ -25,8 +25,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm { init: function() { - // Readers are HTML5 - this.reader = window.FileReader ? new FileReader() : undefined; }, show: function(data) { @@ -34,79 +32,16 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm util.parseHtmlIntoDiv(data.containerNode, "store/filekeystore/add.html"); this.containerNode = data.containerNode; - this.keyStoreServerPath = registry.byId("addStore.serverPath"); - this.keyStoreUploadFields = dom.byId("addStore.uploadFields"); - this.keyStoreSelectedFileContainer = dom.byId("addStore.selectedFile"); - this.keyStoreSelectedFileStatusContainer = dom.byId("addStore.selectedFileStatus"); - this.keyStoreFile = registry.byId("addStore.file"); - this.keyStoreFileClearButton = registry.byId("addStore.fileClearButton"); - this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); - //Only submitted field - this.keyStorePath = registry.byId("addStore.path"); + this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); this.addButton = data.parent.addButton; - if (this.reader) - { - this.reader.onload = function(evt) {that._keyStoreUploadFileComplete(evt);}; - this.reader.onerror = function(ex) {console.error("Failed to load key store file", ex);}; - this.keyStoreFile.on("change", function(selected){that._keyStoreFileChanged(selected)}); - this.keyStoreFileClearButton.on("click", function(event){that._keyStoreFileClearButtonClicked(event)}); - } - else + if (!window.FileReader) { - // Fall back for IE8/9 which do not support FileReader - this.keyStoreUploadFields.style.display = "none"; this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); } - - this.keyStoreServerPath.on("blur", function(){that._keyStoreServerPathChanged()}); - }, - _keyStoreFileChanged: function (evt) - { - // We only ever expect a single file - var file = this.keyStoreFile.domNode.children[0].files[0]; - - this.addButton.setDisabled(true); - this.keyStoreSelectedFileContainer.innerHTML = file.name; - this.keyStoreSelectedFileStatusContainer.className = "loadingIcon"; - - console.log("Beginning to read key store file " + file.name); - this.reader.readAsDataURL(file); - }, - _keyStoreUploadFileComplete: function(evt) - { - var reader = evt.target; - var result = reader.result; - console.log("Key store file read complete, contents " + result); - this.addButton.setDisabled(false); - this.keyStoreSelectedFileStatusContainer.className = "loadedIcon"; - - this.keyStoreServerPath.set("value", ""); - this.keyStoreServerPath.setDisabled(true); - this.keyStoreServerPath.set("required", false); - - this.keyStoreFileClearButton.setDisabled(false); - - this.keyStorePath.set("value", result); - }, - _keyStoreFileClearButtonClicked: function(event) - { - this.keyStoreFile.reset(); - this.keyStoreSelectedFileStatusContainer.className = ""; - this.keyStoreSelectedFileContainer.innerHTML = ""; - this.keyStoreServerPath.set("required", true); - this.keyStoreServerPath.setDisabled(false); - this.keyStoreFileClearButton.setDisabled(true); - - this.keyStorePath.set("value", ""); - }, - _keyStoreServerPathChanged: function() - { - var serverPathValue = this.keyStoreServerPath.get("value"); - this.keyStorePath.set("value", serverPathValue); }, update: function(effectiveData) { @@ -115,27 +50,18 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm array.forEach(widgets, function(item) { var name = item.id.replace("addStore.",""); - if (name in attributes && item.type != "password") + if (name in attributes ) { - item.set("value", effectiveData[name]); + if (item.type != "password") + { + item.set("value", effectiveData[name]); + } + else + { + item.set("required", effectiveData?false:true); + } } }); - - var keyStorePathValue = effectiveData["path"]; - var isDataUrl = keyStorePathValue.indexOf("data:") == 0; - - if (isDataUrl) - { - this.keyStoreSelectedFileStatusContainer.className = "loadedIcon"; - this.keyStoreSelectedFileContainer.innerHTML = "uploaded.jks"; - this.keyStoreServerPath.setDisabled(true); - this.keyStoreServerPath.set("required", false); - this.keyStoreFileClearButton.setDisabled(false); - } - else - { - this.keyStoreServerPath.set("value", keyStorePathValue); - } } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js index 9d113a9d9e..b55affb33b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js @@ -25,8 +25,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm { init: function() { - // Readers are HTML5 - this.reader = window.FileReader ? new FileReader() : undefined; }, show: function(data) { @@ -34,79 +32,17 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm util.parseHtmlIntoDiv(data.containerNode, "store/filetruststore/add.html"); this.containerNode = data.containerNode; - this.keyStoreServerPath = registry.byId("addStore.serverPath"); - this.keyStoreUploadFields = dom.byId("addStore.uploadFields"); - this.keyStoreSelectedFileContainer = dom.byId("addStore.selectedFile"); - this.keyStoreSelectedFileStatusContainer = dom.byId("addStore.selectedFileStatus"); - this.keyStoreFile = registry.byId("addStore.file"); - this.keyStoreFileClearButton = registry.byId("addStore.fileClearButton"); - this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); - //Only submitted field - this.keyStorePath = registry.byId("addStore.path"); + this.keyStoreOldBrowserWarning = dom.byId("addStore.oldBrowserWarning"); this.addButton = data.parent.addButton; - if (this.reader) - { - this.reader.onload = function(evt) {that._keyStoreUploadFileComplete(evt);}; - this.reader.onerror = function(ex) {console.error("Failed to load trust store file", ex);}; - this.keyStoreFile.on("change", function(selected){that._keyStoreFileChanged(selected)}); - this.keyStoreFileClearButton.on("click", function(event){that._keyStoreFileClearButtonClicked(event)}); - } - else + if (!window.FileReader) { // Fall back for IE8/9 which do not support FileReader - this.keyStoreUploadFields.style.display = "none"; this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); } - - this.keyStoreServerPath.on("blur", function(){that._keyStoreServerPathChanged()}); - }, - _keyStoreFileChanged: function (evt) - { - // We only ever expect a single file - var file = this.keyStoreFile.domNode.children[0].files[0]; - - this.addButton.setDisabled(true); - this.keyStoreSelectedFileContainer.innerHTML = file.name; - this.keyStoreSelectedFileStatusContainer.className = "loadingIcon"; - - console.log("Beginning to read trust store file " + file.name); - this.reader.readAsDataURL(file); - }, - _keyStoreUploadFileComplete: function(evt) - { - var reader = evt.target; - var result = reader.result; - console.log("Trust store file read complete, contents " + result); - this.addButton.setDisabled(false); - this.keyStoreSelectedFileStatusContainer.className = "loadedIcon"; - - this.keyStoreServerPath.set("value", ""); - this.keyStoreServerPath.setDisabled(true); - this.keyStoreServerPath.set("required", false); - - this.keyStoreFileClearButton.setDisabled(false); - - this.keyStorePath.set("value", result); - }, - _keyStoreFileClearButtonClicked: function(event) - { - this.keyStoreFile.reset(); - this.keyStoreSelectedFileStatusContainer.className = ""; - this.keyStoreSelectedFileContainer.innerHTML = ""; - this.keyStoreServerPath.set("required", true); - this.keyStoreServerPath.setDisabled(false); - this.keyStoreFileClearButton.setDisabled(true); - - this.keyStorePath.set("value", ""); - }, - _keyStoreServerPathChanged: function() - { - var serverPathValue = this.keyStoreServerPath.get("value"); - this.keyStorePath.set("value", serverPathValue); }, update: function(effectiveData) { @@ -115,27 +51,19 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm array.forEach(widgets, function(item) { var name = item.id.replace("addStore.",""); - if (name in attributes && item.type != "password") + if (name in attributes ) { - item.set("value", effectiveData[name]); + if (item.type != "password") + { + item.set("value", effectiveData[name]); + } + else + { + item.set("required", effectiveData?false:true); + } } }); - var keyStorePathValue = effectiveData["path"]; - var isDataUrl = keyStorePathValue.indexOf("data:") == 0; - - if (isDataUrl) - { - this.keyStoreSelectedFileStatusContainer.className = "loadedIcon"; - this.keyStoreSelectedFileContainer.innerHTML = "uploaded.jks"; - this.keyStoreServerPath.setDisabled(true); - this.keyStoreServerPath.set("required", false); - this.keyStoreFileClearButton.setDisabled(false); - } - else - { - this.keyStoreServerPath.set("value", keyStorePathValue); - } } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js index 7488ad93d6..989af03832 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js @@ -18,7 +18,7 @@ * under the License. * */ -define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata"], +define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/common/util", "qpid/common/metadata", "qpid/common/ResourceWidget"], function (dom, query, array, registry, util, metadata) { var addKeyStore = @@ -40,81 +40,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); } - - this._initUploadFields("privateKey", "private key"); - this._initUploadFields("certificate", "certificate"); - this._initUploadFields("intermediateCertificate", "intermediate certificate"); - }, - _initUploadFields: function(fieldName, description) - { - var that=this; - this[fieldName] = registry.byId("addStore." + fieldName); - this[fieldName + "UploadFields"] = dom.byId("addStore." + fieldName +"UploadFields"); - this[fieldName + "UploadContainer"] = dom.byId("addStore." + fieldName + "UploadContainer"); - this[fieldName + "UploadStatusContainer"] = dom.byId("addStore." + fieldName + "UploadStatusContainer"); - this[fieldName + "File"] = registry.byId("addStore." + fieldName + "File"); - this[fieldName + "FileClearButton"] = registry.byId("addStore." + fieldName + "FileClearButton"); - - // field to submit - this[fieldName + "Url"] = registry.byId("addStore." + fieldName + "Url"); - - if (window.FileReader) - { - this[fieldName + "Reader"] = new FileReader(); - this[fieldName + "Reader"].onload = function(evt) {that._uploadFileComplete(evt, fieldName);}; - this[fieldName + "Reader"].onerror = function(ex) {console.error("Failed to load " + description + " file", ex);}; - this[fieldName + "File"].on("change", function(selected){that._fileChanged(selected, fieldName)}); - this[fieldName + "FileClearButton"].on("click", function(event){that._fileClearButtonClicked(event, fieldName)}); - } - else - { - // Fall back for IE8/9 which do not support FileReader - this[fieldName + "UploadFields"].style.display = "none"; - } - - this[fieldName].on("blur", function(){that._pathChanged(fieldName)}); - }, - _fileChanged: function (evt, fieldName) - { - var file = this[fieldName + "File"].domNode.children[0].files[0]; - - this[fieldName + "UploadContainer"].innerHTML = file.name; - this[fieldName + "UploadStatusContainer"].className = "loadingIcon"; - - console.log("Beginning to read file " + file.name + " for " + fieldName ); - this[fieldName + "Reader"].readAsDataURL(file); - }, - _uploadFileComplete: function(evt, fieldName) - { - var reader = evt.target; - var result = reader.result; - console.log(fieldName + " file read complete, contents " + result); - - this[fieldName + "UploadStatusContainer"].className = "loadedIcon"; - - this[fieldName].set("value", ""); - this[fieldName].setDisabled(true); - this[fieldName].set("required", false); - - this[fieldName + "FileClearButton"].setDisabled(false); - - this[fieldName + "Url"].set("value", result); - }, - _fileClearButtonClicked: function(event, fieldName) - { - this[fieldName + "File"].reset(); - this[fieldName + "UploadStatusContainer"].className = ""; - this[fieldName + "UploadContainer"].innerHTML = ""; - this[fieldName].set("required", true); - this[fieldName].setDisabled(false); - this[fieldName + "FileClearButton"].setDisabled(true); - - this[fieldName + "Url"].set("value", ""); - }, - _pathChanged: function(fieldName) - { - var serverPathValue = this[fieldName].get("value"); - this[fieldName + "Url"].set("value", serverPathValue); }, update: function(effectiveData) { @@ -126,26 +51,7 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm var name = item.id.replace("addStore.",""); var val = effectiveData[name]; item.set("value", val); - - if (name.indexOf("Url") != -1) - { - var isDataUrl = val && val.indexOf("data:") == 0; - var fieldName = name.substring(0, name.length - 3); - if (isDataUrl) - { - that[fieldName + "UploadStatusContainer"].className = "loadedIcon"; - that[fieldName + "UploadContainer"].innerHTML = "uploaded.jks"; - that[fieldName].setDisabled(true); - that[fieldName].set("required", false); - that[fieldName + "FileClearButton"].setDisabled(false); - } - else - { - that[fieldName].set("value", val); - } - } }); - } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js index 2cff365f60..15926d1832 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js @@ -40,81 +40,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm this.keyStoreOldBrowserWarning.innerHTML = "File upload requires a more recent browser with HTML5 support"; this.keyStoreOldBrowserWarning.className = this.keyStoreOldBrowserWarning.className.replace("hidden", ""); } - - this._initUploadFields("certificates", "certificates"); - }, - _initUploadFields: function(fieldName, description) - { - var that=this; - this[fieldName] = registry.byId("addStore." + fieldName); - this[fieldName + "UploadFields"] = dom.byId("addStore." + fieldName +"UploadFields"); - this[fieldName + "UploadContainer"] = dom.byId("addStore." + fieldName + "UploadContainer"); - this[fieldName + "UploadStatusContainer"] = dom.byId("addStore." + fieldName + "UploadStatusContainer"); - this[fieldName + "File"] = registry.byId("addStore." + fieldName + "File"); - this[fieldName + "FileClearButton"] = registry.byId("addStore." + fieldName + "FileClearButton"); - - // field to submit - this[fieldName + "Url"] = registry.byId("addStore." + fieldName + "Url"); - - if (window.FileReader) - { - this[fieldName + "Reader"] = new FileReader(); - this[fieldName + "Reader"].onload = function(evt) {that._uploadFileComplete(evt, fieldName);}; - this[fieldName + "Reader"].onerror = function(ex) {console.error("Failed to load " + description + " file", ex);}; - this[fieldName + "File"].on("change", function(selected){that._fileChanged(selected, fieldName)}); - this[fieldName + "FileClearButton"].on("click", function(event){that._fileClearButtonClicked(event, fieldName)}); - } - else - { - // Fall back for IE8/9 which do not support FileReader - this[fieldName + "UploadFields"].style.display = "none"; - } - - this[fieldName].on("blur", function(){that._pathChanged(fieldName)}); - }, - _fileChanged: function (evt, fieldName) - { - var file = this[fieldName + "File"].domNode.children[0].files[0]; - - this[fieldName + "UploadContainer"].innerHTML = file.name; - this[fieldName + "UploadStatusContainer"].className = "loadingIcon"; - - console.log("Beginning to read file " + file.name + " for " + fieldName ); - this[fieldName + "Reader"].readAsDataURL(file); - }, - _uploadFileComplete: function(evt, fieldName) - { - var reader = evt.target; - var result = reader.result; - console.log(fieldName + " file read complete, contents " + result); - - // it is not clear the purpose of this operation - //this.addButton.setDisabled(false); - this[fieldName + "UploadStatusContainer"].className = "loadedIcon"; - - this[fieldName].set("value", ""); - this[fieldName].setDisabled(true); - this[fieldName].set("required", false); - - this[fieldName + "FileClearButton"].setDisabled(false); - - this[fieldName + "Url"].set("value", result); - }, - _fileClearButtonClicked: function(event, fieldName) - { - this[fieldName + "File"].reset(); - this[fieldName + "UploadStatusContainer"].className = ""; - this[fieldName + "UploadContainer"].innerHTML = ""; - this[fieldName].set("required", true); - this[fieldName].setDisabled(false); - this[fieldName + "FileClearButton"].setDisabled(true); - - this[fieldName + "Url"].set("value", ""); - }, - _pathChanged: function(fieldName) - { - var serverPathValue = this[fieldName].get("value"); - this[fieldName + "Url"].set("value", serverPathValue); }, update: function(effectiveData) { @@ -127,23 +52,6 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm var val = effectiveData[name]; item.set("value", val); - if (name.indexOf("Url") != -1) - { - var isDataUrl = val && val.indexOf("data:") == 0; - var fieldName = name.substring(0, name.length - 3); - if (isDataUrl) - { - that[fieldName + "UploadStatusContainer"].className = "loadedIcon"; - that[fieldName + "UploadContainer"].innerHTML = "uploaded.jks"; - that[fieldName].setDisabled(true); - that[fieldName].set("required", false); - that[fieldName + "FileClearButton"].setDisabled(false); - } - else - { - that[fieldName].set("value", val); - } - } }); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html index 1732688ba7..2356accbd4 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html @@ -22,42 +22,14 @@
Server path or upload*:
- - - - -
- -
-
-
- - -
- -
- - -
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filetruststore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filetruststore/add.html index 36180d8a39..4fbf9f953a 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filetruststore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filetruststore/add.html @@ -22,39 +22,14 @@
Server path or upload*:
- - - -
-
-
-
- - -
-
- - -
Password*:
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html index 5272537bdf..f7ae4d3f76 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html @@ -22,132 +22,45 @@
-
Private Key URL or Path*:
+
Private Key*:
- - - - - -
- -
- - -
- -
- - -
-
-
-
Certificate URL or Path*:
+
Certificate*:
- - - - - - -
-
- - -
- -
- - -
-
-
-
Intermediate Certificate URL or Path:
+
Intermediate Certificate(s):
- - - - -
- -
-
- - -
- -
- - -
-
+ placeHolder: 'Intermediate certificates URL or path to file on server', + required: false, + promptMessage: 'Location of the intermediate certificates', + title: 'Enter URL containing intermediate certificates or path to file with certificates in format DER or PEM'" />
-
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html index 9de25877cb..ba5aee0444 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html @@ -24,43 +24,14 @@
Certificate URL or Path*:
- - - - - - -
-
- - -
- -
- - -
-
-
-- cgit v1.2.1 From 0c774a3384905c988cdf3ef09214ff53f5865995 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Fri, 30 Jan 2015 10:12:16 +0000 Subject: QPID-6351: [Java Broker] Remove provider name from edit UI, remove button 'Add Preferences Provider' from Authentication provider tab and fix disabled preferences provider fields in Add Authentication provider dialog git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1655975 13f79535-47bb-0310-9956-ffa450edef68 --- .../js/qpid/management/AuthenticationProvider.js | 22 +--------------------- .../js/qpid/management/PreferencesProvider.js | 2 -- .../qpid/management/addAuthenticationProvider.js | 4 +++- .../preferencesprovider/PreferencesProviderForm.js | 4 ++++ .../preferencesProviderForm.html | 2 +- .../src/main/java/resources/showAuthProvider.html | 1 - .../java/resources/showPreferencesProvider.html | 4 ---- 7 files changed, 9 insertions(+), 30 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js index 161ce4f83c..8545d2da75 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/AuthenticationProvider.js @@ -33,12 +33,11 @@ define(["dojo/_base/xhr", "dojo/dom-style", "dojox/html/entities", "dojo/dom", - "qpid/management/addPreferencesProvider", "qpid/management/PreferencesProvider", "qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager", "dojo/domReady!"], function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, - addAuthenticationProvider, event, registry, domStyle, entities, dom, addPreferencesProvider, PreferencesProvider, PrincipalDatabaseAuthenticationManager) { + addAuthenticationProvider, event, registry, domStyle, entities, dom, PreferencesProvider, PrincipalDatabaseAuthenticationManager) { function AuthenticationProvider(name, parent, controller) { this.name = name; @@ -79,14 +78,6 @@ define(["dojo/_base/xhr", that.deleteAuthenticationProvider(); }); - var addPreferencesProviderButton = query(".addPreferencesProviderButton", contentPane.containerNode)[0]; - var addPreferencesProviderWidget = registry.byNode(addPreferencesProviderButton); - connect.connect(addPreferencesProviderWidget, "onClick", - function(evt){ - event.stop(evt); - that.addPreferencesProvider(); - }); - authProviderUpdater.update(); if (util.isProviderManagingUsers(authProviderUpdater.authProviderData.type)) { @@ -136,14 +127,6 @@ define(["dojo/_base/xhr", } }; - AuthenticationProvider.prototype.addPreferencesProvider = function() { - if (this.authProviderUpdater && this.authProviderUpdater.authProviderData - && (!this.authProviderUpdater.authProviderData.preferencesproviders - || !this.authProviderUpdater.authProviderData.preferencesproviders[0])){ - addPreferencesProvider.show(this.name); - } - }; - function AuthProviderUpdater(node, authProviderObj, controller, authenticationProvider) { this.controller = controller; @@ -154,7 +137,6 @@ define(["dojo/_base/xhr", this.preferencesProviderType=dom.byId("preferencesProviderType"); this.preferencesProviderName=dom.byId("preferencesProviderName"); this.preferencesProviderState=dom.byId("preferencesProviderState"); - this.addPreferencesProviderButton = query(".addPreferencesProviderButton", node)[0]; this.editPreferencesProviderButton = query(".editPreferencesProviderButton", node)[0]; this.deletePreferencesProviderButton = query(".deletePreferencesProviderButton", node)[0]; this.preferencesProviderAttributes = dom.byId("preferencesProviderAttributes") @@ -169,7 +151,6 @@ this.authenticationProviderDetailsContainer = query(".authenticationProviderDeta { if (preferencesProviderData) { - this.addPreferencesProviderButton.style.display = 'none'; if (!this.preferencesProvider) { var preferencesProvider =new PreferencesProvider(preferencesProviderData.name, this.authProviderData); @@ -184,7 +165,6 @@ this.authenticationProviderDetailsContainer = query(".authenticationProviderDeta { this.preferencesProvider.update(null); } - this.addPreferencesProviderButton.style.display = 'inline'; } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js index 35ccbf9cae..0d40669823 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/PreferencesProvider.js @@ -56,7 +56,6 @@ define(["dojo/_base/xhr", that.containerNode = node; that.parentObject = parentObject; that.preferencesProviderType=query(".preferencesProviderType", node)[0]; - that.preferencesProviderName=query(".preferencesProviderName", node)[0]; that.preferencesProviderState=query(".preferencesProviderState", node)[0]; that.editPreferencesProviderButton = query(".editPreferencesProviderButton", node)[0]; that.deletePreferencesProviderButton = query(".deletePreferencesProviderButton", node)[0]; @@ -137,7 +136,6 @@ define(["dojo/_base/xhr", this.editPreferencesProviderButton.style.display = 'inline'; this.deletePreferencesProviderButton.style.display = 'inline'; this.preferencesProviderType.innerHTML = entities.encode(String(data.type)); - this.preferencesProviderName.innerHTML = entities.encode(String(data.name)); this.preferencesProviderState.innerHTML = entities.encode(String(data.state)); if (!this.details) { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js index e05fc7582d..1b38c257fb 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js @@ -60,6 +60,7 @@ define(["dojo/_base/xhr", this.authenticationProviderName = registry.byId("addAuthenticationProvider.name"); this.authenticationProviderName.set("regExpGen", util.nameOrContextVarRegexp); + this.authenticationProviderName.on("change", function(newValue){that.preferencesProviderForm.preferencesProviderNameWidget.set("value",newValue);}); this.dialog = registry.byId("addAuthenticationProvider"); this.addButton = registry.byId("addAuthenticationProvider.addButton"); @@ -102,7 +103,7 @@ define(["dojo/_base/xhr", this.initialData = actualData; this.effectiveData = effectiveData; this.authenticationProviderType.set("value", actualData.type); - this.authenticationProviderName.set("value", actualData.name); + this.authenticationProviderType.set("disabled", true); this.authenticationProviderName.set("disabled", true); if (actualData.preferencesproviders && actualData.preferencesproviders[0]) @@ -113,6 +114,7 @@ define(["dojo/_base/xhr", { this.preferencesProviderForm.reset(); } + this.authenticationProviderName.set("value", actualData.name); } else { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js index 5eaaa89242..96c336ff2c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js @@ -193,6 +193,10 @@ function (util, metadata, xhr, declare, array, domConstruct, win, query, json, _ { this.reset(); } + else + { + this._toggleWidgets(this.preferencesProviderTypeWidget.value); + } }, }); }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/preferencesprovider/preferencesProviderForm.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/preferencesprovider/preferencesProviderForm.html index 979b3abe8d..b995d4e8dd 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/preferencesprovider/preferencesProviderForm.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/preferencesprovider/preferencesProviderForm.html @@ -23,7 +23,7 @@
Preferences Provider -
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferencesProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferencesProvider.html index 5d14aace76..49eb355ff3 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferencesProvider.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showPreferencesProvider.html @@ -24,10 +24,6 @@
Type:
-
-
Name:
-
-
State:
-- cgit v1.2.1 From 2e61366ced5d8126426c14ff08c7c7b38cca659b Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Fri, 30 Jan 2015 16:49:52 +0000 Subject: QPID-6346: Fix setting of required flag on ResourceWidget git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656054 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/resources/js/qpid/common/ResourceWidget.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js index 0082c7524f..7b1663ac5d 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js @@ -93,6 +93,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe { this.resourceLocation.set("title", this.title); } + this.resourceLocation.set("required", this.required ? true : false); this.uploadData.style.display = "none"; }, startup: function() @@ -154,7 +155,7 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe this.selectedFileName = null; this.selectedFileStatus.className = ""; this.selectedFile.innerHTML = ""; - this.resourceLocation.set("required", true); + this.resourceLocation.set("required", this.required ? true : false); this.resourceLocation.setDisabled(false); this.clearButton.setDisabled(true); this.uploadData.style.display = "none"; -- cgit v1.2.1 From e15a326b853e12c34144e27ec313415b0a8242f9 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Fri, 30 Jan 2015 16:49:59 +0000 Subject: QPID-6346: Display subject and certificate validity period for non java keystores git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656055 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/management/store/nonjavakeystore/show.js | 27 ++++++++++++++++++---- .../java/resources/store/nonjavakeystore/show.html | 12 ++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js index 1985410e57..292169e93c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js @@ -17,24 +17,43 @@ * under the License. */ -define(["qpid/common/util", "qpid/common/metadata", "dojo/domReady!"], - function (util, metadata) +define(["qpid/common/util", "qpid/common/metadata", "qpid/management/UserPreferences", "dojox/html/entities", "dojo/domReady!"], + function (util, metadata, UserPreferences, entities) { + function toDate(value) + { + return value ? entities.encode(String(UserPreferences.formatDateTime(value))) : ""; + } + + var dateFields = ["certificateValidEnd","certificateValidStart"]; + function NonJavaKeyStore(data) { this.fields = []; var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; for(var name in attributes) { - this.fields.push(name); + if (dateFields.indexOf(name) == -1) + { + this.fields.push(name); + } } - util.buildUI(data.containerNode, data.parent, "store/nonjavakeystore/show.html", this.fields, this); + var allFields = this.fields.concat(dateFields); + util.buildUI(data.containerNode, data.parent, "store/nonjavakeystore/show.html",allFields, this); } NonJavaKeyStore.prototype.update = function(data) { util.updateUI(data, this.fields, this); + if (data) + { + for(var idx in dateFields) + { + var name = dateFields[idx]; + this[name].innerHTML = toDate(data[name]); + } + } } return NonJavaKeyStore; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html index e0dd896d7b..51ebd06012 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/show.html @@ -30,6 +30,18 @@
Intermediate Certificate:
+
+
Subject:
+
+
+
+
Certificate valid to:
+
+
+
+
Certificate valid from:
+
+
-- cgit v1.2.1 From 5e05fa8c493ac30f80f6998ad928025136b32d5e Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Sat, 31 Jan 2015 01:30:10 +0000 Subject: QPID-6346: Create keystore/trustore tab UI only once git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656131 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/resources/js/qpid/management/KeyStore.js | 13 +++++++---- .../resources/js/qpid/management/TrustStore.js | 26 +++++++++++++--------- 2 files changed, 24 insertions(+), 15 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js index 6cb9ad727d..0f23053c2d 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/KeyStore.js @@ -54,10 +54,8 @@ define(["dojo/dom", parser.parse(contentPane.containerNode); that.keyStoreUpdater = new KeyStoreUpdater(contentPane.containerNode, that.modelObj, that.controller, that.url); - - updater.add( that.keyStoreUpdater ); - that.keyStoreUpdater.update(); + updater.add( that.keyStoreUpdater ); var deleteKeyStoreButton = query(".deleteStoreButton", contentPane.containerNode)[0]; var node = registry.byNode(deleteKeyStoreButton); @@ -132,13 +130,20 @@ define(["dojo/dom", that.keyStoreData = data[0]; that.updateHeader(); - require(["qpid/management/store/" + encodeURIComponent(that.keyStoreData.type.toLowerCase()) + "/show"], + if (that.details) + { + that.details.update(that.keyStoreData); + } + else + { + require(["qpid/management/store/" + encodeURIComponent(that.keyStoreData.type.toLowerCase()) + "/show"], function(DetailsUI) { that.details = new DetailsUI({containerNode:that.keyStoreDetailsContainer, parent: that}); that.details.update(that.keyStoreData); } ); + } }); }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js index f3fa06ccba..82e2b204f9 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/TrustStore.js @@ -54,10 +54,8 @@ define(["dojo/dom", parser.parse(contentPane.containerNode); that.keyStoreUpdater = new KeyStoreUpdater(contentPane.containerNode, that.modelObj, that.controller, that.url); - - updater.add( that.keyStoreUpdater ); - that.keyStoreUpdater.update(); + updater.add( that.keyStoreUpdater ); var deleteTrustStoreButton = query(".deleteStoreButton", contentPane.containerNode)[0]; var node = registry.byNode(deleteTrustStoreButton); @@ -129,14 +127,20 @@ define(["dojo/dom", { that.trustStoreData = data[0]; that.updateHeader(); - - require(["qpid/management/store/" + encodeURIComponent(that.trustStoreData.type.toLowerCase()) + "/show"], - function(DetailsUI) - { - that.details = new DetailsUI({containerNode:that.keyStoreDetailsContainer, parent: that}); - that.details.update(that.trustStoreData); - } - ); + if (that.details) + { + that.details.update(that.trustStoreData); + } + else + { + require(["qpid/management/store/" + encodeURIComponent(that.trustStoreData.type.toLowerCase()) + "/show"], + function(DetailsUI) + { + that.details = new DetailsUI({containerNode:that.keyStoreDetailsContainer, parent: that}); + that.details.update(that.trustStoreData); + } + ); + } }); }; -- cgit v1.2.1 From 61753c78d5b7551a53b614a093e2e5483af4289b Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Mon, 2 Feb 2015 14:43:34 +0000 Subject: QPID-6346: Improve field labels and prompt messages in UI for non java keystores/truststores, display timezone for certificate start/end time git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656477 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/management/store/nonjavakeystore/show.js | 2 +- .../management/store/nonjavatruststore/show.js | 7 ++++--- .../java/resources/store/nonjavakeystore/add.html | 24 +++++++++++----------- .../resources/store/nonjavatruststore/add.html | 8 ++++---- 4 files changed, 21 insertions(+), 20 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js index 292169e93c..c31b020e3e 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/show.js @@ -23,7 +23,7 @@ define(["qpid/common/util", "qpid/common/metadata", "qpid/management/UserPrefere function toDate(value) { - return value ? entities.encode(String(UserPreferences.formatDateTime(value))) : ""; + return value ? entities.encode(String(UserPreferences.formatDateTime(value, {addOffset: true, appendTimeZone: true}))) : ""; } var dateFields = ["certificateValidEnd","certificateValidStart"]; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js index ac210ea4be..89b0b5d88f 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/show.js @@ -37,14 +37,15 @@ define(["dojo/query", this.fields.push(name); } util.buildUI(data.containerNode, data.parent, "store/nonjavatruststore/show.html", this.fields, this); - var gridNode = query(".details", data.containerNode)[0] + var gridNode = query(".details", data.containerNode)[0]; + var dateTimeFormatter = function(value){ return value ? UserPreferences.formatDateTime(value, {addOffset: true, appendTimeZone: true}) : "";}; this.detailsGrid = new UpdatableStore([], gridNode, [ { name: 'Subject', field: 'SUBJECT_NAME', width: '25%' }, { name: 'Issuer', field: 'ISSUER_NAME', width: '25%' }, - { name: 'Valid from', field: 'VALID_START', width: '25%', formatter: function(value){ return value ? UserPreferences.formatDateTime(value) : "";}}, - { name: 'Valid to', field: 'VALID_END', width: '25%', formatter: function(value){ return value ? UserPreferences.formatDateTime(value) : "";}} + { name: 'Valid from', field: 'VALID_START', width: '25%', formatter: dateTimeFormatter }, + { name: 'Valid to', field: 'VALID_END', width: '25%', formatter: dateTimeFormatter} ]); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html index f7ae4d3f76..b7af1c6b47 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavakeystore/add.html @@ -22,45 +22,45 @@
-
Private Key*:
+
Private Key (Server path or upload)*:
+ promptMessage: 'Enter broker server path to file containing unencrypted private key in DER or PEM format', + title: 'Enter broker server path to file containing unencrypted private key in DER or PEM format'" />
-
Certificate*:
+
Certificate (Server path or upload)*:
+ promptMessage: 'Enter broker server path to file containing certificate in DER or PEM format', + title: 'Enter broker server path to file containing certificate in DER or PEM format'" />
-
Intermediate Certificate(s):
+
Intermediate Certificates (Server path or upload):
+ promptMessage: 'Enter broker server path to file containing intermediate certificates in DER or PEM format', + title: 'Enter path to file containing intermediate certificates in format DER or PEM'" />
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html index ba5aee0444..4ec2678575 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/nonjavatruststore/add.html @@ -22,16 +22,16 @@
-
Certificate URL or Path*:
+
Certificates (Server path or upload)*:
+ promptMessage: 'Enter broker server path to file containing certificate(s) in DER or PEM format', + title: 'Enter broker server path to file containing certificate(s) in DER or PEM format'" />
-- cgit v1.2.1 From 144d624d33077723fda55e4640157dde7c56a314 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Mon, 2 Feb 2015 17:39:28 +0000 Subject: QPID-6351: Fix preferences provider widget to update UI every time on setting or loading data git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656522 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/resources/js/qpid/management/addAuthenticationProvider.js | 1 + .../js/qpid/management/preferencesprovider/PreferencesProviderForm.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js index 1b38c257fb..17b7edcec9 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js @@ -113,6 +113,7 @@ define(["dojo/_base/xhr", else { this.preferencesProviderForm.reset(); + this.preferencesProviderForm.preferencesProviderNameWidget.set("value", actualData.name); } this.authenticationProviderName.set("value", actualData.name); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js index 96c336ff2c..ef8273328b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js @@ -125,7 +125,8 @@ function (util, metadata, xhr, declare, array, domConstruct, win, query, json, _ this.preferencesProviderNameWidget.set("value", data.name); if (data.type == this.preferencesProviderTypeWidget.get("value")) { - this._toggleWidgets(data.type); + // re-create UI anyway + this._preferencesProviderTypeChanged(data.type); } else { -- cgit v1.2.1 From 2ff075fb2760b003e29b2a5235519a30a6da9395 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Mon, 2 Feb 2015 20:50:15 +0000 Subject: QPID-6341 : Add test and allow a default alt text for oversized values git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656566 13f79535-47bb-0310-9956-ffa450edef68 --- .../rest/ConfiguredObjectToMapConverter.java | 7 +- .../rest/ConfiguredObjectToMapConverterTest.java | 80 ++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 24fb272186..28bbac2a61 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -164,7 +164,12 @@ public class ConfiguredObjectToMapConverter String valueString = String.valueOf(value); if(valueString.length() > oversizeThreshold) { - object.put(name, String.valueOf(value).substring(0,oversizeThreshold-4) + "..."); + + String replacementValue = "".equals(attribute.getOversizedAltText()) + ? String.valueOf(value).substring(0, oversizeThreshold - 4) + "..." + : attribute.getOversizedAltText(); + + object.put(name, replacementValue); } else { diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index 8687330d49..b5847ad293 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -216,6 +217,85 @@ public class ConfiguredObjectToMapConverterTest extends TestCase } + public void testOversizedAttributes() + { + + Model model = createTestModel(); + ConfiguredObjectTypeRegistry typeRegistry = model.getTypeRegistry(); + final Map> attributeTypes = + typeRegistry.getAttributeTypes(TestChild.class); + final ConfiguredObjectAttribute longAttr = mock(ConfiguredObjectAttribute.class); + when(longAttr.isOversized()).thenReturn(true); + when(longAttr.getOversizedAltText()).thenReturn(""); + when(attributeTypes.get(eq("longAttr"))).thenReturn(longAttr); + + TestChild mockChild = mock(TestChild.class); + when(mockChild.getModel()).thenReturn(model); + when(_configuredObject.getModel()).thenReturn(model); + configureMockToReturnOneAttribute(mockChild, "longAttr", "this is not long"); + when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild)); + + + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 20); + Object children = resultMap.get("testchilds"); + assertNotNull(children); + assertTrue(children instanceof Collection); + assertTrue(((Collection)children).size()==1); + Object attrs = ((Collection)children).iterator().next(); + assertTrue(attrs instanceof Map); + assertEquals("this is not long", ((Map) attrs).get("longAttr")); + + + + resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 8); + + children = resultMap.get("testchilds"); + assertNotNull(children); + assertTrue(children instanceof Collection); + assertTrue(((Collection)children).size()==1); + attrs = ((Collection)children).iterator().next(); + assertTrue(attrs instanceof Map); + assertEquals("this...", ((Map) attrs).get("longAttr")); + + + + + when(longAttr.getOversizedAltText()).thenReturn("test alt text"); + + resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 8); + + children = resultMap.get("testchilds"); + assertNotNull(children); + assertTrue(children instanceof Collection); + assertTrue(((Collection)children).size()==1); + attrs = ((Collection)children).iterator().next(); + assertTrue(attrs instanceof Map); + assertEquals("test alt text", ((Map) attrs).get("longAttr")); + + + } + private Model createTestModel() { Model model = mock(Model.class); -- cgit v1.2.1 From c9c168abe3ab55f9b718b38403ccefa5f7e00ad9 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Tue, 3 Feb 2015 10:14:38 +0000 Subject: QPID-6353 : [Java Broker] [AMQP 1.0] consumer attempting to drain an empty queue does not send back flow indicating drain is complete git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656664 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java | 5 +++++ .../java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java | 1 + 2 files changed, 6 insertions(+) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java index c5d9a5e35d..598fce03b9 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConsumerTarget_1_0.java @@ -343,6 +343,11 @@ class ConsumerTarget_1_0 extends AbstractConsumerTarget return _link.getSession(); } + public void flush() + { + _consumer.flush(); + } + private class DispositionAction implements UnsettledAction { diff --git a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java index 2cfe431979..123d6ac2fb 100644 --- a/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java +++ b/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/SendingLink_1_0.java @@ -496,6 +496,7 @@ public class SendingLink_1_0 implements SendingLinkListener, Link_1_0, DeliveryS && hasCredit()) { _draining = true; + _target.flush(); } while(!_resumeAcceptedTransfers.isEmpty() && getEndpoint().hasCreditToSend()) -- cgit v1.2.1 From 10b83e5bfa981e1faf5993eedb6979191fb1d9a8 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Tue, 3 Feb 2015 16:57:01 +0000 Subject: QPID-6356: Remove operational log 'MNG-1006 : Using SSL Keystore : {0}' git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1656805 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/qpid/server/management/plugin/HttpManagement.java | 8 -------- .../java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java | 2 -- 2 files changed, 10 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index 75f4e59242..f62d8416bf 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -455,14 +455,6 @@ public class HttpManagement extends AbstractPluginAdapter implem { getBroker().getEventLogger().message(ManagementConsoleMessages.LISTENING(stringifyConnectorScheme(connector), connector.getPort())); - if (connector instanceof SslSocketConnector) - { - SslContextFactory sslContextFactory = ((SslSocketConnector)connector).getSslContextFactory(); - if (sslContextFactory != null && sslContextFactory.getKeyStorePath() != null) - { - getBroker().getEventLogger().message(ManagementConsoleMessages.SSL_KEYSTORE(sslContextFactory.getKeyStorePath())); - } - } } } diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java index 8fc1ea1d8e..1711968b8f 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java @@ -142,8 +142,6 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry throw new ServerScopedRuntimeException("Unable to create SSLContext for key store", e); } - getEventLogger().message(ManagementConsoleMessages.SSL_KEYSTORE(keyStore.getName())); - //create the SSL RMI socket factories csf = new SslRMIClientSocketFactory(); ssf = new QpidSslRMIServerSocketFactory(sslContext,_connectorPort.getEnabledCipherSuites(), _connectorPort.getDisabledCipherSuites()); -- cgit v1.2.1 From 54fb883b977ee1bfac5977597332dbe4602e05ae Mon Sep 17 00:00:00 2001 From: Keith Wall Date: Wed, 4 Feb 2015 12:13:12 +0000 Subject: NO-JIRA: Increment year in HTML footer of Java Web Management Console git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1657133 13f79535-47bb-0310-9956-ffa450edef68 --- .../broker-plugins/management-http/src/main/java/resources/footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/footer.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/footer.html index 76d1d26695..44fa4fda36 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/footer.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/footer.html @@ -19,7 +19,7 @@ - --> - diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html index 4fddf727d0..c84e794ac1 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/group/showGroup.html @@ -23,8 +23,10 @@
- - +
+ + +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html index 8d3431808a..29ce2ebe6c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/addGroup.html @@ -30,8 +30,9 @@
- - +
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html new file mode 100644 index 0000000000..7fc458cd4f --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/add.html @@ -0,0 +1,37 @@ + +
+
+
Path*:
+
+ +
+
+ +
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html new file mode 100644 index 0000000000..740c65fd38 --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/groupfile/show.html @@ -0,0 +1,25 @@ + +
+
+
Path to file:
+
+
+
+
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html deleted file mode 100644 index d266971ee2..0000000000 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showFileGroupManager.html +++ /dev/null @@ -1,34 +0,0 @@ - -
-
-
Path:
-
-
-
-
-
-
- - -
- -
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html new file mode 100644 index 0000000000..62a6c7537c --- /dev/null +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/groupprovider/showGroupManagingGroupProvider.html @@ -0,0 +1,30 @@ + +
+
+
+
+ + +
+
+ +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js index 09473524b5..f739e52665 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/GroupProvider.js @@ -22,18 +22,24 @@ define(["dojo/_base/xhr", "dojo/parser", "dojo/query", "dojo/_base/connect", + "dojo/_base/array", + "dojo/_base/event", "qpid/common/properties", "qpid/common/updater", "qpid/common/util", + "qpid/common/metadata", "qpid/common/UpdatableStore", "dojox/grid/EnhancedGrid", "dijit/registry", - "dojo/_base/event", "dojox/html/entities", + "dojo/text!showGroupProvider.html", + "qpid/management/addGroupProvider", "dojox/grid/enhanced/plugins/Pagination", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], - function (xhr, parser, query, connect, properties, updater, util, UpdatableStore, EnhancedGrid, registry, event, entities) { + function (xhr, parser, query, connect, array, event, properties, updater, util, metadata, UpdatableStore, + EnhancedGrid, registry, entities, template, addGroupProvider) + { function GroupProvider(name, parent, controller) { this.name = name; @@ -45,38 +51,63 @@ define(["dojo/_base/xhr", return "GroupProvider: " + this.name ; }; - GroupProvider.prototype.open = function(contentPane) { + GroupProvider.prototype.open = function(contentPane) + { var that = this; this.contentPane = contentPane; - xhr.get({url: "showGroupProvider.html", - sync: true, - load: function(data) { - contentPane.containerNode.innerHTML = data; - parser.parse(contentPane.containerNode); - - that.groupProviderAdapter = new GroupProviderUpdater(contentPane.containerNode, that.modelObj, that.controller); - - updater.add( that.groupProviderAdapter ); - - that.groupProviderAdapter.update(); - - var deleteButton = query(".deleteGroupProviderButton", contentPane.containerNode)[0]; - var deleteWidget = registry.byNode(deleteButton); - connect.connect(deleteWidget, "onClick", - function(evt){ - event.stop(evt); - that.deleteGroupProvider(); - }); - }}); + contentPane.containerNode.innerHTML = template; + parser.parse(contentPane.containerNode); + + this.groupProviderUpdater = new GroupProviderUpdater(contentPane.containerNode, this.modelObj, this.controller); + + // load data + this.groupProviderUpdater.update(); + + this.deleteButton = registry.byNode(query(".deleteGroupProviderButton", contentPane.containerNode)[0]); + this.deleteButton.on("click", function(evt){ event.stop(evt); that.deleteGroupProvider(); }); + + this.editButton = registry.byNode(query(".editGroupProviderButton", contentPane.containerNode)[0]); + this.editButton.on("click", function(evt){ event.stop(evt); that.editGroupProvider(); }); + + var type = this.groupProviderUpdater.groupProviderData.type; + var providerDetailsNode = query(".providerDetails", contentPane.containerNode)[0]; + + require(["qpid/management/groupprovider/"+ encodeURIComponent(type.toLowerCase()) + "/show"], + function(DetailsUI) + { + that.groupProviderUpdater.details = new DetailsUI({containerNode: providerDetailsNode, parent: that}); + that.groupProviderUpdater.details.update(that.groupProviderUpdater.groupProviderData); + }); + + var managedInterfaces = metadata.getMetaData("GroupProvider", type).managedInterfaces; + if (managedInterfaces) + { + + var managedInterfaceUI = this.groupProviderUpdater.managedInterfaces; + + array.forEach(managedInterfaces, + function(managedInterface) + { + require(["qpid/management/groupprovider/" + encodeURIComponent(managedInterface)], + function(ManagedInterface) + { + managedInterfaceUI[ManagedInterface] = new ManagedInterface(providerDetailsNode, that.modelObj, that.controller); + managedInterfaceUI[ManagedInterface].update(that.groupProviderUpdater.groupProviderData); + }); + }); + } + + updater.add( this.groupProviderUpdater ); }; + GroupProvider.prototype.close = function() { - updater.remove( this.groupProviderAdapter ); + updater.remove( this.groupProviderUpdater ); }; GroupProvider.prototype.deleteGroupProvider = function() { var warnMessage = ""; - if (this.groupProviderAdapter.groupProviderData && this.groupProviderAdapter.groupProviderData.type.indexOf("File") != -1) + if (this.groupProviderUpdater.groupProviderData && this.groupProviderUpdater.groupProviderData.type.indexOf("File") != -1) { warnMessage = "NOTE: provider deletion will also remove the group file on disk.\n\n"; } @@ -96,7 +127,23 @@ define(["dojo/_base/xhr", util.xhrErrorHandler(this.failureReason); } } - }; + }; + + GroupProvider.prototype.editGroupProvider = function() + { + xhr.get( + { + url: this.groupProviderUpdater.query, + sync: true, + content: { actuals: true }, + handleAs: "json", + load: function(actualData) + { + addGroupProvider.show(actualData[0]); + } + } + ); + } function GroupProviderUpdater(node, groupProviderObj, controller) { @@ -105,27 +152,8 @@ define(["dojo/_base/xhr", this.type = query(".type", node)[0]; this.state = query(".state", node)[0]; this.query = "api/latest/groupprovider/"+encodeURIComponent(groupProviderObj.name); - this.typeUI ={"GroupFile": "FileGroupManager"}; - var that = this; - - xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}) - .then(function(data) - { - that.groupProviderData = data[0]; - - util.flattenStatistics( that.groupProviderData ); - - that.updateHeader(); - - var ui = that.typeUI[that.groupProviderData.type]; - require(["qpid/management/groupprovider/"+ ui], - function(SpecificProvider) { - that.details = new SpecificProvider(query(".providerDetails", node)[0], groupProviderObj, controller); - that.details.update(); - }); - - }); - + this.managedInterfaces = {}; + this.details = null; } GroupProviderUpdater.prototype.updateHeader = function() @@ -138,6 +166,28 @@ define(["dojo/_base/xhr", GroupProviderUpdater.prototype.update = function() { var that = this; + xhr.get({url: this.query, sync: true, handleAs: "json"}).then(function(data) {that._update(data[0]);}); + }; + + GroupProviderUpdater.prototype._update = function(data) + { + this.groupProviderData = data; + util.flattenStatistics( this.groupProviderData ); + this.updateHeader(); + + if (this.details) + { + this.details.update(this.groupProviderData); + } + + for(var managedInterface in this.managedInterfaces) + { + var managedInterfaceUI = this.managedInterfaces[managedInterface]; + if (managedInterfaceUI) + { + managedInterfaceUI.update(this.groupProviderData); + } + } }; return GroupProvider; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js index 82281ad3d3..f158b8ceb6 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js @@ -18,7 +18,7 @@ * under the License. * */ -define(["dojo/_base/lang", +define([ "dojo/_base/xhr", "dojo/dom", "dojo/dom-construct", @@ -26,8 +26,10 @@ define(["dojo/_base/lang", "dojo/parser", "dojo/_base/array", "dojo/_base/event", - 'dojo/_base/json', + 'dojo/json', "qpid/common/util", + "qpid/common/metadata", + "dojo/text!addGroupProvider.html", "dojo/store/Memory", "dojox/validate/us", "dojox/validate/web", @@ -42,140 +44,152 @@ define(["dojo/_base/lang", "dijit/layout/ContentPane", "dojox/layout/TableContainer", "dojo/domReady!"], - function (lang, xhr, dom, construct, registry, parser, array, event, json, util) { - - var addGroupProvider = {}; - - addGroupProvider.show = function(groupProvider) { - var fields = [{ - name: "name", - createWidget: function(groupProvider) { - return new dijit.form.ValidationTextBox({ - required: true, - value: groupProvider.name, - disabled: groupProvider.name ? true : false, - label: "Name*:", - regexp: "^[\x20-\x2e\x30-\x7F]{1,255}$", - promptMessage: "Name of group provider.", - placeHolder: "name", - name: "name"}); - } - }, { - name: "type", - createWidget: function(groupProvider) { - - var typeContainer = construct.create("div"); - - var typeListContainer = new dojox.layout.TableContainer({ - cols: 1, - "labelWidth": "300", - customClass: "formLabel", - showLabels: true, - orientation: "horiz" - }); - - typeContainer.appendChild(typeListContainer.domNode); - - var providers = []; - var fieldSetContainers = {}; - xhr.get({ - url: "service/helper?action=ListGroupProviderAttributes", - handleAs: "json", - sync: true - }).then( - function(data) { - var providerIndex = 0; - - for (var providerType in data) { - if (data.hasOwnProperty(providerType)) { - providers[providerIndex++] = {id: providerType, name: providerType}; - - var attributes = data[providerType].attributes; - var descriptions = data[providerType].descriptions; - - var layout = new dojox.layout.TableContainer( { - cols: 1, - "labelWidth": "300", - customClass: "formLabel", - showLabels: true, - orientation: "horiz" - }); - - for(var i=0; i < attributes.length; i++) { - if ("type" == attributes[i]) - { - continue; - } - var labelValue = attributes[i]; - if (descriptions && descriptions[attributes[i]]) - { - labelValue = descriptions[attributes[i]]; - } - var text = new dijit.form.TextBox({ - label: labelValue + ":", - name: attributes[i] - }); - layout.addChild(text); - } - - typeContainer.appendChild(layout.domNode); - fieldSetContainers[providerType] = layout; - } - } - }); - - var providersStore = new dojo.store.Memory({ data: providers }); - - var typeList = new dijit.form.FilteringSelect({ - required: true, - value: groupProvider.type, - store: providersStore, - label: "Type*:", - name: "type"}); - - typeListContainer.addChild(typeList); - - var onChangeHandler = function onChangeHandler(newValue){ - for (var i in fieldSetContainers) { - var container = fieldSetContainers[i]; - var descendants = container.getChildren(); - for(var i in descendants){ - var descendant = descendants[i]; - var propName = descendant.name; - if (propName) { - descendant.set("disabled", true); - } + function (xhr, dom, construct, registry, parser, array, event, json, util, metadata, template) + { + + var addGroupProvider = + { + init: function() + { + var that=this; + this.containerNode = construct.create("div", {innerHTML: template}); + parser.parse(this.containerNode); + + this.groupProviderName = registry.byId("addGroupProvider.name"); + this.groupProviderName.set("regExpGen", util.nameOrContextVarRegexp); + + this.dialog = registry.byId("addGroupProvider"); + this.addButton = registry.byId("addGroupProvider.addButton"); + this.cancelButton = registry.byId("addGroupProvider.cancelButton"); + this.cancelButton.on("click", function(e){that._cancel(e);}); + this.addButton.on("click", function(e){that._add(e);}); + + this.groupProviderTypeFieldsContainer = dom.byId("addGroupProvider.typeFields"); + this.groupProviderForm = registry.byId("addGroupProvider.form"); + + this.groupProviderType = registry.byId("addGroupProvider.type"); + this.groupProviderType.on("change", function(type){that._groupProviderTypeChanged(type);}); + + var supportedTypes = metadata.getTypesForCategory("GroupProvider"); + supportedTypes.sort(); + var supportedTypesStore = util.makeTypeStore(supportedTypes); + this.groupProviderType.set("store", supportedTypesStore); + }, + show: function(actualData) + { + this.initialData = actualData; + this.groupProviderForm.reset(); + + if (actualData) + { + this._destroyTypeFields(this.containerNode); + this._initFields(actualData); + } + this.groupProviderName.set("disabled", actualData == null ? false : true); + this.groupProviderType.set("disabled", actualData == null ? false : true); + this.dialog.set("title", actualData == null ? "Add Group Provider" : "Edit Group Provider - " + actualData.name) + this.dialog.show(); + }, + _initFields:function(data) + { + var type = data["type"]; + var attributes = metadata.getMetaData("GroupProvider", type).attributes; + for(var name in attributes) + { + var widget = registry.byId("addGroupProvider."+name); + if (widget) + { + widget.set("value", data[name]); } - container.domNode.style.display = "none"; - } - var container = fieldSetContainers[newValue]; - if (container) - { - container.domNode.style.display = "block"; - var descendants = container.getChildren(); - for(var i in descendants){ - var descendant = descendants[i]; - var propName = descendant.name; - if (propName) { - descendant.set("disabled", false); - } + } + }, + _cancel: function(e) + { + event.stop(e); + this.dialog.hide(); + }, + _add: function(e) + { + event.stop(e); + this._submit(); + }, + _submit: function() + { + if (this.groupProviderForm.validate()) + { + var success = false,failureReason=null; + + var groupProviderData = util.getFormWidgetValues(this.groupProviderForm, this.initialData); + var encodedName = encodeURIComponent(this.groupProviderName.value); + var jsonString = json.stringify(groupProviderData); + + try { + xhr.put( + { + url: "api/latest/groupprovider/" + encodedName, + sync: true, + handleAs: "json", + headers: { "Content-Type": "application/json"}, + putData: jsonString, + load: function(x) {success = true; }, + error: function(error) {success = false; failureReason = error;} + }); + } + catch (e) + { + console.warn(e); } - } - }; - typeList.on("change", onChangeHandler); - onChangeHandler(typeList.value); - return new dijit.layout.ContentPane({content: typeContainer, style:{padding: 0}}); - } - }]; - util.showSetAttributesDialog( - fields, - groupProvider ? groupProvider : {}, - "api/latest/groupprovider" + (name ? "/" + encodeURIComponent(name.name) : ""), - groupProvider ? "Edit group provider - " + groupProvider.name : "Add group provider", - "Group", - groupProvider && groupProvider.type ? groupProvider.type : "Group", - groupProvider ? false : true); + if (success == true) + { + this.dialog.hide(); + } + else + { + util.xhrErrorHandler(failureReason); + } + } + else + { + alert('Form contains invalid data. Please correct first'); + } + }, + _groupProviderTypeChanged: function(type) + { + this._destroyTypeFields(this.groupProviderTypeFieldsContainer); + if (type) + { + var that = this; + require([ "qpid/management/groupprovider/" + type.toLowerCase() + "/add"], function(typeUI) + { + try + { + typeUI.show({containerNode: that.groupProviderTypeFieldsContainer, parent: that, data: that.initialData}); + util.applyMetadataToWidgets(that.groupProviderTypeFieldsContainer, "GroupProvider", type); + } + catch(e) + { + console.warn(e); + } + }); + } + }, + _destroyTypeFields: function(typeFieldsContainer) + { + var widgets = registry.findWidgets(typeFieldsContainer); + array.forEach(widgets, function(item) { item.destroyRecursive();}); + construct.empty(typeFieldsContainer); + } }; + + try + { + addGroupProvider.init(); + } + catch(e) + { + console.warn(e); + } return addGroupProvider; + }); \ No newline at end of file diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js index 8f63a8c935..8ac6be04cc 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/Group.js @@ -34,11 +34,12 @@ define(["dojo/_base/xhr", "dojox/grid/EnhancedGrid", "dojo/data/ObjectStore", "qpid/management/group/addGroupMember", + "dojox/html/entities", "dojox/grid/enhanced/plugins/Pagination", "dojox/grid/enhanced/plugins/IndirectSelection", "dojo/domReady!"], function (xhr, parser, query, registry, connect, event, json, properties, updater, util, formatter, - UpdatableStore, JsonRest, EnhancedGrid, ObjectStore, addGroupMember) { + UpdatableStore, JsonRest, EnhancedGrid, ObjectStore, addGroupMember, entities) { function Group(name, parent, controller) { this.name = name; @@ -78,10 +79,8 @@ define(["dojo/_base/xhr", parser.parse(contentPane.containerNode); that.groupUpdater = new GroupUpdater(contentPane.containerNode, that, that.controller); - - updater.add( that.groupUpdater ); - that.groupUpdater.update(); + updater.add( that.groupUpdater ); var addGroupMemberButton = query(".addGroupMemberButton", contentPane.containerNode)[0]; connect.connect(registry.byNode(addGroupMemberButton), "onClick", @@ -128,7 +127,7 @@ define(["dojo/_base/xhr", "durable", "lifetimePolicy", "type"]); - + this.name.innerHTML = entities.encode(String(groupObj.getGroupName())); this.query = "api/latest/groupmember/"+ encodeURIComponent(groupObj.getGroupProviderName()) + "/" + encodeURIComponent(groupObj.getGroupName()); xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}).then(function(data) diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js deleted file mode 100644 index 4ee411633f..0000000000 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/FileGroupManager.js +++ /dev/null @@ -1,262 +0,0 @@ -/* - * - * 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. - * - */ -define(["dojo/_base/xhr", - "dojo/dom", - "dojo/parser", - "dojo/query", - "dojo/dom-construct", - "dojo/_base/connect", - "dojo/_base/window", - "dojo/_base/event", - "dojo/_base/json", - "dijit/registry", - "dojox/html/entities", - "qpid/common/util", - "qpid/common/properties", - "qpid/common/updater", - "qpid/common/UpdatableStore", - "dojox/grid/EnhancedGrid", - "dojox/grid/enhanced/plugins/Pagination", - "dojox/grid/enhanced/plugins/IndirectSelection", - "dojox/validate/us", "dojox/validate/web", - "dijit/Dialog", - "dijit/form/TextBox", - "dijit/form/ValidationTextBox", - "dijit/form/TimeTextBox", "dijit/form/Button", - "dijit/form/Form", - "dijit/form/DateTextBox", - "dojo/domReady!"], - function (xhr, dom, parser, query, construct, connect, win, event, json, registry, entities, util, properties, updater, UpdatableStore, EnhancedGrid) { - function DatabaseGroupManager(containerNode, groupProviderObj, controller) { - var node = construct.create("div", null, containerNode, "last"); - var that = this; - this.name = groupProviderObj.name; - xhr.get({url: "groupprovider/showFileGroupManager.html", - sync: true, - load: function(data) { - node.innerHTML = data; - parser.parse(node); - - - that.groupDatabaseUpdater= new GroupProviderUpdater(node, groupProviderObj, controller); - - updater.add( that.groupDatabaseUpdater); - - that.groupDatabaseUpdater.update(); - - - }}); - } - - DatabaseGroupManager.prototype.update = function() { - this.groupDatabaseUpdater.update(); - }; - - DatabaseGroupManager.prototype.close = function() { - updater.remove( this.groupDatabaseUpdater ); - }; - - function GroupProviderUpdater(node, groupProviderObj, controller) - { - this.controller = controller; - this.query = "api/latest/groupprovider/"+encodeURIComponent(groupProviderObj.name); - this.name = groupProviderObj.name; - var that = this; - - xhr.get({url: this.query, sync: properties.useSyncGet, handleAs: "json"}) - .then(function(data) { - that.path = query(".path", node)[0]; - that.groupProviderData = data[0]; - - util.flattenStatistics( that.groupProviderData ); - - var groupDiv = query(".groups", node)[0]; - - var gridProperties = { - height: 400, - keepSelection: true, - plugins: { - pagination: { - pageSizes: ["10", "25", "50", "100"], - description: true, - sizeSwitch: true, - pageStepper: true, - gotoButton: true, - maxPageStep: 4, - position: "bottom" - }, - indirectSelection: true - - }}; - - - that.groupsGrid = - new UpdatableStore(that.groupProviderData.groups, groupDiv, - [ { name: "Group Name", field: "name", width: "100%" } - ], function(obj) { - connect.connect(obj.grid, "onRowDblClick", obj.grid, - function(evt){ - var idx = evt.rowIndex, - theItem = this.getItem(idx); - var name = obj.dataStore.getValue(theItem,"name"); - that.controller.show("group", name, groupProviderObj, theItem.id); - }); - }, gridProperties, EnhancedGrid); - - - var addGroupButton = query(".addGroupButton", node)[0]; - connect.connect(registry.byNode(addGroupButton), "onClick", function(evt){ addGroup.show(groupProviderObj.name) }); - - var deleteGroupButton = query(".deleteGroupButton", node)[0]; - var deleteWidget = registry.byNode(deleteGroupButton); - connect.connect(deleteWidget, "onClick", - function(evt){ - event.stop(evt); - that.deleteGroups(); - }); - }); - } - - GroupProviderUpdater.prototype.deleteGroups = function() - { - var grid = this.groupsGrid.grid; - var data = grid.selection.getSelected(); - if(data.length) { - var that = this; - if(confirm("Delete " + data.length + " groups?")) { - var i, queryParam; - for(i = 0; i
- +
- + +
-- cgit v1.2.1 From 4a190dc734d13de94649f3fca4230cbe1926fc5c Mon Sep 17 00:00:00 2001 From: Keith Wall Date: Wed, 4 Feb 2015 15:05:37 +0000 Subject: QPID-6361: [Java Broker] Change 0-8..0-91 queue declare to no longer consider the durability when validating an existing queue. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1657270 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java index d52fb735a2..6108de2fda 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java +++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java @@ -3246,17 +3246,6 @@ public class AMQChannel + autoDelete + ")"); } - else if (queue.isDurable() != durable) - { - closeChannel(AMQConstant.ALREADY_EXISTS, - "Cannot re-declare queue '" - + queue.getName() - + "' with different durability (was: " - + queue.isDurable() - + " requested " - + durable - + ")"); - } else { setDefaultQueue(queue); -- cgit v1.2.1 From 43bba6aff5eb4ebbe3630d21fadb46cd32727535 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Wed, 4 Feb 2015 17:46:45 +0000 Subject: QPID-6356: Add port transport into operational log message for starting managegement plugins git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1657341 13f79535-47bb-0310-9956-ffa450edef68 --- .../server/management/plugin/HttpManagement.java | 22 +++++++++------------- .../qpid/server/jmx/JMXManagedObjectRegistry.java | 11 ++++++++--- 2 files changed, 17 insertions(+), 16 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java index f62d8416bf..4e340c7b72 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java @@ -46,7 +46,6 @@ import org.eclipse.jetty.server.SessionManager; import org.eclipse.jetty.server.handler.ErrorHandler; import org.eclipse.jetty.server.nio.SelectChannelConnector; import org.eclipse.jetty.server.ssl.SslSelectChannelConnector; -import org.eclipse.jetty.server.ssl.SslSocketConnector; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; @@ -139,7 +138,7 @@ public class HttpManagement extends AbstractPluginAdapter implem try { _server.start(); - logOperationalListenMessages(_server); + logOperationalListenMessages(httpPorts); } catch (Exception e) { @@ -448,13 +447,15 @@ public class HttpManagement extends AbstractPluginAdapter implem root.addServlet(servletHolder, "/api/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name + "/*"); } - private void logOperationalListenMessages(Server server) + private void logOperationalListenMessages(Collection> ports) { - Connector[] connectors = server.getConnectors(); - for (Connector connector : connectors) + for (Port port : ports) { - getBroker().getEventLogger().message(ManagementConsoleMessages.LISTENING(stringifyConnectorScheme(connector), - connector.getPort())); + Set transports = port.getTransports(); + for (Transport transport: transports) + { + getBroker().getEventLogger().message(ManagementConsoleMessages.LISTENING(Protocol.HTTP.name(), transport.name(), port.getPort())); + } } } @@ -463,15 +464,10 @@ public class HttpManagement extends AbstractPluginAdapter implem Connector[] connectors = server.getConnectors(); for (Connector connector : connectors) { - getBroker().getEventLogger().message(ManagementConsoleMessages.SHUTTING_DOWN(stringifyConnectorScheme(connector), - connector.getPort())); + getBroker().getEventLogger().message(ManagementConsoleMessages.SHUTTING_DOWN(Protocol.HTTP.name(), connector.getPort())); } } - private String stringifyConnectorScheme(Connector connector) - { - return connector instanceof SslSocketConnector ? "HTTPS" : "HTTP"; - } private Collection> getHttpPorts(Collection> ports) { diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java index 1711968b8f..040973ff6e 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/JMXManagedObjectRegistry.java @@ -36,6 +36,7 @@ import java.rmi.server.RMIServerSocketFactory; import java.rmi.server.UnicastRemoteObject; import java.security.GeneralSecurityException; import java.util.HashMap; +import java.util.Set; import javax.management.JMException; import javax.management.MBeanServer; @@ -250,8 +251,12 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry _cs.start(); - String connectorServer = (connectorSslEnabled ? "SSL " : "") + "JMX RMIConnectorServer"; - getEventLogger().message(ManagementConsoleMessages.LISTENING(connectorServer, jmxPortConnectorServer)); + Set connectorTransports = _connectorPort.getTransports(); + for (Transport transport: connectorTransports) + { + getEventLogger().message(ManagementConsoleMessages.LISTENING("JMX RMIConnectorServer", transport.name(), jmxPortConnectorServer)); + } + getEventLogger().message(ManagementConsoleMessages.READY(OPERATIONAL_LOGGING_NAME)); } @@ -261,7 +266,7 @@ public class JMXManagedObjectRegistry implements ManagedObjectRegistry final RMIServerSocketFactory ssf = getRmiServerSocketFactory(useCustomRmiRegistry); Registry rmiRegistry = LocateRegistry.createRegistry(jmxPortRegistryServer, null, ssf); - getEventLogger().message(ManagementConsoleMessages.LISTENING("RMI Registry", jmxPortRegistryServer)); + getEventLogger().message(ManagementConsoleMessages.LISTENING("RMI Registry", Transport.TCP.name(), jmxPortRegistryServer)); return rmiRegistry; } -- cgit v1.2.1 From 0f1feb11d7cbbe40de10a680eb22b28918608615 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Thu, 5 Feb 2015 22:53:16 +0000 Subject: QPID-6364: Add a secure attribute 'storeUrl' into Keystore for specifying store content location and make attribute 'path' derived. Rename Trsuststore attribute 'path' into 'storeUrl' for consistency. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1657708 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/resources/store/filekeystore/add.html | 4 ++-- .../src/main/java/resources/store/filetruststore/add.html | 4 ++-- .../src/main/java/resources/store/filetruststore/show.html | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html index 2356accbd4..676ae4007b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/store/filekeystore/add.html @@ -22,10 +22,10 @@
Server path or upload*:
-
Server path or upload*:
- -
Path:
-
+
Store Url:
+
Peers only:
-- cgit v1.2.1 From f0636abb3d7de4b757a4859857dfce004a4d30a3 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Fri, 6 Feb 2015 17:11:38 +0000 Subject: QPID-6366: [Java Broker] Prevent data urls cluttering the UI and prevent potentially large data url consuming too much bandwidth during the regular REST poll git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1657900 13f79535-47bb-0310-9956-ffa450edef68 --- .../plugins/ACLFileAccessControlProvider.java | 2 +- .../plugin/servlet/rest/MetaDataServlet.java | 5 +++- .../resources/js/qpid/common/ResourceWidget.js | 4 +++ .../js/qpid/management/store/filekeystore/add.js | 8 ++++-- .../js/qpid/management/store/filetruststore/add.js | 8 ++++-- .../qpid/management/store/nonjavakeystore/add.js | 31 ++++++++++++++------ .../qpid/management/store/nonjavatruststore/add.js | 33 ++++++++++++++-------- 7 files changed, 63 insertions(+), 28 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java index b8509ebd39..3e0f5b63f0 100644 --- a/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java +++ b/qpid/java/broker-plugins/access-control/src/main/java/org/apache/qpid/server/security/access/plugins/ACLFileAccessControlProvider.java @@ -27,6 +27,6 @@ import org.apache.qpid.server.model.ManagedObject; @ManagedObject( category = false, type="AclFile" ) public interface ACLFileAccessControlProvider> extends AccessControlProvider { - @ManagedAttribute( mandatory = true, description = "File location" ) + @ManagedAttribute( mandatory = true, description = "File location", oversize = true, oversizedAltText = OVER_SIZED_ATTRIBUTE_ALTERNATIVE_TEXT) String getPath(); } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java index 9b384cd36f..b995bb442c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MetaDataServlet.java @@ -188,7 +188,10 @@ public class MetaDataServlet extends AbstractServlet { attrDetails.put("secure",attribute.isSecure()); } - + if(attribute.isOversized()) + { + attrDetails.put("oversize", attribute.isOversized()); + } attributeDetails.put(attribute.getName(), attrDetails); } return attributeDetails; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js index 7b1663ac5d..f603c96ff3 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/ResourceWidget.js @@ -168,6 +168,10 @@ function (declare, array, lang, util, _WidgetBase, _TemplatedMixin, _WidgetsInTe { console.log(message); } + }, + _setPlaceHolderAttr: function(newValue) + { + this.resourceLocation.set("placeHolder", newValue); } } ); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js index feb7da1864..b4c45d8f99 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filekeystore/add.js @@ -52,13 +52,15 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm var name = item.id.replace("addStore.",""); if (name in attributes ) { - if (item.type != "password") + var attribute = attributes[name]; + if (attribute.secure || attribute.oversize) { - item.set("value", effectiveData[name]); + item.set("required", false); + item.set("placeHolder", effectiveData[name]); } else { - item.set("required", effectiveData?false:true); + item.set("value", effectiveData[name]); } } }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js index b55affb33b..e04ee1a835 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/filetruststore/add.js @@ -53,13 +53,15 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm var name = item.id.replace("addStore.",""); if (name in attributes ) { - if (item.type != "password") + var attribute = attributes[name]; + if (attribute.secure || attribute.oversize) { - item.set("value", effectiveData[name]); + item.set("required", false); + item.set("placeHolder", effectiveData[name]); } else { - item.set("required", effectiveData?false:true); + item.set("value", effectiveData[name]); } } }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js index 989af03832..0d74699d79 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavakeystore/add.js @@ -43,15 +43,28 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm }, update: function(effectiveData) { - var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; - var widgets = registry.findWidgets(this.containerNode); - var that=this; - array.forEach(widgets, function(item) - { - var name = item.id.replace("addStore.",""); - var val = effectiveData[name]; - item.set("value", val); - }); + if (effectiveData) + { + var attributes = metadata.getMetaData("KeyStore", "NonJavaKeyStore").attributes; + var widgets = registry.findWidgets(this.containerNode); + array.forEach(widgets, function(item) + { + var name = item.id.replace("addStore.",""); + if (name in attributes ) + { + var attribute = attributes[name]; + if (attribute.oversize || attribute.secure) + { + item.set("required", false); + item.set("placeHolder", effectiveData[name]); + } + else + { + item.set("value", effectiveData[name]); + } + } + }); + } } }; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js index 15926d1832..53e3b43082 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/store/nonjavatruststore/add.js @@ -43,17 +43,28 @@ define(["dojo/dom","dojo/query", "dojo/_base/array", "dijit/registry","qpid/comm }, update: function(effectiveData) { - var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes; - var widgets = registry.findWidgets(this.containerNode); - var that=this; - array.forEach(widgets, function(item) - { - var name = item.id.replace("addStore.",""); - var val = effectiveData[name]; - item.set("value", val); - - }); - + if (effectiveData) + { + var attributes = metadata.getMetaData("TrustStore", "NonJavaTrustStore").attributes; + var widgets = registry.findWidgets(this.containerNode); + array.forEach(widgets, function(item) + { + var name = item.id.replace("addStore.",""); + if (name in attributes ) + { + var attribute = attributes[name]; + if (attribute.oversize || attribute.secure) + { + item.set("required", false); + item.set("placeHolder", effectiveData[name]); + } + else + { + item.set("value", effectiveData[name]); + } + } + }); + } } }; -- cgit v1.2.1 From 5edd1e5f5fac729d719219a1854a97419112e784 Mon Sep 17 00:00:00 2001 From: Alex Rudyy Date: Mon, 9 Feb 2015 15:05:37 +0000 Subject: QPID-6365: [Java Broker] Only expose secure attribute values when transport is SSL and initial configuration is requested git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1658424 13f79535-47bb-0310-9956-ffa450edef68 --- .../rest/ConfiguredObjectToMapConverter.java | 24 +++-- .../plugin/servlet/rest/RestServlet.java | 2 +- .../rest/ConfiguredObjectToMapConverterTest.java | 105 +++++++++++++++++++-- 3 files changed, 115 insertions(+), 16 deletions(-) (limited to 'qpid/java/broker-plugins') diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java index 28bbac2a61..331b50ea7c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java @@ -57,13 +57,14 @@ public class ConfiguredObjectToMapConverter final boolean inheritedActuals, final boolean includeSystemContext, final boolean extractAsConfig, - final int oversizeThreshold + final int oversizeThreshold, + final boolean isSecureTransport ) { Map object = new LinkedHashMap<>(); incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext, - extractAsConfig, oversizeThreshold); + extractAsConfig, oversizeThreshold, isSecureTransport); if(!extractAsConfig) { incorporateStatisticsIntoMap(confObject, object); @@ -72,7 +73,7 @@ public class ConfiguredObjectToMapConverter if(depth > 0) { incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals, - includeSystemContext, extractAsConfig, oversizeThreshold); + includeSystemContext, extractAsConfig, oversizeThreshold, isSecureTransport); } return object; } @@ -85,7 +86,8 @@ public class ConfiguredObjectToMapConverter final boolean inheritedActuals, final boolean includeSystemContext, final boolean extractAsConfig, - final int oversizeThreshold) + final int oversizeThreshold, + final boolean isSecureTransport) { // if extracting as config add a fake attribute for each secondary parent if(extractAsConfig && confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1) @@ -159,6 +161,14 @@ public class ConfiguredObjectToMapConverter .getTypeRegistry() .getAttributeTypes(confObject.getClass()) .get(name); + + if (attribute.isSecure() && !(isSecureTransport && extractAsConfig)) + { + // do not expose actual secure attribute value + // getAttribute() returns encoded value + value = confObject.getAttribute(name); + } + if(attribute.isOversized() && !extractAsConfig) { String valueString = String.valueOf(value); @@ -240,7 +250,8 @@ public class ConfiguredObjectToMapConverter final boolean inheritedActuals, final boolean includeSystemContext, final boolean extractAsConfig, - final int oversizeThreshold) + final int oversizeThreshold, + final boolean isSecure) { List> childTypes = new ArrayList<>(confObject.getModel().getChildTypes(clazz)); @@ -283,7 +294,8 @@ public class ConfiguredObjectToMapConverter inheritedActuals, includeSystemContext, extractAsConfig, - oversizeThreshold)); + oversizeThreshold, + isSecure)); } } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java index 1ed0741a8e..19d498e240 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java @@ -371,7 +371,7 @@ public class RestServlet extends AbstractServlet { output.add(_objectConverter.convertObjectToMap(configuredObject, getConfiguredClass(), - depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig, oversizeThreshold)); + depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig, oversizeThreshold, request.isSecure())); } diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java index b5847ad293..b3c9bd911f 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java @@ -68,7 +68,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 120); + 120, + false); Map statsAsMap = (Map) resultMap.get(STATISTICS_MAP_KEY); assertNotNull("Statistics should be part of map", statsAsMap); assertEquals("Unexpected number of statistics", 1, statsAsMap.size()); @@ -90,7 +91,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 120); + 120, + false); assertEquals("Unexpected number of attributes", 1, resultMap.size()); assertEquals("Unexpected attribute value", attributeValue, resultMap.get(attributeName)); } @@ -114,7 +116,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 120); + 120, + false); assertEquals("Unexpected number of attributes", 1, resultMap.size()); assertEquals("Unexpected attribute value", "attributeConfiguredObjectName", resultMap.get(attributeName)); } @@ -139,7 +142,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 120); + 120, + false); assertEquals("Unexpected parent map size", 1, resultMap.size()); final List> childList = (List>) resultMap.get("testchilds"); @@ -183,7 +187,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 120); + 120, + false); assertEquals("Unexpected parent map size", 2, resultMap.size()); assertEquals("Incorrect context", resultMap.get(ConfiguredObject.CONTEXT), actualContext); List> childList = (List>) resultMap.get("testchilds"); @@ -201,7 +206,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 120); + 120, + false); assertEquals("Unexpected parent map size", 2, resultMap.size()); Map inheritedContext = new HashMap<>(); inheritedContext.put("key","value"); @@ -243,7 +249,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 20); + 20, + false); Object children = resultMap.get("testchilds"); assertNotNull(children); assertTrue(children instanceof Collection); @@ -261,7 +268,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 8); + 8, + false); children = resultMap.get("testchilds"); assertNotNull(children); @@ -283,7 +291,8 @@ public class ConfiguredObjectToMapConverterTest extends TestCase false, false, false, - 8); + 8, + false); children = resultMap.get("testchilds"); assertNotNull(children); @@ -296,6 +305,84 @@ public class ConfiguredObjectToMapConverterTest extends TestCase } + public void testSecureAttributes() + { + + Model model = createTestModel(); + ConfiguredObjectTypeRegistry typeRegistry = model.getTypeRegistry(); + Map> attributeTypes = typeRegistry.getAttributeTypes(TestChild.class); + ConfiguredObjectAttribute secureAttribute = mock(ConfiguredObjectAttribute.class); + when(secureAttribute.isSecure()).thenReturn(true); + when(attributeTypes.get(eq("secureAttribute"))).thenReturn(secureAttribute); + + TestChild mockChild = mock(TestChild.class); + when(mockChild.getModel()).thenReturn(model); + when(_configuredObject.getModel()).thenReturn(model); + + // set encoded value + configureMockToReturnOneAttribute(mockChild, "secureAttribute", "*****"); + + // set actual values + when(mockChild.getActualAttributes()).thenReturn(Collections.singletonMap("secureAttribute", "secret")); + when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild)); + when(model.getParentTypes(TestChild.class)).thenReturn(Collections.>singleton(TestChild.class)); + when(_configuredObject.getCategoryClass()).thenReturn(TestChild.class); + when(mockChild.isDurable()).thenReturn(true); + + Map resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + false, + false, + false, + false, + 20, + false); + Object children = resultMap.get("testchilds"); + assertNotNull(children); + assertTrue(children instanceof Collection); + assertTrue(((Collection)children).size()==1); + Object attrs = ((Collection)children).iterator().next(); + assertTrue(attrs instanceof Map); + assertEquals("*****", ((Map) attrs).get("secureAttribute")); + + resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + true, + true, + false, + true, + 20, + true); + + children = resultMap.get("testchilds"); + assertNotNull(children); + assertTrue(children instanceof Collection); + assertTrue(((Collection)children).size()==1); + attrs = ((Collection)children).iterator().next(); + assertTrue(attrs instanceof Map); + assertEquals("secret", ((Map) attrs).get("secureAttribute")); + + resultMap = _converter.convertObjectToMap(_configuredObject, + ConfiguredObject.class, + 1, + true, + true, + false, + false, + 20, + true); + + children = resultMap.get("testchilds"); + assertNotNull(children); + assertTrue(children instanceof Collection); + assertTrue(((Collection)children).size()==1); + attrs = ((Collection)children).iterator().next(); + assertTrue(attrs instanceof Map); + assertEquals("*****", ((Map) attrs).get("secureAttribute")); + } + private Model createTestModel() { Model model = mock(Model.class); -- cgit v1.2.1