summaryrefslogtreecommitdiff
path: root/qpid/java/management
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2007-01-16 15:16:39 +0000
committerMartin Ritchie <ritchiem@apache.org>2007-01-16 15:16:39 +0000
commit47ac1646674d11de0002613a71cf4588a8c8af7a (patch)
tree01576819aa1708192771e91f2b0c3cbdfd406de3 /qpid/java/management
parenta6b4188b807dce93ee1a54958bd92de4142a6d48 (diff)
downloadqpid-python-47ac1646674d11de0002613a71cf4588a8c8af7a.tar.gz
Patched up to Persistence changes so performance benchmarks can be created before and after persistence changes.
Revision: 494092 Author: kpvdr Date: 15:22:05, 08 January 2007 Message: Fixed: [QPID-253] Existing classpath breaks codegen; [QPID-254] Build failure does not prevent timestamp from being generated. Also moved all required properties into ant build file, allowing the generation to be completed independently of Maven from the common directory. ---- Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java Modified : /incubator/qpid/trunk/qpid/java/common/pom.xml Modified : /incubator/qpid/trunk/qpid/java/common/protocol-version.xml Revision: 494042 Author: rgreig Date: 12:21:18, 08 January 2007 Message: QPID-252 : Reduce unnecessary object creation ---- Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/transport/VmPipeTransportConnection.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/pool/Event.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/pool/ReadWriteThreadModel.java Modified : /incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/pool/PoolingFilterTest.java Revision: 494018 Author: bhupendrab Date: 10:42:21, 08 January 2007 Message: ---- Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java Revision: 493060 Author: marnie Date: 16:05:34, 05 January 2007 Message: ---- Added : /incubator/qpid/trunk/qpid/java/client/example/bin Added : /incubator/qpid/trunk/qpid/java/client/example/bin/set_classpath.bat Added : /incubator/qpid/trunk/qpid/java/client/example/bin/set_classpath.sh Revision: 492956 Author: bhupendrab Date: 10:09:14, 05 January 2007 Message: QPID-213 ---- Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/bin/qpidmc.sh Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java Revision: 492902 Author: vinoski Date: 05:09:49, 05 January 2007 Message: moved some distribution files moved some files around underneath the distribution directory, and changed some assemblies to pick them up ---- Deleted : /incubator/qpid/trunk/qpid/java/LICENSE.txt Deleted : /incubator/qpid/trunk/qpid/java/NOTICE.txt Deleted : /incubator/qpid/trunk/qpid/java/README.txt Modified : /incubator/qpid/trunk/qpid/java/distribution/src/main/assembly/bin.xml Modified : /incubator/qpid/trunk/qpid/java/distribution/src/main/assembly/client-bin.xml Modified : /incubator/qpid/trunk/qpid/java/distribution/src/main/assembly/src.xml Added : /incubator/qpid/trunk/qpid/java/distribution/src/main/release/LICENSE.txt(Copy from path: /incubator/qpid/trunk/qpid/java/LICENSE.txt, Revision, 489214 Added : /incubator/qpid/trunk/qpid/java/distribution/src/main/release/NOTICE.txt(Copy from path: /incubator/qpid/trunk/qpid/java/NOTICE.txt, Revision, 489214 Added : /incubator/qpid/trunk/qpid/java/distribution/src/main/release/README.txt(Copy from path: /incubator/qpid/trunk/qpid/java/README.txt, Revision, 489214 Revision: 492756 Author: kpvdr Date: 21:30:39, 04 January 2007 Message: Fixed C++ client sending protocol version 0-0 over the wire. Minor fixes and tidy-up in related code. ---- Modified : /incubator/qpid/trunk/qpid/cpp/lib/common/Makefile.am Deleted : /incubator/qpid/trunk/qpid/cpp/lib/common/framing/AMQP_HighestVersion.h Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Main.java Deleted : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_HighestVersion.cpp.tmpl Added : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_HighestVersion.h.tmpl(Copy from path: /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_HighestVersion.cpp.tmpl, Revision, 491906 Modified : /incubator/qpid/trunk/qpid/gentools/templ.java/MethodBodyClass.tmpl Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQMinaProtocolSession.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/ProtocolInitiation.java Revision: 492718 Author: rhs Date: 20:23:26, 04 January 2007 Message: QPID-248 Modified field table types to not conflict with the officially specified definitions. Also reorganized type definitions to clearly distinguish between official and extended types and reenabled the AmqPlain authentication mechanism. This change allows the python interop test suite to run. ---- Modified : /incubator/qpid/trunk/qpid/java/broker/etc/config.xml Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQType.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQTypeMap.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java Revision: 492514 Author: bhupendrab Date: 10:52:06, 04 January 2007 Message: QPID-213 ---- Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/ManagedAttributeModel.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java Revision: 492280 Author: kpvdr Date: 20:15:19, 03 January 2007 Message: Added ability for code generator to omit elements from the XML specification ---- Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpClass.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpConstantSet.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpDomainMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpDomainVersionMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpField.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpFieldMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpFlagMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpMethod.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpMethodMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpModel.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpOrdinalVersionMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpVersion.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpVersionSet.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Generator.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/JavaGenerator.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/NodeAware.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/Utils.java Revision: 492184 Author: bhupendrab Date: 15:38:03, 03 January 2007 Message: QPID-213 ---- Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java Revision: 491839 Author: kpvdr Date: 16:31:39, 02 January 2007 Message: Removed check run check from ant build file. ---- Modified : /incubator/qpid/trunk/qpid/gentools/build.xml Revision: 491801 Author: kpvdr Date: 14:41:18, 02 January 2007 Message: Added ant build file for the generator with compile (default) and clean targets. ---- Added : /incubator/qpid/trunk/qpid/gentools/build.xml Revision: 491879 Author: kpvdr Date: 18:19:58, 02 January 2007 Message: Added automatic build of generator; added dependency check on source XML files that prevents generation if not needed ---- Modified : /incubator/qpid/trunk/qpid/java/common/pom.xml Modified : /incubator/qpid/trunk/qpid/java/common/protocol-version.xml Revision: 491673 Author: rgreig Date: 23:02:01, 01 January 2007 Message: QPID-233 : Patch from Rob Godfrey - fix to lock.unlock() bug ---- Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java Revision: 491577 Author: rgreig Date: 14:30:31, 01 January 2007 Message: QPID-232 Added the service request/reply test ---- Added : /incubator/qpid/trunk/qpid/java/perftests/bin/serviceProvidingClient.sh Added : /incubator/qpid/trunk/qpid/java/perftests/bin/serviceRequestingClient.sh Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/requestreply Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/requestreply/ServiceProvidingClient.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/requestreply/ServiceRequestingClient.java Revision: 491120 Author: rgreig Date: 22:12:44, 29 December 2006 Message: Reduced logging level to debug to avoid performance sapping output ---- Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java Revision: 491072 Author: rgreig Date: 18:37:34, 29 December 2006 Message: QPID-232 Created a simple module and added the topic test ---- Added : /incubator/qpid/trunk/qpid/java/perftests Added : /incubator/qpid/trunk/qpid/java/perftests/bin Added : /incubator/qpid/trunk/qpid/java/perftests/bin/run_many.sh Added : /incubator/qpid/trunk/qpid/java/perftests/bin/setupclasspath.sh Added : /incubator/qpid/trunk/qpid/java/perftests/bin/topicListener.sh Added : /incubator/qpid/trunk/qpid/java/perftests/bin/topicPublisher.sh Added : /incubator/qpid/trunk/qpid/java/perftests/pom.xml Added : /incubator/qpid/trunk/qpid/java/perftests/src Added : /incubator/qpid/trunk/qpid/java/perftests/src/main Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config/AMQConnectionFactoryInitialiser.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config/AbstractConfig.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config/ConnectionFactoryInitialiser.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config/Connector.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config/ConnectorConfig.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/config/JBossConnectionFactoryInitialiser.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/topic Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/topic/Config.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/topic/Listener.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/topic/MessageFactory.java Added : /incubator/qpid/trunk/qpid/java/perftests/src/main/java/org/apache/qpid/topic/Publisher.java Revision: 491031 Author: bhupendrab Date: 15:47:42, 29 December 2006 Message: QPID-213 ---- Added : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java Revision: 491029 Author: bhupendrab Date: 15:38:05, 29 December 2006 Message: QPID-213 ---- Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java Revision: 490985 Author: bhupendrab Date: 11:55:15, 29 December 2006 Message: test queue and exchange names changed. ---- Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/AMQBrokerManagerMBeanTest.java Revision: 490872 Author: vinoski Date: 23:42:59, 28 December 2006 Message: apply patch for QPID-231 ---- Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/QueueSenderAdapter.java Revision: 490734 Author: bhupendrab Date: 15:07:56, 28 December 2006 Message: ---- Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java Revision: 490709 Author: bhupendrab Date: 12:04:46, 28 December 2006 Message: QPID-188 Unit tests added ---- Added : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/AMQBrokerManagerMBeanTest.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java Revision: 490708 Author: bhupendrab Date: 12:02:26, 28 December 2006 Message: MBean created as a separate class ---- Added : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/AMQBrokerManagerMBean.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/Main.java Revision: 490605 Author: vinoski Date: 23:52:36, 27 December 2006 Message: add snapshot repository for distribution ---- Modified : /incubator/qpid/trunk/qpid/java/pom.xml Revision: 490505 Author: bhupendrab Date: 14:10:05, 27 December 2006 Message: QPID-213 improving the management GUI look and feel ---- Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java Modified : /incubator/qpid/trunk/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java Revision: 490373 Author: rgreig Date: 21:10:20, 26 December 2006 Message: QPID-227 Renamed version.properties to qpidversion.properties due to clash with a dependency also using version.properties. Also improved robustness where properties file does not contain expected properties. ---- Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/common/QpidProperties.java Modified : /incubator/qpid/trunk/qpid/java/pom.xml Revision: 489804 Author: rgreig Date: 23:55:13, 22 December 2006 Message: QPID-229 Fixed spurious import in test class ---- Modified : /incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/JMSDestinationTest.java Revision: 489754 Author: rgreig Date: 20:46:54, 22 December 2006 Message: QPID-229 : Patch supplied by Rob Godfrey - Change implementation of FieldTable ---- Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java Revision: 489748 Author: rgreig Date: 20:32:43, 22 December 2006 Message: QPID-229 : Patch supplied by Rob Godfrey - Change implementation of FieldTable ---- Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersBinding.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/exchange/HeadersBindingTest.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java Modified : /incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/message/StreamMessageTest.java Added : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQType.java Added : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQTypeMap.java Added : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQTypedValue.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/FieldTableFactory.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/JMSPropertyFieldTable.java Deleted : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java Modified : /incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/framing/BasicContentHeaderPropertiesTest.java Modified : /incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/framing/JMSPropertyFieldTableTest.java Modified : /incubator/qpid/trunk/qpid/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/AbstractHeadersExchangeTestBase.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/ReturnUnroutableMandatoryMessageTest.java Revision: 489715 Author: kpvdr Date: 18:26:40, 22 December 2006 Message: File tidy-up for AMQP version code: Removed old XSLT files; moved cluster.asl into spec directory; renamed spec files to better reflect version notation; updated java, c++ and python files to reference new names. ---- Modified : /incubator/qpid/trunk/qpid/cpp/gen/Makefile.am Modified : /incubator/qpid/trunk/qpid/java/common/pom.xml Modified : /incubator/qpid/trunk/qpid/java/common/protocol-version.xml Deleted : /incubator/qpid/trunk/qpid/java/common/src/main/versions Deleted : /incubator/qpid/trunk/qpid/java/common/src/main/xsl Modified : /incubator/qpid/trunk/qpid/python/amqp-doc Modified : /incubator/qpid/trunk/qpid/python/qpid/testlib.py Deleted : /incubator/qpid/trunk/qpid/specs/amqp-8.0.xml Added : /incubator/qpid/trunk/qpid/specs/amqp.0-8.xml(Copy from path: /incubator/qpid/trunk/qpid/specs/amqp-8.0.xml, Revision, 489705 Added : /incubator/qpid/trunk/qpid/specs/amqp.0-9.xml Added : /incubator/qpid/trunk/qpid/specs/cluster.0-8.xml(Copy from path: /incubator/qpid/trunk/qpid/java/common/src/main/xsl/cluster.asl, Revision, 489705 Added : /incubator/qpid/trunk/qpid/specs/cluster.0-9.xml Revision: 489704 Author: kpvdr Date: 17:43:09, 22 December 2006 Message: Additional changes to support new Java AMQP version code, some C++ tidy-up as well. ---- Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/AmqpFieldMap.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/CppGenerator.java Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/JavaGenerator.java Modified : /incubator/qpid/trunk/qpid/gentools/templ.java/MethodBodyClass.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.java/MethodRegistryClass.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.java/PropertyContentHeaderClass.tmpl Revision: 489691 Author: kpvdr Date: 17:00:28, 22 December 2006 Message: AMQP version using new generator - Part 1. In these changes, all places where version-specific info is required, it has been hard-wired to major=8, minor=0. The next phase of changes will connect the version info to that obtained from ProtocolInitiation for the current session. ---- Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/RequiredDeliveryException.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicCancelMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicConsumeMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicPublishMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/BasicQosHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ChannelCloseHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ChannelFlowHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ChannelOpenHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionCloseMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionOpenMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionSecureOkMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ConnectionStartOkMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeBoundHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeclareHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/ExchangeDeleteHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueBindHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeclareHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/QueueDeleteHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/TxCommitHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/TxRollbackHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/handler/TxSelectHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQMinaProtocolSession.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQPFastProtocolHandler.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/AMQMessage.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SubscriptionImpl.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageProducer.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ChannelCloseMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionCloseMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionSecureMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionStartMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionTuneMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/cluster/DefaultGroupManager.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/cluster/handler/RemoteConsumeHandler.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/cluster/replay/ConsumerCounts.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/cluster/replay/RecordingMethodHandlerFactory.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/cluster/replay/ReplayStore.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/queue/ClusteredQueue.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/main/java/org/apache/qpid/server/queue/PrivateQueue.java Modified : /incubator/qpid/trunk/qpid/java/cluster/src/test/java/org/apache/qpid/server/cluster/BrokerTest.java Modified : /incubator/qpid/trunk/qpid/java/common/pom.xml Modified : /incubator/qpid/trunk/qpid/java/common/protocol-version.xml Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/AMQChannelException.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQBody.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQFrame.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBody.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQMethodBodyFactory.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/BasicContentHeaderProperties.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderBody.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderProperties.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/framing/ContentHeaderPropertiesFactory.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/xsl/cluster.asl Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/AbstractHeadersExchangeTestBase.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/queue/AMQQueueMBeanTest.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/queue/AckTest.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/queue/MessageTestHelper.java Revision: 489644 Author: rgreig Date: 13:06:45, 22 December 2006 Message: ---- Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesMessage.java Added : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/AbstractBytesTypedMessage.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSMapMessage.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/message/JMSStreamMessage.java Modified : /incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/basic/MapMessageTest.java Revision: 489403 Author: bhupendrab Date: 16:47:01, 21 December 2006 Message: QPID-227 ---- Modified : /incubator/qpid/trunk/qpid/java/broker/pom.xml Modified : /incubator/qpid/trunk/qpid/java/client/pom.xml Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/QpidConnectionMetaData.java Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/handler/ConnectionStartMethodHandler.java Modified : /incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/common/QpidProperties.java Modified : /incubator/qpid/trunk/qpid/java/pom.xml Revision: 489331 Author: bhupendrab Date: 11:33:49, 21 December 2006 Message: QPID-188 test updated ---- Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/exchange/ExchangeMBeanTest.java Revision: 489330 Author: bhupendrab Date: 11:32:58, 21 December 2006 Message: QPID-188 Unit test for AMQProtocolSession mbean updated and closeChannel() method removed from mbean because it didn't seem to be a required feature for management console. ---- Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQMinaProtocolSession.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSession.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBean.java Modified : /incubator/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/ManagedConnection.java Modified : /incubator/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/protocol/AMQProtocolSessionMBeanTest.java Revision: 489215 Author: vinoski Date: 22:46:12, 20 December 2006 Message: add clover support, fix logging level variables Added support for the clover plugin to the top-level pom, and eliminated redundant amqj.logging.level variables from module poms. ---- Modified : /incubator/qpid/trunk/qpid/java/broker/pom.xml Modified : /incubator/qpid/trunk/qpid/java/client/pom.xml Modified : /incubator/qpid/trunk/qpid/java/pom.xml Modified : /incubator/qpid/trunk/qpid/java/systests/pom.xml Revision: 489214 Author: cctrieloff Date: 22:36:18, 20 December 2006 Message: Multi version support part 2. ---- Modified : /incubator/qpid/trunk/qpid/gentools/build Modified : /incubator/qpid/trunk/qpid/gentools/src/org/apache/qpid/gentools/CppGenerator.java Modified : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_ClientOperations.h.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_ClientProxy.cpp.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_ClientProxy.h.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_ServerOperations.h.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.cpp/AMQP_ServerProxy.h.tmpl Modified : /incubator/qpid/trunk/qpid/gentools/templ.cpp/MethodBodyClass.h.tmpl Revision: 489204 Author: rhs Date: 21:47:54, 20 December 2006 Message: conf file for jpackage ---- Added : /incubator/qpid/trunk/qpid/java/broker/etc/qpid-server.conf.jpp Revision: 489140 Author: ritchiem Date: 17:04:33, 20 December 2006 Message: QPID-225 Applied Patch for queue browsing with client acknowledgement ---- Modified : /incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/BasicMessageConsumer.java git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/perftesting@496725 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/management')
-rwxr-xr-xqpid/java/management/eclipse-plugin/bin/qpidmc.sh10
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java3
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java68
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java14
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java124
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java107
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/ManagedAttributeModel.java5
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java24
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java327
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java247
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java306
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java2
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java7
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java105
14 files changed, 1042 insertions, 307 deletions
diff --git a/qpid/java/management/eclipse-plugin/bin/qpidmc.sh b/qpid/java/management/eclipse-plugin/bin/qpidmc.sh
index c9ab423fdd..13e3edcc94 100755
--- a/qpid/java/management/eclipse-plugin/bin/qpidmc.sh
+++ b/qpid/java/management/eclipse-plugin/bin/qpidmc.sh
@@ -1,3 +1,13 @@
#!/bin/bash
+if [ "$JAVA_HOME" == "" ]; then
+ echo "The JAVA_HOME environment variable is not defined";
+ exit 0;
+fi
+
+if [ "$QPIDMC_HOME" == "" ]; then
+ echo "The QPIDMC_HOME environment variable is not defined correctly";
+ exit 0;
+fi
+
"$JAVA_HOME/bin/java" -Xms40m -Xmx256m -Declipse.consoleLog=false -jar $QPIDMC_HOME/eclipse/startup.jar org.eclipse.core.launcher.Main -launcher $QPIDMC_HOME/eclipse/eclipse -name "Qpid Management Console" -showsplash 600 -configuration "file:$QPIDMC_HOME/configuration"
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java
index adb20b1cd9..756d404596 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/Constants.java
@@ -34,10 +34,13 @@ public class Constants
public final static String DOMAIN = "domain";
public final static String TYPE = "mbeantype";
public final static String MBEAN = "mbean";
+ public final static String ATTRIBUTE = "Attribute";
public final static String ATTRIBUTES = "Attributes";
public final static String NOTIFICATION = "Notifications";
public final static String RESULT = "Result";
+ public final static String ATTRIBUTE_QUEUE_DEPTH = "QueueDepth";
+
public final static String ALL = "All";
public final static String NAVIGATION_ROOT = "Qpid Connections";
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
index 0beeda84dd..6fbfdcd06f 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/ServerRegistry.java
@@ -21,15 +21,23 @@
package org.apache.qpid.management.ui;
+import java.util.ArrayList;
import java.util.List;
import org.apache.qpid.management.ui.jmx.ClientListener;
+import org.apache.qpid.management.ui.model.ManagedAttributeModel;
import org.apache.qpid.management.ui.model.NotificationObject;
import org.apache.qpid.management.ui.model.OperationDataModel;
public abstract class ServerRegistry
{
private ManagedServer _managedServer = null;
+ // list of all Connection mbeans
+ protected List<ManagedBean> _connections = new ArrayList<ManagedBean>();
+ // list of all exchange mbeans
+ protected List<ManagedBean> _exchanges = new ArrayList<ManagedBean>();
+ // list of all queue mbenas
+ protected List<ManagedBean> _queues = new ArrayList<ManagedBean>();
public ServerRegistry()
{
@@ -51,6 +59,64 @@ public abstract class ServerRegistry
_managedServer = server;
}
+ protected void addConnectionMBean(ManagedBean mbean)
+ {
+ _connections.add(mbean);
+ }
+
+ protected void addExchangeMBean(ManagedBean mbean)
+ {
+ _exchanges.add(mbean);
+ }
+
+ protected void addQueueMBean(ManagedBean mbean)
+ {
+ _queues.add(mbean);
+ }
+
+ protected void removeConnectionMBean(ManagedBean mbean)
+ {
+ _connections.remove(mbean);
+ }
+
+ protected void removeExchangeMBean(ManagedBean mbean)
+ {
+ _exchanges.remove(mbean);
+ }
+
+ protected void removeQueueMBean(ManagedBean mbean)
+ {
+ _queues.remove(mbean);
+ }
+
+ public List<ManagedBean> getConnections()
+ {
+ return _connections;
+ }
+
+ public List<ManagedBean> getExchanges()
+ {
+ return _exchanges;
+ }
+
+ public List<ManagedBean> getQueues()
+ {
+ return _queues;
+ }
+
+ public abstract void addManagedObject(ManagedBean key);
+
+ public abstract List<ManagedBean> getMBeans();
+
+ public abstract void removeManagedObject(ManagedBean mbean);
+
+ public List<ManagedBean> getObjectsToBeRemoved()
+ {
+ return null;
+ }
+
+ public abstract ManagedAttributeModel getAttributeModel(ManagedBean mbean);
+
public abstract Object getServerConnection();
public abstract void closeServerConnection() throws Exception;
@@ -61,6 +127,8 @@ public abstract class ServerRegistry
public abstract String[] getExchangeNames();
+ public abstract String[] getConnectionNames();
+
public abstract List<NotificationObject> getNotifications(ManagedBean mbean);
public abstract boolean hasSubscribedForNotifications(ManagedBean mbean, String name, String type);
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java
index 85b312cf99..a2335c5841 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/Refresh.java
@@ -20,6 +20,7 @@
*/
package org.apache.qpid.management.ui.actions;
+import org.apache.qpid.management.ui.jmx.MBeanUtility;
import org.apache.qpid.management.ui.views.MBeanView;
import org.apache.qpid.management.ui.views.NavigationView;
import org.eclipse.jface.action.IAction;
@@ -27,6 +28,10 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+/**
+ * This action refreshes both the views -Navigation and MBeanView
+ * @author Bhupendra Bhardwaj
+ */
public class Refresh implements IWorkbenchWindowActionDelegate
{
private IWorkbenchWindow _window;
@@ -71,7 +76,14 @@ public class Refresh implements IWorkbenchWindowActionDelegate
view.refresh();
MBeanView mbeanview = (MBeanView)_window.getActivePage().findView(MBeanView.ID);
- mbeanview.refreshMBeanView();
+ try
+ {
+ mbeanview.refreshMBeanView();
+ }
+ catch (Exception ex)
+ {
+ MBeanUtility.handleException(ex);
+ }
}
}
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
index 9bc3ea1b0f..c087bd2e72 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/JMXServerRegistry.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
+import javax.management.ListenerNotFoundException;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.Notification;
@@ -50,21 +51,31 @@ public class JMXServerRegistry extends ServerRegistry
private JMXConnector _jmxc = null;
private MBeanServerConnection _mbsc = null;
- private List<ManagedBean> _mbeansToBeAdded = new ArrayList<ManagedBean>();
+ // When an mbean gets removed from mbean server, then the notification listener
+ // will add that mbean in this list.
private List<ManagedBean> _mbeansToBeRemoved = new ArrayList<ManagedBean>();
- private List<String> _queues = new ArrayList<String>();
- private List<String> _exchanges = new ArrayList<String>();
-
- private HashMap<String, ManagedBean> _mbeansMap = new HashMap<String, ManagedBean>();
+ // Map containing all managed beans and ampped with unique mbean name
+ private HashMap<String, ManagedBean> _mbeansMap = new HashMap<String, ManagedBean>();
+ // Map containing MBeanInfo for all mbeans and mapped with unique mbean name
private HashMap<String, MBeanInfo> _mbeanInfoMap = new HashMap<String, MBeanInfo>();
+ // Map containing attribute model for all mbeans and mapped with unique mbean name
private HashMap<String, ManagedAttributeModel> _attributeModelMap = new HashMap<String, ManagedAttributeModel>();
+ // Map containing operation model for all mbeans and mapped with unique mbean name
private HashMap<String, OperationDataModel> _operationModelMap = new HashMap<String, OperationDataModel>();
+ // Map containing NotificationInfo for all mbeans and mapped with unique mbean name
private HashMap<String, List<NotificationInfoModel>> _notificationInfoMap = new HashMap<String, List<NotificationInfoModel>>();
+ // Map containing all notifications sent for all mbeans, which are registered for notification
private HashMap<String, List<NotificationObject>> _notificationsMap = new HashMap<String, List<NotificationObject>>();
+ // For mbeans which have subscribed for a notification type
+ // mbean unique name mapped with notification map. Notification map contains list of notification type
+ // mapped with notification name. Notification type list contains those notification types,
+ // which are subscribed for notification.
private HashMap<String, HashMap<String, List<String>>> _subscribedNotificationMap = new HashMap<String, HashMap<String, List<String>>>();
+ // listener for registration or unregistratioj of mbeans on mbean server
private ClientNotificationListener _notificationListener = null;
+ // listener for server connection. Receives notification if server connection goes down
private ClientListener _clientListener = null;
public JMXServerRegistry(ManagedServer server) throws Exception
@@ -93,16 +104,23 @@ public class JMXServerRegistry extends ServerRegistry
*/
public void closeServerConnection() throws Exception
{
- if (_jmxc != null)
- _jmxc.removeConnectionNotificationListener(_clientListener);
-
- if (_mbsc != null)
- _mbsc.removeNotificationListener(_serverObjectName, _clientListener);
-
- // remove mbean notification listeners
- for (String mbeanName : _subscribedNotificationMap.keySet())
+ try
+ {
+ if (_jmxc != null)
+ _jmxc.removeConnectionNotificationListener(_clientListener);
+
+ if (_mbsc != null)
+ _mbsc.removeNotificationListener(_serverObjectName, _clientListener);
+
+ // remove mbean notification listeners
+ for (String mbeanName : _subscribedNotificationMap.keySet())
+ {
+ _mbsc.removeNotificationListener(new ObjectName(mbeanName), _notificationListener);
+ }
+ }
+ catch (ListenerNotFoundException ex)
{
- _mbsc.removeNotificationListener(new ObjectName(mbeanName), _notificationListener);
+ System.out.println(ex.toString());
}
}
@@ -111,22 +129,32 @@ public class JMXServerRegistry extends ServerRegistry
return _mbeansMap.get(uniqueName);
}
- public void addManagedObject(ManagedBean key)
+ public void addManagedObject(ManagedBean mbean)
{
- if (Constants.QUEUE.equals(key.getType()))
- _queues.add(key.getName());
- else if (Constants.EXCHANGE.equals(key.getType()))
- _exchanges.add(key.getName());
+ if (Constants.QUEUE.equals(mbean.getType()) && !mbean.getName().startsWith("tmp_"))
+ {
+ addQueueMBean(mbean);
+ }
+ else if (Constants.EXCHANGE.equals(mbean.getType()))
+ {
+ addExchangeMBean(mbean);
+ }
+ else if (Constants.CONNECTION.equals(mbean.getType()))
+ {
+ addConnectionMBean(mbean);
+ }
- _mbeansMap.put(key.getUniqueName(), key);
+ _mbeansMap.put(mbean.getUniqueName(), mbean);
}
public void removeManagedObject(ManagedBean mbean)
{
if (Constants.QUEUE.equals(mbean.getType()))
- _queues.remove(mbean.getName());
+ removeQueueMBean(mbean);
else if (Constants.EXCHANGE.equals(mbean.getType()))
- _exchanges.remove(mbean.getName());
+ removeExchangeMBean(mbean);
+ else if (Constants.CONNECTION.equals(mbean.getType()))
+ removeConnectionMBean(mbean);
_mbeansMap.remove(mbean.getUniqueName());
}
@@ -140,6 +168,11 @@ public class JMXServerRegistry extends ServerRegistry
return _mbeanInfoMap.get(mbean.getUniqueName());
}
+ public List<ManagedBean> getMBeans()
+ {
+ return new ArrayList<ManagedBean>(_mbeansMap.values());
+ }
+
public void setNotificationInfo(ManagedBean mbean, List<NotificationInfoModel>value)
{
_notificationInfoMap.put(mbean.getUniqueName(), value);
@@ -259,27 +292,15 @@ public class JMXServerRegistry extends ServerRegistry
public void registerManagedObject(ObjectName objName)
{
JMXManagedObject managedObject = new JMXManagedObject(objName);
+
managedObject.setServer(getManagedServer());
- _mbeansToBeAdded.add(managedObject);
+ addManagedObject(managedObject);
}
public void unregisterManagedObject(ObjectName objName)
{
- JMXManagedObject managedObject = new JMXManagedObject(objName);
- managedObject.setServer(getManagedServer());
- _mbeansToBeRemoved.add(managedObject);
- }
-
- public List<ManagedBean> getObjectsToBeAdded()
- {
- if (_mbeansToBeAdded.isEmpty())
- return null;
- else
- {
- List<ManagedBean> list = _mbeansToBeAdded;
- _mbeansToBeAdded = new ArrayList<ManagedBean>();
- return list;
- }
+ ManagedBean mbean = _mbeansMap.get(objName.toString());
+ _mbeansToBeRemoved.add(mbean);
}
public List<ManagedBean> getObjectsToBeRemoved()
@@ -316,12 +337,35 @@ public class JMXServerRegistry extends ServerRegistry
public String[] getQueueNames()
{
- return _queues.toArray(new String[0]);
+ String[] queues = new String[_queues.size()];
+ int i = 0;
+ for (ManagedBean mbean : _queues)
+ {
+ queues[i++] = mbean.getName();
+ }
+ return queues;
}
public String[] getExchangeNames()
{
- return _exchanges.toArray(new String[0]);
+ String[] exchanges = new String[_exchanges.size()];
+ int i = 0;
+ for (ManagedBean mbean : _exchanges)
+ {
+ exchanges[i++] = mbean.getName();
+ }
+ return exchanges;
+ }
+
+ public String[] getConnectionNames()
+ {
+ String[] connections = new String[_connections.size()];
+ int i = 0;
+ for (ManagedBean mbean : _connections)
+ {
+ connections[i++] = mbean.getName();
+ }
+ return connections;
}
public ClientNotificationListener getNotificationListener()
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
index 923fd4a12a..8334beeeb9 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/jmx/MBeanUtility.java
@@ -22,8 +22,10 @@ package org.apache.qpid.management.ui.jmx;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import javax.management.Attribute;
import javax.management.AttributeList;
@@ -35,6 +37,7 @@ import javax.management.MBeanInfo;
import javax.management.MBeanNotificationInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServerConnection;
+import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.ReflectionException;
@@ -140,30 +143,30 @@ public class MBeanUtility
{
if (mbean == null)
{
- ViewUtility.popupErrorMessage("Error", ex.getMessage());
+ ViewUtility.popupErrorMessage("Error", "Managed Object is null \n" + ex.toString());
}
else if (ex instanceof IOException)
{
- ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage());
+ ViewUtility.popupErrorMessage(mbean.getName(), "IO Error occured \n" + ex.toString());
}
else if (ex instanceof ReflectionException)
{
- ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage());
+ ViewUtility.popupErrorMessage(mbean.getName(), "Server has thrown error \n" + ex.toString());
}
else if (ex instanceof InstanceNotFoundException)
{
- ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage());
+ ViewUtility.popupErrorMessage(mbean.getName(), "Managed Object Not Found \n" + ex.toString());
}
else if (ex instanceof MBeanException)
{
- String cause = ((MBeanException)ex).getTargetException().getMessage();
+ String cause = ((MBeanException)ex).getTargetException().toString();
if (cause == null)
- cause = ex.getMessage();
+ cause = ex.toString();
ViewUtility.popupInfoMessage(mbean.getName(), cause);
}
else if (ex instanceof JMException)
{
- ViewUtility.popupErrorMessage(mbean.getName(), ex.getMessage());
+ ViewUtility.popupErrorMessage(mbean.getName(), "Management Exception occured \n" + ex.toString());
}
else if (ex instanceof ManagementConsoleException)
{
@@ -171,9 +174,9 @@ public class MBeanUtility
}
else
{
- ViewUtility.popupError(mbean.getName(), "Error occured", ex);
+ ViewUtility.popupErrorMessage(mbean.getName(), ex.toString());
}
- //ex.printStackTrace();
+ ex.printStackTrace();
}
/**
@@ -204,7 +207,36 @@ public class MBeanUtility
serverRegistry.removeNotificationListener(mbean, name, type);
}
- public static int refreshAttribute(ManagedBean mbean, String attribute) throws Exception
+ /**
+ * Checks if the server registry contains attribute information for this mbean. If not then it queries the
+ * mbean server for complete mbean information, else it gets the latest value of the given attribute
+ * from mbean server.
+ * @return attribute data for the given mbean attribute
+ */
+ public static AttributeData getAttributeData(ManagedBean mbean, String attribute) throws Exception
+ {
+ JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(mbean);
+ ManagedAttributeModel attributeModel = serverRegistry.getAttributeModel(mbean);
+ if (attributeModel == null)
+ {
+ // If process is here, it means the mbeanInfo is not retrieved from mbean server even once for this mbean
+ getMBeanInfo(mbean);
+ }
+ else
+ {
+ // refresh attribute value from mbean server
+ refreshAttribute(mbean, attribute);
+ }
+ attributeModel = serverRegistry.getAttributeModel(mbean);
+ return attributeModel.getAttribute(attribute);
+ }
+
+ /**
+ * Retrieves the latest attribute value from mbean server for the given mbean attribute
+ * and also sets that value in the attribute model in the server registry
+ * @return latest attribute value for the given mbean attribute
+ */
+ public static Object refreshAttribute(ManagedBean mbean, String attribute) throws Exception
{
JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(mbean);
MBeanServerConnection mbsc = serverRegistry.getServerConnection();
@@ -215,10 +247,10 @@ public class MBeanUtility
}
Object value = mbsc.getAttribute(((JMXManagedObject)mbean).getObjectName(), attribute);
-
+ // update the attribute data in server registry for this attribute
ManagedAttributeModel attributeModel = serverRegistry.getAttributeModel(mbean);
attributeModel.setAttributeValue(attribute, value);
- return Integer.parseInt(String.valueOf(value));
+ return value;
}
/**
@@ -237,9 +269,12 @@ public class MBeanUtility
MBeanServerConnection mbsc = serverRegistry.getServerConnection();
MBeanAttributeInfo[] attributesInfo = null;
ManagedAttributeModel attributeModel = serverRegistry.getAttributeModel(mbean);
- // If retrieving attributeInfo for the first time.
+
if (attributeModel == null)
{
+ // If the process is here, then it means the attribute values are not retrieved from mbean server
+ // even once for this mbean. Create attribute model, retrieve values from mbean server and
+ // set the attribute model in server registry for this mbean
attributeModel = new ManagedAttributeModel();
attributesInfo = serverRegistry.getMBeanInfo(mbean).getAttributes();
attributes = new String[attributesInfo.length];
@@ -311,8 +346,8 @@ public class MBeanUtility
OperationDataModel dataModel = serverRegistry.getOperationModel(mbean);
if (dataModel == null)
{
- MBeanInfo mbeanInfo = serverRegistry.getMBeanInfo(mbean);
- MBeanOperationInfo[] operationsInfo = mbeanInfo.getOperations();
+ // Create operation model and set it in server registry for this mbean
+ MBeanOperationInfo[] operationsInfo = serverRegistry.getMBeanInfo(mbean).getOperations();
dataModel = new OperationDataModel();
for (int i = 0; i < operationsInfo.length; i++)
@@ -322,7 +357,6 @@ public class MBeanUtility
serverRegistry.setOperationModel(mbean, dataModel);
}
-
return dataModel;
}
@@ -333,15 +367,15 @@ public class MBeanUtility
*/
public static NotificationInfoModel[] getNotificationInfo(ManagedBean mbean)
{
-
JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(mbean);
MBeanNotificationInfo[] info = serverRegistry.getMBeanInfo(mbean).getNotifications();
+ // Check if this mbean sends any notification
if (info == null || info.length == 0)
return null;
+ // Create notification model if not already set in the server registry for this mbean
List<NotificationInfoModel> list = serverRegistry.getNotificationInfo(mbean);
-
if (list != null)
return list.toArray(new NotificationInfoModel[0]);
else
@@ -351,8 +385,43 @@ public class MBeanUtility
{
list.add(new NotificationInfoModel(info[i].getName(), info[i].getDescription(), info[i].getNotifTypes()));
}
- serverRegistry.setNotificationInfo(mbean, list);
+ // Set the notification model in the server registry for this mbean
+ serverRegistry.setNotificationInfo(mbean, list);
return list.toArray(new NotificationInfoModel[0]);
}
+
+ /**
+ * Retrieves all the MBeans from mbean server for a given domain
+ * @return list of ManagedBeans
+ */
+ public static List<ManagedBean> getManagedObjectsForDomain(ManagedServer server, String domain) throws Exception
+ {
+ List<ManagedBean> mbeans = new ArrayList<ManagedBean>();
+ JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
+ MBeanServerConnection mbsc = serverRegistry.getServerConnection();
+ ObjectName objName = new ObjectName(domain + ":*");
+ Set objectInstances = mbsc.queryMBeans(objName, null);
+
+ for (Iterator itr = objectInstances.iterator(); itr.hasNext();)
+ {
+ ObjectInstance instance = (ObjectInstance)itr.next();
+ ManagedBean obj = new JMXManagedObject(instance.getObjectName());
+ mbeans.add(obj);
+ }
+
+ return mbeans;
+ }
+
+ /**
+ * Returns all the domains for the given server. This method can be removed as now this RCP is specific to
+ * Qpid and domain is also fixed
+ */
+ public static List<String> getAllDomains(ManagedServer server) throws Exception
+ {
+ JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
+ MBeanServerConnection mbsc = serverRegistry.getServerConnection();
+ String[] domains = mbsc.getDomains();
+ return Arrays.asList(domains);
+ }
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/ManagedAttributeModel.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/ManagedAttributeModel.java
index 692e72fc5a..b3219f15ea 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/ManagedAttributeModel.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/model/ManagedAttributeModel.java
@@ -106,6 +106,11 @@ public class ManagedAttributeModel
return _attributeMap.values().toArray(new AttributeData[0]);
}
+ public AttributeData getAttribute(String name)
+ {
+ return _attributeMap.get(name);
+ }
+
public int getCount()
{
return _attributeMap.size();
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java
index 7a5217d58a..8bf4e30c64 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/AttributesTabControl.java
@@ -126,7 +126,7 @@ public class AttributesTabControl extends TabControl
_tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
_tableComposite.setLayout(new GridLayout());
_buttonsComposite = _toolkit.createComposite(_form.getBody());
- _tableComposite.setLayoutData(new GridData());
+ _buttonsComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true));
_buttonsComposite.setLayout(new GridLayout());
image = Display.getCurrent().getSystemImage(SWT.ICON_INFORMATION);
@@ -175,7 +175,6 @@ public class AttributesTabControl extends TabControl
/**
* Creates tableviewer for the attribute's table
- *
*/
private void createTableViewer()
{
@@ -200,7 +199,7 @@ public class AttributesTabControl extends TabControl
// Create and configure the button for attribute details
_detailsButton = _toolkit.createButton(_buttonsComposite, Constants.BUTTON_DETAILS, SWT.PUSH | SWT.CENTER);
_detailsButton.setFont(ApplicationRegistry.getFont(Constants.FONT_BUTTON));
- GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ GridData gridData = new GridData(SWT.CENTER, SWT.TOP, false, false);
gridData.widthHint = 80;
_detailsButton.setLayoutData(gridData);
_detailsButton.addSelectionListener(new SelectionAdapter()
@@ -225,7 +224,7 @@ public class AttributesTabControl extends TabControl
// Create and configure the button for editing attribute
_editButton = _toolkit.createButton(_buttonsComposite, Constants.BUTTON_EDIT_ATTRIBUTE, SWT.PUSH | SWT.CENTER);
_editButton.setFont(ApplicationRegistry.getFont(Constants.FONT_BUTTON));
- GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ GridData gridData = new GridData(SWT.CENTER, SWT.TOP, false, false);
gridData.widthHint = 80;
_editButton.setLayoutData(gridData);
_editButton.addSelectionListener(new SelectionAdapter()
@@ -247,7 +246,7 @@ public class AttributesTabControl extends TabControl
{
_graphButton = _toolkit.createButton(_buttonsComposite, Constants.BUTTON_GRAPH, SWT.PUSH | SWT.CENTER);
_graphButton.setFont(ApplicationRegistry.getFont(Constants.FONT_BUTTON));
- GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ GridData gridData = new GridData(SWT.CENTER, SWT.TOP, false, false);
gridData.widthHint = 80;
_graphButton.setLayoutData(gridData);
_graphButton.addSelectionListener(new SelectionAdapter()
@@ -270,7 +269,7 @@ public class AttributesTabControl extends TabControl
_refreshButton = _toolkit.createButton(_buttonsComposite, Constants.BUTTON_REFRESH, SWT.PUSH | SWT.CENTER);
_refreshButton.setFont(ApplicationRegistry.getFont(Constants.FONT_BUTTON));
- GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, false);
+ GridData gridData = new GridData(SWT.CENTER, SWT.TOP, false, false);
gridData.widthHint = 80;
_refreshButton.setLayoutData(gridData);
_refreshButton.addSelectionListener(new SelectionAdapter()
@@ -429,12 +428,14 @@ public class AttributesTabControl extends TabControl
}
Display display = Display.getCurrent();
- Shell shell = ViewUtility.createPopupShell("Attribute", width, height);
+ Shell shell = ViewUtility.createPopupShell(Constants.ATTRIBUTE, width, height);
createDetailsPopupContents(shell, data);
shell.open();
- while (!shell.isDisposed()) {
- if (!display.readAndDispatch()) {
+ while (!shell.isDisposed())
+ {
+ if (!display.readAndDispatch())
+ {
display.sleep();
}
}
@@ -520,7 +521,7 @@ public class AttributesTabControl extends TabControl
Composite composite = new Composite(parent, SWT.BORDER);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- ViewUtility.createTabularDataHolder(composite,(TabularDataSupport)attribute.getValue());
+ ViewUtility.createTabularDataHolder(_toolkit, composite,(TabularDataSupport)attribute.getValue());
}
else
{
@@ -818,7 +819,8 @@ public class AttributesTabControl extends TabControl
private void animate(Canvas canvas, AttributeData data) throws Exception
{
String attribute = data.getName();
- int value = MBeanUtility.refreshAttribute(_mbean, attribute);
+ Object valueObj = MBeanUtility.refreshAttribute(_mbean, attribute);
+ int value = Integer.parseInt(String.valueOf(valueObj));
Object canvasData = canvas.getData(GRAPH_VALUES);
long[] graphValues = (long[]) canvasData;
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java
new file mode 100644
index 0000000000..73d56634ec
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanTypeTabControl.java
@@ -0,0 +1,327 @@
+package org.apache.qpid.management.ui.views;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.qpid.management.ui.ApplicationRegistry;
+import org.apache.qpid.management.ui.Constants;
+import org.apache.qpid.management.ui.ManagedBean;
+import org.apache.qpid.management.ui.ServerRegistry;
+import org.apache.qpid.management.ui.jmx.MBeanUtility;
+import org.apache.qpid.management.ui.model.AttributeData;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.forms.widgets.Form;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * Class to create widgets and control display for mbeantype(eg Connection, Queue, Exchange) selection
+ * on the navigation view.
+ * @author Bhupendra Bhardwaj
+ *
+ */
+public class MBeanTypeTabControl
+{
+ private FormToolkit _toolkit = null;
+ private Form _form = null;
+ private TabFolder _tabFolder = null;
+ private Composite _composite = null;
+ private Composite _listComposite = null;
+ private Composite _buttonsComposite = null;
+ private Label _labelName = null;
+ private Label _labelDesc = null;
+ private Label _labelList = null;
+
+ private org.eclipse.swt.widgets.List _list = null;
+ private Button _refreshButton = null;
+ private Button _addButton = null;
+ private Button _sortBySizeButton = null;
+
+ private String _type = null;
+
+ // maps an mbean name with the mbean object. Required to get mbean object when an mbean
+ // is to be added to the navigation view.
+ private HashMap<String, ManagedBean> _objectsMap = new HashMap<String, ManagedBean>();
+ // Map required for sorting queues based on attribute values
+ private Map<AttributeData, ManagedBean> _queueMap = new LinkedHashMap<AttributeData, ManagedBean>();
+
+ private Sorter _sorterByName = new Sorter();
+ private ComparatorImpl _sorterByQueueDepth = new ComparatorImpl();
+
+ public MBeanTypeTabControl(TabFolder tabFolder)
+ {
+ _tabFolder = tabFolder;
+ _toolkit = new FormToolkit(_tabFolder.getDisplay());
+ _form = _toolkit.createForm(_tabFolder);
+ createWidgets();
+ addListeners();
+ }
+
+ public Control getControl()
+ {
+ return _form;
+ }
+
+ /**
+ * Adds listeners to all the buttons
+ */
+ private void addListeners()
+ {
+ _addButton.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e)
+ {
+ if (_list.getSelectionCount() == 0)
+ return;
+
+ String[] selectedItems = _list.getSelection();
+ for (int i = 0; i < selectedItems.length; i++)
+ {
+ String name = selectedItems[i];;
+ if (Constants.QUEUE.equals(_type))
+ {
+ int endIndex = name.lastIndexOf("(");
+ name = name.substring(0, endIndex -1);
+ }
+ // pass the ManagedBean to the navigation view to be added
+ ManagedBean mbean = _objectsMap.get(name);
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ NavigationView view = (NavigationView)window.getActivePage().findView(NavigationView.ID);
+ try
+ {
+ view.addManagedBean(mbean);
+ }
+ catch (Exception ex)
+ {
+ MBeanUtility.handleException(mbean, ex);
+ }
+ }
+ }
+ });
+
+ _refreshButton.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e)
+ {
+ try
+ {
+ refresh(_type);
+ }
+ catch (Exception ex)
+ {
+ MBeanUtility.handleException(ex);
+ }
+ }
+ });
+
+ _sortBySizeButton.addSelectionListener(new SelectionAdapter(){
+ public void widgetSelected(SelectionEvent e)
+ {
+ try
+ {
+ sortQueueByQueueDepth();
+ }
+ catch (Exception ex)
+ {
+ MBeanUtility.handleException(ex);
+ }
+ }
+ });
+ }
+
+ private void createWidgets()
+ {
+ _form.getBody().setLayout(new GridLayout());
+ _composite = _toolkit.createComposite(_form.getBody(), SWT.NONE);
+ _composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ GridLayout layout = new GridLayout(2, true);
+ layout.verticalSpacing = 10;
+ layout.horizontalSpacing = 0;
+ _composite.setLayout(layout);
+
+ _labelName = _toolkit.createLabel(_composite, "Type:", SWT.NONE);
+ GridData gridData = new GridData(SWT.CENTER, SWT.TOP, true, false, 2, 1);
+ _labelName.setLayoutData(gridData);
+ _labelName.setFont(ApplicationRegistry.getFont(Constants.FONT_BOLD));
+
+ _labelDesc = _toolkit.createLabel(_composite, " ", SWT.NONE);
+ _labelDesc.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false, 2, 1));
+ _labelDesc.setFont(ApplicationRegistry.getFont(Constants.FONT_ITALIC));
+
+ _addButton = _toolkit.createButton(_composite, "<- Add to Navigation", SWT.PUSH);
+ gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
+ _addButton.setLayoutData(gridData);
+
+ _refreshButton = _toolkit.createButton(_composite, Constants.BUTTON_REFRESH, SWT.PUSH);
+ gridData = new GridData(SWT.CENTER, SWT.CENTER, false, false);
+ gridData.widthHint = 80;
+ _refreshButton.setLayoutData(gridData);
+
+ // Composite to contain the item list
+ _listComposite = _toolkit.createComposite(_composite);
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ _listComposite.setLayoutData(gridData);
+ layout = new GridLayout();
+ layout.verticalSpacing = 0;
+ _listComposite.setLayout(layout);
+
+ // Label for item name
+ _labelList = _toolkit.createLabel(_listComposite, " ", SWT.NONE);
+ _labelList.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false));
+ _labelList.setFont(ApplicationRegistry.getFont(Constants.FONT_NORMAL));
+
+ _list = new List(_listComposite, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ _list.setLayoutData(gridData);
+
+
+ // Composite to contain buttons like - Sort by size
+ _buttonsComposite = _toolkit.createComposite(_composite);
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ _buttonsComposite.setLayoutData(gridData);
+ _buttonsComposite.setLayout(new GridLayout());
+
+ _sortBySizeButton = _toolkit.createButton(_buttonsComposite, "Sort by Queue Depth", SWT.PUSH);
+ gridData = new GridData(SWT.CENTER, SWT.CENTER, true, false);
+ _sortBySizeButton.setLayoutData(gridData);
+
+ }
+
+ public void refresh(String typeName) throws Exception
+ {
+ _type = typeName;
+ setHeader();
+ populateList();
+
+ _listComposite.layout();
+ _composite.layout();
+ _form.layout();
+ }
+
+ private void setHeader()
+ {
+ _labelName.setText("Type : " + _type);
+ _labelDesc.setText("Select the " + _type + "(s) to add in the Navigation View");
+ _labelList.setText("-- List of " + _type + "s --");
+ }
+
+ /**
+ * populates the map with mbean name and the mbean object.
+ * @throws Exception
+ */
+ private void populateList() throws Exception
+ {
+ // map should be cleared before populating it with new values
+ _objectsMap.clear();
+ _queueMap.clear();
+ ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(MBeanView.getServer());
+ String[] items = null;
+ java.util.List<ManagedBean> list = null;
+
+ // populate the map and list with appropriate mbeans
+ if (_type.equals(Constants.QUEUE))
+ {
+ list = serverRegistry.getQueues();
+ items = getQueueItems(list);
+ _sortBySizeButton.setVisible(true);
+ }
+ else if (_type.equals(Constants.EXCHANGE))
+ {
+ list = serverRegistry.getExchanges();
+ items = getItems(list);
+ _sortBySizeButton.setVisible(false);
+ }
+ else if (_type.equals(Constants.CONNECTION))
+ {
+ list = serverRegistry.getConnections();
+ items = getItems(list);
+ _sortBySizeButton.setVisible(false);
+ }
+ else
+ {
+ throw new Exception("Unknown mbean type " + _type);
+ }
+
+ _list.setItems(items);
+ }
+
+ // sets the map with appropriate mbean and name
+ private String[] getItems(java.util.List<ManagedBean> list)
+ {
+ Collections.sort(list, _sorterByName);
+ String[] items = new String[list.size()];
+ int i = 0;
+ for (ManagedBean mbean : list)
+ {
+ items[i++] = mbean.getName();
+ _objectsMap.put(mbean.getName(), mbean);
+ }
+ return items;
+ }
+
+ private String[] getQueueItems(java.util.List<ManagedBean> list) throws Exception
+ {
+ // Sort the list. It will keep the mbeans in sorted order in the _queueMap, which is required for
+ // sorting the queue according to size etc
+ Collections.sort(list, _sorterByName);
+ String[] items = new String[list.size()];
+ int i = 0;
+ for (ManagedBean mbean : list)
+ {
+ AttributeData data = MBeanUtility.getAttributeData(mbean, Constants.ATTRIBUTE_QUEUE_DEPTH);
+ String value = data.getValue().toString();
+ items[i] = mbean.getName() + " (" + value + " KB)";
+ _objectsMap.put(mbean.getName(), mbean);
+ _queueMap.put(data, mbean);
+ i++;
+ }
+ return items;
+ }
+
+ private void sortQueueByQueueDepth() throws Exception
+ {
+ // Queues are already in the alphabetically sorted order in _queueMap, now sort for queueDepth
+ java.util.List<AttributeData> list = new ArrayList<AttributeData>(_queueMap.keySet());
+ Collections.sort(list, _sorterByQueueDepth);
+
+ String[] items = new String[list.size()];
+ int i = 0;
+ for (AttributeData data : list)
+ {
+ ManagedBean mbean = _queueMap.get(data);
+ String value = data.getValue().toString();
+ items[i++] = mbean.getName() + " (" + value + " KB)";
+ }
+ _list.setItems(items);
+ }
+
+ private class ComparatorImpl implements java.util.Comparator<AttributeData>
+ {
+ public int compare(AttributeData data1, AttributeData data2)
+ {
+ Integer int1 = Integer.parseInt(data1.getValue().toString());
+ Integer int2 = Integer.parseInt(data2.getValue().toString());
+ return int1.compareTo(int2) * -1;
+ }
+ }
+
+ private class Sorter implements java.util.Comparator<ManagedBean>
+ {
+ public int compare(ManagedBean mbean1, ManagedBean mbean2)
+ {
+ return mbean1.getName().compareTo(mbean2.getName());
+ }
+ }
+}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
index 4b044c2e13..62871c4c91 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
@@ -25,8 +25,9 @@ import java.util.HashMap;
import org.apache.qpid.management.ui.ApplicationRegistry;
import org.apache.qpid.management.ui.Constants;
import org.apache.qpid.management.ui.ManagedBean;
+import org.apache.qpid.management.ui.ManagedServer;
+import org.apache.qpid.management.ui.ServerRegistry;
import org.apache.qpid.management.ui.exceptions.InfoRequiredException;
-import org.apache.qpid.management.ui.jmx.JMXServerRegistry;
import org.apache.qpid.management.ui.jmx.MBeanUtility;
import org.apache.qpid.management.ui.model.AttributeData;
import org.apache.qpid.management.ui.model.OperationData;
@@ -38,7 +39,6 @@ import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.TabFolder;
@@ -49,14 +49,22 @@ import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.ViewPart;
-
+/**
+ * MBean View create appropriate view based on the user selection on the Navigation View.
+ * Create TabFolder for all MBeans and displays the attribtues and method tabs.
+ * @author Bhupendra Bhardwaj
+ *
+ */
public class MBeanView extends ViewPart
{
public static final String ID = "org.apache.qpid.management.ui.mbeanView";
private FormToolkit _toolkit = null;
private Form _form = null;
+ private static ManagedServer _server = null;
+ private TreeObject _selectedNode = null;
private ManagedBean _mbean = null;
+ // This map contains a TabFolder for each kind of MBean. TabFolder is mapped with mbeantype(eg Connection, Queue etc)
private HashMap<String, TabFolder> tabFolderMap = new HashMap<String, TabFolder>();
private ISelectionListener selectionListener = new SelectionListenerImpl();
@@ -64,7 +72,8 @@ public class MBeanView extends ViewPart
private static final String OPERATIONS_CONTROL = "OperationsTabControl";
private static final String NOTIFICATIONS_CONTROL = "NotificationsTabControl";
-
+ // TabFolder to list all the mbeans for a given mbeantype(eg Connection, Queue, Exchange)
+ private TabFolder typeTabFolder = null;
/*
* Listener for the selection events in the navigation view
*/
@@ -76,37 +85,89 @@ public class MBeanView extends ViewPart
return;
IStructuredSelection ss = (IStructuredSelection) sel;
- TreeObject node = (TreeObject)ss.getFirstElement();
- showSelectedMBean(node);
+ _selectedNode = (TreeObject)ss.getFirstElement();
+
+
+ // mbean should be set to null. A selection done on the navigation view can be either an mbean or
+ // an mbeantype. For mbeantype selection(eg Connection, Queue, Exchange) _mbean will remain null.
+ _mbean = null;
+ setInvisible();
+ _form.setText(Constants.APPLICATION_NAME);
+
+ // If a selected node(mbean) gets unregistered from mbena server, mbenaview should should
+ // make the tabfolber for that mbean invisible
+ if (_selectedNode == null)
+ return;
+
+ setServer();
+ try
+ {
+ if (Constants.TYPE.equals(_selectedNode.getType()))
+ {
+ refreshTypeTabFolder(_selectedNode.getName());
+ }
+ else if (Constants.DOMAIN.equals(_selectedNode.getType()))
+ {
+ refreshTypeTabFolder(typeTabFolder.getItem(0));
+ }
+ else
+ {
+ showSelectedMBean();
+ }
+ _form.layout();
+ }
+ catch(Exception ex)
+ {
+ MBeanUtility.handleException(_mbean, ex);
+ }
}
}
- public void showSelectedMBean(TreeObject node)
+ /**
+ * Sets the managedServer based on the selection in the navigation view
+ * At any given time MBeanView will be displaying information for an mbean of mbeantype
+ * for a specifiv managed server. This server information will be used by the tab controllers
+ * to get server registry.
+ */
+ private void setServer()
{
- _mbean = null;
- setInvisible();
-
- if (node == null)
+ if (Constants.SERVER.equals(_selectedNode.getType()))
{
- _form.setText(Constants.APPLICATION_NAME);
- return;
+ _server = (ManagedServer)_selectedNode.getManagedObject();
}
-
- if (Constants.NOTIFICATION.equals(node.getType()))
+ else
{
- _mbean = (ManagedBean)node.getParent().getManagedObject();
+ TreeObject parent = _selectedNode.getParent();
+ while (parent != null && !parent.getType().equals(Constants.SERVER))
+ {
+ parent = parent.getParent();
+ }
+
+ if (parent != null && parent.getType().equals(Constants.SERVER))
+ _server = (ManagedServer)parent.getManagedObject();
}
- else if (Constants.MBEAN.equals(node.getType()))
+ }
+
+ public static ManagedServer getServer()
+ {
+ return _server;
+ }
+
+ private void showSelectedMBean() throws Exception
+ {
+ if (Constants.NOTIFICATION.equals(_selectedNode.getType()))
+ {
+ _mbean = (ManagedBean)_selectedNode.getParent().getManagedObject();
+ }
+ else if (Constants.MBEAN.equals(_selectedNode.getType()))
{
- _mbean = (ManagedBean)node.getManagedObject();
+ _mbean = (ManagedBean)_selectedNode.getManagedObject();
}
else
{
- _form.setText(Constants.APPLICATION_NAME);
return;
}
- setFocus();
try
{
MBeanUtility.getMBeanInfo(_mbean);
@@ -130,20 +191,17 @@ public class MBeanView extends ViewPart
}
_form.setText(text);
int tabIndex = 0;
- if (Constants.NOTIFICATION.equals(node.getType()))
+ if (Constants.NOTIFICATION.equals(_selectedNode.getType()))
{
tabIndex = tabFolder.getItemCount() -1;
}
TabItem tab = tabFolder.getItem(tabIndex);
- // refreshTab(tab);
// If folder is being set as visible after tab refresh, then the tab
- // doesn't have the focus.
-
+ // doesn't have the focus.
tabFolder.setSelection(tabIndex);
refreshTab(tab);
setVisible(tabFolder);
- _form.layout();
}
public void createPartControl(Composite parent)
@@ -156,23 +214,38 @@ public class MBeanView extends ViewPart
// Add selection listener for selection events in the Navigation view
getSite().getPage().addSelectionListener(NavigationView.ID, selectionListener);
+
+ // Add mbeantype TabFolder. This will list all the mbeans under a mbeantype (eg Queue, Exchange).
+ // Using this list mbeans will be added in the navigation view
+ createTypeTabFolder();
}
- public void refreshMBeanView()
+ public void refreshMBeanView() throws Exception
{
+ int tabIndex = 0;
+ TabItem tab = null;
if (_mbean == null)
- return;
-
- TabFolder tabFolder = tabFolderMap.get(_mbean.getType());
- if (tabFolder == null)
- return;
-
- int index = tabFolder.getSelectionIndex();
- TabItem tab = tabFolder.getItem(index);
- if (tab == null)
- return;
-
- refreshTab(tab);
+ {
+ tabIndex = typeTabFolder.getSelectionIndex();
+ if (tabIndex == -1)
+ return;
+
+ tab = typeTabFolder.getItem(tabIndex);
+ refreshTypeTabFolder(tab);
+ }
+ else
+ {
+ TabFolder tabFolder = tabFolderMap.get(_mbean.getType());
+ if (tabFolder == null)
+ return;
+
+ tabIndex = tabFolder.getSelectionIndex();
+ tab = tabFolder.getItem(tabIndex);
+ if (tab == null)
+ return;
+
+ refreshTab(tab);
+ }
_form.layout();
}
@@ -185,7 +258,6 @@ public class MBeanView extends ViewPart
layoutData.right = new FormAttachment(100);
layoutData.bottom = new FormAttachment(100);
tabFolder.setLayoutData(layoutData);
- tabFolder.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
tabFolder.setVisible(false);
createAttributesTab(tabFolder);
@@ -201,7 +273,7 @@ public class MBeanView extends ViewPart
}
});
- tabFolderMap.put(_mbean.getType(), tabFolder);
+ tabFolderMap.put(_mbean.getType(), tabFolder);
return tabFolder;
}
@@ -209,7 +281,7 @@ public class MBeanView extends ViewPart
{
// We can avoid refreshing the attributes tab because it's control
// already contains the required values. But it is added for now and
- // will remove if there is any perfornce or any such issue.
+ // will remove if there is any performance issue or any other issue.
// The operations control should be refreshed because there is only one
// controller for all operations tab.
// The Notifications control needs to refresh with latest set of notifications
@@ -218,6 +290,7 @@ public class MBeanView extends ViewPart
return;
TabFolder tabFolder = tab.getParent();
+ // If an operation tab is selected, the operation data is attached with the tab
if (tab.getData() != null && (tab.getData() instanceof OperationData))
{
// Refresh selected operation tab
@@ -259,7 +332,7 @@ public class MBeanView extends ViewPart
private void createAttributesTab(TabFolder tabFolder)
{
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(_mbean);
+ ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(_mbean);
if (serverRegistry.getAttributeModel(_mbean).getCount() == 0)
{
return;
@@ -269,12 +342,12 @@ public class MBeanView extends ViewPart
tab.setText(Constants.ATTRIBUTES);
AttributesTabControl control = new AttributesTabControl(tabFolder);
tab.setControl(control.getControl());
- tabFolder.setData(ATTRIBUTES_CONTROL, control);
+ tabFolder.setData(ATTRIBUTES_CONTROL, control);
}
private void createOperationTabs(TabFolder tabFolder)
{
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(_mbean);
+ ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(_mbean);
int operationsCount = serverRegistry.getOperationModel(_mbean).getCount();
if (operationsCount == 0)
{
@@ -314,7 +387,7 @@ public class MBeanView extends ViewPart
throw new InfoRequiredException("Please select the managed object and then attribute to be edited");
String name = (_mbean.getName() != null) ? _mbean.getName() : _mbean.getType();
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(_mbean);
+ ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(_mbean);
if (serverRegistry.getAttributeModel(_mbean).getCount() == 0)
{
throw new InfoRequiredException("There are no attributes to be edited for " + name);
@@ -336,6 +409,85 @@ public class MBeanView extends ViewPart
tabControl.createDetailsPopup(attribute);
}
+ /**
+ * Creates TabFolder and tabs for each mbeantype (eg Connection, Queue, Exchange)
+ */
+ private void createTypeTabFolder()
+ {
+ typeTabFolder = new TabFolder(_form.getBody(), SWT.NONE);
+ FormData layoutData = new FormData();
+ layoutData.left = new FormAttachment(0);
+ layoutData.top = new FormAttachment(0);
+ layoutData.right = new FormAttachment(100);
+ layoutData.bottom = new FormAttachment(100);
+ typeTabFolder.setLayoutData(layoutData);
+ typeTabFolder.setVisible(false);
+
+ MBeanTypeTabControl controller = new MBeanTypeTabControl(typeTabFolder);
+ typeTabFolder.setData("CONTROLLER", controller);
+
+ TabItem tab = new TabItem(typeTabFolder, SWT.NONE);
+ tab.setText(Constants.CONNECTION);
+ tab.setControl(controller.getControl());
+
+ tab = new TabItem(typeTabFolder, SWT.NONE);
+ tab.setText(Constants.EXCHANGE);
+ tab.setControl(controller.getControl());
+
+ tab = new TabItem(typeTabFolder, SWT.NONE);
+ tab.setText(Constants.QUEUE);
+ tab.setControl(controller.getControl());
+
+ typeTabFolder.addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event evt)
+ {
+ TabItem tab = (TabItem)evt.item;
+ try
+ {
+ refreshTypeTabFolder(tab);
+ }
+ catch (Exception ex)
+ {
+ MBeanUtility.handleException(ex);
+ }
+ }
+ });
+ }
+
+ /**
+ * Refreshes the Selected mbeantype tab. The control lists all the available mbeans
+ * for an mbeantype(eg Queue, Exchange etc)
+ * @param tab
+ * @throws Exception
+ */
+ private void refreshTypeTabFolder(TabItem tab) throws Exception
+ {
+ if (tab == null)
+ {
+ return;
+ }
+ typeTabFolder.setSelection(tab);
+ MBeanTypeTabControl controller = (MBeanTypeTabControl)typeTabFolder.getData("CONTROLLER");
+ controller.refresh(tab.getText());
+ typeTabFolder.setVisible(true);
+ }
+
+ private void refreshTypeTabFolder(String type) throws Exception
+ {
+ if (Constants.CONNECTION.equals(type))
+ {
+ refreshTypeTabFolder(typeTabFolder.getItem(0));
+ }
+ else if (Constants.EXCHANGE.equals(type))
+ {
+ refreshTypeTabFolder(typeTabFolder.getItem(1));
+ }
+ else if (Constants.QUEUE.equals(type))
+ {
+ refreshTypeTabFolder(typeTabFolder.getItem(2));
+ }
+ }
/**
* hides other folders and makes the given one visible.
@@ -358,6 +510,11 @@ public class MBeanView extends ViewPart
{
folder.setVisible(false);
}
+
+ if (typeTabFolder != null)
+ {
+ typeTabFolder.setVisible(false);
+ }
}
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
index 4319a4bd10..619aa06598 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NavigationView.java
@@ -28,13 +28,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
-import java.util.Set;
-
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectInstance;
-import javax.management.ObjectName;
import org.apache.qpid.management.ui.ApplicationRegistry;
import org.apache.qpid.management.ui.Constants;
@@ -42,8 +36,9 @@ import org.apache.qpid.management.ui.ManagedBean;
import org.apache.qpid.management.ui.ManagedServer;
import org.apache.qpid.management.ui.ServerRegistry;
import org.apache.qpid.management.ui.exceptions.InfoRequiredException;
-import org.apache.qpid.management.ui.jmx.JMXManagedObject;
+import org.apache.qpid.management.ui.exceptions.ManagementConsoleException;
import org.apache.qpid.management.ui.jmx.JMXServerRegistry;
+import org.apache.qpid.management.ui.jmx.MBeanUtility;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IFontProvider;
@@ -64,7 +59,11 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.part.ViewPart;
-
+/**
+ * Navigation View for navigating the managed servers and managed beans on
+ * those servers
+ * @author Bhupendra Bhardwaj
+ */
public class NavigationView extends ViewPart
{
public static final String ID = "org.apache.qpid.management.ui.navigationView";
@@ -73,8 +72,6 @@ public class NavigationView extends ViewPart
private TreeViewer _treeViewer = null;
private TreeObject _rootNode = null;
private TreeObject _serversRootNode = null;
- // List of all server nodes (connecged or removed)
- //private List<TreeObject> _serverNodeList = new ArrayList<TreeObject>();
// Map of connected servers
private HashMap<ManagedServer, TreeObject> _managedServerMap = new HashMap<ManagedServer, TreeObject>();
@@ -98,6 +95,9 @@ public class NavigationView extends ViewPart
createListeners();
}
+ /**
+ * Creates listeners for the JFace treeviewer
+ */
private void createListeners()
{
_treeViewer.addDoubleClickListener(new IDoubleClickListener()
@@ -132,12 +132,17 @@ public class NavigationView extends ViewPart
});
}
+ /**
+ * Creates Qpid Server connection using JMX RMI protocol
+ * @param server
+ * @throws Exception
+ */
private void createRMIServerConnection(ManagedServer server) throws Exception
{
try
{
// Currently Qpid Management Console only supports JMX MBeanServer
- JMXServerRegistry serverRegistry = new JMXServerRegistry(server);
+ ServerRegistry serverRegistry = new JMXServerRegistry(server);
ApplicationRegistry.addServer(server, serverRegistry);
}
catch(Exception ex)
@@ -151,14 +156,24 @@ public class NavigationView extends ViewPart
return "service:jmx:rmi:///jndi/rmi://" + host + "/jmxrmi";
}
-
+ /**
+ * Adds a new server node in the navigation view if server connection is successful.
+ * @param transportProtocol
+ * @param host
+ * @param port
+ * @param domain
+ * @throws Exception
+ */
public void addNewServer(String transportProtocol, String host, String port, String domain)
throws Exception
{
+ String serverAddress = host + ":" + port;
+ String url = null;
+ ManagedServer managedServer = null;
+
if ("RMI".equals(transportProtocol))
- {
- String serverAddress = host + ":" + port;
- String url = getRMIURL(serverAddress);
+ {
+ url = getRMIURL(serverAddress);
List<TreeObject> list = _serversRootNode.getChildren();
for (TreeObject node : list)
{
@@ -166,30 +181,36 @@ public class NavigationView extends ViewPart
throw new InfoRequiredException("Server " + serverAddress + " is already added");
}
- ManagedServer managedServer = new ManagedServer(url, domain);
+ managedServer = new ManagedServer(url, domain);
managedServer.setName(serverAddress);
- createRMIServerConnection(managedServer);
-
- // RMI server connection is successful. Now add the server in the tree
- TreeObject serverNode = new TreeObject(serverAddress, Constants.SERVER);
- serverNode.setUrl(url);
- serverNode.setManagedObject(managedServer);
- _serversRootNode.addChild(serverNode);
-
- // Add server in the connected server map
- _managedServerMap.put(managedServer, serverNode);
- populateServer(serverNode);
- _treeViewer.refresh();
-
- // save server address in file
- addServerAddressInFile(serverAddress);
+ createRMIServerConnection(managedServer);
}
else
{
throw new InfoRequiredException(transportProtocol + " transport is not supported");
}
+
+ // Server connection is successful. Now add the server in the tree
+ TreeObject serverNode = new TreeObject(serverAddress, Constants.SERVER);
+ serverNode.setUrl(url);
+ serverNode.setManagedObject(managedServer);
+ _serversRootNode.addChild(serverNode);
+
+ // Add server in the connected server map
+ _managedServerMap.put(managedServer, serverNode);
+ populateServer(serverNode);
+ _treeViewer.refresh();
+
+ // save server address in file
+ addServerAddressInFile(serverAddress);
}
+ /**
+ * Server addresses are stored in a file. When user launches the application again, the
+ * server addresses are picked up from the file and shown in the navigfation view. This method
+ * adds the server address in a file, when a new server is added in the navigation view.
+ * @param serverAddress
+ */
private void addServerAddressInFile(String serverAddress)
{
File file = new File(INI_FILENAME);
@@ -210,11 +231,14 @@ public class NavigationView extends ViewPart
}
}
-
+ /**
+ * Queries the qpid server for MBeans and populates the navigation view with all MBeans for
+ * the given server node.
+ * @param serverNode
+ */
private void populateServer(TreeObject serverNode)
{
ManagedServer server = (ManagedServer)serverNode.getManagedObject();
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
String domain = server.getDomain();
try
{
@@ -228,11 +252,10 @@ public class NavigationView extends ViewPart
else
{
List<TreeObject> domainList = new ArrayList<TreeObject>();
- MBeanServerConnection mbsc = serverRegistry.getServerConnection();
- String[] domains = mbsc.getDomains();
- for (int i = 0; i < domains.length; i++)
+ List<String> domains = MBeanUtility.getAllDomains(server);;
+ for (String domainName : domains)
{
- TreeObject domainNode = new TreeObject(domains[i], Constants.DOMAIN);
+ TreeObject domainNode = new TreeObject(domainName, Constants.DOMAIN);
domainNode.setParent(serverNode);
domainList.add(domainNode);
@@ -247,80 +270,118 @@ public class NavigationView extends ViewPart
}
}
+ /**
+ * Queries the Qpid Server and populates the given domain node with all MBeans undser that domain.
+ * @param domain
+ * @throws IOException
+ * @throws Exception
+ */
@SuppressWarnings("unchecked")
private void populateDomain(TreeObject domain) throws IOException, Exception
{
ManagedServer server = (ManagedServer)domain.getParent().getManagedObject();
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
- String domainName = domain.getName();
- MBeanServerConnection mbsc = serverRegistry.getServerConnection();
+ // Add these three types - Connection, Exchange, Queue
+ // By adding these, these will always be available, even if there are no mbeans under thse types
+ // This is required because, the mbeans will be added from mbeanview, by selecting from the list
+ TreeObject typeChild = new TreeObject(Constants.CONNECTION, Constants.TYPE);
+ typeChild.setParent(domain);
+ typeChild = new TreeObject(Constants.EXCHANGE, Constants.TYPE);
+ typeChild.setParent(domain);
+ typeChild = new TreeObject(Constants.QUEUE, Constants.TYPE);
+ typeChild.setParent(domain);
-
- ObjectName objName = new ObjectName(domainName + ":*");
- Set queryMBeans = mbsc.queryMBeans(objName, null);
- final Set<ObjectInstance> objectInstances = queryMBeans;
-
- for (Iterator<ObjectInstance> itr = objectInstances.iterator(); itr.hasNext();)
+
+ // Now populate the mbenas under those types
+ List<ManagedBean> mbeans = MBeanUtility.getManagedObjectsForDomain(server, domain.getName());
+ for (ManagedBean mbean : mbeans)
{
- ObjectInstance instance = itr.next();
- ManagedBean obj = new JMXManagedObject(instance.getObjectName());
- obj.setServer(server);
- addManagedBean(domain, obj);
+ mbean.setServer(server);
+ ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(server);
+ serverRegistry.addManagedObject(mbean);
+
+ // Add all mbeans other than Connections, Exchanges and Queues. Because these will be added
+ // manually by selecting from MBeanView
+ if (!(mbean.getType().equals(Constants.CONNECTION) || mbean.getType().equals(Constants.EXCHANGE) || mbean.getType().equals(Constants.QUEUE)))
+ {
+ addManagedBean(domain, mbean);
+ }
}
}
- private TreeObject getIfTypeAlreadyExists(TreeObject domain, String type)
+ /**
+ * Checks if a particular mbeantype is already there in the navigation view for a domain.
+ * This is used while populating domain with mbeans.
+ * @param domain
+ * @param typeName
+ * @return Node if given mbeantype already exists, otherwise null
+ */
+ private TreeObject getMBeanTypeNode(TreeObject domain, String typeName)
{
- List<TreeObject> types = domain.getChildren();
+ List<TreeObject> childNodes = domain.getChildren();
- for (TreeObject child : types)
+ for (TreeObject child : childNodes)
{
- if (Constants.TYPE.equals(child.getType()) && type.equals(child.getName()))
+ if (Constants.TYPE.equals(child.getType()) && typeName.equals(child.getName()))
return child;
}
return null;
}
- private void addManagedBean(TreeObject domain, ManagedBean obj)
+ private boolean doesMBeanNodeAlreadyExist(TreeObject typeNode, String mbeanName)
{
- ManagedServer server = (ManagedServer)domain.getParent().getManagedObject();
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
- serverRegistry.addManagedObject(obj);
-
- String type = obj.getType();
- String name = obj.getName();
+ List<TreeObject> childNodes = typeNode.getChildren();
+ for (TreeObject child : childNodes)
+ {
+ if (Constants.MBEAN.equals(child.getType()) && mbeanName.equals(child.getName()))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Adds the given MBean to the given domain node. Creates Notification node for the MBean.
+ * @param domain
+ * @param mbean mbean
+ */
+ private void addManagedBean(TreeObject domain, ManagedBean mbean) throws Exception
+ {
+ String type = mbean.getType();
+ String name = mbean.getName();
+
+ TreeObject typeNode = getMBeanTypeNode(domain, type);
+ if (typeNode != null && doesMBeanNodeAlreadyExist(typeNode, name))
+ return;
- TreeObject typeChild = getIfTypeAlreadyExists(domain, type);
TreeObject mbeanNode = null;
- if (typeChild != null) // if type is already added as a TreeItem
+ if (typeNode != null) // type node already exists
{
if (name == null)
{
- System.out.println("Two mbeans can't exist without a name and with same type");
- return;
+ throw new ManagementConsoleException("Two mbeans can't exist without a name and with same type");
}
- mbeanNode = new TreeObject(obj);
- mbeanNode.setParent(typeChild);
+ mbeanNode = new TreeObject(mbean);
+ mbeanNode.setParent(typeNode);
}
else
{
- if (name != null) // An managedObject with type and name
+ // type node does not exist. Now check if node to be created as mbeantype or MBean
+ if (name != null) // A managedObject with type and name
{
- typeChild = new TreeObject(type, Constants.TYPE);
- typeChild.setParent(domain);
- mbeanNode = new TreeObject(obj);
- mbeanNode.setParent(typeChild);
+ typeNode = new TreeObject(type, Constants.TYPE);
+ typeNode.setParent(domain);
+ mbeanNode = new TreeObject(mbean);
+ mbeanNode.setParent(typeNode);
}
- else // An managedObject with only type
+ else // A managedObject with only type
{
- mbeanNode = new TreeObject(obj);
+ mbeanNode = new TreeObject(mbean);
mbeanNode.setParent(domain);
}
}
// Add notification node
- // TODO: show this only of the mbean sends any notification
+ // TODO: show this only if the mbean sends any notification
TreeObject notificationNode = new TreeObject(Constants.NOTIFICATION, Constants.NOTIFICATION);
notificationNode.setParent(mbeanNode);
}
@@ -373,6 +434,9 @@ public class NavigationView extends ViewPart
}
+ /**
+ * Closes the Qpid server connection
+ */
public void disconnect() throws Exception
{
TreeObject selectedNode = getSelectedServerNode();
@@ -408,6 +472,11 @@ public class NavigationView extends ViewPart
_treeViewer.refresh();
}
+ /**
+ * Closes the Qpid server connection if not already closed and removes the server node from the navigation view and
+ * also from the ini file stored in the system.
+ * @throws Exception
+ */
public void removeServer() throws Exception
{
disconnect();
@@ -430,7 +499,6 @@ public class NavigationView extends ViewPart
list.remove(objectToRemove);
}
- //_serverNodeList.remove(objectToRemove);
_treeViewer.refresh();
// Remove from the ini file
@@ -445,6 +513,10 @@ public class NavigationView extends ViewPart
out.close();
}
+ /**
+ * @return the server addresses from the ini file
+ * @throws Exception
+ */
private List<String> getServerListFromFile() throws Exception
{
BufferedReader in = new BufferedReader(new FileReader(INI_FILENAME));
@@ -538,6 +610,9 @@ public class NavigationView extends ViewPart
_treeViewer.refresh();
}
+ /**
+ * Content provider class for the tree viewer
+ */
private class ContentProviderImpl implements ITreeContentProvider
{
public Object[] getElements(Object parent)
@@ -574,6 +649,9 @@ public class NavigationView extends ViewPart
}
}
+ /**
+ * Label provider class for the tree viewer
+ */
private class LabelProviderImpl extends LabelProvider implements IFontProvider
{
public Image getImage(Object element)
@@ -615,24 +693,6 @@ public class NavigationView extends ViewPart
}
return ApplicationRegistry.getFont(Constants.FONT_NORMAL);
}
-
- /*
- public Color getForeground(Object element)
- {
- TreeObject node = (TreeObject)element;
- if (node.getType().equals(Constants.SERVER))
- {
- if (!node.getChildren().isEmpty())
- return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN);
- else
- return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY);
- }
- return Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
- }
- public Color getBackground(Object element)
- {
- return _treeViewer.getControl().getBackground();
- }*/
} // End of LabelProviderImpl
@@ -641,12 +701,12 @@ public class NavigationView extends ViewPart
public int category(Object element)
{
TreeObject node = (TreeObject)element;
- if (node.getType().equals(Constants.MBEAN))
+ if (node.getType().equals(Constants.MBEAN))
return 1;
return 2;
}
}
-
+
/**
* Worker thread, which keeps looking for new ManagedObjects to be added and
* unregistered objects to be removed from the tree.
@@ -668,60 +728,36 @@ public class NavigationView extends ViewPart
catch(Exception ex)
{
- }
- refreshAddedObjects();
+ }
refreshRemovedObjects();
refreshClosedServerConnections();
}// end of while loop
}// end of run method.
}// end of Worker class
-
- private void refreshAddedObjects()
+ public void addManagedBean(ManagedBean mbean) throws Exception
{
- for (ManagedServer server : _managedServerMap.keySet())
+ TreeObject treeServerObject = _managedServerMap.get(mbean.getServer());
+ List<TreeObject> domains = treeServerObject.getChildren();
+ TreeObject domain = null;
+ for (TreeObject child : domains)
{
- JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
- if (serverRegistry == null) // server connection is closed
- continue;
-
- final List<ManagedBean> list = serverRegistry.getObjectsToBeAdded();
- if (list != null)
+ if (child.getName().equals(mbean.getDomain()))
{
- Display display = getSite().getShell().getDisplay();
- display.syncExec(new Runnable()
- {
- public void run()
- {
- for (ManagedBean obj : list)
- {
- System.out.println("adding " + obj.getName() + " " + obj.getType());
- TreeObject treeServerObject = _managedServerMap.get(obj.getServer());
- List<TreeObject> domains = treeServerObject.getChildren();
- TreeObject domain = null;
- for (TreeObject child : domains)
- {
- if (child.getName().equals(obj.getDomain()))
- {
- domain = child;
- break;
- }
- }
-
- addManagedBean(domain, obj);
- }
- _treeViewer.refresh();
- }
- });
+ domain = child;
+ break;
}
}
+
+ addManagedBean(domain, mbean);
+ _treeViewer.refresh();
}
private void refreshRemovedObjects()
{
for (ManagedServer server : _managedServerMap.keySet())
{
- final JMXServerRegistry serverRegistry = (JMXServerRegistry)ApplicationRegistry.getServerRegistry(server);
+ final ServerRegistry serverRegistry = ApplicationRegistry.getServerRegistry(server);
if (serverRegistry == null) // server connection is closed
continue;
@@ -758,8 +794,8 @@ public class NavigationView extends ViewPart
}
/**
- *
- *
+ * Gets the list of closed server connection from the ApplicationRegistry and then removes
+ * the closed server nodes from the navigation view
*/
private void refreshClosedServerConnections()
{
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java
index c1784d0bf1..3eb93f55d3 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/NotificationsTabControl.java
@@ -196,7 +196,7 @@ public class NotificationsTabControl extends TabControl
formData = new FormData();
formData.top = new FormAttachment(notificationNameCombo, 5);
formData.left = new FormAttachment(fixedLabel, 10);
- formData.right = new FormAttachment(80);
+ formData.right = new FormAttachment(100);
descriptionLabel.setLayoutData(formData);
descriptionLabel.setText(" ");
descriptionLabel.setFont(ApplicationRegistry.getFont(Constants.FONT_ITALIC));
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java
index d951642736..58349ab7a5 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/OperationTabControl.java
@@ -492,11 +492,11 @@ public class OperationTabControl extends TabControl
{
if (result instanceof TabularDataSupport)
{
- ViewUtility.createTabularDataHolder(parent, (TabularDataSupport)result);
+ ViewUtility.createTabularDataHolder(_toolkit, parent, (TabularDataSupport)result);
}
else if (result instanceof CompositeDataSupport)
{
- ViewUtility.populateCompositeDataHolder(parent, (CompositeDataSupport)result);
+ ViewUtility.populateCompositeDataHolder(_toolkit, parent, (CompositeDataSupport)result);
}
}
@@ -521,6 +521,9 @@ public class OperationTabControl extends TabControl
*/
private void clearParameterValues(Composite control)
{
+ if (control == null)
+ return;
+
Control[] controls = control.getChildren();
if (controls == null || controls.length == 0)
return;
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
index 995206f248..ef3d6f0106 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
@@ -51,6 +51,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.FormToolkit;
public class ViewUtility
{
@@ -75,13 +76,11 @@ public class ViewUtility
SUPPORTED_ARRAY_DATATYPES.add("java.lang.Double");
SUPPORTED_ARRAY_DATATYPES.add("java.util.Date");
}
-
+
@SuppressWarnings("unchecked")
- public static void createTabularDataHolder(Composite parent, TabularDataSupport tabularData)
+ public static void createTabularDataHolder(FormToolkit toolkit, Composite parent, TabularDataSupport tabularData)
{
- Composite composite = new Composite(parent, SWT.BORDER);
- //composite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
- //composite.setBackground(parent.getBackground());
+ Composite composite = toolkit.createComposite(parent, SWT.BORDER);
GridLayout layout = new GridLayout(4, true);
layout.horizontalSpacing = 0;
layout.marginWidth = 0;
@@ -94,28 +93,27 @@ public class ViewUtility
ArrayList<Map.Entry> list = new ArrayList<Map.Entry>(entrySet);
if (list.size() == 0)
{
- Text text = new Text(composite, SWT.CENTER | SWT.SINGLE | SWT.READ_ONLY);
- text.setText(" No records ");
- //text.setBackground(parent.getBackground());
+ Text text = toolkit.createText(composite, " No records ", SWT.CENTER | SWT.SINGLE | SWT.READ_ONLY);
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1);
text.setLayoutData(layoutData);
return;
}
- // Attach the tabular record to be retrieve and shown
+ // Attach the tabular record to be retrieved and shown later when record is traversed
+ // using first/next/previous/last buttons
composite.setData(list);
// Create button and the composite for CompositeData
- Composite compositeDataHolder = createCompositeDataHolder(composite,
+ Composite compositeDataHolder = createCompositeDataHolder(toolkit, composite,
tabularData.getTabularType().getRowType());
// display the first record
CompositeData data = (CompositeData)(list.get(0)).getValue();
composite.setData(INDEX, 0);
- populateCompositeDataHolder(compositeDataHolder, data);
+ populateCompositeDataHolder(toolkit, compositeDataHolder, data);
enableOrDisableTraversalButtons(composite);
}
- public static void enableOrDisableTraversalButtons(Composite composite)
+ private static void enableOrDisableTraversalButtons(Composite composite)
{
int index = (Integer)composite.getData(INDEX);
int size = ((List)composite.getData()).size();
@@ -137,40 +135,36 @@ public class ViewUtility
}
}
- public static Composite createCompositeDataHolder(final Composite dataHolder, CompositeType compositeType)
+ public static Composite createCompositeDataHolder(final FormToolkit toolkit, final Composite dataHolder, CompositeType compositeType)
{
- Label description = new Label(dataHolder, SWT.CENTER);
- description.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false, 4, 1));
String desc = compositeType.getDescription();
+ Label description = toolkit.createLabel(dataHolder, desc, SWT.CENTER);
+ description.setLayoutData(new GridData(SWT.CENTER, SWT.TOP, true, false, 4, 1));
// TODO nameLabel.setFont(font);
description.setText(desc);
// Add traversal buttons
- final Button firstRecordButton = new Button(dataHolder, SWT.PUSH);
- firstRecordButton.setText(FIRST);
+ final Button firstRecordButton = toolkit.createButton(dataHolder, FIRST, SWT.PUSH);
GridData layoutData = new GridData (GridData.HORIZONTAL_ALIGN_END);
layoutData.widthHint = 80;
firstRecordButton.setLayoutData(layoutData);
- final Button nextRecordButton = new Button(dataHolder, SWT.PUSH);
- nextRecordButton.setText(NEXT);
+ final Button nextRecordButton = toolkit.createButton(dataHolder, NEXT, SWT.PUSH);
layoutData = new GridData (GridData.HORIZONTAL_ALIGN_END);
layoutData.widthHint = 80;
nextRecordButton.setLayoutData(layoutData);
- final Button previousRecordButton = new Button(dataHolder, SWT.PUSH);
- previousRecordButton.setText(PREV);
+ final Button previousRecordButton = toolkit.createButton(dataHolder, PREV, SWT.PUSH);
layoutData = new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING);
layoutData.widthHint = 80;
previousRecordButton.setLayoutData(layoutData);
- final Button lastRecordButton = new Button(dataHolder, SWT.PUSH);
- lastRecordButton.setText(LAST);
+ final Button lastRecordButton = toolkit.createButton(dataHolder, LAST, SWT.PUSH);
layoutData = new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING);
layoutData.widthHint = 80;
lastRecordButton.setLayoutData(layoutData);
- final Composite composite = new Composite(dataHolder, SWT.NONE);
+ final Composite composite = toolkit.createComposite(dataHolder, SWT.NONE);
GridLayout layout = new GridLayout();
layout.horizontalSpacing = layout.verticalSpacing = 0;
layout.marginHeight = layout.marginWidth = 0;
@@ -195,7 +189,7 @@ public class ViewUtility
Button traverseButton =(Button)e.widget;
CompositeData data = getCompositeData(dataHolder, traverseButton.getText());
- populateCompositeDataHolder(composite, data);
+ populateCompositeDataHolder(toolkit, composite, data);
enableOrDisableTraversalButtons(dataHolder);
}
};
@@ -248,7 +242,7 @@ public class ViewUtility
}
@SuppressWarnings("unchecked")
- public static void populateCompositeDataHolder(Composite parent, CompositeData data/*String dataIndex*/)
+ public static void populateCompositeDataHolder(FormToolkit toolkit, Composite parent, CompositeData data/*String dataIndex*/)
{
Control[] oldControls = parent.getChildren();
for (int i = 0; i < oldControls.length; i++)
@@ -256,7 +250,7 @@ public class ViewUtility
oldControls[i].dispose();
}
- Composite compositeHolder = new Composite(parent, SWT.NONE);
+ Composite compositeHolder = toolkit.createComposite(parent, SWT.NONE);
GridLayout layout = new GridLayout(4, false);
layout.horizontalSpacing = 10;
compositeHolder.setLayout(layout);
@@ -271,12 +265,10 @@ public class ViewUtility
OpenType itemType = data.getCompositeType().getType(itemName);
if (compositeHolder.getData(itemName) == null)
{
- Label keyLabel = new Label(compositeHolder, SWT.TRAIL);
- keyLabel.setText(itemName);
+ Label keyLabel = toolkit.createLabel(compositeHolder, itemName, SWT.TRAIL);
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1);
layoutData.minimumWidth = 70;
keyLabel.setLayoutData(layoutData);
- System.out.println(itemType);
if (itemType.isArray())
{
@@ -298,12 +290,12 @@ public class ViewUtility
if (mimeType.equals("text/plain"))
{
- displayByteArray(compositeHolder, data, itemName, encoding);
+ displayByteArray(toolkit, compositeHolder, data, itemName, encoding);
}
}
else
{
- displayNotSupportedDataType(compositeHolder);
+ displayNotSupportedDataType(toolkit, compositeHolder);
}
}
// If array of any other supported type, show as a list of String array
@@ -313,23 +305,22 @@ public class ViewUtility
}
else
{
- displayNotSupportedDataType(compositeHolder);
+ displayNotSupportedDataType(toolkit, compositeHolder);
}
}
else if (itemType instanceof TabularType)
{
- Composite composite = new Composite(compositeHolder, SWT.NONE);
+ Composite composite = toolkit.createComposite(compositeHolder, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1));
layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
- createTabularDataHolder(composite, (TabularDataSupport)data.get(itemName));
+ createTabularDataHolder(toolkit, composite, (TabularDataSupport)data.get(itemName));
}
else
{
- Text valueText = new Text(compositeHolder, SWT.READ_ONLY | SWT.BORDER);
- valueText.setText(String.valueOf(data.get(itemName)));
+ Text valueText = toolkit.createText(compositeHolder, String.valueOf(data.get(itemName)), SWT.READ_ONLY | SWT.BORDER);
valueText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1));
}
}
@@ -340,7 +331,7 @@ public class ViewUtility
} //end of method
- private static void displayByteArray(Composite compositeHolder, CompositeData data, String itemName, String encoding)
+ private static void displayByteArray(FormToolkit toolkit, Composite compositeHolder, CompositeData data, String itemName, String encoding)
{
Byte[] arrayItems = (Byte[])data.get(itemName);
byte[] byteArray = new byte[arrayItems.length];
@@ -354,9 +345,8 @@ public class ViewUtility
String textMessage = new String(byteArray, encoding);
System.out.println("\nMessage : \n" + textMessage + "\n");
- Text valueText = new Text(compositeHolder, SWT.READ_ONLY | SWT.BORDER |
+ Text valueText = toolkit.createText(compositeHolder, textMessage, SWT.READ_ONLY | SWT.BORDER |
SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
- valueText.setText(textMessage);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
gridData.heightHint = 300;
valueText.setLayoutData(gridData);
@@ -369,8 +359,7 @@ public class ViewUtility
public static int popupInfoMessage(String title, String message)
{
- MessageBox messageBox = new MessageBox(Display.getCurrent().getActiveShell(),
- SWT.ICON_INFORMATION | SWT.OK);
+ MessageBox messageBox = new MessageBox(Display.getCurrent().getActiveShell(), SWT.ICON_INFORMATION | SWT.OK);
messageBox.setMessage(message);
messageBox.setText(title);
int response = messageBox.open();
@@ -380,8 +369,7 @@ public class ViewUtility
public static int popupErrorMessage(String title, String message)
{
- MessageBox messageBox = new MessageBox(Display.getCurrent().getActiveShell(),
- SWT.ICON_ERROR | SWT.OK);
+ MessageBox messageBox = new MessageBox(Display.getCurrent().getActiveShell(), SWT.ICON_ERROR | SWT.OK);
messageBox.setMessage(message);
messageBox.setText(title);
int response = messageBox.open();
@@ -400,10 +388,10 @@ public class ViewUtility
return response;
}
- public static void popupError(String title, String message, Exception ex)
+ public static void popupError(String title, String message, Throwable ex)
{
IStatus status = new Status(IStatus.ERROR, ApplicationWorkbenchAdvisor.PERSPECTIVE_ID,
- IStatus.ERROR, ex.getMessage(), ex);
+ IStatus.ERROR, ex.toString(), ex);
ErrorDialog.openError(Display.getCurrent().getActiveShell(), title, message, status);
}
@@ -425,8 +413,10 @@ public class ViewUtility
label.setLayoutData(new GridData(SWT.TRAIL, SWT.TOP, false, false));
shell.open();
- while (!shell.isDisposed()) {
- if (!display.readAndDispatch()) {
+ while (!shell.isDisposed())
+ {
+ if (!display.readAndDispatch())
+ {
display.sleep();
}
}
@@ -446,6 +436,12 @@ public class ViewUtility
return shell;
}
+ /**
+ * Creates a List widget for displaying array of strings
+ * @param compositeHolder
+ * @param data - containing the array item value
+ * @param itemName - item name
+ */
private static void displayArrayItem(Composite compositeHolder, CompositeData data, String itemName)
{
Object[] arrayItems = (Object[])data.get(itemName);
@@ -457,21 +453,20 @@ public class ViewUtility
org.eclipse.swt.widgets.List list = new org.eclipse.swt.widgets.List(compositeHolder,
SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY);
list.setItems(items);
- list.setBackground(compositeHolder.getBackground());
+ //list.setBackground(compositeHolder.getBackground());
list.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1));
}
- private static void displayNotSupportedDataType(Composite compositeHolder)
+ private static void displayNotSupportedDataType(FormToolkit toolkit, Composite compositeHolder)
{
- Text valueText = new Text(compositeHolder, SWT.READ_ONLY);
- valueText.setText("Format is not supported to be displayed");
+ Text valueText = toolkit.createText(compositeHolder, "Format is not supported to be displayed", SWT.READ_ONLY);
valueText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1));
}
/**
* Converts the input string to displayable format by converting some character case or inserting space
* @param input
- * @return
+ * @return formatted string
*/
public static String getDisplayText(String input)
{
@@ -498,6 +493,10 @@ public class ViewUtility
return result.toString();
}
+ /**
+ * Disposes the children of given Composite if not null and not already disposed
+ * @param parent composite
+ */
public static void disposeChildren(Composite parent)
{
if (parent == null || parent.isDisposed())