diff options
| author | Martin Ritchie <ritchiem@apache.org> | 2007-01-16 15:16:39 +0000 |
|---|---|---|
| committer | Martin Ritchie <ritchiem@apache.org> | 2007-01-16 15:16:39 +0000 |
| commit | 47ac1646674d11de0002613a71cf4588a8c8af7a (patch) | |
| tree | 01576819aa1708192771e91f2b0c3cbdfd406de3 /qpid/java/management | |
| parent | a6b4188b807dce93ee1a54958bd92de4142a6d48 (diff) | |
| download | qpid-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')
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()) |
