From 1c70255ebd8fe5cbb041ce59fb68f8366031d1b0 Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 21 Dec 2015 16:06:18 +0100 Subject: [PATCH 01/60] MQWeb 0.1.0: webapp moved to mqwebapp repo --- .kdev4/_custom.kdev4 | 19 + .kdev4/mqweb.kdev4 | 27 + ChangeLog.txt | 5 +- MQWeb/include/MQ/Web/Version.h | 9 +- mqweb.kdev4 | 3 + static/css/formalize.css | 365 ----------- static/css/images/about-us.png | Bin 2382 -> 0 bytes static/css/images/activities.png | Bin 2225 -> 0 bytes static/css/images/body.png | Bin 2275 -> 0 bytes static/css/images/briefcase.jpg | Bin 3715 -> 0 bytes static/css/images/button.png | Bin 85 -> 0 bytes static/css/images/contacts.png | Bin 1434 -> 0 bytes static/css/images/delicious.png | Bin 2515 -> 0 bytes static/css/images/digg.png | Bin 2523 -> 0 bytes static/css/images/facebook.png | Bin 2522 -> 0 bytes static/css/images/favicon.ico | Bin 1150 -> 0 bytes static/css/images/header.png | Bin 57031 -> 0 bytes static/css/images/nav-item.png | Bin 1195 -> 0 bytes static/css/images/navigation.png | Bin 1195 -> 0 bytes static/css/images/read-more.png | Bin 1017 -> 0 bytes static/css/images/rss.png | Bin 2496 -> 0 bytes static/css/images/select_arrow.gif | Bin 52 -> 0 bytes static/css/images/su.png | Bin 2430 -> 0 bytes static/css/images/twitter.png | Bin 2457 -> 0 bytes static/css/images/we-hire.png | Bin 2249 -> 0 bytes static/css/images/widgets.png | Bin 1959 -> 0 bytes static/css/images/wrapper-bottom.png | Bin 7238 -> 0 bytes static/css/images/wrapper-middle.png | Bin 1078 -> 0 bytes static/css/images/wrapper-top.png | Bin 11931 -> 0 bytes static/css/images/wrapper.jpg | Bin 40833 -> 0 bytes static/css/jquery.qtip.css | 608 ------------------ static/css/style.css | 244 ------- .../ui-lightness/images/animated-overlay.gif | Bin 1738 -> 0 bytes .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 418 -> 0 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 312 -> 0 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 205 -> 0 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 348 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 207 -> 0 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 5815 -> 0 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 278 -> 0 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 328 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes .../images/ui-icons_228ef1_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_ffffff_256x240.png | Bin 6299 -> 0 bytes .../jquery-ui-1.10.3.custom.min.css | 7 - static/html/channel/channel.html | 39 -- static/html/channel/channels.html | 94 --- static/html/channel/detail.html | 127 ---- static/html/error.html | 10 - static/html/httprc.html | 1 - static/html/listener/detail.html | 91 --- static/html/listener/listener.html | 37 -- static/html/listener/listeners.html | 87 --- static/html/message/detail.html | 54 -- static/html/message/dump.html | 29 - .../events/MQRC_ALIAS_BASE_Q_TYPE_ERROR.html | 26 - .../message/events/MQRC_BRIDGE_STARTED.html | 16 - .../message/events/MQRC_GET_INHIBITED.html | 20 - .../message/events/MQRC_NOT_AUTHORIZED-1.html | 21 - .../message/events/MQRC_NOT_AUTHORIZED-2.html | 23 - .../message/events/MQRC_NOT_AUTHORIZED-3.html | 35 - .../message/events/MQRC_NOT_AUTHORIZED-4.html | 19 - .../message/events/MQRC_NOT_AUTHORIZED-5.html | 28 - .../message/events/MQRC_NOT_AUTHORIZED-6.html | 38 -- .../message/events/MQRC_PUT_INHIBITED.html | 30 - .../message/events/MQRC_Q_MGR_ACTIVE.html | 14 - .../events/MQRC_UNKNOWN_OBJECT_NAME.html | 42 -- static/html/message/message.html | 9 - static/html/message/messages.html | 72 --- static/html/queue/detail.html | 150 ----- static/html/queue/queue.html | 33 - static/html/queue/queues.html | 152 ----- static/images/connection.png | Bin 1463 -> 0 bytes static/images/error.png | Bin 3966 -> 0 bytes static/images/flag-black-icon.png | Bin 463 -> 0 bytes static/images/flag-blue-icon.png | Bin 514 -> 0 bytes static/images/flag-green-icon.png | Bin 521 -> 0 bytes static/images/flag-red-icon.png | Bin 511 -> 0 bytes static/images/flag-yellow-icon.png | Bin 506 -> 0 bytes static/images/go-next-icon.png | Bin 1145 -> 0 bytes static/images/not-ok-icon.png | Bin 1093 -> 0 bytes static/images/ok-icon.png | Bin 861 -> 0 bytes static/images/poco.gif | Bin 3693 -> 0 bytes static/images/tip-icon.png | Bin 900 -> 0 bytes static/images/view-refresh-icon.png | Bin 947 -> 0 bytes static/images/warning-icon.png | Bin 1060 -> 0 bytes static/images/zos-icon.png | Bin 14233 -> 0 bytes static/images/zos-small-icon.png | Bin 1250 -> 0 bytes static/js/app/channel/channel.js | 120 ---- static/js/app/channel/provider.js | 31 - static/js/app/chstatus/chstatus.js | 109 ---- static/js/app/chstatus/provider.js | 34 - static/js/app/dashboard.js | 206 ------ static/js/app/listener/listener.js | 119 ---- static/js/app/listener/provider.js | 29 - static/js/app/lsstatus/lsstatus.js | 108 ---- static/js/app/lsstatus/provider.js | 34 - static/js/app/message/message.js | 117 ---- static/js/app/message/provider.js | 60 -- static/js/app/mqwebapp.js | 10 - static/js/app/qmgr/provider.js | 21 - static/js/app/queue/provider.js | 29 - static/js/app/queue/queue.js | 117 ---- static/js/center.js | 8 - static/js/jquery.formalize.legacy.min.js | 1 - static/js/jquery.qtip.min.js | 3 - templates/base.tpl | 108 ---- templates/channel/head.tpl | 26 - templates/channel/index.tpl | 2 - templates/error.tpl | 26 - templates/events.tpl | 22 - templates/listener/head.tpl | 26 - templates/listener/index.tpl | 2 - templates/message/head.tpl | 24 - templates/message/index.tpl | 2 - templates/qmgr/head.tpl | 20 - templates/qmgr/index.tpl | 202 ------ templates/queue/head.tpl | 20 - templates/queue/index.tpl | 2 - 122 files changed, 57 insertions(+), 4165 deletions(-) create mode 100644 .kdev4/_custom.kdev4 create mode 100644 .kdev4/mqweb.kdev4 create mode 100644 mqweb.kdev4 delete mode 100644 static/css/formalize.css delete mode 100644 static/css/images/about-us.png delete mode 100644 static/css/images/activities.png delete mode 100644 static/css/images/body.png delete mode 100644 static/css/images/briefcase.jpg delete mode 100644 static/css/images/button.png delete mode 100644 static/css/images/contacts.png delete mode 100644 static/css/images/delicious.png delete mode 100644 static/css/images/digg.png delete mode 100644 static/css/images/facebook.png delete mode 100644 static/css/images/favicon.ico delete mode 100644 static/css/images/header.png delete mode 100644 static/css/images/nav-item.png delete mode 100644 static/css/images/navigation.png delete mode 100644 static/css/images/read-more.png delete mode 100644 static/css/images/rss.png delete mode 100644 static/css/images/select_arrow.gif delete mode 100644 static/css/images/su.png delete mode 100644 static/css/images/twitter.png delete mode 100644 static/css/images/we-hire.png delete mode 100644 static/css/images/widgets.png delete mode 100644 static/css/images/wrapper-bottom.png delete mode 100644 static/css/images/wrapper-middle.png delete mode 100644 static/css/images/wrapper-top.png delete mode 100644 static/css/images/wrapper.jpg delete mode 100644 static/css/jquery.qtip.css delete mode 100644 static/css/style.css delete mode 100644 static/css/ui-lightness/images/animated-overlay.gif delete mode 100644 static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png delete mode 100644 static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png delete mode 100644 static/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png delete mode 100644 static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png delete mode 100644 static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png delete mode 100644 static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png delete mode 100644 static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png delete mode 100644 static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png delete mode 100644 static/css/ui-lightness/images/ui-icons_222222_256x240.png delete mode 100644 static/css/ui-lightness/images/ui-icons_228ef1_256x240.png delete mode 100644 static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png delete mode 100644 static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png delete mode 100644 static/css/ui-lightness/images/ui-icons_ffffff_256x240.png delete mode 100644 static/css/ui-lightness/jquery-ui-1.10.3.custom.min.css delete mode 100644 static/html/channel/channel.html delete mode 100644 static/html/channel/channels.html delete mode 100644 static/html/channel/detail.html delete mode 100644 static/html/error.html delete mode 100644 static/html/httprc.html delete mode 100644 static/html/listener/detail.html delete mode 100644 static/html/listener/listener.html delete mode 100644 static/html/listener/listeners.html delete mode 100644 static/html/message/detail.html delete mode 100644 static/html/message/dump.html delete mode 100644 static/html/message/events/MQRC_ALIAS_BASE_Q_TYPE_ERROR.html delete mode 100644 static/html/message/events/MQRC_BRIDGE_STARTED.html delete mode 100644 static/html/message/events/MQRC_GET_INHIBITED.html delete mode 100644 static/html/message/events/MQRC_NOT_AUTHORIZED-1.html delete mode 100644 static/html/message/events/MQRC_NOT_AUTHORIZED-2.html delete mode 100644 static/html/message/events/MQRC_NOT_AUTHORIZED-3.html delete mode 100644 static/html/message/events/MQRC_NOT_AUTHORIZED-4.html delete mode 100644 static/html/message/events/MQRC_NOT_AUTHORIZED-5.html delete mode 100644 static/html/message/events/MQRC_NOT_AUTHORIZED-6.html delete mode 100644 static/html/message/events/MQRC_PUT_INHIBITED.html delete mode 100644 static/html/message/events/MQRC_Q_MGR_ACTIVE.html delete mode 100644 static/html/message/events/MQRC_UNKNOWN_OBJECT_NAME.html delete mode 100644 static/html/message/message.html delete mode 100644 static/html/message/messages.html delete mode 100644 static/html/queue/detail.html delete mode 100644 static/html/queue/queue.html delete mode 100644 static/html/queue/queues.html delete mode 100644 static/images/connection.png delete mode 100644 static/images/error.png delete mode 100644 static/images/flag-black-icon.png delete mode 100644 static/images/flag-blue-icon.png delete mode 100644 static/images/flag-green-icon.png delete mode 100644 static/images/flag-red-icon.png delete mode 100644 static/images/flag-yellow-icon.png delete mode 100644 static/images/go-next-icon.png delete mode 100644 static/images/not-ok-icon.png delete mode 100644 static/images/ok-icon.png delete mode 100644 static/images/poco.gif delete mode 100644 static/images/tip-icon.png delete mode 100644 static/images/view-refresh-icon.png delete mode 100644 static/images/warning-icon.png delete mode 100644 static/images/zos-icon.png delete mode 100644 static/images/zos-small-icon.png delete mode 100644 static/js/app/channel/channel.js delete mode 100644 static/js/app/channel/provider.js delete mode 100644 static/js/app/chstatus/chstatus.js delete mode 100644 static/js/app/chstatus/provider.js delete mode 100644 static/js/app/dashboard.js delete mode 100644 static/js/app/listener/listener.js delete mode 100644 static/js/app/listener/provider.js delete mode 100644 static/js/app/lsstatus/lsstatus.js delete mode 100644 static/js/app/lsstatus/provider.js delete mode 100644 static/js/app/message/message.js delete mode 100644 static/js/app/message/provider.js delete mode 100644 static/js/app/mqwebapp.js delete mode 100644 static/js/app/qmgr/provider.js delete mode 100644 static/js/app/queue/provider.js delete mode 100644 static/js/app/queue/queue.js delete mode 100644 static/js/center.js delete mode 100644 static/js/jquery.formalize.legacy.min.js delete mode 100644 static/js/jquery.qtip.min.js delete mode 100644 templates/base.tpl delete mode 100644 templates/channel/head.tpl delete mode 100644 templates/channel/index.tpl delete mode 100644 templates/error.tpl delete mode 100644 templates/events.tpl delete mode 100644 templates/listener/head.tpl delete mode 100644 templates/listener/index.tpl delete mode 100644 templates/message/head.tpl delete mode 100644 templates/message/index.tpl delete mode 100644 templates/qmgr/head.tpl delete mode 100644 templates/qmgr/index.tpl delete mode 100644 templates/queue/head.tpl delete mode 100644 templates/queue/index.tpl diff --git a/.kdev4/_custom.kdev4 b/.kdev4/_custom.kdev4 new file mode 100644 index 0000000..47efd45 --- /dev/null +++ b/.kdev4/_custom.kdev4 @@ -0,0 +1,19 @@ +[Containments][1] +ActionPluginsSource=Global +activity=mqweb +activityId= +desktop=-1 +formfactor=0 +geometry=0,0,1128,486 +immutability=1 +lastDesktop=-1 +lastScreen=0 +location=0 +orientation=2 +plugin=newspaper +screen=0 +zvalue=0 + +[Project] +Manager=KDevCMakeManager +Name=mqweb diff --git a/.kdev4/mqweb.kdev4 b/.kdev4/mqweb.kdev4 new file mode 100644 index 0000000..6f83eed --- /dev/null +++ b/.kdev4/mqweb.kdev4 @@ -0,0 +1,27 @@ +[Buildset] +BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x01\x00\x00\x00\n\x00m\x00q\x00w\x00e\x00b) + +[CMake] +Build Directory Count=1 +Current Build Directory Index=0 +ProjectRootRelative=./ + +[CMake][CMake Build Directory 0] +Build Directory Path=file:///home/bronx/development/mqweb/build +Build Type=Debug +CMake Binary=file:///usr/bin/cmake +Environment Profile= +Install Directory=file:///usr/local + +[CustomDefinesAndIncludes][ProjectPath0] +Defines=\x00\x00\x00\x00 +Includes=\x00\x00\x00\x00 +Path=. + +[Defines And Includes][Compiler] +Name=GCC +Path=gcc +Type=GCC + +[Project] +VersionControlSupport=kdevgit diff --git a/ChangeLog.txt b/ChangeLog.txt index 4a13836..f4a9a09 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,6 @@ +0.1.0 + - Web app has its own repository now: mqwebapp + 0.0.13 - Upgrade documents to use latest Jekyll release - Use unsigned char for ebcdic code. Fix #13 @@ -15,7 +18,7 @@ - First steps in adding websocket for browsing messages - Add inquire channel initiator (chinit) - Start support for CMake - + 0.0.11 - Add inquire connection (conn) - Add inquire namelist (nl) diff --git a/MQWeb/include/MQ/Web/Version.h b/MQWeb/include/MQ/Web/Version.h index fedb70d..e389c3a 100644 --- a/MQWeb/include/MQ/Web/Version.h +++ b/MQWeb/include/MQ/Web/Version.h @@ -22,11 +22,10 @@ #define _MQWeb_Version_H #define MQWEB_VERSION_MAJOR 0 -#define MQWEB_VERSION_MINOR 0 -#define MQWEB_RELEASE_NUMBER 13 +#define MQWEB_VERSION_MINOR 1 +#define MQWEB_RELEASE_NUMBER 0 -#define MQWEB_VERSION "0.0.13" -#define MQWEB_COMPLETE_VERSION "MQWeb v0.0.13" +#define MQWEB_VERSION "0.1.0" +#define MQWEB_COMPLETE_VERSION "MQWeb v0.1.0" #endif // _MQWeb_Version_H - diff --git a/mqweb.kdev4 b/mqweb.kdev4 new file mode 100644 index 0000000..c03293c --- /dev/null +++ b/mqweb.kdev4 @@ -0,0 +1,3 @@ +[Project] +Manager=KDevCMakeManager +Name=mqweb diff --git a/static/css/formalize.css b/static/css/formalize.css deleted file mode 100644 index ef51448..0000000 --- a/static/css/formalize.css +++ /dev/null @@ -1,365 +0,0 @@ -.input_tiny { - width: 50px; -} - -.input_small { - width: 100px; -} - -.input_medium { - width: 150px; -} - -.input_large { - width: 200px; -} - -.input_xlarge { - width: 250px; -} - -.input_xxlarge { - width: 300px; -} - -.input_full { - width: 100%; -} - -.input_full_wrap { - display: block; - padding-right: 8px; -} - -input[type="search"]::-webkit-search-decoration { - display: none; -} - -input:invalid, -button:invalid, -a.button:invalid, -select:invalid, -textarea:invalid { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -input:focus, -button:focus, -a.button:focus, -select:focus, -textarea:focus { - -webkit-box-shadow: #0066ff 0 0 5px 0; - -moz-box-shadow: #0066ff 0 0 5px 0; - box-shadow: #0066ff 0 0 5px 0; - z-index: 1; -} - -input[type="file"]:focus, input[type="file"]:active, -input[type="radio"]:focus, -input[type="radio"]:active, -input[type="checkbox"]:focus, -input[type="checkbox"]:active { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -button, -a.button, -input[type="reset"], -input[type="submit"], -input[type="button"] { - -webkit-appearance: none; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; - -webkit-background-clip: padding; - -moz-background-clip: padding; - background-clip: padding-box; - background: #dddddd url('images/button.png?1298351022') repeat-x; - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(#ffffff, #dddddd); - background-image: -moz-linear-gradient(#ffffff, #dddddd); - background-image: -o-linear-gradient(#ffffff, #dddddd); - background-image: linear-gradient(#ffffff, #dddddd); - border: 1px solid; - border-color: #dddddd #bbbbbb #999999; - cursor: pointer; - color: #333333; - display: inline-block; - font: bold 12px/1.3 "Helvetica Neue", Arial, "Liberation Sans", FreeSans, sans-serif; - outline: 0; - overflow: visible; - margin: 0; - padding: 3px 10px; - text-shadow: white 0 1px 1px; - text-decoration: none; - vertical-align: top; - width: auto; - *padding-top: 2px; - *padding-bottom: 0; -} -button:hover, -a.button:hover, -input[type="reset"]:hover, -input[type="submit"]:hover, -input[type="button"]:hover { - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(1px, #eeeeee), color-stop(100%, #cccccc)); - background-image: -webkit-linear-gradient(#ffffff, #eeeeee 1px, #cccccc); - background-image: -moz-linear-gradient(#ffffff, #eeeeee 1px, #cccccc); - background-image: -o-linear-gradient(#ffffff, #eeeeee 1px, #cccccc); - background-image: linear-gradient(#ffffff, #eeeeee 1px, #cccccc); - text-decoration: none; -} -button:active, -a.button:active, -input[type="reset"]:active, -input[type="submit"]:active, -input[type="button"]:active { - background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(#dddddd, #eeeeee); - background-image: -moz-linear-gradient(#dddddd, #eeeeee); - background-image: -o-linear-gradient(#dddddd, #eeeeee); - background-image: linear-gradient(#dddddd, #eeeeee); - -webkit-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0; - -moz-box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0; - box-shadow: inset rgba(0, 0, 0, 0.25) 0 1px 2px 0; - border-color: #999999 #bbbbbb #dddddd; -} -button::-moz-focus-inner, -a.button::-moz-focus-inner, -input[type="reset"]::-moz-focus-inner, -input[type="submit"]::-moz-focus-inner, -input[type="button"]::-moz-focus-inner { - border: 0; - padding: 0; -} - -a.button { - *padding-bottom: 3px; -} - -button { - *padding-top: 1px; - *padding-bottom: 1px; -} - -textarea, -select, -input[type="date"], -input[type="datetime"], -input[type="datetime-local"], -input[type="email"], -input[type="month"], -input[type="number"], -input[type="password"], -input[type="search"], -input[type="tel"], -input[type="text"], -input[type="time"], -input[type="url"], -input[type="week"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-background-clip: padding; - -moz-background-clip: padding; - background-clip: padding-box; - -webkit-border-radius: 0; - -moz-border-radius: 0; - -ms-border-radius: 0; - -o-border-radius: 0; - border-radius: 0; - -webkit-appearance: none; - background-color: white; - border: 1px solid; - border-color: #848484 #c1c1c1 #e1e1e1; - color: black; - outline: 0; - margin: 0; - padding: 2px 3px; - text-align: left; - font-size: 13px; - font-family: Arial, "Liberation Sans", FreeSans, sans-serif; - height: 1.8em; - vertical-align: top; - *padding-top: 2px; - *padding-bottom: 1px; - *height: auto; -} -textarea[disabled], -select[disabled], -input[type="date"][disabled], -input[type="datetime"][disabled], -input[type="datetime-local"][disabled], -input[type="email"][disabled], -input[type="month"][disabled], -input[type="number"][disabled], -input[type="password"][disabled], -input[type="search"][disabled], -input[type="tel"][disabled], -input[type="text"][disabled], -input[type="time"][disabled], -input[type="url"][disabled], -input[type="week"][disabled] { - background-color: #eeeeee; -} - -button[disabled], -input[disabled], -select[disabled], -select[disabled] option, -select[disabled] optgroup, -textarea[disabled], -a.button_disabled { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -khtml-user-select: none; - user-select: none; - color: #888888; - cursor: default; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #888888; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #888888; -} - -input.placeholder_text, -textarea.placeholder_text { - color: #888888; -} - -textarea, -select[size], -select[multiple] { - height: auto; -} - -select[size="0"], -select[size="1"] { - height: 1.8em; - *height: auto; -} - -@media (-webkit-min-device-pixel-ratio: 0) { - select[size], - select[multiple], - select[multiple][size] { - background-image: none; - padding-right: 3px; - } - - select, - select[size="0"], - select[size="1"] { - background-image: url(data:image/png;base64,R0lGODlhDQAEAIAAAAAAAP8A/yH5BAEHAAEALAAAAAANAAQAAAILhA+hG5jMDpxvhgIAOw==); - background-repeat: no-repeat; - background-position: right center; - padding-right: 20px; - } - - ::-webkit-validation-bubble-message { - -webkit-box-shadow: none; - box-shadow: none; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #666666), color-stop(1, black)); - border: 0; - color: white; - font: 13px/17px "Lucida Grande", Arial, "Liberation Sans", FreeSans, sans-serif; - overflow: hidden; - padding: 15px 15px 17px; - text-shadow: black 0 0 1px; - min-height: 16px; - } - - ::-webkit-validation-bubble-arrow, - ::-webkit-validation-bubble-top-outer-arrow, - ::-webkit-validation-bubble-top-inner-arrow { - -webkit-box-shadow: none; - box-shadow: none; - background: #666666; - border-color: #666666; - } -} -textarea { - min-height: 40px; - overflow: auto; - resize: vertical; - width: 100%; -} - -optgroup { - color: black; - font-style: normal; - font-weight: normal; - font-family: Arial, "Liberation Sans", FreeSans, sans-serif; -} -optgroup::-moz-focus-inner { - border: 0; - padding: 0; -} - -.ie6_button, -* html button, -* html a.button { - background: #dddddd url('images/button.png?1298351022') repeat-x; - border: 1px solid; - border-color: #dddddd #bbbbbb #999999; - cursor: pointer; - color: #333333; - font: bold 12px/1.2 Arial, sans-serif; - padding: 2px 10px 0; - text-decoration: none; - overflow: visible; - vertical-align: top; - width: auto; -} - -* html a.button { - position: relative; - top: 3px; - padding-bottom: 2px; -} - -* html button { - padding-top: 1px; - padding-bottom: 1px; -} - -.ie6_input, -* html textarea, -* html select { - background: white; - border: 1px solid; - border-color: #848484 #c1c1c1 #e1e1e1; - color: black; - padding: 2px 3px 1px; - font-size: 13px; - font-family: Arial, sans-serif; - vertical-align: top; -} - -* html select { - margin-top: 1px; -} - -.placeholder_text, -.ie6_input_disabled, -.ie6_button_disabled { - color: #888888; -} - -.ie6_input_disabled { - background: #eeeeee; -} diff --git a/static/css/images/about-us.png b/static/css/images/about-us.png deleted file mode 100644 index 74771a91eaea91f9761d8038df489cc48015945b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2382 zcmbVOc~nzp77sE-#%k*vaRH|_2CEGkPSpdu6n1w|}MSe1QCBnxO{Nx~{BWL{L9`NPvc=AHB2`@Zkp-|yc0yZ4^+ zjx&5VEtqFB4}m}|@Sszf@Y@Eytu4*r=Q2ct>A+e{3lRH3!D0zZ2qIj$5F12#@L797 zCdlGOh0DMV2!wes&p$vM;O#}?KzuaIWP^_6hrwtBV#CJBFcv2S6eHQ-UY>xA(%pN2 zLh`s|)HWw?talg%+{dFI5Q2UOeEc~FLO4V&YNHEsLnH|%;DcfoGLj!E5RoFusQ0`i zcx^hyppfrP#35wVhoAzy8Au8w1d&c?tOEy20FVSc8o*;Pa% zPR=AOfc$u&U~fWhFo{WZ|L6Q+P=uI_f+PKq0zb^#`xCK1^ie2SGE5{Z3nmdKK-jV8zB~WRzSPy|n%o1?GS-(8k??)`|FR>(w5M+rVp+5wL z&UOG}A0&oE`=Br+#m@;1Ah+=ZTu34^mFGjYR8YwK3FNv9AwKfGz9imf{5#>D@#`rR z0u~2QOnJLuDKrWdAW(4xqAS*v_XjNZ|IrKs2ZJ#+$Nx0T>=E37rsb#Bhc};w2Nb{) zBZNnz#CQ#!Dsu$G%b#X68cF9A#;LK+&dw3NL8Da5yV^qU>DpRbCnqOks|@qJib8J> zsnzPHXV0ADyS`(_gVI+TjmC<3tE0U+=klf3uV2fas?M}cuZn2$mktbS2Ts(D4i5}k z&~8-KDR;)F9<0(y9_m|~n|kHX2VQFRLprHcdPdrLQEv1N&(6+BpPruHRXF(S#YTOPM%2sY^2b$G7dpp**cQKE)$9{#5oP*5mD+|~u2gjEbh;z8Zx^#4&&<`v~w}&?z ztaax85?yH^A8Pi^dATi9+t}D>!!2R|F~}6<9jh6QuQfPEKQkv^AttrrPs&?5RPyc) zqj5&j(@|Ply77Vvx;?gtQJSTmShn+ib$w4~M|*v3HG-Unz+5?-+kUg4V6CKe4&~Nd zdVwcDJ2|i8Nc{*SGKCqQn|4bs`BOhNH8p2_rc%-Sw6Rg$t0bT9a!XZO?2NRqpse(rg(CtfzP=jLESwIM+^!cIz`n3y=-Gs1Y(ZRgX-!Z*~P9t^$%5FU%iTq7N_5I_My`)tNZ&FpSTSM(JzMIlu9>SSvCdU z_i48<^YtBCyJe+C!pVOx|JRPTZx{?l0o}V8ak#9EGVj3`OZISsESmzJIkuyHQLDTb zS?-EMQc*y@r;Fv9;=1Zxrw3Ah(FR&COj~2?S3T}GN}|^UC%r|BYIQlr(vn>zC8XV} zX>0DrC;U;{jmXBAJ@|QX@&%)u=^-nu2CqMHx1-tJt3~E+5BXLg{qSr?rSdtQ@ zDJWWM(5G8vR8>?g3DSKZRYJ9&?0?vk7;`?g>(GV+$soQds*R=pKv-IeT3 zUz=B!wa(72czUoUPj&JK=88v0?wva)!7Aq1IhL<*0wNT}MhkxJ8UDzC}FvdZrtGF!Nh$1C4KEIZUXJe4b8upFO~k5YHLn`isQ^O3P-+i zS$L)H$&)8$tL`YaCqJ&}y=?pV?|)+_l>gZ3*_t|P<5oiYYQAMqnVo}o_T6+d>-Eb7 zs+R44vh9{z%dXZe-@ER%Y+=r^qRNhnTVv^sGtn+CE>K3}Pa1lmQ#@UpekbW9;gk=j pzqdDta0)nOe`h+=+-j~R7SZul+psd<{i*2>$AjiWz2O#g_&@bSV7UMQ diff --git a/static/css/images/activities.png b/static/css/images/activities.png deleted file mode 100644 index 67a308d76bb69e2a7d62368e3ce079b59235369f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2225 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 diff --git a/static/css/images/briefcase.jpg b/static/css/images/briefcase.jpg deleted file mode 100644 index 9d6ef02ea76235a11f048c5e4ad65204d8a5a58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3715 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 diff --git a/static/css/images/button.png b/static/css/images/button.png deleted file mode 100644 index c4651629c96a3c01a537c8d230823d1b00a3427a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmeAS@N?(olHy`uVBq!ia0vp^k|4|hBp4nx-P#YNWISCQLp07O|2f~lyy3yLpYCn* h4(8k{_k1T_os-(kd<<%J=^`5SNF6*2UngF?48YKV# diff --git a/static/css/images/contacts.png b/static/css/images/contacts.png deleted file mode 100644 index 51e3be7295bd9643c659cef66da2ecb51b9e89e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1434 zcmbVLdrTX39PgMhLWbGqA7&Vr^9aUeYwxb~!Ck0Wde_mpGE%BzF&QiE0cYu5y*oz1 zEKG3xV)Tj6BSQEP}}d#$d?8%PHegK!}DA!u$O${t6WRgX|A4xx3%v^Z7nL z-|sg!Ci;9}Ku~~0A_+7^ktXmz1>Tb{9R=U~xleC<4@4?XjO7x=Gz(8lv^Fk*h71l% z5^bU_w)Bsl(BTrv(L}}^C&n2s5?0P3vv@Hwm%|Cz5=nT3%W1LNX%R}GlNeS5&pv2` zA;zYGFDs3x(W#@8nWzk&j?IWRTQlrd+y+Oy4TZZ1V8B6(7RcpDVFkjafp_f^VC_9d zU}zU2+BNWAP;tf>NXPLsq?DmjE2_dEl|qIoP+WnZgXAcNBA6UO)lv*4lxhOSp#291 z-gsLgVIuYWzQ9fcCySz!K#;VwG+A1xjN_9K499T)p;aJFP(UQQWiW(S1x|f2(X*3=fW`%vBfMkfv;zTeRiZ~qJymrxoXrliO<509< zPIuCXi59q2-U{lG80;eh?Vj(*3k1;+mv{yg#gamD)>H@0iUv{xgBzKRu@N{$s?->& z)T=QCg<+UhAy?xHN~tF!BjvbU@3V0jSEYy~DN?Hhy2~+)!XmLyl+x?)uuxKssz}Pm zHL!wcVXd^!F9ZDUa~03!5;~r?h#YU`xD;Op#3XYfCnR%DNEfS=VbEoUwQ*^Jw>*2< zk~Gg;r)_$kb3nWL63ij~l?t^YOs7+!a!lvVI}+7VIucWnauu#cy?O6(ZU09z1O$V4 zo8v#t;yVHz=v^MPKG+-#56yy!;lXHh>|D(OWA!lRqM6#+*;!dxSz1~uC@5H8U(e3Y z-rCyQ+}vDTTwGpWUR_=7?CkV-JQWoclarG(GczS6CEMHE8yg#Qb8{0D6N7_;#l^+* z^YaS}3u|j@{r&xJx4XN$dw6)budlDEscC3vXk=t0D=TY!e0+9xw!FN&xw*Ntv~+B2 zY+zuZx3{;ju&}bSvaYUfbaZrTYO1TNtF^VYy}iAxtgNP{rlFysqobp?wl*&>ucf7> zzP`S#t*xl2sHdl=y1IILdisKTLkn{87)Y(zg7x?36*4Xq{?&9Bt*`NLt)Nh(H{(f)#>kIg;hdr)0 zvfZzpf1r1`?PGtJl$}|~`Br(B4T$+m`hBjQ69bZ}o>IZ_Z??XFrt{D& z?*=y~R2?b)G|Djj=jx76yKp|wfO&5SYQQs&~)B4;Rj7>$z$R%xIn865>j2zbpx!PALspi-uHKVzR%_RJkRg*#ydON zZrieFi<+9+HhViV6&k;VULB1M&^KQT(+3T^c@%e^3)`2+r*Qx^YdYH-fY~!?egGAq z(ZhnJfQ6dc249A&JI~$Gf#Abt!f9(VZ~-$2LaV7+91;Z4d;$O-%p34yuq^eas~+jW z7<5ZLH>@MlF^B~CGwi}SfJ?ZOt50}<51y`f$O>j5AV3P30FMR}Faud!g1}Pmy3?s2Q01OL98v7tkQ7}^s9ECyRF?b^w8i_(8P-p}aXN*D; zus8w|1^f8uLDo2QUjmhE^U)TxvefhE@q!2l1fS1`^G)DvjvoSr$Kw%5Gy;t_h9r!+ zVJsd^V9es~Th~AaxIP?45RbuT!PYd=yxAc$ILcu_NudRj z**+mmfW@;XTk1h4a5{rdz*ESkI200VgF|5`C=|*XgT~=86s!%INJQh&HtRY*heey> zC>RV02k{O;DJY^fl0-5wp`gvkI1G`9TgTe7xI7xm2Uxeufb4$6n*J%4K;i&29-HIJ zW(TfUfU`fF$L9L8gJ2{VEF1-MW3cFKK6foWAEG4#97ZTWx8bmvu=o5D7@x6^#o#bz zB$6o-jUuhZO+=C?Br?jBj5ftvBiG{ofTjOGoFO1*5NpNpKgF`X1y$hM^i%0Wi%-o1 zu%M3NK&|nDccK^SI5lSnSIXkz;=;m0dwV-NeVmjDwzjq!=C%zD4TXe+JnR^8aB%4D z?Inr_b8>PFEr{^DJp>^b92_i@$>73=H|472W^iO=xGYmKnapR;o*CX~ zrO{|@ZEZnWwij|{-eaC+Ti>3W<-@f(o@>*J2Dk>`SF9ivr7UKOr)tkA<$ViE#-oB*! zph!WfnK1nAxl!?e!Ij^mqM{6w#smUEW|IoKtS}{m>GBoPV`bcvR6bc=g0kGb^YI*N2|yz$Hll=FbIJw_kJavB+Rou_dEkRxxlQ%xjY6i_8 zydsJRDA#&Jt3ZeHUc)@a@%T&&@i4r6lvFiJteIGSJHJ2mcdZNHP+#}Amq4@9L4(Xj zpVa*97BHtpb)y9=E-pUtb9RPIWp%3!moe(%;^KYl9jyq=%gZ}ku^f)~hC-7VVxET0+LG|FthT;hkovJ4$1C{TbN67wVV3W2gOP ztA>WdHP63A%na<_9~&_k26Yk(=KK%VELf_c9;k|#(69CB+-N09(1d;ES#>H(zpHw% zWV#CH^5|rWZ(2^ZL4cOS)Tw}w+ao+-|E((?HEea+0qv&4*jVATbF)YLS^H9Bv&zX{ ziC*lnEmqzhR@ohrI&JO)&^WEyA$ng!b&C+}3Ba^7(G&mXHC+I4{GIBKsEg!h$HW_ zIy5Oe8=E&(t<*gq{BCb`*wD=^hCZaqc&B(kQmz;8?WW_eSN3=cSui26n>E0vyy@?YO zOTHD`w}`h__KDG58cyy8+JmfJbTb;K25yeS@e40qh`th2*Kt=fo)BB0)JdHhJFJ9l zIBRl{9Tp!?{n5eUfJ!qS3_kgXQb#v+>U`)F)pu^LveMxW@xoUX>gM~7f#>&HCpzlt z9OPb2({xYG3v}C~o%=O1({AR)lf~OkhjevM>^D!a-)%s9{f)Nyuh`+8wc&fKjBQR9 zglt{hf!^`tJ9m$7a-mzP`sKr;yO26H_pI&XpW`K*S+~|u7IZtHJd~T3Hod#~q*Oa= zx?0}QfEybxD=^%V+}K!HSlDQnTww2abhg#o{Y}n%2-(Ia)+Q#_Ge6yi9P9b&lE${5 z6P|}})O_73r)Nk-4dOj^C3n3*`lRRUvcQ1nC1bP88`QPcbgQ;009(C08v2M1d$LzKsHekwYbnh#rOX3^pE$QGxKftcbDJ2_sm3XciFsX z!G9LOV6a7wTWGG(yc&Aed^Z<*Us;0JK+`G_eYePscR&=#5P&dyFPLi*`FZk(oRWiZLUD3gYk~Gz_-EE{M-y9t1^jPmsmt+9Jlws}OLu zmn~u!!5MJoQ$cU`mJk8x7UJU03^~ZO@j}>bgl`BULkc*chyf4c_;Q8hAX~&oy<})T zbBsp7KZ=MB+9EzVwcB|+oXQh`Z~_XjVgf`AoQOwZ@PG~8#uAPNFaR2ZMFS)&3_vE3 z$N&cZc_1Kb0`Y0_Fxq|<7ydnQ0U_(h^_|kYx ze-6kMInrzq&<)Cq?M1es(}*MtKyV;o@N^6YV~@v@Z18k~1C2t#+F%`Kb$ktrC6efP zJQWA=4ngS{iakK3;&61VHI0O)P)M^_N3KxB;4;BkyKKnrXDs#~v1F?|AKH9r9*_%l zi~wp4CNP=+bsTKFlRJHKavrBdC!d$+K#u&=K#FE6j4 zprE0lVPIgOtgP(*{rfE~E&cudO-)S|6%|=oS?THNw{G2vkB{%{>{Ke1b~|>TJ9jQS zJNwo6vam>J_0#pP89iT3R|hJd8|GZQQ;KncUFa++0~% z`QpV3nM~H+-X0qpo12>(6&3aV{d@YY=XG^;PoF-uFX<;1XuG<)Qc_Y-GOcZK-|N?} z6$*t}dQ)|EwOm=5n3xzA7Ix#t4f`VP>C>k%Ii1Ij9sBU%LvnJmL?S6EDT$1X%+Jq9 zW;EB<)?)K@F)=aYx0NJ!}J?j~(vOxQWrLI=jYL*XDSv{?*Ic|&>f_^+lan(w zHD!Le<-vmocCNoYeE3izD>ch(eg6D;baXT_Nj)+$B9WDyIdeuTm7)suW^px?iqV>y zni#PJnepJ#m22zd1Exu8u~^KN)gv$7B;R;!yZu*ba`M{zeoNsQhpMNRCBs1{&q(si zk4i5iE>tlOpKuX`u~;l>u`VMgFD^BWQZW=HPOhlB$%zu%6!Zbnxz6^5Wj)!+O>wgtncaoj zw7F7MYm!uFn%am~JTXsFV+!@Aan*T6is;Nd6z7<|Lcd8d;84_UmZ-XY`}Wa7b+n?+ zzTols++w8UCU%>EnbnS^J7eW~R>bLR`Et|5+K!G6N=YBJxbNpe zjV99IG7L6n+L31O9@OQ@M?XDfy+Yfz^N0Hyy?#YZHS1qno-db-7 zMEtOL-u$r#JOB9UNXuX&@ceqTRGPGA^~yRG5V6Vdoa>&F80~01>=%RO-vS<(BsHsc zeZ2aBdZ`ETulY5aa?38^k8puu%L|&yv~}Nwhb!l-Jg@>QWR zpi=6i{D!@_@cpWH&hq)5%fvQ8^gS(|b2@|RnU-T~^hIw5P?q1+`)$2?O{F@%4Q!~p zJ)!?u|Mq0o@XA9+)-vAk(pAYOOV{U^`DiTadA`Qu#!KT&`oz}=TI-r`jW+&<*}3`1 z{`~=(?5Q7%++Gc{{%q^uw|6lb`K`ws-FKWz-M>$&TUWB98o^?%N(M4K=3e|)k7187 z#j}9hWf>9~duoJ0>4=Qnni-uyEX7t-!D5BktxOUbafL zeMZOtzn6j&U3STE$) z8T`KB-`d`(zaosUZP~`YMuVHPxL%3ef=iS#S@>n6D_Dbr?Iw{8^o5Gsx0lPW-u-Su z?y;+biD}ijt_Zrm7K_yJh3FsvmZEKDY&q%@}>4Z#kgUq0n% zR@V1MMn4%DiOqI>h-QL@Ih@qPydDcHD^3g1h_%^Q=@0YrhY|abg(s ZDVTS%cX4NlUFOX1mLuJTmPhdj{~KJSly(3B diff --git a/static/css/images/facebook.png b/static/css/images/facebook.png deleted file mode 100644 index d10a4c9663a1fba5825ec4c13ff5b00f10e2dc32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2522 zcmbVOcT`h(7LI~5$k8*qdThXPvcZD16ha_@;6jQZQjNf(2mu}tLW)Tslu-d0+Jc2H zM0)QC5eU6^kfsp8fPf%^3hFu*U>_>Z{^6NF_MP+Iuifwa?!CWz&v{|yrf2rb%E>|? zkiABRL`!g#2VVslDe#-~3t9pWM|dO~-g%Y_k5AgXr3=u7 zK%`t~6dRt6$vK=8i=j^4vQhVDut78gqI=q#O?9FJJg6h!N@L<-uWA}#P?|FyX02(0 zFkuq_H=3a@2RQF*N^$a~J7Jw+r}dz^-Z+qe0r03$Z-xhxi}S|AzVPC}`PMcZ2K{2f zqvK&;ow6}8hZ0yE0II2uP;)|HkWdU-9f?L@(O6X|3V}qxktjGqOAU#@X=>pRNa(i* z2C8wKU2v8}@;5DTg@?KEcx)UT&gb*h`5Njhjw>9A#bV(I6dZ+811;3JK1?3fTaC$8 z+-4vGTqh2V&7-lH&@D!)Bg>PAhk>4c4S~TnG5Jo+FGl?_L#Bj60iR$O1K zxjakYPd9#O&87IT0k|c=WqER(!257f+y;ZW`)i>sL(m(X8HWa53e|(ia`I#VOr8-D z4+BrsooUWEEQyHGLLxNDT1YeriA3t7QCe6uNs~-8FhF5Z%-+(m>sBSkzx)aRd%P<*_&v7RzJ10?gf5 zJQmlD#fB2jYpNrm)-r{nv(Eh|UA=>6>1jB-yC;gKU9x(zgo8`Z zpKFxQT?}m+o>+*@>&|VNxe_jX&?0_5H`Ow>dNaNCPFDK`UaryAYD0dScAzk?>4`^R zfljd)WgU}T+OO&yN4-{Tc_llqYWRf7t-yqO_nZVK>8Tw(O zBXO-HmlS5GP{}$}TR2xc`bMW>rmkzsH%f#qn6UFHEbCrUwTx299L;H-c8F-c-!&%} z)67fiR!ASx;|XoN@`43Tg5qAkl)k>vd3tcg`sdHpgRj!c`V;cII|rXC#I?$$4k;E& zf)X2HWwReXeAI7xZA?oxWo7BruS8{aax=RwdFSKmUt&E3%EdG6{C)~2N0XkYM->3K zTm9qe1T|Bc)gub21Bu1GzZzff9+_+DoA!*X-1zv$);nL{DOo=9C73YfZ$w_Jd&VvGT*)}0Tw=+tRD`7UbyI_Fuu2_{7m-FKBvFuBC9le0FHirqz_oklPMN=*e zzh6`JsUTWd4C03e%*;!XzGsfLtgrN_C@WV8h3f&G4KN*@iT%>job*@7LbKfI9m)~m zQGb)Xj~?xde0M-agrcuSA^D+_<@IBr>KTTxm{nKzRKAUk)EXR_O8_xv{b zY~PaYK{d1ABlGhq=);Yv0jv3;LAouBd)ZeHsy34^Cnmmm#_*Gk+KqSV&sBw~4>aZ| z?o;*1Ow0SNNBKkp^pH|kXYOl*Ax~_Ii%B+Mm zLy2{DN`{y1nsL%F6w7+`==>hByFgd7$S;}z`d<)y z(i!Xa&uaPAc`v9vjTasiRA(x-C2!7#DCgEv7aR4o*|c@R7a8Vy=oFs%kpHAtz4 zT0v=&rY5PjQCgu%&6kAuK}|wsce72Kn3!ym&EvaiPn|5qS)QGlXWrku^RX;rhv@0* zV)Q=Bt{-OX2xIIRi7aw_F*{g^K#k;Fg`#65QGGO-E6(rX`K-k=XqEw+*YSjv|8!5!r{FrrK!tXf)7G392E=p*% zR6UIIRkexjd4WGsVkdr=j!UvC{s{v<4EfnzT7Y>I>v+ZN2@Au?b|o);9a;c`wFpS};n|YE6%CSrC~r zBNBMj`TXJ&*z}!h=O`uaarf80|G8`U670+;Lr)Q!v|?ql2kB*=Z_@oGJVOw|cc3=- z?=SZ&jb;A~{O%X{mI`zERpPTt!;pjhs7fnnHEUdqp3zbpXq3{(2hY%%o`Ae`0hRAg hC{hS&y{LylRSKvHizxqeVQ2L+wu2Vz{~!Es{~tQVajgIV diff --git a/static/css/images/header.png b/static/css/images/header.png deleted file mode 100644 index 832cb1c7b81d4f6e2726055da167de2e01bba2fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57031 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 it*TdB-u&Bt2`~WmGCs0`Mo~8a00008 diff --git a/static/css/images/nav-item.png b/static/css/images/nav-item.png deleted file mode 100644 index fef735eb466998d5fed8709c3ff388a516c1c4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1195 zcmbVL+i%lW95xg&gob!tpDg!r#P)IRq&Cf}#21>WDOsASK}=(gecG7DKE^&-((Vl& z5dXrMv`qqm_AsfG+s3#Q1fy#yFljGnV&l?oEE`ZR8PYUu$8A&gQ1LKJ_PO}?eZTK_ zJCN(&wrOMgMv9^~WqP$dS=W#^wxNxDi-#AQWO)PYMLd9paLo)Lm9kL@(iztrhIwe( zqkE=cH$}A#IfWuFX8RNixvUx4uyxlbXo~9Ysr#li0x?~J!;Y6^9-TSQ(2kvC2Bj>Y z^;KAQddC7dFxFqN#zrjJW_sSDyXy)ea3MD7x?Ax=rJiIKc@?sct~rKYG{GZDW=T{r zo1;|}Kw4t?n8n8d9T!<3^0Fvzp#>iB91u7@5d*v;B@`ae%MU}m1@@4V*NkOf<*4a5+&VWnA6#Il%Iq>qc=cT8B6fU&>h3IxLL(kjujmRRfFEW2mDACb@gH zqsWk`QMLyTDT-OqkX3b|hcjA|A%9rgu@za@;t9Y@MgoXB03am_30c%7LrbRxSuk20 zt6>v{EQ^{bkh~iJ=s-5qwAz){_|7ifki>KgoAE+ydKPT?b%@_(EO;eWQ3GgV6ciAu zv^pSHMi_-<nrG6PtR`||2cK$SLwuk<@DS;mmb=)&xDD4=FHQbQw!A}UWmuoZEe)*>!5}-7AmQ+Z{)Vq~45{D%5YS zn|y6;nj9~5I83{!9enZ6Uq9}ccK<&6$)Vlj2M^C|E6sf&DIb6IX0?6uuG;p`Kka1p m-JZE}adz^y{#h=&_H}AvrtPQ7{aAyLP#L{n`!fB(-hTlRH>ffI diff --git a/static/css/images/navigation.png b/static/css/images/navigation.png deleted file mode 100644 index 8ee898fcb2f711df1623e1cd1e42524d5019570a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1195 zcmbVLZEVzJ9Iwm>8BU2o4G@y1GsY0E?Ni$8+U$mRZEri>jpKH4_f5O@+170BQ`%?V zZQsBcLJ07|_`zuSg3Q-3!o*XD3{(XC?ibtuCm@se*N{j8Pq*FR!@>uew9iZbzu*7& zf7_O8Yp$zZSxZq=U8Y6Pll2+$#+KBOZ*lL9yJT5`jUsMGUASZhkV@L96Ve&i?1p)0 z+5?+T!bXa!>2eB1T+Ftr7IIlLvSG`vPtX+AxW4S0RxiYKC+v2-1aoa{oS_{%!E{Jj zKI?0+$7vZ1VEbTO!5Zwf6q{M!L^qaILf}Gd(q*^L3)OOhnc-E*KDy=@dd39zCYV`K z#cYn&PylI(GD_6oumjP7q?mA{GvK*eu7qu)fNm!_W#GA3MmSBSy0m_2UFX zl+K3W`q}I}u@}xIilmGyn?46vo^#zOt{LkP=iwt63tEST0UvUC7^42bBK7F1uYyVL zp6n&AnFT|#2!Kz<}_?^SbPsFNP08Na7 z0z!S&4#@Q&jKUt|(^|X40=mQTY*Y%P^2|o7!@zkT+UWqf^h|zLX953`D2ol67Uu<^ zMRBKi&CqlZ*M+!}_KIe zjMdg$Yr$AGJoVav^RJIyXd1s7`~Kp(A1^K5^VbVQr}KZ@)qc6YWY5ILlXqVJ`mFl% z6?){{@~_S=`{MNKegC}i-M_V;PrP~LTJvu=nf>R%5C2JHmsWf`_4dI@=lFEp(B!M% z{JnJVWdEP{j9+iOb?jF5`0d<@J6vTtb@Y1X*v&NuFK#$-`=u|>$cHYs{(h_R@YN4@ zPpd>yOGZx?%BP+^x_D8F9FNpH%t}%J^xlL2C!DqJA-wy!7vF6j{&?31pKP2O5jqC9 w-(Q~E{83@&=&5&xDx-c_sk}1wQ|qGVsl!b*XD*NI7$+oD#%R;`rQX}}5RPS_w*UYD diff --git a/static/css/images/read-more.png b/static/css/images/read-more.png deleted file mode 100644 index 383f536631d1b18e95fdc22b98bed57d9623fc3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1017 zcmbVLJ#W)M7`6nIs;Ckhg6ZTUu@L+2YR9!zQyia7BQ+&TBQ;|j`_fpAeXe~aZbvpY zRwgz^7#SE48w?Dr`~gOOLO7>!VW>J_$-WOi&-=Weue$rs*4G}aNs_eQ-X%S;-VpDt z)$054!@JjFxzD`;KVV}%3vwzs5gSp^PJ$!aqd|0b@{Mi_(m3u9_@J|Ag)C8m3Zs-s zCfJg+y;EjEcuYAM(W5xE<=>w^%OH+y`B3k`PUg}{ynCM0gY*4wJL)Jgdf}Tg;Rr07q~2^Kv!TRgiQpRnu0WFYUX2rA%ZHx zDl{4hTDoCD1eT91)beO-^@zXJ5+_@paGqJJI-AXu*`~tsBNdsZsY0w`+z^OHahCF+ zY^23TZGq4t%;Sv5ECrRtV8l+jEelUCLP)Ys=hARmEE6SCrj|jbA_b~RQpL4E7raOR zx^X4C=$~a&?a_jr=Ao#^c%vqZ++8nJ0fjf#^E?(s38sXFrwL7Yo7l4WqeO9JnI35x z242&@r1nY+{H_ggoSU9&t6-^`Y1F2;Qu@?X=)Q z8q!)f7P?EWel6E>a~g1#_Zgek9nhUH&WZ`kfP0`T2pq;~#AZcRo{MM+&Epp|@^hAe zMSiXL3Vq@_*uY4`2*X9(&Q{ArIws!MRtp)9yyQmzlQUH~qgKuFPqWllq64e#W$TN> z5 WlC&q?P7kLK1w?9l`{aFV`0@{Qi8e(5 diff --git a/static/css/images/rss.png b/static/css/images/rss.png deleted file mode 100644 index 10fe5f29cb4a80d8966d7d1fdc7a303c32fd1782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2496 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 C0;IkG diff --git a/static/css/images/select_arrow.gif b/static/css/images/select_arrow.gif deleted file mode 100644 index 004c3bf621ec682b7a1e46f7f72d26ab1e0ea279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52 zcmZ?wbhEHb2Cob$Uq-{<>0&+q$uKIe$5vz_MB z)k^^Y&~&h;xFO>j z!U^NVA;W&!6Z<+5UwKS=pch`Fsu$jTQ(5W&(3FHa7qb5eNh{28+gGO%V%IUMP!C6PmJk z`U@T?FpthOB+iG(F!w=ekk78YxXr{ZvA5>j^r zN`*+a7&6)1oQmB{!Q)6I`~ud2#pBahba;W6f$)C8+WsS!Nan&cKAY>oW(O}Qz%`J~ zXY&Ht9FXj8VFrPo43-~Tz?;9G&)HI7F5@8Vx1Gyof}iS3WPF3)0*A+KCX+2OScp8I zHwi)DiiNtuwhp| zwrX5GM%E^ik*bDE8yGR^Kc3F;O}Pjyu@OCf)JLiwBZf%exK^Vq+47U!imt9bzKin< zulqCf_lGIRWVHc%uPMc}PmE7ml#i5`iGTQ`ZFc%~aXYl3{B=!peBT2_egi}g&~?b^ zl=PWzDo{j~4*>S(jwE_s?KCH4cJ$u8ol$PMAwpslS<`%b&?Nt^s-RZ$SohQ6NAKT% z2uoPmBu_jLqeK-{N!o%}IYv_&rj%JV>Y;V}VD;%Y?@eyZX>5rMiy)%QhEmf1wdq`E zS~~YkiNSiwJNr!ejpoYlk9W1+P4eVl(*Iqo9eXpOc4Tm1z$B_>=C4VU0>xJ8=$_c> z(4<8w{F-+&GwC;;nHE0+{I4F%-Iy&gT9$C9umu~EpbT)Tqt3RkN`C}Zj5!tbn#9xt zyGw?L#fym5eAU>az5%vK$^6*4n(6{h_=-cxiyZT%{~n!K#J+BL zLMo9BLe*2FqXUw-DLva&V! zaMj?^^Y=;O9$j`CDWyGG-0G6jMrW#j$CK)c+Oo2k>qS!aur{Y(ftcJ|F_NK{X6cEB z(UhjK53_S=vXMO5c(71=Xy_?Qkn!<9bA}>m)baT4-eIdPKu`bkzWzx~j{?BGXid&Q zbV}ptQ)4p#pnTSWV(TG%;2VE*c*xyN83i6lUv~3}iZYm|qa(`=osNr+Ubn(~vGR4j zKlBKa`x7{Qozu?0mTM|S6&IU0JInR$EH9TPT3EfN9hzS6q^g5=IPh|OKLnL}Xm1wK zo<1<0t-7eUY9%mo^3;uPg(9X(GTE3bxA&<-mHE7HjPgzPE>BO^t_;tzP*X_OEV-7m zxXq&C7tu&e)x`8cft8YN<)O+>C3Bl(U9Wy7w2qb1`X1C?UPCYIj2v2hOEc-%A~3wt zy=bkM%I*fA&O({GNz^N9*xE+_i*bj-)2{<6#l~-bnwq6pzKD8L7}slGhS9B;cJ;0_ zd~0w`F&LDiX64EvdO7FB4x|>VrA`zr(a_l@$(5iAOpk5h5LDy(X-eLuphTtgoeyD& zYDD+LeTnW-qLX*eorxB49YxP6H}koRH+s`yAGM*SzMF$R&^{HKCivr#{me@K(U0vp zEDa4$5w~c$7W}(vd$@VP6BmZ3^_5EI<@+9+F70j681Y}ddi7}J^A#Ue6>o#n&Y$1= zq?uGS=YnqgP-2|9>OyKQPvuI7VsJQjC{e zoa&IbtMXaDhMr#bVJB(%(j6b+ozE8Mv_}tr_aRMmH7!jlm8Nae$vp+S%74pVXE)oq zd@j(SAj#Viyg51MlaQ437+n?76CSFnwVRo0WoBk}<@Kw_bww9uW?qU7)%sHQcHZj9 zT>kws)p0{`&~eZ>?ia1KT3TSwz&)`Fioo9{A_p9QZ5&4#l{?9(av3!uf+~~ABdA$f ia=BcVB};h)D5(NFH39Eny9vttACUvqnR1!r6ZJQ^5hn5g diff --git a/static/css/images/twitter.png b/static/css/images/twitter.png deleted file mode 100644 index e8896c571d6e51bcbf310c40bf829187647ce3b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2457 zcmbVOc~nzp7SC}(Tu|(s=~1ioO;ATFWP=bB*%PQxQA8|E#nu21Ng)X)Pg%4sfS|>S z2CAY6qSh5CVHH^f0oe^(*b}xSCQ%j<7`D7`9xBfK;prdq&Ux>C%l+Nuckeytop;^+ zt--Q&%WycHfzwWw8z#TP-u3zmvG4s=<~^8Li#T{9`}lrHFk1lQ?0os&FyzE#ABNpv zwr}W>YS+a~} zN@I}7(8mXlc@y~hG2B>=AAMmvE4)8~1Tl!j;NW0Fuo;0bI7}qd>2xBALZnbkF%45; zC=X$WnDT^1^A=dJ&_}=tLO6ULG-r|R%|D7*;ju_Rq`(bwartDJC;UhhMj0`L9YiD( zNJK7oF0c36Lc|UJZy2A|7P^N9!9+J$$UiFZ!Rp~>G!MqO`)fyYidZy^Jpv9^6m}qs z?{kz3^AIPN6&|}G_;P$1bO)9NjZC6C(#YlxWHQ;#oI<0UJ5U{2_VyGy#c|%o=dctD zsy&tBNW*x?pblhvI}(#=X68WI&Z3#y+tcQ;PCOyP=J~+$emR)mk64Sp#4?xyn2qoS z?tFgWdf^J8e%liY?_y6IHhy_EOYmWbEmiZ&B1Lu~XS|8hd z8XlO3O^g5=jmm9J_1MJWTz9!UjE|4o7QLal><2(s`5KtVqct@()_XkxIyyZ)EzU3M z>ynn1miG4cZcHdwtJSl!vn?$x_&=mK?ml?=@}>24-Hq&`fq?=1?FOY%dA=IGCIND} ze22KZyu2I$@J`dG9S4?A)c9MH@v$+LN@bib1L$OBWu?5ev8}BwJn>#==84KQO=gojP@@L7o50M>Oo?pvm#AN>s;U4Ox5-odl#W{GDP%I) z{bqD{csNc1?4G`Y?lzb9qOsK=w-1IXbYdK%e|&NVjeZUY8S>bNnWxWPh`xB~#Fbl@uiuQWLN_MW zN?%Q-+`b)K5ALRAyizJE%F4d~1Ksyf7oA^w{!VH|AE>CPXl`!4RtIXTsfF*(wupUw~Lg6rub~6zFCHb9Lf&bOHro@i$Yu z(KpJTgeEkr4ZYS1jMDpz5?`dZgSKYLHy1KC#1)$ahHpV)X^~08Z#1mjUL>o=Hm9ek zAC#y;u^OBzL@!l>e?8D8O3_1)QF@L7jB5>%?`m%G26e=e_lEyJBSZlXL;Xdp|W`7#WMZ!@H4nei}mV8 zM|1vZvkmCMKkgZCetU0Y5UX(sy1=Q+R8VjtvX{ zURpm?I`obURCNSn^5Poh`L{o37^`2T)+bqT(9GUL!NFaWinD=Bi@p48>1z!P7B7*l z;1fgrF0xjxyf_P%-;@mZ=V{rb0+T!9*BVx|jePl{p|;8CR_D~d^h3e1!T9RrW7X2Hw;npzqPls%;<5bRjBeND>MsrbbyxN- zjX$td^tZeQaeLkD(|BdU2L1KA)!AY}j2Cy78?~)dboeMTy^QZQEfx7R`!8fQHHHan z^S7<=@Q6vyX=q$+`2@IoeE|CM6vd=BL=ctCt@v2$|f| z?K`q#3&AHvsWJ9<#V^n!1VXp=9{2iBoc{iUqr>`t+^0sP1-LN zXJti@*0hMt_S5M_r<9c=0@)7h;?p<}YYz`#2(A6%i+-(kUBAsg%2z$uLtm~Rzd158 nbJOX&k(kIdH2ki6kv<70N8g?}Hdtjk_p{{Wu$z@`e<=Jv(zVJQ diff --git a/static/css/images/we-hire.png b/static/css/images/we-hire.png deleted file mode 100644 index b714007ee79e86ff84e1bff92f23aac41d7c41bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2249 zcmbVOdsGu=7LWCueTcf<9_=cYo@{KZu8?G6NK7;;BtcRMB19g(AS6SGkO#>i0Yw3I zi>N3_X=N2HN>}j(xJ6v3imTugbQP^0Upzz+f<^>U2)~`Exci5vf9#wyGv9aT{_f*< z@BPkf2nw7#YJ~d;27@t5;V%oO-|qB1{&&Oa=Qu{aOE8|2hf^V@7%E9^AsIeeQ#8p` z7}Pp4m{e<%6V8(}8I0jEdQ~_Tt_%=sOa`{vrNg!v%ru(8m^s^KR%_x&iWyDn^hOEm zY1K&ittJWJpS&N|O?&5ouYoXEA5m#IykeNvWAOL%h){wn6V=64u+G!j(ZxsmVezz1dtZ4Oc)g1$;Ka=Zg3uPbQB`a5)5z!xefF zT(P%M%q5ubE*9<0qKy#;%lzK?qIVKjEJc~c98OYF5<6)c+hoyk2$4v{;qo{S$9UC1KH#zD>bkRw~~cHd@~iMN`JHsm&aM z&E*&juDsr8Td833zhQh(+p0=7lbm4EYD%jky6McEcy#utJjJ}a+yF#aJ~J61Yb@Ngb$x56!GQWellNQo`~l+WaC3v0pC|9 zm-!Gh?>vH#6TZYWuG~*5nm$b?xC7DGl*v6U;EZQEN)Fy2|r5TN!E5uOPL47L$SbhF`J%1OC1FLjH8A zRKVpCQdi!-T&Y|tBLp&@K;*-9<^2|`{eL*)(7|wA&GA3YG9;oq(6xNu`t;`g@Q_A& zVl4D%P*v?U^u#fO0#tGUG1Lvt7C4^wS3f~^1@>J)L5Y3wCghiQPG1c7XpEoIz zVaFL1)#7d^HeSQew;A2tjLF|1ZWnT@@b6a4+KG$3 zIC2+RN8r8$UOGrtqUL<}vTcYd#EcAdyh4)$)PD2;H|#ii726vzPK=fN;i1H}c3f^k zKspXJBE12HSG)3$z)*^mVsv)C2wT@YO^4bx5M~rKJYuF{zV4Q8FA_4*aI+`!B=)p| zrLs>6>WtmpH#H7Zb@<_MXG#@(jW44%zK$z!`mTm-CA3?ReXg^i4Xeu_{Q(!7@pU?$ zJ$uOsef3?z)hjQsqv)PrA|moy{Hgv^&v2#>1AvfpIGuz0Z`mbAY;C|~Gxl8uQ-!Y< zGVUF6V+=0*LA!C<)LI9RgP0ROTsnu>Q zfKLhr0smASsOllJUj=VO*69|%4T#@;H@6yj)d(f8R#ZNo{ypZc=$KoK{{BI2PM9pTe#Lkb7;x5mQcIIG| zJY#$6l&#es`KMMa+1)ix^IPATtEt0U6eHEOzh5xWVH{DHZ@iQ?j~MK2)PDTpA0LOR zNp4Hnt0a5JvV8#!`pAfWfm*2?HcWcJU!&V1e7-bjW8jHv-o^l(bKvY+uX`EkO@X;p z_ZDO(iYHavEU9kI^xh&F`^CuCx!Pm=Gwo@`g-SuYF6xT6Ie{ouf3L6qBR}L$RIgj< z_0#Uzvq$FiZm?r#@7ZadQ9m91B&o6Gqj}$MaNH-OuH9U-@F_KM%oj|L6OEy6o+K+~ zb)iplS>c*fbsv?cm2Wv6lBv=i8RaIuqglLW{nkg!6N`?KJ)W8AfB5_H{&QbXSs3bB zSav?UCSY^Tj75$oBT7|Gw;miNp8m^P>8w2dP}cf65l~rFnLF0AXO6_NInJDB*%wjJ zS1?mp*j_#Q0DtD6Ys!}WUU$+UBmz|}_^=B8495XD9 aKKN$ac2vtpC%b-H7z%ly?67ZC#(w~pqCUz1 diff --git a/static/css/images/widgets.png b/static/css/images/widgets.png deleted file mode 100644 index 0d39e30fea16fc6d794469e53d02b9cf16ebafde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1959 zcmbVNYgiL!77l73&_WAd+Je9iu@ zIo~%TN7p0W2y|C1XA&>8l8aN zTUJ2_G-?4oi6w=k`e-~|6KgTx3d?$>%95etsp(OXz#223a-hXY3@~dmbw<8fK%e%@ zr)>8&NC&1NWQKtLEU09u42UKSIKW~+;VOs?18gP(W=#-j4oyM1=k{K;(C7`F1q@E9g+1c5Q><9*7*b2ft9uI^N5JAEzM7S|WM`Gr1 zopIT$2NXA|3>rPDA#{M-BbG{-NCBOS^jQj8y;S<#vCcSCD5_+j8PkI>0|K>LcV5$I zBPqv!4daDqqcTU2gL2$Rm<%fFJkplUlBwGLzK|P8MZ-@pXsAQMGEqWh(&9QY4i(U; zKMb`-&F6_xHV1}S5)RB1!!RslA{-u5%#xrY5yC?xvp!zLMI;D^i*gYJLbxz2hPf!p z5wf9ZCQl?nquJ0bH%@0HF`WvZ)zwhCGhFz0x%_AYj*)~xNf4Q{9Ux05NWz#-=z(Yj ziva^k8l9TRHoA}JS+*!{&}_ri5(A+Hrt8bsyg(m~79t!3W+GGs(|HTIA|A{_P%)P) zf;mF^3|IaC)C{D80o~2&qobp}y}h%u z^Xb#4U0q$>-Q7JsJ-xlXcDuc=udlzq|5aH)AT`dGI8>-KH+Dbq$u5Q#@4^nfGp`}V z{%@VjRlwM-lYX?cr`A(+v)5wTwlU#~wP2}(tV(?Fis{B$liYcJaC9QZxyczntQbBw z20LK#4`s~_)fHd7`t|DVn@YZGYD0F|0y|62xX##5K4hJ4a@y)Aw`Dsp*86pgNY9Ys zee9Bs6~gxNq!Z`YK9=8E%ntj^_ft)AimC1}{;oc7*bxA$b;O zlvVvH|2h%d9J37$ZEjdr0htq-@zE1`#>=+Q)@qbq#yc_CC4z@KF+ZMv>Z0udP3@`F#12 zZ%?n}dY$@6D)UH@ zg`Td`k9+{we)hYR<+GCYVAuWzb!(|-)&vdAH#L;`G%mW&+rxkP_)gzx^zEy+=Z4O?TXU=H!e1iRo8H@d_S2t)C1uAM#sI+~43c=)#M<*p zuXG#)H#cS-e*c@=?fboa)mEBKffp#6Z&zu9=a0S_&)m2|v)l0>Z%)U;vrqTDu439Y z^pNvf3UbHuJ(A+b}0qJ$nn{Nvba;-l>A)4%)N43h%PnCpveV7OKd=dmB$F0zX!p{D+fvdC;J$ W^324gpO3h&&N%UU^b66J-2VYgUN8Ls diff --git a/static/css/images/wrapper-bottom.png b/static/css/images/wrapper-bottom.png deleted file mode 100644 index bd4cafa3c710cf9a65c2a5f8189b23e592d63a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7238 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 DE814> diff --git a/static/css/images/wrapper-top.png b/static/css/images/wrapper-top.png deleted file mode 100644 index 6e918bd5d12d605964c476816cb8d34bc22e927c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11931 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 z 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 R%7%nOfxvWNt^fJMe*wSni2wiq diff --git a/static/css/jquery.qtip.css b/static/css/jquery.qtip.css deleted file mode 100644 index 9788fad..0000000 --- a/static/css/jquery.qtip.css +++ /dev/null @@ -1,608 +0,0 @@ -/*! - * qTip2 - Pretty powerful tooltips - v2.0.1 - * http://qtip2.com - * - * Copyright (c) 2012 Craig Michael Thompson - * Released under the MIT, GPL licenses - * http://jquery.org/license - * - * Date: Mon Dec 31 2012 02:55 GMT+0000 - * Plugins: svg ajax tips modal viewport imagemap ie6 - * Styles: basic css3 - */ - -/* Core qTip styles */ -.qtip, .qtip{ - position: absolute; - left: -28000px; - top: -28000px; - display: none; - - max-width: 400px; - min-width: 50px; - - font-size: 10.5px; - line-height: 12px; - - direction: ltr; -} - - .qtip-content{ - position: relative; - padding: 5px 9px; - overflow: hidden; - - text-align: left; - word-wrap: break-word; - } - - .qtip-titlebar{ - position: relative; - padding: 5px 35px 5px 10px; - overflow: hidden; - - border-width: 0 0 1px; - font-weight: bold; - } - - .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; } - - /* Default close button class */ - .qtip-close{ - position: absolute; - right: -9px; top: -9px; - - cursor: pointer; - outline: medium none; - - border-width: 1px; - border-style: solid; - border-color: transparent; - } - - .qtip-titlebar .qtip-close{ - right: 4px; top: 50%; - margin-top: -9px; - } - - * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */ - - .qtip-titlebar .ui-icon, - .qtip-icon .ui-icon{ - display: block; - text-indent: -1000em; - direction: ltr; - vertical-align: middle; - } - - .qtip-icon, .qtip-icon .ui-icon{ - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - text-decoration: none; - } - - .qtip-icon .ui-icon{ - width: 18px; - height: 14px; - - text-align: center; - text-indent: 0; - font: normal bold 10px/13px Tahoma,sans-serif; - - color: inherit; - background: transparent none no-repeat -100em -100em; - } - - -/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */ -.qtip-focus{} - -/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */ -.qtip-hover{} - -/* Default tooltip style */ -.qtip-default{ - border-width: 1px; - border-style: solid; - border-color: #F1D031; - - background-color: #FFFFA3; - color: #555; -} - - .qtip-default .qtip-titlebar{ - background-color: #FFEF93; - } - - .qtip-default .qtip-icon{ - border-color: #CCC; - background: #F1F1F1; - color: #777; - } - - .qtip-default .qtip-titlebar .qtip-close{ - border-color: #AAA; - color: #111; - } - - -/*! Light tooltip style */ -.qtip-light{ - background-color: white; - border-color: #E2E2E2; - color: #454545; -} - - .qtip-light .qtip-titlebar{ - background-color: #f1f1f1; - } - - -/*! Dark tooltip style */ -.qtip-dark{ - background-color: #505050; - border-color: #303030; - color: #f3f3f3; -} - - .qtip-dark .qtip-titlebar{ - background-color: #404040; - } - - .qtip-dark .qtip-icon{ - border-color: #444; - } - - .qtip-dark .qtip-titlebar .ui-state-hover{ - border-color: #303030; - } - - -/*! Cream tooltip style */ -.qtip-cream{ - background-color: #FBF7AA; - border-color: #F9E98E; - color: #A27D35; -} - - .qtip-cream .qtip-titlebar{ - background-color: #F0DE7D; - } - - .qtip-cream .qtip-close .qtip-icon{ - background-position: -82px 0; - } - - -/*! Red tooltip style */ -.qtip-red{ - background-color: #F78B83; - border-color: #D95252; - color: #912323; -} - - .qtip-red .qtip-titlebar{ - background-color: #F06D65; - } - - .qtip-red .qtip-close .qtip-icon{ - background-position: -102px 0; - } - - .qtip-red .qtip-icon{ - border-color: #D95252; - } - - .qtip-red .qtip-titlebar .ui-state-hover{ - border-color: #D95252; - } - - -/*! Green tooltip style */ -.qtip-green{ - background-color: #CAED9E; - border-color: #90D93F; - color: #3F6219; -} - - .qtip-green .qtip-titlebar{ - background-color: #B0DE78; - } - - .qtip-green .qtip-close .qtip-icon{ - background-position: -42px 0; - } - - -/*! Blue tooltip style */ -.qtip-blue{ - background-color: #E5F6FE; - border-color: #ADD9ED; - color: #5E99BD; -} - - .qtip-blue .qtip-titlebar{ - background-color: #D0E9F5; - } - - .qtip-blue .qtip-close .qtip-icon{ - background-position: -2px 0; - } - - -/* Add shadows to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ -.qtip-shadow{ - -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); - box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15); -} - -/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */ -.qtip-rounded, -.qtip-tipsy, -.qtip-bootstrap{ - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; -} - -/* Youtube tooltip style */ -.qtip-youtube{ - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - - -webkit-box-shadow: 0 0 3px #333; - -moz-box-shadow: 0 0 3px #333; - box-shadow: 0 0 3px #333; - - color: white; - border-width: 0; - - background: #4A4A4A; - background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black)); - background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%); - background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%); - background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%); - background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%); -} - - .qtip-youtube .qtip-titlebar{ - background-color: #4A4A4A; - background-color: rgba(0,0,0,0); - } - - .qtip-youtube .qtip-content{ - padding: .75em; - font: 12px arial,sans-serif; - - filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000); - -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);"; - } - - .qtip-youtube .qtip-icon{ - border-color: #222; - } - - .qtip-youtube .qtip-titlebar .ui-state-hover{ - border-color: #303030; - } - - -/* jQuery TOOLS Tooltip style */ -.qtip-jtools{ - background: #232323; - background: rgba(0, 0, 0, 0.7); - background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323)); - background-image: -moz-linear-gradient(top, #717171, #232323); - background-image: -webkit-linear-gradient(top, #717171, #232323); - background-image: -ms-linear-gradient(top, #717171, #232323); - background-image: -o-linear-gradient(top, #717171, #232323); - - border: 2px solid #ddd; - border: 2px solid rgba(241,241,241,1); - - -moz-border-radius: 2px; - -webkit-border-radius: 2px; - border-radius: 2px; - - -webkit-box-shadow: 0 0 12px #333; - -moz-box-shadow: 0 0 12px #333; - box-shadow: 0 0 12px #333; -} - - /* IE Specific */ - .qtip-jtools .qtip-titlebar{ - background-color: transparent; - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)"; - } - .qtip-jtools .qtip-content{ - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)"; - } - - .qtip-jtools .qtip-titlebar, - .qtip-jtools .qtip-content{ - background: transparent; - color: white; - border: 0 dashed transparent; - } - - .qtip-jtools .qtip-icon{ - border-color: #555; - } - - .qtip-jtools .qtip-titlebar .ui-state-hover{ - border-color: #333; - } - - -/* Cluetip style */ -.qtip-cluetip{ - -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); - -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); - box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4); - - background-color: #D9D9C2; - color: #111; - border: 0 dashed transparent; -} - - .qtip-cluetip .qtip-titlebar{ - background-color: #87876A; - color: white; - border: 0 dashed transparent; - } - - .qtip-cluetip .qtip-icon{ - border-color: #808064; - } - - .qtip-cluetip .qtip-titlebar .ui-state-hover{ - border-color: #696952; - color: #696952; - } - - -/* Tipsy style */ -.qtip-tipsy{ - background: black; - background: rgba(0, 0, 0, .87); - - color: white; - border: 0 solid transparent; - - font-size: 11px; - font-family: 'Lucida Grande', sans-serif; - font-weight: bold; - line-height: 16px; - text-shadow: 0 1px black; -} - - .qtip-tipsy .qtip-titlebar{ - padding: 6px 35px 0 10; - background-color: transparent; - } - - .qtip-tipsy .qtip-content{ - padding: 6px 10; - } - - .qtip-tipsy .qtip-icon{ - border-color: #222; - text-shadow: none; - } - - .qtip-tipsy .qtip-titlebar .ui-state-hover{ - border-color: #303030; - } - - -/* Tipped style */ -.qtip-tipped{ - border: 3px solid #959FA9; - - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; - - background-color: #F9F9F9; - color: #454545; - - font-weight: normal; - font-family: serif; -} - - .qtip-tipped .qtip-titlebar{ - border-bottom-width: 0; - - color: white; - background: #3A79B8; - background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D)); - background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D); - background-image: -moz-linear-gradient(top, #3A79B8, #2E629D); - background-image: -ms-linear-gradient(top, #3A79B8, #2E629D); - background-image: -o-linear-gradient(top, #3A79B8, #2E629D); - filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D); - -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)"; - } - - .qtip-tipped .qtip-icon{ - border: 2px solid #285589; - background: #285589; - } - - .qtip-tipped .qtip-icon .ui-icon{ - background-color: #FBFBFB; - color: #555; - } - - -/** - * Twitter Bootstrap style. - * - * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11. - * Does not work with IE 7. - */ -.qtip-bootstrap{ - /** Taken from Bootstrap body */ - font-size: 14px; - line-height: 20px; - color: #333333; - - /** Taken from Bootstrap .popover */ - padding: 1px; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - - .qtip-bootstrap .qtip-titlebar{ - /** Taken from Bootstrap .popover-title */ - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; - } - - .qtip-bootstrap .qtip-titlebar .qtip-close{ - /** - * Overrides qTip2: - * .qtip-titlebar .qtip-close{ - * [...] - * right: 4px; - * top: 50%; - * [...] - * border-style: solid; - * } - */ - right: 11px; - top: 45%; - border-style: none; - } - - .qtip-bootstrap .qtip-content{ - /** Taken from Bootstrap .popover-content */ - padding: 9px 14px; - } - - .qtip-bootstrap .qtip-icon{ - /** - * Overrides qTip2: - * .qtip-default .qtip-icon { - * border-color: #CCC; - * background: #F1F1F1; - * color: #777; - * } - */ - background: transparent; - } - - .qtip-bootstrap .qtip-icon .ui-icon{ - /** - * Overrides qTip2: - * .qtip-icon .ui-icon{ - * width: 18px; - * height: 14px; - * } - */ - width: auto; - height: auto; - - /* Taken from Bootstrap .close */ - float: right; - font-size: 20px; - font-weight: bold; - line-height: 18px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); - } - - .qtip-bootstrap .qtip-icon .ui-icon:hover{ - /* Taken from Bootstrap .close:hover */ - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); - } - - -/* IE9 fix - removes all filters */ -.qtip:not(.ie9haxors) div.qtip-content, -.qtip:not(.ie9haxors) div.qtip-titlebar{ - filter: none; - -ms-filter: none; -} - - -/* Tips plugin */ -.qtip .qtip-tip{ - margin: 0 auto; - overflow: hidden; - z-index: 10; -} - - .qtip .qtip-tip, - .qtip .qtip-tip .qtip-vml{ - position: absolute; - - color: #123456; - background: transparent; - border: 0 dashed transparent; - } - - .qtip .qtip-tip canvas{ top: 0; left: 0; } - - .qtip .qtip-tip .qtip-vml{ - behavior: url(#default#VML); - display: inline-block; - visibility: visible; - } -/* Modal plugin */ -#qtip-overlay{ - position: fixed; - left: -10000em; - top: -10000em; -} - - /* Applied to modals with show.modal.blur set to true */ - #qtip-overlay.blurs{ cursor: pointer; } - - /* Change opacity of overlay here */ - #qtip-overlay div{ - position: absolute; - left: 0; top: 0; - width: 100%; height: 100%; - - background-color: black; - - opacity: 0.7; - filter:alpha(opacity=70); - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - } - - -/* IE6 Modal plugin fix */ -.qtipmodal-ie6fix{ - position: absolute !important; -} \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css deleted file mode 100644 index dfb0c9c..0000000 --- a/static/css/style.css +++ /dev/null @@ -1,244 +0,0 @@ -* { margin: 0; padding: 0; outline: 0; } - -body { - font-family:Arial, Helvetica, Sans-Serif; font-size:0.9em; - background: #01a0bd url(images/body.png) repeat-x 0 0; - min-width: 1009px; -} - -a { color: #0252aa; text-decoration: none; cursor: pointer; } -a:hover { text-decoration: underline; } -a img { border: 0; } - -input, textarea, select { font-size: 12px; font-family: arial, sans-serif; } -textarea { overflow: auto; } - -.cl { display: block; height: 0; font-size: 0; line-height: 0; text-indent: -4000px; clear: both; } -.notext { font-size: 0; line-height: 0; text-indent: -4000px; } -.left, .alignleft { float: left; display: inline; } -.right, .alignright { float: right; display: inline; } - -.shell { padding-top: 3px; width: 1009px; margin: 0 auto; } - -#wrapper { background: url(images/wrapper.jpg) no-repeat center 0; } -#wrapper-top { font-size: 0; line-height: 0; text-indent: -4000px; height: 19px; background: url(images/wrapper-top.png) no-repeat 0 0; } -#wrapper-middle { position: relative; padding: 0 14px 45px; width: 981px; background: url(images/wrapper-middle.png) repeat-y 0 0; } -#wrapper-bottom { font-size: 0; line-height: 0; text-indent: -4000px; height: 22px; background: url(images/wrapper-bottom.png) no-repeat 0 0; } - -#header { position: relative; padding: 14px 21px 0 23px; height: 91px; background: url(images/header.png) no-repeat 0 0; } - -#logo { display: inline; float: left; padding-top: 21px; } -#logo .slogan { padding-top: 5px; font-size: 10px; text-transform: uppercase; color: #135a75; } -#logo a { color:white;} - -/* -.socials { display:inline; border:1px solid red;} -.socials a { width: 27px; height: 28px; } -.socials a.facebook { background: url(images/facebook.png) no-repeat 0 0; } -.socials a.twitter { background: url(images/twitter.png) no-repeat 0 0; } -.socials a.digg { background: url(images/digg.png) no-repeat 0 0; } -.socials a.delicious { background: url(images/delicious.png) no-repeat 0 0; } -.socials a.su { background: url(images/su.png) no-repeat 0 0; } -.socials a.rss { background: url(images/rss.png) no-repeat 0 0; } -*/ - -#search { position: absolute; top: 53px; right: 23px; width: 236px; background: url(images/search.png) no-repeat 0 0; } -#search .field { border: 0; background: none; padding: 13px 14px 11px; width: 208px; line-height: 15px; font-size: 11px; color: #5b6366; } - -#navigation { background: url(images/navigation.png) repeat-x 0 0; } -#navigation ul li { list-style: none; display: inline; float: left; line-height: 45px; font-weight: bold; font-size: 14px; border-right: solid 1px #2897c0; text-shadow: 2px 2px 2px #1987af; } -#navigation ul li a { color: #fff; display: block; float: left; padding: 0 17px 0 25px; background: url(images/nav-item.png) repeat-x 0 -4000px; } -#navigation ul li a:hover { background-position: 0 0; text-decoration: none; } - -h3 { font-family: Arial, helvetica, sans-serif; font-size: 21px; line-height: 24px; font-weight: normal; color: #005271; } -a.read-more { padding-left: 6px; font-size: 11px; color: #0099d1; background: url(images/read-more.png) no-repeat 0 50%; } - -#main { position: relative; padding: 37px 20px 0; width: 941px; } - -#content { display: inline; float: left; width: 593px; } -.post img { display: block; float: left; padding: 5px 15px 0 0; } -.post h3 { padding: 0 0 25px 6px; } -.post p { padding-bottom: 18px; } - -#sidebar { display: inline; float: right; width: 312px; } -.box h3 { padding: 0 0 25px 6px; } -.box ul { padding-left: 19px } -.box li { padding-left: 2px; font-size: 14px; line-height: 26px; color: #0099d1; } -.box li a { color: #0099d1; } - -.widgets { position: relative; margin-top: 29px; padding: 38px 0 0 3px; width: 938px; background: url(images/widgets.png) no-repeat center 0; } - -.col { display: inline; float: left; padding-right: 32px; width: 280px;} -.col a.read-more { line-height: 30px; } - -.activities h3 { font-size:18px; padding: 4px 0 12px 36px; background: url(images/activities.png) no-repeat 0 0px; } - -.about-us { padding-right: 45px; } -.about-us h3 { padding: 4px 0 12px 35px; background: url(images/about-us.png) no-repeat 0 4px; } - -.we-hire { padding-right: 0; } -.we-hire h3 { padding: 4px 0 12px 32px; background: url(images/we-hire.png) no-repeat 0 4px; } - -.contacts { padding-right: 0; } -.contacts h3 { padding: 0 0 17px 33px; background: url(images/contacts.png) no-repeat 0 3px; } - -.projects { display: inline; float: left; padding-right: 24px; width: 600px;} -.projects h3 { padding-bottom: 20px; } - -.result { display: inline; float: left; padding-right: 24px; font-size:0.9em; width:100%;} -.result h3 { padding-bottom: 20px; } - -#footer { padding: 9px 39px 50px 39px; } -.copy { display: inline; float: right; color: #82d1df; } -.copy span { color: #008097; padding: 0 10px; } -.copy a { color: #52e3fe; text-decoration: underline; } -.copy a:hover { text-decoration: none; } - -#bottom-nav { line-height: 19px; color: #008097; } -#bottom-nav a { color: #82d1df; } -#bottom-nav span { padding: 0 9px; } - -.details h2 -{ - float:left; - width:14.125em; - text-align:right; - font-size:100%; - margin:0 1.5em .5em 0; - padding-top:.5em; -} - -.detail -{ - border-top:1px dotted #ccc; - padding:.5em 0 .5em 15.625em; -} - -/* -.projects table, .col table -{ - font-size:0.8em; -} - -th -{ - text-align:left; - color: #fff; - background-color:rgb(62,131,201); -} - -td -{ - border: 1px solid #C1DAD7; - padding: 3px 3px 3px 6px; -} - -.alt -{ - background-color: #F5FAFA; -} -*/ - -/** Tables **/ -table.zebra { - border-right:0; - color: #333; - margin-bottom: 10px; - width: 100%; - border-collapse:collapse; -} - -table.zebra th { - border:0; - text-align: left; - padding:4px; - border-bottom:2px solid black; -} - -th a { - display: block; - padding: 2px 4px; - text-decoration: none; -} - -th a.asc:after { - content: ' ?'; -} - -th a.desc:after { - content: ' ?'; -} - -table.zebra tr td { - padding: 6px; - text-align: left; - vertical-align: top; - border-bottom:1px solid #ddd; -} - -table.zebra tr:nth-child(even) { - background-color: #f9f9f9; -} - -td.actions { - text-align: center; - white-space: nowrap; -} -table td.actions a { - margin: 0px 6px; - padding:2px 5px; -} - -/* Overview table is a table that shows details in 2 rows: - * First row: used to toggle the second second row - * Second row: toggled view by clicking on first row - */ -table.overview { - width:100%; - border-collapse:collapse -} - -table.overview th { - border:0; - text-align: left; - padding:4px; - border-bottom:2px solid black; -} - -table.overview tr td { - padding: 6px; -} - -table.overview tr:nth-child(4n), table.overview tr:nth-child(4n-1) { - background-color: #fff; -} - -table.overview tr:nth-child(4n-2), table.overview tr:nth-child(4n-3) { - background-color: #f9f9f9; -} - -table.overview td { - border-bottom: 0px; -} -table.overview tr:nth-child(4n-1) td { - border-top: 1px solid #ddd; -} - -table.overview tr:nth-child(4n-3) td { - border-top: 1px solid #ddd; -} - -table.overview tbody { - border-bottom: 2px solid black; -} - -/** Loader **/ - -.loader -{ - background-image: url(data:image/gif;base64,R0lGODlhEAALAPQAAP///0pISOTk5N3d3e/v705MTEpISGpoaKalpY6MjM3NzWJgYH59fauqqpCPj9DQ0GRjY0xKSoF/f+zs7OPi4vb29nFwcOXl5fX19crKyru6utnY2PLy8gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA); - width: 100%; - height: 16px; - background-position: center; - background-repeat: no-repeat; -} diff --git a/static/css/ui-lightness/images/animated-overlay.gif b/static/css/ui-lightness/images/animated-overlay.gif deleted file mode 100644 index d441f75ebfbdf26a265dfccd670120d25c0a341c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1738 zcmZ|OX;ji_6b5ixNYt8>l?gOuO)6lU%W(mxn(`>1S(XO;u`D+P%xqBvMr|w-Vyr1s z7R|Cn0b8|Hu<=Zmv1mFqh9Fj!NuZfKB2MP$e75`XJ@>=!y!Ux9xR3x;EW!q1^V>X| znVFuRUN`NqJ2)ybXh%e__h!!pv(M|S3+?9F%(K}zyE40MGyhWF5-IDgL&=%2-9`Nk z!1@8uk4t%_{(K~>N;sK&dzJbwJ=$kYTlL=$%#0Pfh>U{%i@~wWbvYsD_K-D`&+u1( z#Ma`>%q<^UhzGvi(hyE`zCD{-=2|zL5>wnB=DE!U?(CZG%q4@lDnCq_%&3DCla#(X zmBhDD+RN$aMWWHm?ig*>1Onn6~r?Ma~N2JKAxN>H%UtRyRqS)6Um!-Tz%-r=& zQmTb^JFIe3W^-kAm`}`2P|niMh>RYyd)S^f(dbrx965?rzbhP|XeP}o&&DSZ4|oYQ z)I{f!SfycYw?3=9W;o-B%U5xs(pP267X~9-7L|4WzaYexC0GtG8wWygm63rF{llCEraxzkc=IxvFQ-y37=_;e5 zJLq^gsSO0Ayz?a>E_?{dmUc+t#qv$)XN8$<<}rQ#)lsiw+pmL&J>~+hgpo>i$m+;l zZIa_ZRIfSeT$~v5d`EBV&*k`apPgjv&B|+d`Q!nyu{L4rs%ZfoF0*Kq8I%ByOcFpL zK=>wzofZo<+0GZLCnWM3oQ^pb(gRSf02;~cEn@LJ>~XB9IkEX{$N#Z`m%>S!U{uPx zloI%bLdo$Adxlh(Uv^yX7s5G&C zLwNRG>~T?G{kzupp8EcyLGPoPf)@&9Wqfw_l&uU-6cexk%5;uQg%wb=0k_733{i#& z1a2p)gV3S2+QG1-K9tZ}E~I<(P0r2aFFY-c{o?TUOz3Xjod#TLE2A_c?*T7t z=1>~%YW450{Qqno4t`}gvLnuMrcu8+#xEBoY%2_+Mb#Z6S38+r*M4O`-+!zl(@m`D zQsi|GA2l3gEy}LFe<#Hv8?$_L#u8E|3-bP$*La*E>B{X!Sy4i6?TKam!49aXCAW4S*P_O^H4^*DpiA40o}Uqw~Eo&veh1`|8i zD2$x+>_b^bXE4N;AW=5>iYak2%!JAh0j1*k1{p#iRCjbB7!cSws~U{1IA@acLII$t z$>X#A+^s6iJ5~DFG!xa?>z{=lxtdi1rzbM-(nqAu3D8h-&64xo6|E!p?pK0xT;qoK z`6%+SpBk+~M?nO}>2mTw!A{yZ6O>Z@kwSd4;8aWU5z!P~tQl?u==^+R`{OmOS}oZh zOXQ3{6kuz?Is^n^L7;9ieB9C+8B{>t+pDrlq4xGDDn#T#3T5$l1g`FTQkU;b-981j zNm{zC`$wn7etklM#qHI4=3m5gwa6DNS{?Z!vSObi_od{4eUo=_S2BKNpkSdiqe(k9WtkeM79;2-%CFbb)aB=&H1?i1}uwFzoZQ(38Kn1zBP ORn*B%u*Wk|4g3!*Rv{Mv diff --git a/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/static/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png deleted file mode 100644 index 04d70389bf520057f62217d6d4cc742e2a9d5aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^8Xzpd1SErbK34)Mwj^(Nm;YeE8S(uNP=vFJ#Am<$En9-cLebC{re^wgoll|t(`&s7)9J{YxO^N-aI z$5L3jD^ISzl+wQbw$Cm(|Mhq4jH=@2wI8o7+Gd%b|IIx5*Zn&?>lgCSXrXO^WskXw=UX3LH%8!s;k z#x%*aEGp*Jjm(QM&8zq~)!)n5QqVsS=vUPe*NBpo#FA92ofW8o!PC{xWt~$(699MsqQ(FK diff --git a/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/static/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png deleted file mode 100644 index 0ad786e23e3136d4442f3c2d2c9d2708238719b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^8XznHBp80OT7LpkOiAAEF8}|FtTsFg2>S z4={E+nQaGTRC&5MhIkx*d-b$ng949h;3{8svn*F5o}?c;Kir+G=xvlfb9Ucnx!LzV zKYw1UzcGecb6t~6xWlB=3a51)dX2qx%p0t(H?ll;Xvl-Ua7M6%M)vm*~w}RD4lnZuhbmcl2i$G2U9fNc+T-xj%reP%UwdC`m~y zNwrEYN(E93Mh1q)x`qb221X%9Mpi~9R;CuZ2If`<29BTP15h;N=BH$)RpQoQuzvX) Ppaup{S3j3^P6275F;ZiBNHoA3ta9{0&e8gQu&X%Q~lo FCII~^F$e$v diff --git a/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/static/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png deleted file mode 100644 index 9966b6e8a88c801fa9676852042b68357b0a58e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!{KIr+qDZgOs>S*DCH8q6)|^lLQ8(vdyV&7=Rv!DK5_Nv5 zKU5EWSl#{5ocZwkn6~@klK(Ue|8%DOm~7JJCTPgP@M)6!J>`Xd0YEcVOI#yLQW8s2 zt&)pUffR$0fuXUkp@FV}QHYU|m63^+skyF!xs`#z_FefqQ8eV{r(~v8;?{8N`E^#H O1_n=8KbLh*2~7a5`B8uX diff --git a/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/static/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png deleted file mode 100644 index da4fb57ba0dda0ff3bf09db6cc17f865f6d6adab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12SfLx;Tb-9DjS>o|}bBPw4YFRSXO})J!^(4ctv-3U*RGnKs-FC}~_uJ?H86O(`njxgN@xNA(T{ui diff --git a/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/static/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 29ab8f4eaf668ad0d02d15f1fd5581d96192ae75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADW)WEcNYf6yIsOdfIQ9ukH}&m z?E%JaC$sH<3_(v9#}JM4$r%X}t&0mp9yKsb%{ak$*<@oTP*SzTHKHUXu_V7#Ud^nOK>c>l&C_85nHemA?~3LvDUbW?Cg~4ac5eX9a3t@O1Ta JS?83{1OO{OG)e#f diff --git a/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/static/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png deleted file mode 100644 index 362fd60f2d9e18741f151acf727f0e4b22b44cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5815 zcmcgwc|4nG*G}J=PTy+LQMB4(rk&JYN-?#>bitIC5*mb9!_=LsT*7Prvz_W*`-oA7Ou>XYkE-()&zw~u+fJd!MZ!sgnLnbX6MZ*ioj zX3`tCvdC`nPp+=QAKdeLm-oY_+)4R>lH_oHxxCa_*>zz5hFp9n)xhYu+RK}T6Ww}E zsQ4cZX2wQh319HyS)r(~eU|^**mI(g6@+H6M2qduiD9uT{jsW>)T8?(aRC5EPjS(v zdltYrDQ(Ys_qErQ%&tpsAM?#uyT)~Z(bDb+IC}U0>ykhHPYU5oPHfm6%ci10-wc?~ z2(75@w-l4mEZ)u9;&LnY93lk~U89rjH&HMl*PR2~q|{9D+y)FdX^{5nlBaUmq8p|C zJb&;-1o2(a#b^ff3(~XYo^h^Xq^DA;yB47c7?cx)1bgcqz zpu3E~=5>kXy7|K^4JOk#hl&&DgcJ2(YmjnU4%PV9k7znHi)b;X}yhY&?^ zI@XNF`%RcB9)sq5>Fi!CzqFcZ)7gnzs!@B>pWjvJ?-~EIWlxi;ya^b?E_zJt<{yQV zn-S*qjRV%mG-x{a73)Jx=;x_b>>MP!m`|~}ozp*{;=yo*IJQ42hdH6M`xI0i*{z#% z!`UVd@hgswVL(Mz_lsfITZ>weAC^ip3d#ee%rn@|E_(#&#`w@A)Z#Z!5P=aqZiX0*y}Cp$K`6UhovlggM1} zRRT663|T>1dmfhLlw``KmiPs_mu~ax2*xha1L%;47TPxK3-TI3Ir=R_ zYzQ)4oY=aFhpx< z$uMr@?LaIDC^7+>NLKW|sms+wkg4lSLJG=~n(Nq*_J$U5V0Q=ZN+*Khds}f9pjy5Q z8UL%Fyi{_%3A4^hyWYEL{zZtMgS#f6`Uos%uR)&ziokGxZ_~v$_Aix?(o8gekwF4? zCON0;*ZV_5BVwOV{7R9!=6b7oM5>yGmsfR!P)@YgGP*D8;8@Q7$!fqV@F5b_2tv#p z>_`tKeuykB#fKlVA70NMd7xI!xK~#%TYZPyPjv4j#~6a^2+*1I&=*VK1Ve+8_@twK z%3CuhC#zx=E=upkm6osig#d42EGN2>$GPsJiy5{138XjTaQLEkks1<((l#|2zo+7W zu%e`-DOsNo1&ea~%gu7lOp&^lNiNdBn8rMAdFDeV-3ir_)j%6zmHG6M>NvO-GfmeC zUc6Rv3BEo$+IFa>4mrm^J!EVc%5Gr%3l7uL)QALENG;FlnAPeqo@uai5mIr{x2j7Q zTp^&|dm*mLfAo~aGF~#*N}~T+NkoP2-NtMnE^%7{m#s9!P)WE*xv&%DFLH>7H7dA5x+98UoQunEt^tEVcm=p z_}}>Qo2BqW&kILxOceV>4HQWv%z6+mc!a>mKZ-PmN@jt&vGqHfZQh7t!o07>oD`>a zy1OwOf}m*(&9sZsWad>YuA@C zGPffFlW%p_9E)kZZ-Egn_O$37YHP9(4wQ+PNJdk|IRbVgSq}K56>WTptO$A)tjTC= z0%?~Hot+!Ltl9{Ni3bCTx8s6>*SD)%={Nou*F-a4Q^=3tSrzMFyU#?H=XO(A1IwDd z?{D~0d-KdX5xoazH7Z zTfL;j5L|WWF9hrZzO8V$$`SSo zw!?+7b8Li{l0AfPZj`(O4rj|V2}oVjb47B%RE%8fma!1 zo(I)Z5-P7O5ZqOvJy84BI7V^iCd5jJzimUKXocVwwG97Evs^BH46AEcAib;(Lj*yp zBd;wAa@^joEUB|5J?uN$Itp447j=qTdYF=pLx}qd2~I~2?Uo+k+53p!_Kc%mD)jEKxr6RP9)nV(qKobOL9pO#TreZ**`frL6<(*jITD*f659 zKys_93dnq=`MDWPw?{VF2leq2Vl?2SEmF3~Z_5)&F z)r8{-ay=^B;o~J&9 z*f5wQBY|eG%BTbOGyyMf!j*iodt)NJ9-}6?2XdokaNAm(Oh49qItVMkZl}|arEkd? zp-DJy&UW{9vQt(9^Mb5S$T`6dF<#qUT4emZRtivau!~+1ZZbA7Zf=U{ z8qXS!90!jVPNv~hPrXfm3V#*`Z$t?(##^ht8~5LPjHhuehNz9v0dLHo&!4L{^#TBX zu_bRXAPGARd)%nxMEJd9g*BudtcvcgXx!c$NNeIv(Quxog5?YKjY;VTsrs6q0~JAwE47EGut|q{FUj(_wKWj4m?EC$3=XGG=~dHFQ-B z0qwNxxWraVAUh)TP)1a5A_^-l4w*Ej6UWONJBe6KQaCF1toy%qEI*Id03dZv$Sln^|2=0=gZ|ca%`!#Qv>~; zbGkaJrk@Qz9}<_&OikM8u~lzdlQ-B}O)D);F5-8Ra*|epT`?IkXOvnbt8B-GpO&Pf z>{%3jLZ_>F)tVw5@6X{7buY%B1Z~jBjVKNUd+eu!^lze=j~BMy>{wxjS8;#76N#0R zbk`uw1?bJOW^da3r$ifMM{-?uI8MrsK4>h)-u z4W>sjptiLQ9R&T1f%W(-abKIx?fiv;XW!b0d<+kqlzl;PvDp zU$@7Ownsgn1 zHa=f-SR}5p#veY+m@-OHei)}s&5PA0{7XYL)fjEAk?fJtd@{^*hHs^@+T>ofvGh~2 z1&$Qr&`YWeS~pNvLBAM&jBf-@<9_3|)?o*znN9VKD{I!<3-;sT|7KzQn&*T2 z*7v-{KYvz8*x93OfD8UAcwXh16jy}zp0)VZY4r<&-?Y$BzW&%nB+yzPl7XN zo&I8b-H93CzcTgHrm{rq$YMQ7C+yTlUoC0I={%;^p$E83MMo9QqC5^bwV{al?C>Bi zKZ20?`1LJEg4XgQn6pBQ&1oF`W%RI(KQc8KiB7j>Fy1w6=JhTq8W_*yz;%!*%G}~$wqNBdeX2^j zb%jV?t4}9=oCaGWg0NIZ$WGA6byvZ{$9ohTa4=Fq%fUY@7LJVK3RF64CYEDT4RpmL zgoJ?cZ}(*D-TnXY?Yjt*xDuUHpbHLKf$AM|Qm=wP zBT9wc12=lHj#&tFh;xohu=0XcA>^bKkO)%f+h{;ruA1FCTVED1)~K@JJD+smmCtIW z$06wCogl=*5c1AEQKJ-*LW#Zx(GXni`yr=0dq4W25buj5IN6#L+2udAgRU}$Q_230 zZu9w$gFUFzZ5?rEc&skyj)L-9fc10$d83fOv+}0_V>@W$X0)Q+!@@JFxOBn?iwsfv zXh!m=RxB45(RqB7|0YjA*SrCjEa#9+u9pF_Sc*{-KIlbt`SIXRwvAxnMb)cWxA&v4 zWq8%>kcDiiQ7~a`ZtX;BduK4hS=~YX?LdxwnrXc!O=fOA{{&Ds&?EmxHYJ)lYE?{x z6;loUM}?nlGc1MmKiuz#ydivVnnzV~SR0J~h#Nx2pcHCCaymlt$$YNI;q(K8MDxh3Ao#Yh!! z!tk^EG2N*3LF+CK)aQF$2I=%VOt&~lNAm+-x@CuALbkS7F8;HyV20!eRYA=t+a{~e z+;^O;M~4|ABcB-Oaxu7QkgP|kqSmA)W16=(y(V^FiR3j*~4HeaIVW{BjGS zqyLG$n(+d55yYZl5Y%6>o<0vXYgMeaGOi=Gk5!JWwknW|@%j>!9yqS$YCFX12v(jy zo8idl9qP@l$oPX*C)dz2+q<(hyJW{MPLklUdm4Mq#zQDKnxDa*SHhRGB<=4zA2Bmx zKdy`w6(0+`b}owW$;GixV>8?7S!N^i%CdULBO|1Cj3~RFq&ZwgXO1#ep-B{zYiXI} z(6}H_jxsQ|sw)-JZq^xdPTo8ScN^(XUB8)`7Zcg7QkC00qxClPjQKf27$UN1DU0l< zh9w9DENCn!cbR5WBU{+%;pgGP)kd*@I zOdw2f6=jP=lZ36m1mIn1|01*OjZBdDIXC;yjBR0;g*R zS*JSKoMt^|jeZ?wd@0RsJ)Tp`o@JD^{C)~C7Wx62%zM)@yBJt>sH)dXM|JIt^?v(? z7V+%%=C3=O^U~|#CL$Mg(Z9=`27^pF!7de=ccpiw=I==wP9tl8Yl4Y2~*;l?AoezczTIX;LnODA<5+Jsjnj@To ze&d-Ys=iis^=~8@1!t%J3~*P$%L)gI))gG7_J=cwSX<1^#^4xbv_gJl@4t> zBx1>CoY2E1-e_fXhAc!3nOMGDH)h!^>ewYa)Dd2Hfe92wpxsJMPIYwXwYNx8k7Y$^ z2E)I@IIN}qX$B0wHe}d}QenKwOK2Tj_zwyM7=Tj`pbWD3>MFx%scEjg56@2BZAL0L z_TG*5$9mk@R8JG(##f%wyBb)c@H(5uh8VODpTp5!@y5{}wPs5N0pAZ<)qdt0s+fls zr<{w1tX^HUX6T%q!GThgAvXJ>AEetvH zteo&KjjgENfxnYdG@mgmKX)TrpkY?LTX)?eiC3jt?5-t5PXt;rLKXAO4&>0dMf-hu zMQ=%x*Ld8_*%pcP91pEUFCCH%hIj0}>;Y(bvzt&G))0%vP~*L{zWcPZ?=Z>CyUokj zQ{n(dS-M2|c}KxbeDA;|13+Kzyn)VnJsmxLCw+Yr{R<|BKkDcio9O9X;;G*JKMO*_ b{BHXr{__GoLiytEUtY7cyNbW;b??6bW6Y;@ diff --git a/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/static/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png deleted file mode 100644 index ebf42b0408edbfea8dfd33413b2d6de3d8bf4672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z$cXTCaSV~TeDu&>UIzz;hKv1@CM62OC7#SEE>lzy98W@Eb8Ce;bSecsZ8kk!d7;N8_ gzY|46ZhlH;S|x4`$DUtj1!`dMboFyt=akR{0Km*vRR910 diff --git a/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/static/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png deleted file mode 100644 index 748914e8563684b0d7dda94c787565b8cb01cb97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 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 QJ~;stWz}Trq%1=J3#jBGg8%>k diff --git a/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/static/css/ui-lightness/images/ui-icons_228ef1_256x240.png deleted file mode 100644 index 3a0140cff67999e0b6daf269723e019335f5fee6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 F{Rh^YY-Iod diff --git a/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/static/css/ui-lightness/images/ui-icons_ef8c08_256x240.png deleted file mode 100644 index 036ee072d4aea1db3a78cbede62f8a0ba31972dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 C(P9<= diff --git a/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/static/css/ui-lightness/images/ui-icons_ffd27a_256x240.png deleted file mode 100644 index 8b6c05868b55d63ff932afa2efbd9d7cedd5909a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 -

- - - - -
-
-
-
-
-
-
diff --git a/static/html/channel/channels.html b/static/html/channel/channels.html deleted file mode 100644 index 388d93c..0000000 --- a/static/html/channel/channels.html +++ /dev/null @@ -1,94 +0,0 @@ - -
-
-

{{ qmgr }} - Channels

-
-
-  Filter  -
-
- -
-
- Exclude System Channels -
-
-
-  Channel Type  -
- All
- Sender
- Server
- Receiver
- Requester
-
-
- Server-connection
- Client-connection
- Cluster-receiver
- Cluster-sender
- Telemetry -
-
-
-
- -
-
-
-
-
- - - - -
-
-
-
- - - - - - - - - - - - - - - - -
ChannelType
- {{ channel.data.ChannelName.value }} -
- {{channel.data.ChannelDesc.value}} -
-
{{ channel.data.ChannelType.display }} - -
-
-
-
-
-
-
-
-
-
diff --git a/static/html/channel/detail.html b/static/html/channel/detail.html deleted file mode 100644 index 49b4555..0000000 --- a/static/html/channel/detail.html +++ /dev/null @@ -1,127 +0,0 @@ -
-
-

Name:

-
- {{ channel.data.ChannelName.value }} -
-

Type:

-
- {{ channel.data.ChannelType.display }} -
-
-

Description:

-
- {{ channel.data.ChannelDesc.value }} -
-
-
-

Alteration Date:

-
- {{ channel.data.AlterationDate.value }} {{ channel.data.AlterationTime.value }} -
-
-
-

Connection Name:

-
- {{ channel.data.ConnectionName.value }} -
-
-
-

MCA User:

-
- {{ channel.data.MCAUserIdentifier.value }} -
-
-
-

Maximum Instances:

-
- {{ channel.data.MaxInstances.value | number: 0 }} -
-
-
-

Data Conversion:

-
- {{ channel.data.DataConversion.display }} -
-
-
-

Maximum Message Length:

-
- {{ channel.data.MaxMsgLength.value | number: 0 }} bytes -
-
-
-

Channel Monitoring:

-
- {{ channel.data.ChannelMonitoring.display }} -
-
-
-

Disconnect Interval:

-
- {{ channel.data.DiscInterval.value | number: 0 }} seconds -
-
-
-

Message Exit:

-
- {{ channel.data.MsgExit.value }} -
-
-
-

Message User Data:

-
- {{ channel.data.ReceiveUserData.value }} -
-
-
-

Receive Exit:

-
- {{ channel.data.ReceiveExit.value }} -
-
-
-

Receive User Data:

-
- {{ channel.data.ReceiveUserData.value }} -
-
-
-

Security Exit:

-
- {{ channel.data.SecurityExit.value }} -
-
-
-

Security User Data:

-
- {{ channel.data.SecurityUserData.value }} -
-
-
-

Short Retry:

-
- Count: {{ channel.data.ShortRetryCount.value | number: 0 }}
Interval: {{ channel.data.ShortRetryInterval.value | number: 0 }} -
-
-
-

Long Retry:

-
- Count: {{ channel.data.LongRetryCount.value | number: 0 }}
Interval: {{ channel.data.LongRetryInterval.value | number: 0 }} -
-
-
-

Transport Type:

-
- {{ channel.data.TransportType.display }} -
-
-
-

Transmission Queue:

- -
-
\ No newline at end of file diff --git a/static/html/error.html b/static/html/error.html deleted file mode 100644 index a649543..0000000 --- a/static/html/error.html +++ /dev/null @@ -1,10 +0,0 @@ -
- error -
- Object: {{ error.object }}
- Function: {{ error.fn }}
- Code: {{ error.code }}
- Reason: {{ error.reason.code }} - {{ error.reason.desc }} -
-
-
\ No newline at end of file diff --git a/static/html/httprc.html b/static/html/httprc.html deleted file mode 100644 index 9a03bf4..0000000 --- a/static/html/httprc.html +++ /dev/null @@ -1 +0,0 @@ -An HTTP error has occured: {{ http_rc }}. diff --git a/static/html/listener/detail.html b/static/html/listener/detail.html deleted file mode 100644 index 628fad8..0000000 --- a/static/html/listener/detail.html +++ /dev/null @@ -1,91 +0,0 @@ -
- Reload -
-
-

Name:

-
- {{ listener.data.ListenerName.value }} -
-

Transport Type:

-
- {{ listener.data.TransportType.display }} -
-
-

Description:

-
- {{ listener.data.ListenerDesc.value }} -
-
-
-

Alteration Date:

-
- {{ listener.data.AlterationDate.value }} {{ listener.data.AlterationTime.value }} -
-
-
-

Adapter:

-
- {{ listener.data.Adapter.value }} -
-
-
-

Backlog:

-
- {{ listener.data.Backlog.value }} -
-
-
-

Commands:

-
- {{ listener.data.Commands.value }} -
-
-
-

IPAddress:

-
- {{ listener.data.IPAddress.value | default: '-'}} -
-
-
-

Local Name:

-
- {{ listener.data.LocalName.value }} -
-
-
-

NetBIOS names:

-
- {{ listener.data.NetbiosNames.value }} -
-
-
-

Port:

-
- {{ listener.data.Port.value }} -
-
-
-

Sessions:

-
- {{ listener.data.Sessions.value }} -
-
-
-

SPX Socket Number:

-
- {{ listener.data.Socket.value }} -
-
-
-

Start Mode:

-
- {{ listener.data.StartMode.display }} -
-
-
-

Transaction Program Name:

-
- {{ listener.data.TPName.value }} -
-
-
diff --git a/static/html/listener/listener.html b/static/html/listener/listener.html deleted file mode 100644 index a9a67ec..0000000 --- a/static/html/listener/listener.html +++ /dev/null @@ -1,37 +0,0 @@ - -
-
-

{{ mqweb.qmgr }} - Listener - {{ listener.data.ListenerName.value }}

-
-
-
-
-
- - - - -
-
-
-
-
-
-
diff --git a/static/html/listener/listeners.html b/static/html/listener/listeners.html deleted file mode 100644 index 8a7ba8f..0000000 --- a/static/html/listener/listeners.html +++ /dev/null @@ -1,87 +0,0 @@ - -
-
-

{{ qmgr }} - Listeners

-
-
-  Filter  -
-
- -
-
- Exclude System Listeners -
-
-
-  Listener Type  -
- All
- TCP
- LU62
- NetBios
- SPX
-
-
-
-
- -
-
-
-
-
- - - - -
-
-
-
- - - - - - - - - - - - - - - - -
ListenerType
- {{ listener.data.ListenerName.value }} -
- {{listener.data.ListenerDesc.value}} -
-
{{ listener.data.TransportType.display }} - -
-
-
-
-
-
-
-
-
-
diff --git a/static/html/message/detail.html b/static/html/message/detail.html deleted file mode 100644 index ea88307..0000000 --- a/static/html/message/detail.html +++ /dev/null @@ -1,54 +0,0 @@ -
-

Accounting Token:

-
{{ message.data.AccountingToken }}
-

Application Identity Data:

-
{{ message.data.ApplIdentityData | default : ' ' }}
-

Application Origin Data:

-
{{ message.data.ApplOriginData | default : ' ' }}
-

Backout Count:

-
{{ message.data.BackoutCount | number : 0 }}
-

Coded Character Set ID:

-
{{ message.data.CodedCharSetId }}
-

Correlation ID:

-
{{ message.data.CorrelId }}
-

Encoding:

-
{{ message.data.Encoding }}
-

Feedback:

-
{{ message.data.Feedback }}
-

Format:

-
{{ message.data.Format }}
-

Group ID:

-
{{ message.data.GroupId }}
-

Length:

-
{{ message.data.Length | number : 0 }}
-

Message Flags:

-
{{ message.data.MsgFlags }}
-

Message ID:

-
{{ message.data.MsgId }}
-

Message Sequence Number:

-
{{ message.data.MsgSeqNumber }}
-

Message Type:

-
{{ message.data.MsgType }}
-

Offset:

-
{{ message.data.Offset }}
-

Original Length:

-
{{ message.data.OriginalLength }}
-

Persistence:

-
{{ message.data.Persistence }}
-

Priority:

-
{{ message.data.Priority }}
-

Put Application Name:

-
{{ message.data.PutApplName }}
-

Put Application Type:

-
{{ message.data.PutApplType }}
-

Put Date:

-
{{ message.data.PutDate }}
-

ReplyTo Queue:

-
{{ message.data.ReplyToQ | default : ' ' }}
-

ReplyTo Queuemanager:

-
{{ message.data.ReplyToQmgr }}
-

Report:

-
{{ message.data.Report }}
-

User ID:

-
{{ message.data.UserIdentifier }}
-
diff --git a/static/html/message/dump.html b/static/html/message/dump.html deleted file mode 100644 index 6891d52..0000000 --- a/static/html/message/dump.html +++ /dev/null @@ -1,29 +0,0 @@ -

{{ mqweb.qmgr }} - Message - {{ mqweb.queue }}

-
-

Message ID:

-
{{ message.MsgId }}
-

Correlation ID:

-
{{ message.CorrelId }}
-

Put Date:

-
{{ message.PutDate }}
-

Message Size:

-
{{ message.Length | number : 0 }} bytes
-

Coded Character Set ID:

-
{{ message.CodedCharSetId }}
-

Encoding:

-
{{ message.Encoding }}
-
- - - - - - - - - - - - - -
PositionHexASCII
{{ dump.position }}{{ dump.hex }}{{ dump.ascii }}
diff --git a/static/html/message/events/MQRC_ALIAS_BASE_Q_TYPE_ERROR.html b/static/html/message/events/MQRC_ALIAS_BASE_Q_TYPE_ERROR.html deleted file mode 100644 index 0fb278e..0000000 --- a/static/html/message/events/MQRC_ALIAS_BASE_Q_TYPE_ERROR.html +++ /dev/null @@ -1,26 +0,0 @@ -
-

{{item.event.reason.desc }}

-

- An MQOPEN or MQPUT1 call was issued specifying an alias queue as the destination, but - the BaseObjectName in the alias queue definition resolves to a queue that is not a local - queue, or local definition of a remote queue. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

Queue Name:

-
{{ item.event.QName.value }}
-

Base Object Name:

-
{{ item.event.BaseObjectName.value }}
-

Queue Type:

-
{{ item.event.QType.display }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_BRIDGE_STARTED.html b/static/html/message/events/MQRC_BRIDGE_STARTED.html deleted file mode 100644 index 87e8398..0000000 --- a/static/html/message/events/MQRC_BRIDGE_STARTED.html +++ /dev/null @@ -1,16 +0,0 @@ -
-

{{item.event.reason.desc }}

-

- The IMS bridge has been started. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

Bridge Type

-
{{ item.event.BridgeType.display }}
-

Bridge Name

-
{{ item.event.BridgeName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_GET_INHIBITED.html b/static/html/message/events/MQRC_GET_INHIBITED.html deleted file mode 100644 index fbb08a5..0000000 --- a/static/html/message/events/MQRC_GET_INHIBITED.html +++ /dev/null @@ -1,20 +0,0 @@ -
-

{{item.event.reason.desc }}

-

- MQGET calls are currently inhibited for the queue (see InhibitGet (MQLONG) for the InhibitGet queue attribute) or for the queue to which this queue resolves. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

Queue Name:

-
{{ item.event.QName.value }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_NOT_AUTHORIZED-1.html b/static/html/message/events/MQRC_NOT_AUTHORIZED-1.html deleted file mode 100644 index bce8ed2..0000000 --- a/static/html/message/events/MQRC_NOT_AUTHORIZED-1.html +++ /dev/null @@ -1,21 +0,0 @@ -
-

{{item.event.reason.desc }}

-

Not Authorized (type 1)

-

- On an MQCONN or system connection call, the user is not authorized to connect to the queue manager. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }} - {{ item.event.ReasonQualifier.display }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

User

-
{{ item.event.UserIdentifier.value }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_NOT_AUTHORIZED-2.html b/static/html/message/events/MQRC_NOT_AUTHORIZED-2.html deleted file mode 100644 index f8eea9a..0000000 --- a/static/html/message/events/MQRC_NOT_AUTHORIZED-2.html +++ /dev/null @@ -1,23 +0,0 @@ -
-

{{item.event.reason.desc }}

-

Not Authorized (type 2)

-

- On an MQOPEN or MQPUT1 call, the user is not authorized to open the object for the options specified. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }} - {{ item.event.ReasonQualifier.display }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

Queue Name:

-
{{ item.event.QName.value }}
-

User

-
{{ item.event.UserIdentifier.value }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_NOT_AUTHORIZED-3.html b/static/html/message/events/MQRC_NOT_AUTHORIZED-3.html deleted file mode 100644 index 7648147..0000000 --- a/static/html/message/events/MQRC_NOT_AUTHORIZED-3.html +++ /dev/null @@ -1,35 +0,0 @@ -
-

{{item.event.reason.desc }}

-

Not Authorized (type 3)

-

- When closing a queue using the MQCLOSE call, the user is not authorized to delete the object, which is a permanent dynamic queue, and the Hobj parameter specified on the MQCLOSE call is not the handle returned by the MQOPEN call that created the queue. -

- When closing a subscription using an MQCLOSE call, the user has requested that the subscription is removed using the MQCO_REMOVE_SUB option, but the user is not the creator of the subscription or does not have sub authority on the topic associated with the subscription. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }} - {{ item.event.ReasonQualifier.display }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-
Queue Name: -
{{ item.event.QName.value }}
-
-
-

Topic:

-
{{ item.event.TopicString.value }}
-
-
-

Topic Administration Objects:

-
{{ item.event.AdminTopicNames.value}}
-
-

User

-
{{ item.event.UserIdentifier.value }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_NOT_AUTHORIZED-4.html b/static/html/message/events/MQRC_NOT_AUTHORIZED-4.html deleted file mode 100644 index 3bff94c..0000000 --- a/static/html/message/events/MQRC_NOT_AUTHORIZED-4.html +++ /dev/null @@ -1,19 +0,0 @@ -
-

{{item.event.reason.desc }}

-

Not Authorized (type 4)

-

- Indicates that a command has been issued from a user ID that is not authorized to access the object specified in the command. -

-
-

Put DateTime:

-
{{item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }} - {{ item.event.ReasonQualifier.display }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

User

-
{{ item.event.UserIdentifier.value }}
-

Command

-
{{ item.event.Command.display }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_NOT_AUTHORIZED-5.html b/static/html/message/events/MQRC_NOT_AUTHORIZED-5.html deleted file mode 100644 index 3bfe1ea..0000000 --- a/static/html/message/events/MQRC_NOT_AUTHORIZED-5.html +++ /dev/null @@ -1,28 +0,0 @@ -
-

{{item.event.reason.desc }}

-

Not Authorized (type 5)

-

- On an MQSUB call, the user is not authorized to subscribe to the specified topic. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }} - {{ item.event.ReasonQualifier.display }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

Options:

-
{{ item.event.Options.value }}
-

Topic:

-
{{ item.event.TopicString.value }}
-

Topic Administration Objects:

-
{{ item.event.AdminTopicNames.value }}
-
-

User

-
{{ item.event.UserIdentifier.value }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_NOT_AUTHORIZED-6.html b/static/html/message/events/MQRC_NOT_AUTHORIZED-6.html deleted file mode 100644 index 412ab2b..0000000 --- a/static/html/message/events/MQRC_NOT_AUTHORIZED-6.html +++ /dev/null @@ -1,38 +0,0 @@ -
-

{{item.event.reason.desc }}

-

Not Authorized (type 5)

-

- On an MQSUB call, the user is not authorized to use the destination queue with the required level of access. This event is only returned for subscriptions using non-managed destination queues. - When creating, altering, or resuming a subscription, and a handle to the destination queue is supplied on the request, the user does not have PUT authority on the destination queue provided. -

- When resuming or alerting a subscription and the handle to the destination queue is to be returned on the MQSUB call, and the user does not have PUT, GET and BROWSE authority on the destination queue. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }} - {{ item.event.ReasonQualifier.display }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-

Options:

-
{{ item.event.Options.value }}
-

Topic:

-
{{ item.event.TopicString.value }}
-

Topic Administration Objects:

-
{{ item.event.AdminTopicNames.value }}
-

User

-
{{ item.event.UserIdentifier.value }}
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-

Destination Queuemanager:

-
{{ item.event.DestQMgrName.value }}
-
-

Destination Queue Name:

-
{{ item.event.DestQName.value }}
-

Destination Open Options:

-
{{ item.event.DestOpenOptions.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_PUT_INHIBITED.html b/static/html/message/events/MQRC_PUT_INHIBITED.html deleted file mode 100644 index 6bbdabb..0000000 --- a/static/html/message/events/MQRC_PUT_INHIBITED.html +++ /dev/null @@ -1,30 +0,0 @@ -
-

{{item.event.reason.desc }}

-

- MQPUT and MQPUT1 calls are currently inhibited for the queue or topic (see the InhibitPut queue attribute in InhibitPut (MQLONG) or the InhibitPublications topic attribute in Topic attributes for the queue to which this queue resolves. -

-
-

Put DateTime:

-
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-
-

Queue Name:

-
{{ item.event.QName.value }}
-
-
-

Object Queuemanager Name:

-
{{ item.event.ObjectQMgrName.value }}
-
-
-

Topic:

-
{{ item.event.TopicString.value }}
-
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_Q_MGR_ACTIVE.html b/static/html/message/events/MQRC_Q_MGR_ACTIVE.html deleted file mode 100644 index e065be3..0000000 --- a/static/html/message/events/MQRC_Q_MGR_ACTIVE.html +++ /dev/null @@ -1,14 +0,0 @@ -
-

{{item.event.reason.desc}}

-

- This condition is detected when a queue manager becomes active. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/events/MQRC_UNKNOWN_OBJECT_NAME.html b/static/html/message/events/MQRC_UNKNOWN_OBJECT_NAME.html deleted file mode 100644 index 7d2e223..0000000 --- a/static/html/message/events/MQRC_UNKNOWN_OBJECT_NAME.html +++ /dev/null @@ -1,42 +0,0 @@ -
-

{{item.event.reason.desc }}

-

- On an MQOPEN or MQPUT1 call, the ObjectQMgrName field in the object descriptor MQOD is set to one of the following options. It is either: -

-
    -
  • Blank
  • -
  • The name of the local queue manager
  • -
  • The name of a local definition of a remote queue (a queue-manager alias) in which the RemoteQMgrName attribute is the name of the local queue manager.
  • -
-

- However, the ObjectName in the object descriptor is not recognized for the specified object type. -

-
-

Put DateTime:

-
{{ item.message.PutDate }}
-

Reason Code:

-
{{ item.event.reason.code }} - {{ item.event.reason.desc }}
-

Queue Manager:

-
{{ item.event.QMgrName.value }}
-
-

Queue Name:

-
{{ item.event.QName.value }}
-
-
-

Process Name:

-
{{ item.event.ProcessName.value }}
-
-
-

Object Queuemanager Name:

-
{{ item.event.ObjectQMgrName.value }}
-
-
-

Topic Name:

-
{{ item.event.TopicName.value }}
-
-

Application Type

-
{{ item.event.ApplType.display }}
-

Application Name

-
{{ item.event.ApplName.value }}
-
-
\ No newline at end of file diff --git a/static/html/message/message.html b/static/html/message/message.html deleted file mode 100644 index 8803aa4..0000000 --- a/static/html/message/message.html +++ /dev/null @@ -1,9 +0,0 @@ -

{{ mqweb.qmgr }} - Queue - {{ mqweb.queue }}

-
-
-
-
-
- MsgId: {{ mqweb.messageId }} -
-
diff --git a/static/html/message/messages.html b/static/html/message/messages.html deleted file mode 100644 index 8e79671..0000000 --- a/static/html/message/messages.html +++ /dev/null @@ -1,72 +0,0 @@ - -
-
-

{{ qmgr }} - Messages - {{ queue }}

-
-
-  Limits  -
- - -
-
- - (Only for messages with format MQSTR) -
-
- -
-
-
-
-
- - -
-
-
- - - - - - - - - - - - - - - - - - - - - - -
Put DateIdFormatLengthUserApplicationEncodingCCSID
{{ message.data.PutDate }}{{ message.data.MsgId }}{{ message.data.Format }} - {{ message.data.Length | number : 0 }} - {{ message.data.UserIdentifier }}{{ message.data.PutApplName }}{{ message.data.Encoding }}{{ message.data.CodedCharSetId }} - -
-
-
-
-
-
diff --git a/static/html/queue/detail.html b/static/html/queue/detail.html deleted file mode 100644 index 73ea009..0000000 --- a/static/html/queue/detail.html +++ /dev/null @@ -1,150 +0,0 @@ -
- Reload -
-
-

Name:

-
{{ queue.data.QName.value }}
-

Type:

-
{{ queue.data.QType.display }}
-
-

Depth:

-
- {{ queue.data.CurrentQDepth.value | number : 0 }} - / {{ queue.data.MaxQDepth.value | number : 0 }} -
-
-
-

Depth:

-
- - / {{ queue.data.MaxQDepth.value }} -
-
-
-

MQOPEN:

-
- {{ queue.data.OpenInputCount.value | number : 0 }} for Input, {{ queue.data.OpenOutputCount.value | number : 0 }} for Output -
-
-
-

Operations:

-
- Get {{ queue.data.InhibitGet.display }} - Put {{ queue.data.InhibitPut.display }} -
-
-
-

Creation Date:

-
- {{ queue.data.CreationDate.value }} {{ queue.data.CreationTime.value }} -
-
-
-

Alteration Date:

-
- {{ queue.data.AlterationDate.value }} {{ queue.data.AlterationTime.value }} -
-
-
-

Backout:

-
- {{ queue.data.BackoutRequeueName.value }} - Threshold: {{ queue.data.BackoutThreshold.value }} - Harden: {{ queue.data.HardenGetBackout.display }} -
-
-
-

Target Queue:

- -
-
-

Default Binding:

-
- {{ queue.data.DefBind.display }} -
-
-
-

Default Input Open:

-
- {{ queue.data.DefInputOpenOption.display }} -
-
-
-

Distribution List:

-
- {{ queue.data.DistLists.display }} -
-
-
-

Default Persistence:

-
- {{ queue.data.DefPersistence.display }} -
-
-
-

Default Priority:

-
- {{ queue.data.DefPriority.value }} -
-
-
-

Default Read Ahead:

-
- {{ queue.data.DefReadAhead.display }} -
-
-
-

Default Put Response Type:

-
- {{ queue.data.DefaultPutResponse.display }} -
-
-
-

Depth Hight Event:

-
- {{ queue.data.QDepthHighEvent.display }} - Limit: {{ queue.data.QDepthHighLimit.value | number : 0}} -
-
-
-

Depth Low Event:

-
- {{ queue.data.QDepthLowEvent.display }} - Limit: {{ queue.data.QDepthLowLimit.value | number : 0}} -
-
-
-

Depth Max Event:

-
- {{ queue.data.QDepthMaxEvent.display }} -
-
-
-

Initiation Queue:

- -
-
-

Maximum Message Length:

-
- {{ queue.data.MaxMsgLength.value | number : 0 }} -
-
-
-

Message Delivery:

-
- {{ queue.data.MsgDeliverySequence.display }} -
-
-
-

Process:

-
- {{ queue.data.ProcessName.value }} -
-
-
-

Trigger:

-
- {{ queue.data.TriggerControl.display }} - Type: {{ queue.data.TriggerType.display }}
- Depth: {{ queue.data.TriggerDepth.value | number : 0 }} - Message Priority: {{ queue.data.TriggerMsgPriority.value | number : 0 }}
- Data: {{ queue.data.TriggerData.value }} -
-
-
diff --git a/static/html/queue/queue.html b/static/html/queue/queue.html deleted file mode 100644 index 88fe43a..0000000 --- a/static/html/queue/queue.html +++ /dev/null @@ -1,33 +0,0 @@ - -
-
-

{{ mqweb.qmgr }} - Queue - {{ queue.data.QName.value }}

-
-
-
-
-
- - - - -
-
-
-
-
-
-
diff --git a/static/html/queue/queues.html b/static/html/queue/queues.html deleted file mode 100644 index e9bafa2..0000000 --- a/static/html/queue/queues.html +++ /dev/null @@ -1,152 +0,0 @@ - -
-
-

{{ qmgr }} - Queues

-
-
-  Filter  -
-
-
- -
-
- -
-
- Exclude System Queues
- Exclude Temporary Queues
-
-
-
-
-  Queue Type  -
- All
- Local
- Alias -
-
- Cluster
- Model
- Remote -
-
-
-
- -
-
-
-
-
- - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
QueueTypeDepthInputOutputGet EnabledPut EnabledUsage
- {{ queue.data.QName.value }} - -
Target: {{ queue.data.BaseObjectName.value }} -
-
-
- Qmgr: {{ queue.data.RemoteQmgrName.value }} Queue: {{ queue.data.RemoteQName.value }}
- Transmission Queue: -
-
- {{ queue.data.QDesc.value }} -
-
{{ queue.data.QType.display }} - {{ queue.data.CurrentQDepth.value | number : 0 }} - - 0 - - - - -
- {{ queue.data.OpenInputCount.value | number : 0 }} -
-
- - -
-
-
- {{ queue.data.OpenOutputCount.value | number : 0 }} -
-
- - -
-
-
- - -
-
- - -
-
-
- - -
-
- - -
-
-
- {{ queue.data.Usage.display }} -
-
- -
-
-
-
-
-
-
-
-
-
diff --git a/static/images/connection.png b/static/images/connection.png deleted file mode 100644 index 7015665e6218e2b38062554172a21d71a184ebad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 zcmV;o1xWgdP)J9Yxl0%N{3L`zcyPO$YgO~uh-|d$6NxC zMF{=JkjFyI4B@ywesvM>*S?bOQhg%xN|{38Pt z1xX+h@WAfyfZgtfv59H;yz%~!)#;i~AfAAL$mK^kWSC&H7@-xV=_pnz#QwmC#wL*2 zWWYYA7;z{zeq&2MxLiK4*j&hJb>sVwHPCu@82Z(Q#rGP^e+>wTc;<+dM5^}BX+DKs zRHWhJylBuH^yvJpKd|3nRJaf)#mxayRgjt(fee#&?EiyPmphThXnFScOO+R90?3$5 zq{jH~b%8t@wibm$Ok66kSPZB;-2o4~H4q&}lPY3?B5xiDcwG2JH3|*a9s!TTey;z@ zuJZu_(iKOz+8M{TIRQ-fRY4WhWn5WHyK z9Egz$Av#ioSWE`~@#j8h`e{g=nHHXSth&@SBOtC&SrRVhHJPn0L|PVq`Q9p6oDz#B zv_?z|LJ&>!u-#^Zp-~-Z4OSE<6XFF)@zC8jHaM;^TMzkx)^1z@njXm$gsT(CG9V6u8h*&>k7V^1BZED0SP9QsZ!U$QAEK(^=wp)_IH z#cX*}ehO(QtKE*wQ+n)l*oZyC3>F1!ibDWir0O*er^I-Q_H0|(Oi}Czi^UR~nVG2z z1VDgTY$ls4pg00)TGobl*OzR1J~=U*<Qs&2v zovi;%HHJv}2uD5M2;yVKp-r5e58 zapRs=-P_OMa2z!?HM`2o%N1Q+UDIdIoQYQ|mBtxU7qu$rsR62%pEdPU>i* zPAwu^{#TAma?j1n%gd;)t}e^X&7C_wJ`T0DwI8*$wSCaj)8hyV_(!&Xa+9V*I4fil zVd358#z&Wr*IZX96s0?M>?q66&zF<5AiZ9XKP7VF#EB}IOlIuv?)C)*>^V1@?&eGD zqylEvx6GDmBMx)UiDA4}| z6ji*9r1m>eyI)GGkCG)9UhS8owA>Zg;$gz@xTd%1)UnFG&f7Osx0(Ywp4BC{HdIjI z(x@#D(AFxpB&OeCvnmH3bzG|6zSb4Y@vN)JFJH9}g?gDH)3zKjo{jy}@+VpaVK@D8 RK!^YU002ovPDHLkV1nYD!K?rP diff --git a/static/images/error.png b/static/images/error.png deleted file mode 100644 index fc5498cf3673bd61c82525be1e6443bebfe3acd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3966 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 IV-=S9f5$(J`Tzg` diff --git a/static/images/flag-black-icon.png b/static/images/flag-black-icon.png deleted file mode 100644 index d9b44007b08e0e46536e8e778afa720fa25455c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)?#E4u|UyObkua>dWP_uIsvBS=JXq6rj7|EU1F{)}T}>Nxfc= zi^XCT3WbPeSu#zNR8^(vbV`b%&}1@k{@o$G0$z7AC>D#-VzJ;*3yR0%6buH}299_% z8d0;^T#U!#3bMJ_dxcCUBSFBW(`j-@Boee*t*Fsx&|okihGD4R@7u%S@DXw6klX-m zYrylogg`EpN;xmGKHU+9!{Kk#;aL>LTV!yJ3_kW|kjv#{q#5x0{r4!~3r_#^`F!u7 zVHk$_pFWVg-7XKI;i(Uz(Ws0{XJKG^GQji6C{PwX;LRWsiO6_o?*{0=7W&{AOK%1k zEx-c{_}o1Q+ue8Ol{;_P8XSRB@C1xsLd(s__=E1w<_}q^;1bFrw50$5002ovPDHLk FV1h4N*W>^I diff --git a/static/images/flag-blue-icon.png b/static/images/flag-blue-icon.png deleted file mode 100644 index e7e52904dbe78d046d530c8153712a331fb7a9b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 514 zcmV+d0{#7oP)^q;pBbbq-i66(mL8rRpKVQ2YnAjo7g(n<3XPjG1nOg{lG5(RG3(}(qA zaQ4#_9AByH+Xr7>s2_5rp$XFIv{Wz>Jc$Lt_`;ANjJeTJt6c9qKU!IQ^WX~ccwDNu z=ld&6@qZ?uT>ySSF#k9Rl#eqN)z~N~=#_G|wWh2t>jQxx2+~(l>hTG+k4slpLZbF zk&!T)KMY6jAQTG8s;VYT({v_aSypZ|8VSp?oCz3)ku^ktQUB=Snn|ZVtmHCW;F*H8mgd1pSngu@D3XDhmS#JIDZpAq>C&fBp9JPgbYFo<&%_ zprD}eP&SE8PToogZU83`voJ6*Jh=Fg;oj4C4D$Md|74|jcZmsb&A7Vb#kPfMr+>o@ zP*zrcsGP0C6?GaWNsHmts z(#_{)Q?wS|^W^-8lQ&Pke!{@ZbnEMjpEvF-eesu=bnu8(>Zj79v+w?pl@5f3g&)0t z|6b|ezklQzAR;32=RRpXO)7!<#00000 LNkvXXu0mjfBy#hs diff --git a/static/images/flag-red-icon.png b/static/images/flag-red-icon.png deleted file mode 100644 index 3c902c0c49ec777ba6d94132e3dd72e0eb00ac98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmVmzT3zb*`z9D+!RJjn zo!;tnI?JOJzY<82)JnMo&o-MGiKf9KE=nbnPsJEN{~CsM+i0wOIyu>XcLYHYWU<|T z9HE#<3_Ad0W1vTpAU-z-SkFUdt97W?>l;5c?dzs(4~7C!6lFnG9|a#72C!38z>dWL z6OUU7nyxyAaZta$-dnr5QQqw!m&+*`MTrU|d4wPSvIycTL6YY>LZ`c?`S3sYK)Khn ztl_$DsC&S1oYL)fvk0MZ0-om;!!WX*=YA3L#eiH&*N=40bVLb#Q0yF z2+n-G;M`9X=u6ev}-tkV1%~eky-&6%TRy}7_t%M?8VOG z^}%9bIu)zx!0-1nqrEp+Kwv>jm4Gm{LH2{o5rwPymSAlC&k>wXCo?tp{5?XDZmtL< z#SE{U5lBlnI4D^mi%+{^Cc3t@pWdEX2C*V=yWPy>z@xSUGuUiRko;%>lesC^P8lOg zk=r>vPi{^vhBk?Snm%fHO`YUpgps$GpMq(yAo?=N+&H_1zVJQzTvQ zz;3s*sZ`3PC^`icMX@~3yHr)xC$L(rtRM*b1^7e7^Z9%?F7*j;#4&D6Y2$=;RzlUz wOIgu!nTntuGmAOKh(9jMT1Vn9idvSw0FCRg5*g6a(*OVf07*qoM6N<$f?s;!v;Y7A diff --git a/static/images/go-next-icon.png b/static/images/go-next-icon.png deleted file mode 100644 index 2574c25f7038effa12d965ce5916d84f8ded4f69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1145 zcmV-<1cv*GP)fKo#+B~gKps-dPsB!t8$ zJ`ia{YXg#|fl|Z|C2iW3TD0-ef&sg*_F+qD%I?B$cjnIAdED!rZHZ}W=qlw-PG%-E z_y0TRe@-rf`@B#xKOH%C7HzMrVD|;^_Tlq8%bzZI=iM)UI({<}tsOdDtt}{^=;cHH z6Q90X+}S$_4b8p%imGoIJoEas1p_=-y2sz#P*WmnCd8u>e0AanDL5K^bMVX?UoQwC z@0n_UX)>UO3RIJT@t_8&I(Ybl0+Zg^!mNcTrHq;s z_4G~X{ej4PhOQp?^VBx;UjeIL+Ecf7&Fa0kv4#K%U?s^IMT}CggqA$A49$|~0RD}c z)I`iQ;l@qOzW;6VJSOJmt4)>H=K!)+ZV}h7D-*rGY;ZbVV0SpcX6IqEfgsobp?{pT zETRdp$*bjI82oO4Mhy66Aa-j!tZoZ5ZE2ka@IJmld~r>w=*!JPPM4cQoXqZUA`2o2 z0z*hZ79`<6o3@6F^5hL<7&;ib&U9Tz0yCj+AjC!^sGc!%_i*cWB>~7-u}&;2e_qVV z%YziR2V5yB;IJyOJ9!lXuRyqyK2RQ3=8R`e2mwjP5R1kk61ff6$0tFG$AR#PbLSLZ z0h_Bd0Z4zWLM&WfBxYsjp=_TI(lRob+ntJdC6-N$HwICDP*}pcVKR;ANX9C|7$c%8 zpemR@%Se$WkmWct3==srAHK|NsnY<@vKPesM~lQ%j}K+}av?p_%RH$b`AX5_$w9un zMc~cK=73a`Vp%l=6dt=&;4 zcpunHG=YnAi_+4;o#F(i!wz=dgWTN3Jaam2k#0>40hI?c9-b8%elDsOqhcP8JvnpB6rnmNhE32CKXWs)9y_ zFO$En1#2}$J{Y;!H0Ma4_oztAf68C`SxX7U8fdx>+!lrv1%;lJUsUMrPro{U9I!&O$v~;qRhYJ<6|WQ7k`G%=7ugMa;s7v=^0N(JSo7Fuk8B9 z<;|?Pa;{^ap(!7di9VW)aMFNPRl9AAA6jH@*2d9V8 z!SNKpgebrZ5VSa|ZI$`{Wb^Lu1EzLxt`3md2fr(WU5Y z)<g8pgm`fD7`AhlDBvwjM1$EC7&o=rx7U;Ob)gDM(T_20hSO(02L`|HXnvS1 zMW*O#yj-uQ!E-$%9*%f!V3m9RFt5K1`Ct~JZMEH10}JuAU|+-ZwlZ~`!b|cYt%SxHY?0Wt^<+FfnwH)@o|u9S(r?wAwE9qMe(+F5%F~a z`w@_b038CX8zdw#7+bv(dattS>6KK5OpQ%Hy6*9;KCxndo$V7PwA3&9X2w_$# zk)W+Nm7!7YXTB2mo9hjEk3z=eCet08%|)%v3MqhpEZdVC+pMrVkq|--sZ@}AdFc1R zZCl|iRuUZ^?^15r;@-<~;%oX^k@lEDt#z6{r;>^27S)THUOj6bhh|>Zc)Jg5?!#ivZAc zEwj9?orPP?EpO+jh^p`Ma*?AHR+91F7>4* zXL{pv$z9&XCD9#kWm%@yU^r?wo9_$x{SQ1Ji(OsobBq2b|Ci@CZYhr_hZxEp00000 LNkvXXu0mjf1UVJz diff --git a/static/images/ok-icon.png b/static/images/ok-icon.png deleted file mode 100644 index f36515c27e77f5ce94015526f0102de1de7bea14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 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 VG56oopK1UA002ovPDHLkV1k?=rmp}1 diff --git a/static/images/warning-icon.png b/static/images/warning-icon.png deleted file mode 100644 index f0c720c423915a9877d41d3abf19661f6b294ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 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 diff --git a/static/images/zos-small-icon.png b/static/images/zos-small-icon.png deleted file mode 100644 index 4305384710d77e3f05eed7defe0f93edde962fd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmV<81ReW{P)gfxcdxzH+IwF?|ML?6^~K)aUaQ05@Y(J5 z#>2zIt!y@1{nr4YP^iIbwKn5w@%#PdrKP1fKaWHrpKF@-0j>b{_>39r=HTGqV{8}q z_V$)CnT-A4t`ePXO45!1TwZ2~D$JCzDCt z{L9PBGM~@C1t#l;0HdR$(YCg>*q^}#ekB8xN+scRIu!$$D-n!DM~JWx+hkARW-{r$bx*ViWzlw@0$ zO36C5N&$eKKaofL){h$;ruRI2>L8O@hA!HcFnkxjCAjpReGVg`e@B7QCc< z!p5%^;DKU*VxaT$^RbP=--R5XPg<5MXRXZl0P>FI0$)iGYLd>|OrG@Xq z0Qk)iV0d^q5(oqqSz|6u4$9fG;b=`#C=9mPNc2rT?5Fi)~Mlcl@ zAMHuZAVS7!E}_E}6P8FFz+widA|(+9;XyW=d67!(>xKY0@GfXBB7pU;?*Z367*t`h z0DzepJqADm3V;V9-v0_^{Sju9Gz7qCut1{s5o{V+hw&SLsa*Ft+&dxBOZejD_kf{3 z8xDsP1@XEFfD%mp4BvyVAIJR1Cv#+E#10t(FwP4@p@7Q{1{x%Cq7Q<2)&&pzo}kH- zKdjaB8T|hSMUj9{Kd!E>UOWqcfC3F;!7Yz}6PF>D3HN45Wb5eYuwyi6&BJC>W}~7! zKtd<``}+^&`*JOl&D5R+cy6JKO&A}74fTYGE|L!@10fN-`qVqW1Nu6%H|z3uPXGV_ M07*qoM6N<$f_5}dtN;K2 diff --git a/static/js/app/channel/channel.js b/static/js/app/channel/channel.js deleted file mode 100644 index 3eb9e09..0000000 --- a/static/js/app/channel/channel.js +++ /dev/null @@ -1,120 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.run(function ($rootScope) { - $rootScope.channels = null; // All queues - - // Call this when a channel has been reloaded on the detail page. - // So we see new values also on the overview page. - $rootScope.updateChannel = function(channel) { - if ( $rootScope.channels != null ) { - for(c in $rootScope.channels) { - if ( $rootScope.channels[c].data.ChannelName.value == channel.data.ChannelName.value - && $rootScope.channels[c].data.ChannelType.value == channel.data.ChannelType.value ) { - $rootScope.channels[c].data = channel.data; - break; - } - } - } - } -}); - -mqWebApp.controller('ChannelsController', ['$scope', '$rootScope', 'mqWebChannel', function($scope, $rootScope, mqWebChannel) { - $scope.qmgr = mqWebChannel.getQueueManager(); - $scope.loading = false; - $scope.mqweb = null; - $scope.error = null; - - $scope.formData = { - channelName : "*", - channelType : "All", - excludeSystem : false - }; - - $scope.load = function() { - $scope.loading = true; - mqWebChannel.inquire($scope.formData) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $rootScope.channels = []; - - data.channels.forEach(function(chl) { - $rootScope.channels.push({ - loading: false, - toggle: false, - data: chl - }) - }); - - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - }; - - $scope.reload = function(channel) { - channel.loading = true; - mqWebChannel.inquire(channel.data.ChannelName.value, channel.data.ChannelType.display) - .success(function(data, status) { - channel.loading = false; - if ( data.channels.length > 0 ) - { - channel.data = data.channels[0]; - $rootScope.updateChannel(channel); - } - }).error(function(data, status) { - channel.loading = false; - }); - } - - $scope.toggle = function(chl) { - chl.toggle = ! chl.toggle; - } - -}]); - -mqWebApp.controller('ChannelController', ['$scope', '$rootScope', '$routeParams', 'mqWebChannel', 'mqWebChannelStatus', function($scope, $rootScope, $routeParams, mqWebChannel, mqWebChannelStatus) { - $scope.loading = true; - $scope.mqweb = null; - $scope.error = null; - $scope.channel = null; - $scope.statuses = null; - - mqWebChannel.inquire($routeParams.channelName, $routeParams.channelType) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - if ( data.channels.length > 0 ) - { - $scope.channel = { 'data' : data.channels[0] }; - $rootScope.updateChannel($scope.channel); - } - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - mqWebChannelStatus.inquire($routeParams.channelName) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.statuses = data.statuses; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - $scope.reload = function() { - $scope.loading = true; - mqWebChannel.inquire($scope.channel.data.ChannelName.value, $scope.channel.data.ChannelType.display) - .success(function(data, status) { - $scope.loading = false; - if ( data.channels.length > 0 ) { - $scope.channel.data = data.channels[0]; - } - $rootScope.updateChannel($scope.channel); - }).error(function(data, status) { - $scope.loading = false; - }); - } -}]); diff --git a/static/js/app/channel/provider.js b/static/js/app/channel/provider.js deleted file mode 100644 index b931fc9..0000000 --- a/static/js/app/channel/provider.js +++ /dev/null @@ -1,31 +0,0 @@ -angular.module('mqWebApp').provider('mqWebChannel', { - qmgr : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - // Pass an object for using the query parameters of inquire - // or a channel name with channel type to use the URI path - inquire : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/channel/inquire/' + qmgr, { - cache : false, - params : arguments[0] - }); - } - else { - if ( arguments.length > 1 ) { - return $http.get('/api/channel/inquire/' + qmgr + '/' + arguments[0] + '/' + arguments[1], { cache : false } ); - } - } - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - } - -}); diff --git a/static/js/app/chstatus/chstatus.js b/static/js/app/chstatus/chstatus.js deleted file mode 100644 index 01fbc26..0000000 --- a/static/js/app/chstatus/chstatus.js +++ /dev/null @@ -1,109 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.run(function ($rootScope) { - $rootScope.statuses = null; // All queues - - // Call this when a channel has been reloaded on the detail page. - // So we see new values also on the overview page. - $rootScope.updateChannelStatus = function(status) { - if ( $rootScope.statuses != null ) { - for(c in $rootScope.statuses) { - if ( $rootScope.statuses[c].data.ChannelName.value == status.data.ChannelName.value - && $rootScope.statuses[c].data.ChannelType.value == status.data.ChannelType.value ) { - $rootScope.statuses[c].data = status.data; - break; - } - } - } - } -}); - -mqWebApp.controller('ChannelStatusesController', ['$scope', '$rootScope', 'mqWebChannelStatus', function($scope, $rootScope, mqWebChannelStatus) { - $scope.qmgr = mqWebChannel.getQueueManager(); - $scope.loading = false; - $scope.mqweb = null; - $scope.error = null; - - $scope.formData = { - channelName : "*", - channelType : "All", - channelExcludeSystem : false - }; - - $scope.load = function() { - $scope.loading = true; - mqWebChannelStatus.inquire($scope.formData) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $rootScope.statuses = []; - - data.statuses.forEach(function(status) { - $rootScope.statuses.push({ - loading: false, - toggle: false, - data: status - }) - }); - - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - }; - - $scope.reload = function(channelStatus) { - channel.loading = true; - mqWebChannelStatus.inquire(channelStatus.data.ChannelName.value, channelStatus.data.ChannelType.display) - .success(function(data, status) { - channelStatus.loading = false; - if ( data.statuses.length > 0 ) - { - channelStatus.data = data.statuses[0]; - $rootScope.updateChannelStatus(channelStatus); - } - }).error(function(data, status) { - channelStatus.loading = false; - }); - } - - $scope.toggle = function(status) { - status.toggle = ! status.toggle; - } - -}]); - -mqWebApp.controller('ChannelStatusController', ['$scope', '$rootScope', '$routeParams', 'mqWebChannelStatus', function($scope, $rootScope, $routeParams, mqWebChannelStatus) { - $scope.loading = true; - $scope.mqweb = null; - $scope.error = null; - $scope.status = null; - - mqWebChannelStatus.inquire($routeParams.channelName) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - if ( data.statuses.length > 0 ) - { - $scope.status = { 'data' : data.statuses[0] }; - $rootScope.updateChannelStatus($scope.status); - } - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - $scope.reload = function() { - $scope.loading = true; - mqWebChannelStatus.inquire($scope.status.data.ChannelName.value) - .success(function(data, status) { - $scope.loading = false; - if ( data.statuses.length > 0 ) { - $scope.status.data = data.statuses[0]; - } - $rootScope.updateChannelStatus($scope.status); - }).error(function(data, status) { - $scope.loading = false; - }); - } -}]); diff --git a/static/js/app/chstatus/provider.js b/static/js/app/chstatus/provider.js deleted file mode 100644 index eee5011..0000000 --- a/static/js/app/chstatus/provider.js +++ /dev/null @@ -1,34 +0,0 @@ -angular.module('mqWebApp').provider('mqWebChannelStatus', { - qmgr : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - // Pass an object for using the query parameters of inquire - // or a channel name - inquire : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/chstatus/inquire/' + qmgr, { - cache : false, - params : arguments[0] - }); - } - else { - if ( arguments.length == 0 ) { - return $http.get('/api/chstatus/inquire/' + qmgr, { cache : false } ); - } - else if ( arguments.length > 0 ) { - return $http.get('/api/chstatus/inquire/' + qmgr + '/' + arguments[0], { cache : false } ); - } - } - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - } - -}); diff --git a/static/js/app/dashboard.js b/static/js/app/dashboard.js deleted file mode 100644 index 669f822..0000000 --- a/static/js/app/dashboard.js +++ /dev/null @@ -1,206 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.directive('mqEventQtip', function($http, $compile, $templateCache) { - return { - restrict: 'A', - link : function(scope, element, attrs) { - $(element).qtip({ - position: { - my: 'bottom left', - at: 'top right' - }, - content: { - text: function(event, api) { - var contentDOM = $(element).next('div'); // Use the "div" element next to this for the content - var titleElement = contentDOM.find('#eventTitle'); - if ( titleElement ) { - titleElement.hide(); - api.set('content.title', titleElement.text()); - } - return contentDOM.html(); - } - } - }); - } - } -}); - -mqWebApp.controller('QmgrController', ['$scope', 'mqWebQueueManager', function($scope, mqWebQueueManager) { - $scope.loading = false; - $scope.mqweb = null; - $scope.qmgr = null; - $scope.error = null; - - $scope.load = function() { - $scope.loading = true; - mqWebQueueManager.inquire() - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.qmgr = data.qmgr; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - }; - - $scope.load(); -}]); - -mqWebApp.controller('LocalQueueController', ['$scope', 'mqWebQueue', function($scope, mqWebQueue) { - $scope.loading = false; - $scope.mqweb = null; - $scope.queues = null; - $scope.error = null; - $scope.http_rc = 0; - - $scope.load = function() { - $scope.loading = true; - mqWebQueue.inquire({ - queueDepth : 1, - excludeSystem: 'true', - queueUsage : "normal", - excludeTemp : 'true' - }).success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.queues = data.queues; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - }); - }; - - $scope.load(); -}]); - -mqWebApp.controller('XmitQueueController', ['$scope', 'mqWebQueue', function($scope, mqWebQueue) { - $scope.loading = false; - $scope.mqweb = null; - $scope.queues = null; - $scope.error = null; - $scope.http_rc = 0; - - $scope.load = function() { - $scope.loading = true; - mqWebQueue.inquire({ - queueDepth : 1, - queueExcludeSystem: 'false', - queueUsage : "xmitq" - }).success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.queues = data.queues; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - }); - }; - - $scope.load(); -}]); - -mqWebApp.controller('ChannelStatusController', ['$scope', 'mqWebChannelStatus', function($scope, mqWebChannelStatus) { - $scope.loading = false; - $scope.mqweb = null; - $scope.statuses = null; - $scope.error = null; - $scope.http_rc = 0; - - $scope.load = function() { - $scope.loading = true; - mqWebChannelStatus.inquire() - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.statuses = data.statuses; - $scope.error = data.error; - }) - .error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - }); - }; - $scope.load(); -}]); - -mqWebApp.controller('EventMessageController', ['$scope', 'mqWebMessage', function($scope, mqWebMessage) { - - $scope.loading = false; - $scope.mqweb = null; - $scope.events = null; - $scope.error = null; - $scope.curdepth = 0; - $scope.http_rc = 0; - - $scope.load = function() { - $scope.loading = true; - mqWebMessage.events({ - limit : 3 - }).success(function(data, status) { - $scope.loading = false; - $scope.error = data.error; - $scope.mqweb = data.mqweb; - data.events.forEach(function(eventMsg) { - if ( eventMsg.event.reason.code == 2035 /* MQRC_NOT_AUTHORIZED */ ) { - switch(eventMsg.event.ReasonQualifier.value) { - case 1: // MQRQ_CONN_NOT_AUTHORIZED - case 20: // MQRQ_SYS_CONN_NOT_AUTHORIZED - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '-1.html'; - break; - case 2: // MQRQ_OPEN_NOT_AUTHORIZED: - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '-2.html'; - break; - case 3: // MQRQ_CLOSE_NOT_AUTHORIZED: - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '-3.html'; - break; - case 4: // MQRQ_CMD_NOT_AUTHORIZED: - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '-4.html'; - break; - case 17: // MQRQ_SUB_NOT_AUTHORIZED: - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '-5.html'; - break; - case 18: // MQRQ_SUB_DEST_NOT_AUTHORIZED: - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '-6.html'; - break; - } - } - else { - eventMsg.templateUrl = '/static/html/message/events/' + eventMsg.event.reason.desc + '.html'; - } - }); - - $scope.events = data.events; - $scope.curdepth = data.queue.curdepth; - }).error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - }); - }; - $scope.load(); -}]); - -$(document).ready(function() -{ - $("[data-qtip]").qtip({ - content : { - text: function(event, api) { - return $(this).attr('data-qtip'); - }, - title: function(event, api) { - return $(this).text(); - } - }, - position: { - my: 'bottom center', - at: 'top center' - } - }); - $(".imgtip").qtip({ - content : { - attr: 'alt' - } - }); -}); diff --git a/static/js/app/listener/listener.js b/static/js/app/listener/listener.js deleted file mode 100644 index ee96dc9..0000000 --- a/static/js/app/listener/listener.js +++ /dev/null @@ -1,119 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.run(function ($rootScope) { - $rootScope.listeners = null; // All listeners - - // Call this when a listener has been reloaded on the detail page. - // So we see new values also on the overview page. - $rootScope.updateListener = function(listener) { - if ( $rootScope.listeners != null ) { - for(c in $rootScope.listeners) { - if ( $rootScope.listeners[c].data.ListenerName.value == listener.data.ListenerName.value ) { - $rootScope.listeners[c].data = listener.data; - break; - } - } - } - } -}); - -mqWebApp.controller('ListenersController', ['$scope', '$rootScope', 'mqWebListener', function($scope, $rootScope, mqWebListener) { - $scope.qmgr = mqWebListener.getQueueManager(); - $scope.loading = false; - $scope.mqweb = null; - $scope.error = null; - - $scope.formData = { - listenerName : "*", - transportType : "All", - listenerExcludeSystem : false - }; - - $scope.load = function() { - $scope.loading = true; - mqWebListener.inquire($scope.formData) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $rootScope.listeners = []; - - data.listeners.forEach(function(listener) { - $rootScope.listeners.push({ - loading: false, - toggle: false, - data: listener - }) - }); - - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - }; - - $scope.reload = function(listener) { - listener.loading = true; - mqWebListener.inquire(listener.data.ListenerName.value) - .success(function(data, status) { - listener.loading = false; - if ( data.listeners.length > 0 ) - { - listener.data = data.listeners[0]; - $rootScope.updateListener(listener); - } - }).error(function(data, status) { - listener.loading = false; - }); - } - - $scope.toggle = function(listener) { - listener.toggle = ! listener.toggle; - } - -}]); - -mqWebApp.controller('ListenerController', ['$scope', '$rootScope', '$routeParams', 'mqWebListener', 'mqWebListenerStatus', function($scope, $rootScope, $routeParams, mqWebListener, mqWebListenerStatus) { - $scope.loading = true; - $scope.mqweb = null; - $scope.error = null; - $scope.listener = null; - $scope.statuses = null; - - mqWebListener.inquire($routeParams.listenerName) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - if ( data.listeners.length > 0 ) - { - $scope.listener = { 'data' : data.listeners[0] }; - $rootScope.updateListener($scope.listener); - } - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - mqWebListenerStatus.inquire($routeParams.listenerName) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.statuses = data.statuses; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - $scope.reload = function() { - $scope.loading = true; - mqWebListener.inquire($scope.listener.data.ListenerName.value) - .success(function(data, status) { - $scope.loading = false; - if ( data.listeners.length > 0 ) { - $scope.listener.data = data.listeners[0]; - } - $rootScope.updateListener($scope.listener); - }).error(function(data, status) { - $scope.loading = false; - }); - } -}]); diff --git a/static/js/app/listener/provider.js b/static/js/app/listener/provider.js deleted file mode 100644 index 4c61491..0000000 --- a/static/js/app/listener/provider.js +++ /dev/null @@ -1,29 +0,0 @@ -angular.module('mqWebApp').provider('mqWebListener', { - qmgr : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - // Pass an object for using the query parameters of inquire - // or a listener name to use the URI path - inquire : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/listener/inquire/' + qmgr, { - cache : false, - params : arguments[0] - }); - } - else { - return $http.get('/api/listener/inquire/' + qmgr + '/' + arguments[0], { cache : false } ); - } - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - } - -}); diff --git a/static/js/app/lsstatus/lsstatus.js b/static/js/app/lsstatus/lsstatus.js deleted file mode 100644 index 3d951bd..0000000 --- a/static/js/app/lsstatus/lsstatus.js +++ /dev/null @@ -1,108 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.run(function ($rootScope) { - $rootScope.statuses = null; // All queues - - // Call this when a listener has been reloaded on the detail page. - // So we see new values also on the overview page. - $rootScope.updateListenerStatus = function(status) { - if ( $rootScope.statuses != null ) { - for(l in $rootScope.statuses) { - if ( $rootScope.statuses[l].data.ListenerName.value == status.data.ListenerName.value ) { - $rootScope.statuses[l].data = status.data; - break; - } - } - } - } -}); - -mqWebApp.controller('ListenerStatusesController', ['$scope', '$rootScope', 'mqWebListenerStatus', function($scope, $rootScope, mqWebListenerStatus) { - $scope.qmgr = mqWebListenerStatus.getQueueManager(); - $scope.loading = false; - $scope.mqweb = null; - $scope.error = null; - - $scope.formData = { - listenerName : "*", - transportType : "All", - listenerExcludeSystem : false - }; - - $scope.load = function() { - $scope.loading = true; - mqWebListenerStatus.inquire($scope.formData) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $rootScope.statuses = []; - - data.statuses.forEach(function(status) { - $rootScope.statuses.push({ - loading: false, - toggle: false, - data: status - }) - }); - - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - }; - - $scope.reload = function(listenerStatus) { - listener.loading = true; - mqWebListenerStatus.inquire(listenerStatus.data.ListenerName.value) - .success(function(data, status) { - listenerStatus.loading = false; - if ( data.statuses.length > 0 ) - { - listenerStatus.data = data.statuses[0]; - $rootScope.updateListenerStatus(listenerStatus); - } - }).error(function(data, status) { - listenerStatus.loading = false; - }); - } - - $scope.toggle = function(status) { - status.toggle = ! status.toggle; - } - -}]); - -mqWebApp.controller('ListenerStatusController', ['$scope', '$rootScope', '$routeParams', 'mqWebListenerStatus', function($scope, $rootScope, $routeParams, mqWebListenerStatus) { - $scope.loading = true; - $scope.mqweb = null; - $scope.error = null; - $scope.status = null; - - mqWebListenerStatus.inquire($routeParams.listenerName) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - if ( data.statuses && data.statuses.length > 0 ) - { - $scope.status = { 'data' : data.statuses[0] }; - $rootScope.updateListenerStatus($scope.status); - } - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - $scope.reload = function() { - $scope.loading = true; - mqWebListenerStatus.inquire($scope.status.data.ListenerName.value) - .success(function(data, status) { - $scope.loading = false; - if ( data.statuses.length > 0 ) { - $scope.status.data = data.statuses[0]; - } - $rootScope.updateListenerStatus($scope.status); - }).error(function(data, status) { - $scope.loading = false; - }); - } -}]); diff --git a/static/js/app/lsstatus/provider.js b/static/js/app/lsstatus/provider.js deleted file mode 100644 index 368136c..0000000 --- a/static/js/app/lsstatus/provider.js +++ /dev/null @@ -1,34 +0,0 @@ -angular.module('mqWebApp').provider('mqWebListenerStatus', { - qmgr : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - // Pass an object for using the query parameters of inquire - // or a listener name - inquire : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/lsstatus/inquire/' + qmgr, { - cache : false, - params : arguments[0] - }); - } - else { - if ( arguments.length == 0 ) { - return $http.get('/api/lsstatus/inquire/' + qmgr, { cache : false } ); - } - else if ( arguments.length > 0 ) { - return $http.get('/api/lsstatus/inquire/' + qmgr + '/' + arguments[0], { cache : false } ); - } - } - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - } - -}); diff --git a/static/js/app/message/message.js b/static/js/app/message/message.js deleted file mode 100644 index 33511cc..0000000 --- a/static/js/app/message/message.js +++ /dev/null @@ -1,117 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.run(function ($rootScope) { - $rootScope.messages = null; // All messages -}); - -mqWebApp.controller('MessagesController', ['$scope', '$rootScope', 'mqWebMessage', function($scope, $rootScope, mqWebMessage) { - $scope.qmgr = mqWebMessage.getQueueManager(); - $scope.queue = mqWebMessage.getQueue(); - $scope.loading = false; - $scope.mqweb = null; - $scope.error = null; - $scope.http_rc = 0; - - $scope.formData = { - teaser : 80 - }; - - $scope.load = function() { - $scope.loading = true; - mqWebMessage.browse($scope.formData) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $rootScope.messages = []; - $scope.http_rc = 0; - - data.messages.forEach(function(entry) { - $rootScope.messages.push({ - loading: false, - toggle: false, - data: entry - }); - }); - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - - }); - }; - - $scope.toggle = function(msg) - { - msg.toggle = ! msg.toggle; - } - - $scope.reload = function(message) - { - message.loading = true; - mqWebMessage.browse(message.data.MsgId) - .success(function(data, status) { - message.loading = false; - $scope.http_rc = 0; - if ( data.messages.length > 0 ) - { - message.data = data.messages[0]; - } - $scope.error = data.error; - $scope.mqweb = data.mqweb; - }).error(function(data, status) { - message.loading = false; - $scope.http_rc = status; - }); - } -}]); - -mqWebApp.controller('MessageController', ['$scope', '$routeParams', 'mqWebMessage', function($scope, $routeParams, mqWebMessage) { - $scope.loading = false; - $scope.mqweb = null; - $scope.message = null; - $scope.error = null; - $scope.http_rc = 0; - - $scope.load = function() { - $scope.loading = true; - mqWebMessage.browse($routeParams.msgid) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - if ( data.messages && data.messages.length > 0 ) { - $scope.message = { data : data.messages[0] }; - } - $scope.http_rc = 0; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - }); - }; - $scope.load(); -}]); - - -mqWebApp.controller('MessageDumpController', ['$scope', '$routeParams', 'mqWebMessage', function($scope, $routeParams, mqWebMessage) { - $scope.loading = false; - $scope.mqweb = null; - $scope.message = null; - $scope.error = null; - $scope.http_rc = 0; - - $scope.load = function() { - $scope.loading = true; - mqWebMessage.dump($routeParams.msgid) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - $scope.message = data.message; - $scope.http_rc = 0; - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - $scope.http_rc = status; - }); - }; - $scope.load(); -}]); diff --git a/static/js/app/message/provider.js b/static/js/app/message/provider.js deleted file mode 100644 index 2bfc156..0000000 --- a/static/js/app/message/provider.js +++ /dev/null @@ -1,60 +0,0 @@ -angular.module('mqWebApp').provider('mqWebMessage', { - qmgr : '', - - queue : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - getQueue : function() { - return queue; - }, - // Browse a message - // Pass an object for using the query parameters of browse - // or a message id to use the URI path - browse : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/message/browse/' + qmgr + '/' + queue, { - cache : false, - params : arguments[0] - }); - } - else { - return $http.get('/api/message/browse/' + qmgr + '/' + queue + '/' + arguments[0], { cache : false } ); - } - }, - - // Dump a message - // Pass the message id as argument - dump : function() { - return $http.get('/api/message/dump/' + qmgr + '/' + queue + '/' + arguments[0], { cache : false } ); - }, - - // Browse event messages - // Pass an object for using the query parameters of browse - // or a message id to use the URI path - events : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/message/event/' + qmgr + '/' + queue, { - cache : false, - params : arguments[0] - }); - } - else { - return $http.get('/api/message/event/' + qmgr + '/' + queue + '/' + arguments[0], { cache : false }); - } - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - }, - - setQueue : function(value) { - queue = value; - } - -}); diff --git a/static/js/app/mqwebapp.js b/static/js/app/mqwebapp.js deleted file mode 100644 index 308ff7f..0000000 --- a/static/js/app/mqwebapp.js +++ /dev/null @@ -1,10 +0,0 @@ -var mqWebApp = angular.module('mqWebApp', ['ngRoute']); - -mqWebApp.filter('default', function () { - return function (input, value) { - if (input !== null && input !== undefined && (input !== '' || angular.isNumber(input))) { - return input; - } - return value || ''; - }; -}); \ No newline at end of file diff --git a/static/js/app/qmgr/provider.js b/static/js/app/qmgr/provider.js deleted file mode 100644 index e007717..0000000 --- a/static/js/app/qmgr/provider.js +++ /dev/null @@ -1,21 +0,0 @@ -angular.module('mqWebApp').provider('mqWebQueueManager', { - qmgr : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - inquire : function() { - return $http.get('/api/qmgr/inquire/' + qmgr, { - cache : false - }); - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - } - -}); diff --git a/static/js/app/queue/provider.js b/static/js/app/queue/provider.js deleted file mode 100644 index b5c4adb..0000000 --- a/static/js/app/queue/provider.js +++ /dev/null @@ -1,29 +0,0 @@ -angular.module('mqWebApp').provider('mqWebQueue', { - qmgr : '', - - $get : ['$http', function($http) { - return { - getQueueManager : function() { - return qmgr; - }, - // Pass an object for using the query parameters of inquire - // or a name of a queue to set the URI path. - inquire : function() { - if ( typeof arguments[0] == 'object' ) { - return $http.get('/api/queue/inquire/' + qmgr, { - cache : false, - params : arguments[0] - }); - } - else { - return $http.get('/api/queue/inquire/' + qmgr + '/' + arguments[0], { cache : false } ); - } - } - } - }], - - setQueueManager : function(value) { - qmgr = value; - } - -}); diff --git a/static/js/app/queue/queue.js b/static/js/app/queue/queue.js deleted file mode 100644 index ba6c59b..0000000 --- a/static/js/app/queue/queue.js +++ /dev/null @@ -1,117 +0,0 @@ -var mqWebApp = angular.module('mqWebApp'); - -mqWebApp.run(function ($rootScope) { - $rootScope.queues = null; // All queues - - // Call this when a queue has been reloaded on the detail page. - // So we see new values also on the overview page. - $rootScope.updateQueue = function(queue) - { - if ( $rootScope.queues != null ) - { - for(q in $rootScope.queues) - { - if ( $rootScope.queues[q].data.QName.value == queue.data.QName.value ) - { - $rootScope.queues[q].data = queue.data; - break; - } - } - } - } -}); - -mqWebApp.controller('QueuesController', ['$scope', '$rootScope', 'mqWebQueue', function($scope, $rootScope, mqWebQueue) { - $scope.qmgr = mqWebQueue.getQueueManager(); - - $scope.loading = false; - $scope.mqweb = null; - $scope.error = null; - $scope.queue = null; // Queue used for repeat - - $scope.formData = { - queueName : "*", - queueType : "All", - excludeSystem : true, - excludeTemp : true - }; - - $scope.load = function() { - $scope.loading = true; - mqWebQueue.inquire($scope.formData) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - - $rootScope.queues = []; - data.queues.forEach(function(q) { - $rootScope.queues.push({ - loading: false, - toggle: false, - data: q - }); - }); - - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - }; - - $scope.toggle = function(q) - { - q.toggle = ! q.toggle; - } - - $scope.reload = function(queue) - { - mqWebQueue.inquire(queue.data.QName.value) - .success(function(data, status) { - queue.loading = false; - if ( data.queues.length > 0 ) - { - queue.data = data.queues[0]; - } - }).error(function(data, status) { - queue.loading = false; - }); - } -}]); - -mqWebApp.controller('QueueController', ['$scope', '$rootScope', '$routeParams', 'mqWebQueue', function($scope, $rootScope, $routeParams, mqWebQueue) { - - $scope.loading = true; - $scope.mqweb = null; - $scope.error = null; - $scope.queue = null; - - mqWebQueue.inquire($routeParams.queueName) - .success(function(data, status) { - $scope.loading = false; - $scope.mqweb = data.mqweb; - if ( data.queues.length > 0 ) - { - $scope.queue = { 'data' : data.queues[0] }; - $rootScope.updateQueue($scope.queue); - } - $scope.error = data.error; - }).error(function(data, status) { - $scope.loading = false; - }); - - $scope.reload = function() - { - $scope.loading = true; - mqWebQueue.inquire($scope.queue.data.QName.value) - .success(function(data, status) { - $scope.loading = false; - if ( data.queues.length > 0 ) - { - $scope.queue.data = data.queues[0]; - } - $rootScope.updateQueue($scope.queue); - }).error(function(data, status) { - $scope.loading = false; - }); - } -}]); diff --git a/static/js/center.js b/static/js/center.js deleted file mode 100644 index 17190c1..0000000 --- a/static/js/center.js +++ /dev/null @@ -1,8 +0,0 @@ -jQuery.fn.center = function () { - this.css("position","absolute"); - this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) + - $(window).scrollTop()) + "px"); - this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) + - $(window).scrollLeft()) + "px"); - return this; -} diff --git a/static/js/jquery.formalize.legacy.min.js b/static/js/jquery.formalize.legacy.min.js deleted file mode 100644 index 3900bc7..0000000 --- a/static/js/jquery.formalize.legacy.min.js +++ /dev/null @@ -1 +0,0 @@ -var FORMALIZE=function(a,b,c){function e(a){var b=c.createElement("b");return b.innerHTML="",!!b.getElementsByTagName("br").length}var f="placeholder"in c.createElement("input"),g="autofocus"in c.createElement("input"),h=e(6),i=e(7);return{go:function(){var a,b=this.init;for(a in b)b.hasOwnProperty(a)&&b[a]()},init:{disable_link_button:function(){a(c.documentElement).delegate("a.button_disabled","click",function(){return!1})},full_input_size:function(){i&&a("textarea, input.input_full").length&&a("textarea, input.input_full").wrap('')},ie6_skin_inputs:function(){if(h&&a("input, select, textarea").length){var b=/button|submit|reset/,c=/date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;a("input").each(function(){var d=a(this);this.getAttribute("type").match(b)?(d.addClass("ie6_button"),this.disabled&&d.addClass("ie6_button_disabled")):this.getAttribute("type").match(c)&&(d.addClass("ie6_input"),this.disabled&&d.addClass("ie6_input_disabled"))}),a("textarea, select").each(function(){this.disabled&&a(this).addClass("ie6_input_disabled")})}},autofocus:function(){if(!g&&a(":input[autofocus]").length){var b=a("[autofocus]")[0];b.disabled||b.focus()}},placeholder:function(){!f&&a(":input[placeholder]").length&&(FORMALIZE.misc.add_placeholder(),a(":input[placeholder]").each(function(){if("password"!==this.type){var b=a(this),c=b.attr("placeholder");b.focus(function(){b.val()===c&&b.val("").removeClass("placeholder_text")}).blur(function(){FORMALIZE.misc.add_placeholder()}),b.closest("form").submit(function(){b.val()===c&&b.val("").removeClass("placeholder_text")}).bind("reset",function(){setTimeout(FORMALIZE.misc.add_placeholder,50)})}}))}},misc:{add_placeholder:function(){!f&&a(":input[placeholder]").length&&a(":input[placeholder]").each(function(){if("password"!==this.type){var b=a(this),c=b.attr("placeholder");b.val()&&b.val()!==c||b.val(c).addClass("placeholder_text")}})}}}}(jQuery,this,this.document);jQuery(document).ready(function(){FORMALIZE.go()}); \ No newline at end of file diff --git a/static/js/jquery.qtip.min.js b/static/js/jquery.qtip.min.js deleted file mode 100644 index 036399f..0000000 --- a/static/js/jquery.qtip.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* qTip2 v2.1.1 tips modal viewport svg imagemap ie6 | qtip2.com | Licensed MIT, GPL | Thu Jul 11 2013 14:03:02 */ -(function(t,e,s){(function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery","imagesloaded"],t):jQuery&&!jQuery.fn.qtip&&t(jQuery)})(function(o){function n(t,e,i,s){this.id=i,this.target=t,this.tooltip=E,this.elements=elements={target:t},this._id=$+"-"+i,this.timers={img:{}},this.options=e,this.plugins={},this.cache=cache={event:{},target:o(),disabled:S,attr:s,onTooltip:S,lastClass:""},this.rendered=this.destroyed=this.disabled=this.waiting=this.hiddenDuringWait=this.positioning=this.triggering=S}function r(t){return t===E||"object"!==o.type(t)}function a(t){return!(o.isFunction(t)||t&&t.attr||t.length||"object"===o.type(t)&&(t.jquery||t.then))}function h(t){var e,i,s,n;return r(t)?S:(r(t.metadata)&&(t.metadata={type:t.metadata}),"content"in t&&(e=t.content,r(e)||e.jquery||e.done?e=t.content={text:i=a(e)?S:e}:i=e.text,"ajax"in e&&(s=e.ajax,n=s&&s.once!==S,delete e.ajax,e.text=function(t,e){var r=i||o(this).attr(e.options.content.attr)||"Loading...",a=o.ajax(o.extend({},s,{context:e})).then(s.success,E,s.error).then(function(t){return t&&n&&e.set("content.text",t),t},function(t,i,s){e.destroyed||0===t.status||e.set("content.text",i+": "+s)});return n?r:(e.set("content.text",r),a)}),"title"in e&&(r(e.title)||(e.button=e.title.button,e.title=e.title.text),a(e.title||S)&&(e.title=S))),"position"in t&&r(t.position)&&(t.position={my:t.position,at:t.position}),"show"in t&&r(t.show)&&(t.show=t.show.jquery?{target:t.show}:t.show===M?{ready:M}:{event:t.show}),"hide"in t&&r(t.hide)&&(t.hide=t.hide.jquery?{target:t.hide}:{event:t.hide}),"style"in t&&r(t.style)&&(t.style={classes:t.style}),o.each(N,function(){this.sanitize&&this.sanitize(t)}),t)}function l(t,e){for(var i,s=0,o=t,n=e.split(".");o=o[n[s++]];)n.length>s&&(i=o);return[i||t,n.pop()]}function c(t,e){var i,s,o;for(i in this.checks)for(s in this.checks[i])(o=RegExp(s,"i").exec(t))&&(e.push(o),("builtin"===i||this.plugins[i])&&this.checks[i][s].apply(this.plugins[i]||this,e))}function p(t){return H.concat("").join(t?"-"+t+" ":" ")}function d(t){if(this.tooltip.hasClass(te))return S;clearTimeout(this.timers.show),clearTimeout(this.timers.hide);var e=o.proxy(function(){this.toggle(M,t)},this);this.options.show.delay>0?this.timers.show=setTimeout(e,this.options.show.delay):e()}function u(t){if(this.tooltip.hasClass(te))return S;var e=o(t.relatedTarget),i=e.closest(G)[0]===this.tooltip[0],s=e[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==e[0]&&"mouse"===this.options.position.target&&i||this.options.hide.fixed&&/mouse(out|leave|move)/.test(t.type)&&(i||s))try{t.preventDefault(),t.stopImmediatePropagation()}catch(n){}else{var r=o.proxy(function(){this.toggle(S,t)},this);this.options.hide.delay>0?this.timers.hide=setTimeout(r,this.options.hide.delay):r()}}function f(t){return this.tooltip.hasClass(te)||!this.options.hide.inactive?S:(clearTimeout(this.timers.inactive),this.timers.inactive=setTimeout(o.proxy(function(){this.hide(t)},this),this.options.hide.inactive),s)}function g(t){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(t)}function m(t,i,s){o(e.body).delegate(t,(i.split?i:i.join(re+" "))+re,function(){var t=T.api[o.attr(this,Y)];t&&!t.disabled&&s.apply(t,arguments)})}function v(t,i,s){var r,a,l,c,p,d=o(e.body),u=t[0]===e?d:t,f=t.metadata?t.metadata(s.metadata):E,g="html5"===s.metadata.type&&f?f[s.metadata.name]:E,m=t.data(s.metadata.name||"qtipopts");try{m="string"==typeof m?o.parseJSON(m):m}catch(v){}if(c=o.extend(M,{},T.defaults,s,"object"==typeof m?h(m):E,h(g||f)),a=c.position,c.id=i,"boolean"==typeof c.content.text){if(l=t.attr(c.content.attr),c.content.attr===S||!l)return S;c.content.text=l}if(a.container.length||(a.container=d),a.target===S&&(a.target=u),c.show.target===S&&(c.show.target=u),c.show.solo===M&&(c.show.solo=a.container.closest("body")),c.hide.target===S&&(c.hide.target=u),c.position.viewport===M&&(c.position.viewport=a.container),a.container=a.container.eq(0),a.at=new j(a.at,M),a.my=new j(a.my),t.data($))if(c.overwrite)t.qtip("destroy");else if(c.overwrite===S)return S;return t.attr(X,i),c.suppress&&(p=t.attr("title"))&&t.removeAttr("title").attr(ie,p).attr("title",""),r=new n(t,c,i,!!l),t.data($,r),t.one("remove.qtip-"+i+" removeqtip.qtip-"+i,function(){var t;(t=o(this).data($))&&t.destroy()}),r}function y(t){return t.charAt(0).toUpperCase()+t.slice(1)}function b(t,e){var i,o,n=e.charAt(0).toUpperCase()+e.slice(1),r=(e+" "+ve.join(n+" ")+n).split(" "),a=0;if(me[e])return t.css(me[e]);for(;i=r[a++];)if((o=t.css(i))!==s)return me[e]=i,o}function w(t,e){return parseInt(b(t,e),10)}function x(t,e){this._ns="tip",this.options=e,this.offset=e.offset,this.size=[e.width,e.height],this.init(this.qtip=t)}function _(t,e){this.options=e,this._ns="-modal",this.init(this.qtip=t)}function q(t){this._ns="ie6",this.init(this.qtip=t)}var T,C,j,z,W,M=!0,S=!1,E=null,O="x",R="y",I="width",k="height",B="top",L="left",P="bottom",V="right",D="center",A="flipinvert",F="shift",N={},$="qtip",X="data-hasqtip",Y="data-qtip-id",H=["ui-widget","ui-tooltip"],G="."+$,U="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Q=$+"-fixed",J=$+"-default",K=$+"-focus",Z=$+"-hover",te=$+"-disabled",ee="_replacedByqTip",ie="oldtitle";BROWSER={ie:function(){for(var t=3,i=e.createElement("div");(i.innerHTML="")&&i.getElementsByTagName("i")[0];);return t>4?t:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||S},C=n.prototype,C.render=function(t){if(this.rendered||this.destroyed)return this;var e=this,i=this.options,s=this.cache,n=this.elements,r=i.content.text,a=i.content.title,h=i.content.button,l=i.position,c="."+this._id+" ",p=[];return o.attr(this.target[0],"aria-describedby",this._id),this.tooltip=n.tooltip=tooltip=o("
",{id:this._id,"class":[$,J,i.style.classes,$+"-pos-"+i.position.my.abbrev()].join(" "),width:i.style.width||"",height:i.style.height||"",tracking:"mouse"===l.target&&l.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":S,"aria-describedby":this._id+"-content","aria-hidden":M}).toggleClass(te,this.disabled).attr(Y,this.id).data($,this).appendTo(l.container).append(n.content=o("
",{"class":$+"-content",id:this._id+"-content","aria-atomic":M})),this.rendered=-1,this.positioning=M,a&&(this._createTitle(),o.isFunction(a)||p.push(this._updateTitle(a,S))),h&&this._createButton(),o.isFunction(r)||p.push(this._updateContent(r,S)),this.rendered=M,this._setWidget(),o.each(i.events,function(t,e){o.isFunction(e)&&tooltip.bind(("toggle"===t?["tooltipshow","tooltiphide"]:["tooltip"+t]).join(c)+c,e)}),o.each(N,function(t){var i;"render"===this.initialize&&(i=this(e))&&(e.plugins[t]=i)}),this._assignEvents(),o.when.apply(o,p).then(function(){e._trigger("render"),e.positioning=S,e.hiddenDuringWait||!i.show.ready&&!t||e.toggle(M,s.event,S),e.hiddenDuringWait=S}),T.api[this.id]=this,this},C.destroy=function(t){function e(){if(!this.destroyed){this.destroyed=M;var t=this.target,e=t.attr(ie);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),o.each(this.plugins,function(){this.destroy&&this.destroy()}),clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this._unassignEvents(),t.removeData($).removeAttr(Y).removeAttr("aria-describedby"),this.options.suppress&&e&&t.attr("title",e).removeAttr(ie),this._unbind(t),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=E,delete T.api[this.id]}}return this.destroyed?this.target:(t!==M&&this.rendered?(tooltip.one("tooltiphidden",o.proxy(e,this)),!this.triggering&&this.hide()):e.call(this),this.target)},z=C.checks={builtin:{"^id$":function(t,e,i,s){var n=i===M?T.nextid:i,r=$+"-"+n;n!==S&&n.length>0&&!o("#"+r).length?(this._id=r,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):t[e]=s},"^prerender":function(t,e,i){i&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(t,e,i){this._updateContent(i)},"^content.attr$":function(t,e,i,s){this.options.content.text===this.target.attr(s)&&this._updateContent(this.target.attr(i))},"^content.title$":function(t,e,i){return i?(i&&!this.elements.title&&this._createTitle(),this._updateTitle(i),s):this._removeTitle()},"^content.button$":function(t,e,i){this._updateButton(i)},"^content.title.(text|button)$":function(t,e,i){this.set("content."+e,i)},"^position.(my|at)$":function(t,e,i){"string"==typeof i&&(t[e]=new j(i,"at"===e))},"^position.container$":function(t,e,i){this.tooltip.appendTo(i)},"^show.ready$":function(t,e,i){i&&(!this.rendered&&this.render(M)||this.toggle(M))},"^style.classes$":function(t,e,i,s){this.tooltip.removeClass(s).addClass(i)},"^style.width|height":function(t,e,i){this.tooltip.css(e,i)},"^style.widget|content.title":function(){this._setWidget()},"^style.def":function(t,e,i){this.tooltip.toggleClass(J,!!i)},"^events.(render|show|move|hide|focus|blur)$":function(t,e,i){tooltip[(o.isFunction(i)?"":"un")+"bind"]("tooltip"+e,i)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var t=this.options.position;tooltip.attr("tracking","mouse"===t.target&&t.adjust.mouse),this._unassignEvents(),this._assignEvents()}}},C.get=function(t){if(this.destroyed)return this;var e=l(this.options,t.toLowerCase()),i=e[0][e[1]];return i.precedance?i.string():i};var se=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,oe=/^prerender|show\.ready/i;C.set=function(t,e){if(this.destroyed)return this;var i,n=this.rendered,r=S,a=this.options;return this.checks,"string"==typeof t?(i=t,t={},t[i]=e):t=o.extend({},t),o.each(t,function(e,i){if(!n&&!oe.test(e))return delete t[e],s;var h,c=l(a,e.toLowerCase());h=c[0][c[1]],c[0][c[1]]=i&&i.nodeType?o(i):i,r=se.test(e)||r,t[e]=[c[0],c[1],i,h]}),h(a),this.positioning=M,o.each(t,o.proxy(c,this)),this.positioning=S,this.rendered&&this.tooltip[0].offsetWidth>0&&r&&this.reposition("mouse"===a.position.target?E:this.cache.event),this},C._update=function(t,e){var i=this,s=this.cache;return this.rendered&&t?(o.isFunction(t)&&(t=t.call(this.elements.target,s.event,this)||""),o.isFunction(t.then)?(s.waiting=M,t.then(function(t){return s.waiting=S,i._update(t,e)},E,function(t){return i._update(t,e)})):t===S||!t&&""!==t?S:(t.jquery&&t.length>0?e.children().detach().end().append(t.css({display:"block"})):e.html(t),s.waiting=M,(o.fn.imagesLoaded?e.imagesLoaded():o.Deferred().resolve(o([]))).done(function(t){s.waiting=S,t.length&&i.rendered&&i.tooltip[0].offsetWidth>0&&i.reposition(s.event,!t.length)}).promise())):S},C._updateContent=function(t,e){this._update(t,this.elements.content,e)},C._updateTitle=function(t,e){this._update(t,this.elements.title,e)===S&&this._removeTitle(S)},C._createTitle=function(){var t=this.elements,e=this._id+"-title";t.titlebar&&this._removeTitle(),t.titlebar=o("
",{"class":$+"-titlebar "+(this.options.style.widget?p("header"):"")}).append(t.title=o("
",{id:e,"class":$+"-title","aria-atomic":M})).insertBefore(t.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(t){o(this).toggleClass("ui-state-active ui-state-focus","down"===t.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(t){o(this).toggleClass("ui-state-hover","mouseover"===t.type)}),this.options.content.button&&this._createButton()},C._removeTitle=function(t){var e=this.elements;e.title&&(e.titlebar.remove(),e.titlebar=e.title=e.button=E,t!==S&&this.reposition())},C.reposition=function(i,s){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=M;var n,r,a=this.cache,h=this.tooltip,l=this.options.position,c=l.target,p=l.my,d=l.at,u=l.viewport,f=l.container,g=l.adjust,m=g.method.split(" "),v=h.outerWidth(S),y=h.outerHeight(S),b=0,w=0,x=h.css("position"),_={left:0,top:0},q=h[0].offsetWidth>0,T=i&&"scroll"===i.type,C=o(t),j=f[0].ownerDocument,z=this.mouse;if(o.isArray(c)&&2===c.length)d={x:L,y:B},_={left:c[0],top:c[1]};else if("mouse"===c&&(i&&i.pageX||a.event.pageX))d={x:L,y:B},i=!z||!z.pageX||!g.mouse&&i&&i.pageX?(!i||"resize"!==i.type&&"scroll"!==i.type?i&&i.pageX&&"mousemove"===i.type?i:(!g.mouse||this.options.show.distance)&&a.origin&&a.origin.pageX?a.origin:i:a.event)||i||a.event||z||{}:z,"static"!==x&&(_=f.offset()),j.body.offsetWidth!==(t.innerWidth||j.documentElement.clientWidth)&&(r=o(j.body).offset()),_={left:i.pageX-_.left+(r&&r.left||0),top:i.pageY-_.top+(r&&r.top||0)},g.mouse&&T&&(_.left-=z.scrollX-C.scrollLeft(),_.top-=z.scrollY-C.scrollTop());else{if("event"===c&&i&&i.target&&"scroll"!==i.type&&"resize"!==i.type?a.target=o(i.target):"event"!==c&&(a.target=o(c.jquery?c:elements.target)),c=a.target,c=o(c).eq(0),0===c.length)return this;c[0]===e||c[0]===t?(b=BROWSER.iOS?t.innerWidth:c.width(),w=BROWSER.iOS?t.innerHeight:c.height(),c[0]===t&&(_={top:(u||c).scrollTop(),left:(u||c).scrollLeft()})):N.imagemap&&c.is("area")?n=N.imagemap(this,c,d,N.viewport?m:S):N.svg&&c[0].ownerSVGElement?n=N.svg(this,c,d,N.viewport?m:S):(b=c.outerWidth(S),w=c.outerHeight(S),_=c.offset()),n&&(b=n.width,w=n.height,r=n.offset,_=n.position),_=this.reposition.offset(c,_,f),(BROWSER.iOS>3.1&&4.1>BROWSER.iOS||BROWSER.iOS>=4.3&&4.33>BROWSER.iOS||!BROWSER.iOS&&"fixed"===x)&&(_.left-=C.scrollLeft(),_.top-=C.scrollTop()),(!n||n&&n.adjustable!==S)&&(_.left+=d.x===V?b:d.x===D?b/2:0,_.top+=d.y===P?w:d.y===D?w/2:0)}return _.left+=g.x+(p.x===V?-v:p.x===D?-v/2:0),_.top+=g.y+(p.y===P?-y:p.y===D?-y/2:0),N.viewport?(_.adjusted=N.viewport(this,_,l,b,w,v,y),r&&_.adjusted.left&&(_.left+=r.left),r&&_.adjusted.top&&(_.top+=r.top)):_.adjusted={left:0,top:0},this._trigger("move",[_,u.elem||u],i)?(delete _.adjusted,s===S||!q||isNaN(_.left)||isNaN(_.top)||"mouse"===c||!o.isFunction(l.effect)?h.css(_):o.isFunction(l.effect)&&(l.effect.call(h,this,o.extend({},_)),h.queue(function(t){o(this).css({opacity:"",height:""}),BROWSER.ie&&this.style.removeAttribute("filter"),t()})),this.positioning=S,this):this},C.reposition.offset=function(t,i,s){function n(t,e){i.left+=e*t.scrollLeft(),i.top+=e*t.scrollTop()}if(!s[0])return i;var r,a,h,l,c=o(t[0].ownerDocument),p=!!BROWSER.ie&&"CSS1Compat"!==e.compatMode,d=s[0];do"static"!==(a=o.css(d,"position"))&&("fixed"===a?(h=d.getBoundingClientRect(),n(c,-1)):(h=o(d).position(),h.left+=parseFloat(o.css(d,"borderLeftWidth"))||0,h.top+=parseFloat(o.css(d,"borderTopWidth"))||0),i.left-=h.left+(parseFloat(o.css(d,"marginLeft"))||0),i.top-=h.top+(parseFloat(o.css(d,"marginTop"))||0),r||"hidden"===(l=o.css(d,"overflow"))||"visible"===l||(r=o(d)));while(d=d.offsetParent);return r&&(r[0]!==c[0]||p)&&n(r,1),i};var ne=(j=C.reposition.Corner=function(t,e){t=(""+t).replace(/([A-Z])/," $1").replace(/middle/gi,D).toLowerCase(),this.x=(t.match(/left|right/i)||t.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(t.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!e;var i=t.charAt(0);this.precedance="t"===i||"b"===i?R:O}).prototype;ne.invert=function(t,e){this[t]=this[t]===L?V:this[t]===V?L:e||this[t]},ne.string=function(){var t=this.x,e=this.y;return t===e?t:this.precedance===R||this.forceY&&"center"!==e?e+" "+t:t+" "+e},ne.abbrev=function(){var t=this.string().split(" ");return t[0].charAt(0)+(t[1]&&t[1].charAt(0)||"")},ne.clone=function(){return new j(this.string(),this.forceY)},C.toggle=function(t,i){var s=this.cache,n=this.options,r=this.tooltip;if(i){if(/over|enter/.test(i.type)&&/out|leave/.test(s.event.type)&&n.show.target.add(i.target).length===n.show.target.length&&r.has(i.relatedTarget).length)return this;s.event=o.extend({},i)}if(this.waiting&&!t&&(this.hiddenDuringWait=M),!this.rendered)return t?this.render(1):this;if(this.destroyed||this.disabled)return this;var a,h,l=t?"show":"hide",c=this.options[l],p=(this.options[t?"hide":"show"],this.options.position),d=this.options.content,u=this.tooltip.css("width"),f=this.tooltip[0].offsetWidth>0,g=t||1===c.target.length,m=!i||2>c.target.length||s.target[0]===i.target;return(typeof t).search("boolean|number")&&(t=!f),a=!r.is(":animated")&&f===t&&m,h=a?E:!!this._trigger(l,[90]),h!==S&&t&&this.focus(i),!h||a?this:(o.attr(r[0],"aria-hidden",!t),t?(s.origin=o.extend({},this.mouse),o.isFunction(d.text)&&this._updateContent(d.text,S),o.isFunction(d.title)&&this._updateTitle(d.title,S),!W&&"mouse"===p.target&&p.adjust.mouse&&(o(e).bind("mousemove."+$,this._storeMouse),W=M),u||r.css("width",r.outerWidth(S)),this.reposition(i,arguments[2]),u||r.css("width",""),c.solo&&("string"==typeof c.solo?o(c.solo):o(G,c.solo)).not(r).not(c.target).qtip("hide",o.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete s.origin,W&&!o(G+'[tracking="true"]:visible',c.solo).not(r).length&&(o(e).unbind("mousemove."+$),W=S),this.blur(i)),after=o.proxy(function(){t?(BROWSER.ie&&r[0].style.removeAttribute("filter"),r.css("overflow",""),"string"==typeof c.autofocus&&o(this.options.show.autofocus,r).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):r.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(t?"visible":"hidden")},this),c.effect===S||g===S?(r[l](),after()):o.isFunction(c.effect)?(r.stop(1,1),c.effect.call(r,this),r.queue("fx",function(t){after(),t()})):r.fadeTo(90,t?1:0,after),t&&c.target.trigger("qtip-"+this.id+"-inactive"),this)},C.show=function(t){return this.toggle(M,t)},C.hide=function(t){return this.toggle(S,t)},C.focus=function(t){if(!this.rendered||this.destroyed)return this;var e=o(G),i=this.tooltip,s=parseInt(i[0].style.zIndex,10),n=T.zindex+e.length;return i.hasClass(K)||this._trigger("focus",[n],t)&&(s!==n&&(e.each(function(){this.style.zIndex>s&&(this.style.zIndex=this.style.zIndex-1)}),e.filter("."+K).qtip("blur",t)),i.addClass(K)[0].style.zIndex=n),this},C.blur=function(t){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass(K),this._trigger("blur",[this.tooltip.css("zIndex")],t),this)},C.disable=function(t){return this.destroyed?this:("boolean"!=typeof t&&(t=!(this.tooltip.hasClass(te)||this.disabled)),this.rendered&&this.tooltip.toggleClass(te,t).attr("aria-disabled",t),this.disabled=!!t,this)},C.enable=function(){return this.disable(S)},C._createButton=function(){var t=this,e=this.elements,i=e.tooltip,s=this.options.content.button,n="string"==typeof s,r=n?s:"Close tooltip";e.button&&e.button.remove(),e.button=s.jquery?s:o("",{"class":"qtip-close "+(this.options.style.widget?"":$+"-icon"),title:r,"aria-label":r}).prepend(o("",{"class":"ui-icon ui-icon-close",html:"×"})),e.button.appendTo(e.titlebar||i).attr("role","button").click(function(e){return i.hasClass(te)||t.hide(e),S})},C._updateButton=function(t){if(!this.rendered)return S;var e=this.elements.button;t?this._createButton():e.remove()},C._setWidget=function(){var t=this.options.style.widget,e=this.elements,i=e.tooltip,s=i.hasClass(te);i.removeClass(te),te=t?"ui-state-disabled":"qtip-disabled",i.toggleClass(te,s),i.toggleClass("ui-helper-reset "+p(),t).toggleClass(J,this.options.style.def&&!t),e.content&&e.content.toggleClass(p("content"),t),e.titlebar&&e.titlebar.toggleClass(p("header"),t),e.button&&e.button.toggleClass($+"-icon",!t)},C._storeMouse=function(i){this.mouse={pageX:i.pageX,pageY:i.pageY,type:"mousemove",scrollX:t.pageXOffset||e.body.scrollLeft||e.documentElement.scrollLeft,scrollY:t.pageYOffset||e.body.scrollTop||e.documentElement.scrollTop}},C._bind=function(t,e,i,s,n){var r="."+this._id+(s?"-"+s:"");e.length&&o(t).bind((e.split?e:e.join(r+" "))+r,o.proxy(i,n||this))},C._unbind=function(t,e){o(t).unbind("."+this._id+(e?"-"+e:""))};var re="."+$;o(function(){m(G,["mouseenter","mouseleave"],function(t){var e="mouseenter"===t.type,i=o(t.currentTarget),s=o(t.relatedTarget||t.target),n=this.options;e?(this.focus(t),i.hasClass(Q)&&!i.hasClass(te)&&clearTimeout(this.timers.hide)):"mouse"===n.position.target&&n.hide.event&&n.show.target&&!s.closest(n.show.target[0]).length&&this.hide(t),i.toggleClass(Z,e)}),m("["+Y+"]",U,f)}),C._trigger=function(t,e,i){var s=o.Event("tooltip"+t);return s.originalEvent=i&&o.extend({},i)||this.cache.event||E,this.triggering=M,this.tooltip.trigger(s,[this].concat(e||[])),this.triggering=S,!s.isDefaultPrevented()},C._assignEvents=function(){var i=this.options,n=i.position,r=this.tooltip,a=i.show.target,h=i.hide.target,l=n.container,c=n.viewport,p=o(e),m=(o(e.body),o(t)),v=i.show.event?o.trim(""+i.show.event).split(" "):[],y=i.hide.event?o.trim(""+i.hide.event).split(" "):[],b=[];/mouse(out|leave)/i.test(i.hide.event)&&"window"===i.hide.leave&&this._bind(p,["mouseout","blur"],function(t){/select|option/.test(t.target.nodeName)||t.relatedTarget||this.hide(t)}),i.hide.fixed?h=h.add(r.addClass(Q)):/mouse(over|enter)/i.test(i.show.event)&&this._bind(h,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+i.hide.event).indexOf("unfocus")>-1&&this._bind(l.closest("html"),["mousedown","touchstart"],function(t){var e=o(t.target),i=this.rendered&&!this.tooltip.hasClass(te)&&this.tooltip[0].offsetWidth>0,s=e.parents(G).filter(this.tooltip[0]).length>0;e[0]===this.target[0]||e[0]===this.tooltip[0]||s||this.target.has(e[0]).length||!i||this.hide(t)}),"number"==typeof i.hide.inactive&&(this._bind(a,"qtip-"+this.id+"-inactive",f),this._bind(h.add(r),T.inactiveEvents,f,"-inactive")),y=o.map(y,function(t){var e=o.inArray(t,v);return e>-1&&h.add(a).length===h.length?(b.push(v.splice(e,1)[0]),s):t}),this._bind(a,v,d),this._bind(h,y,u),this._bind(a,b,function(t){(this.tooltip[0].offsetWidth>0?u:d).call(this,t)}),this._bind(a.add(r),"mousemove",function(t){if("number"==typeof i.hide.distance){var e=this.cache.origin||{},s=this.options.hide.distance,o=Math.abs;(o(t.pageX-e.pageX)>=s||o(t.pageY-e.pageY)>=s)&&this.hide(t)}this._storeMouse(t)}),"mouse"===n.target&&n.adjust.mouse&&(i.hide.event&&this._bind(a,["mouseenter","mouseleave"],function(t){this.cache.onTarget="mouseenter"===t.type}),this._bind(p,"mousemove",function(t){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(te)&&this.tooltip[0].offsetWidth>0&&this.reposition(t)})),(n.adjust.resize||c.length)&&this._bind(o.event.special.resize?c:m,"resize",g),n.adjust.scroll&&this._bind(m.add(n.container),"scroll",g)},C._unassignEvents=function(){var i=[this.options.show.target[0],this.options.hide.target[0],this.rendered&&this.tooltip[0],this.options.position.container[0],this.options.position.viewport[0],this.options.position.container.closest("html")[0],t,e];this.rendered?this._unbind(o([]).pushStack(o.grep(i,function(t){return"object"==typeof t}))):o(i[0]).unbind("."+this._id+"-create")},T=o.fn.qtip=function(t,e,i){var n=(""+t).toLowerCase(),r=E,a=o.makeArray(arguments).slice(1),l=a[a.length-1],c=this[0]?o.data(this[0],$):E;return!arguments.length&&c||"api"===n?c:"string"==typeof t?(this.each(function(){var t=o.data(this,$);if(!t)return M;if(l&&l.timeStamp&&(t.cache.event=l),!e||"option"!==n&&"options"!==n)t[n]&&t[n].apply(t,a);else{if(i===s&&!o.isPlainObject(e))return r=t.get(e),S;t.set(e,i)}}),r!==E?r:this):"object"!=typeof t&&arguments.length?s:(c=h(o.extend(M,{},t)),T.bind.call(this,c,l))},T.bind=function(t,e){return this.each(function(i){function n(t){function e(){c.render("object"==typeof t||r.show.ready),a.show.add(a.hide).unbind(l)}return c.disabled?S:(c.cache.event=o.extend({},t),c.cache.target=t?o(t.target):[s],r.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(e,r.show.delay),h.show!==h.hide&&a.hide.bind(h.hide,function(){clearTimeout(c.timers.show)})):e(),s)}var r,a,h,l,c,p;return p=o.isArray(t.id)?t.id[i]:t.id,p=!p||p===S||1>p.length||T.api[p]?T.nextid++:p,l=".qtip-"+p+"-create",c=v(o(this),p,t),c===S?M:(T.api[p]=c,r=c.options,o.each(N,function(){"initialize"===this.initialize&&this(c)}),a={show:r.show.target,hide:r.hide.target},h={show:o.trim(""+r.show.event).replace(/ /g,l+" ")+l,hide:o.trim(""+r.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(h.show)&&!/mouse(out|leave)/i.test(h.hide)&&(h.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(t){c._storeMouse(t),c.cache.onTarget=M}),a.show.bind(h.show,n),(r.show.ready||r.prerender)&&n(e),s)})},T.api={},o.each({attr:function(t,e){if(this.length){var i=this[0],s="title",n=o.data(i,"qtip");if(t===s&&n&&"object"==typeof n&&n.options.suppress)return 2>arguments.length?o.attr(i,ie):(n&&n.options.content.attr===s&&n.cache.attr&&n.set("content.text",e),this.attr(ie,e))}return o.fn["attr"+ee].apply(this,arguments)},clone:function(t){var e=(o([]),o.fn["clone"+ee].apply(this,arguments));return t||e.filter("["+ie+"]").attr("title",function(){return o.attr(this,ie)}).removeAttr(ie),e}},function(t,e){if(!e||o.fn[t+ee])return M;var i=o.fn[t+ee]=o.fn[t];o.fn[t]=function(){return e.apply(this,arguments)||i.apply(this,arguments)}}),o.ui||(o["cleanData"+ee]=o.cleanData,o.cleanData=function(t){for(var e,i=0;(e=o(t[i])).length;i++)if(e.attr(X))try{e.triggerHandler("removeqtip")}catch(s){}o["cleanData"+ee].apply(this,arguments)}),T.version="2.1.1",T.nextid=0,T.inactiveEvents=U,T.zindex=15e3,T.defaults={prerender:S,id:S,overwrite:M,suppress:M,content:{text:M,attr:"title",title:S,button:S},position:{my:"top left",at:"bottom right",target:S,container:S,viewport:S,adjust:{x:0,y:0,mouse:M,scroll:M,resize:M,method:"flipinvert flipinvert"},effect:function(t,e){o(this).animate(e,{duration:200,queue:S})}},show:{target:S,event:"mouseenter",effect:M,delay:90,solo:S,ready:S,autofocus:S},hide:{target:S,event:"mouseleave",effect:M,delay:0,fixed:S,inactive:S,leave:"window",distance:S},style:{classes:"",widget:S,width:S,height:S,def:M},events:{render:E,move:E,show:E,hide:E,toggle:E,visible:E,hidden:E,focus:E,blur:E}};var ae,he="margin",le="border",ce="color",pe="background-color",de="transparent",ue=" !important",fe=!!e.createElement("canvas").getContext,ge=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,me={},ve=["Webkit","O","Moz","ms"];fe||(createVML=function(t,e,i){return"'}),o.extend(x.prototype,{init:function(t){var e,i;i=this.element=t.elements.tip=o("
",{"class":$+"-tip"}).prependTo(t.tooltip),fe?(e=o("").appendTo(this.element)[0].getContext("2d"),e.lineJoin="miter",e.miterLimit=100,e.save()):(e=createVML("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(e+e),t._bind(o("*",i).add(i),["click","mousedown"],function(t){t.stopPropagation()},this._ns)),t._bind(t.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(t){var e=this.qtip.elements.titlebar;return e&&(t.y===B||t.y===D&&this.element.position().top+this.size[1]/2+this.options.offsetBROWSER.ie?0:w(this._useTitle(t)&&e.titlebar||e.content,i)||w(e.tooltip,i)||0},_invalidColour:function(t,e,i){var s=t.css(e);return!s||i&&s===t.css(i)||ge.test(s)?S:s},_parseColours:function(t){var e=this.qtip.elements,i=this.element.css("cssText",""),s=le+y(t[t.precedance])+y(ce),n=this._useTitle(t)&&e.titlebar||e.content,r=this._invalidColour,a=[];return a[0]=r(i,pe)||r(n,pe)||r(e.content,pe)||r(tooltip,pe)||i.css(pe),a[1]=r(i,s,ce)||r(n,s,ce)||r(e.content,s,ce)||r(tooltip,s,ce)||tooltip.css(s),o("*",i).add(i).css("cssText",pe+":"+de+ue+";"+le+":0"+ue+";"),a},_calculateSize:function(t){var e,i,s,o=t.precedance===R,n=this.options[o?"height":"width"],r=this.options[o?"width":"height"],a="c"===t.abbrev(),h=n*(a?.5:1),l=Math.pow,c=Math.round,p=Math.sqrt(l(h,2)+l(r,2)),d=[this.border/h*p,this.border/r*p];return d[2]=Math.sqrt(l(d[0],2)-l(this.border,2)),d[3]=Math.sqrt(l(d[1],2)-l(this.border,2)),e=p+d[2]+d[3]+(a?0:d[0]),i=e/p,s=[c(i*n),c(i*r)],o?s:s.reverse()},_calculateTip:function(t){var e=this.size[0],i=this.size[1],s=Math.ceil(e/2),o=Math.ceil(i/2),n={br:[0,0,e,i,e,0],bl:[0,0,e,0,0,i],tr:[0,i,e,0,e,i],tl:[0,0,0,i,e,i],tc:[0,i,s,0,e,i],bc:[0,0,e,0,s,i],rc:[0,0,e,o,0,i],lc:[e,0,e,i,0,o]};return n.lt=n.br,n.rt=n.bl,n.lb=n.tr,n.rb=n.tl,n[t.abbrev()]},create:function(){var t=this.corner=(fe||BROWSER.ie)&&this._parseCorner(this.options.corner);return(this.enabled=!!this.corner&&"c"!==this.corner.abbrev())&&(this.qtip.cache.corner=t.clone(),this.update()),this.element.toggle(this.enabled),this.corner},update:function(t,e){if(!this.enabled)return this;var i,s,n,r,a,h,l,c=(this.qtip.elements,this.element),p=c.children(),d=this.options,u=this.size,f=d.mimic,g=Math.round;t||(t=this.qtip.cache.corner||this.corner),f===S?f=t:(f=new j(f),f.precedance=t.precedance,"inherit"===f.x?f.x=t.x:"inherit"===f.y?f.y=t.y:f.x===f.y&&(f[t.precedance]=t[t.precedance])),s=f.precedance,t.precedance===O?this._swapDimensions():this._resetDimensions(),i=this.color=this._parseColours(t),i[1]!==de?(l=this.border=this._parseWidth(t,t[t.precedance]),d.border&&1>l&&(i[0]=i[1]),this.border=l=d.border!==M?d.border:l):this.border=l=0,r=this._calculateTip(f),h=this.size=this._calculateSize(t),c.css({width:h[0],height:h[1],lineHeight:h[1]+"px"}),a=t.precedance===R?[g(f.x===L?l:f.x===V?h[0]-u[0]-l:(h[0]-u[0])/2),g(f.y===B?h[1]-u[1]:0)]:[g(f.x===L?h[0]-u[0]:0),g(f.y===B?l:f.y===P?h[1]-u[1]-l:(h[1]-u[1])/2)],fe?(p.attr(I,h[0]).attr(k,h[1]),n=p[0].getContext("2d"),n.restore(),n.save(),n.clearRect(0,0,3e3,3e3),n.fillStyle=i[0],n.strokeStyle=i[1],n.lineWidth=2*l,n.translate(a[0],a[1]),n.beginPath(),n.moveTo(r[0],r[1]),n.lineTo(r[2],r[3]),n.lineTo(r[4],r[5]),n.closePath(),l&&("border-box"===tooltip.css("background-clip")&&(n.strokeStyle=i[0],n.stroke()),n.strokeStyle=i[1],n.stroke()),n.fill()):(r="m"+r[0]+","+r[1]+" l"+r[2]+","+r[3]+" "+r[4]+","+r[5]+" xe",a[2]=l&&/^(r|b)/i.test(t.string())?8===BROWSER.ie?2:1:0,p.css({coordsize:u[0]+l+" "+(u[1]+l),antialias:""+(f.string().indexOf(D)>-1),left:a[0]-a[2]*Number(s===O),top:a[1]-a[2]*Number(s===R),width:u[0]+l,height:u[1]+l}).each(function(t){var e=o(this);e[e.prop?"prop":"attr"]({coordsize:u[0]+l+" "+(u[1]+l),path:r,fillcolor:i[0],filled:!!t,stroked:!t}).toggle(!(!l&&!t)),!t&&e.html(createVML("stroke",'weight="'+2*l+'px" color="'+i[1]+'" miterlimit="1000" joinstyle="miter"'))})),e!==S&&this.calculate(t)},calculate:function(t){if(!this.enabled)return S;var e,i,s,n=this,r=this.qtip.elements,a=this.element,h=this.options.offset,l=(this.qtip.tooltip.hasClass("ui-widget"),{});return t=t||this.corner,e=t.precedance,i=this._calculateSize(t),s=[t.x,t.y],e===O&&s.reverse(),o.each(s,function(s,o){var a,c,p;o===D?(a=e===R?L:B,l[a]="50%",l[he+"-"+a]=-Math.round(i[e===R?0:1]/2)+h):(a=n._parseWidth(t,o,r.tooltip),c=n._parseWidth(t,o,r.content),p=n._parseRadius(t),l[o]=Math.max(-n.border,s?c:h+(p>a?p:-a)))}),l[t[e]]-=i[e===O?0:1],a.css({margin:"",top:"",bottom:"",left:"",right:""}).css(l),l},reposition:function(t,e,i){if(this.enabled){var o,n,r=e.cache,a=this.corner.clone(),h=i.adjusted,l=e.options.position.adjust.method.split(" "),c=l[0],p=l[1]||l[0],d={left:S,top:S,x:0,y:0},u={};this.corner.fixed!==M&&(c===F&&a.precedance===O&&h.left&&a.y!==D?a.precedance=a.precedance===O?R:O:c!==F&&h.left&&(a.x=a.x===D?h.left>0?L:V:a.x===L?V:L),p===F&&a.precedance===R&&h.top&&a.x!==D?a.precedance=a.precedance===R?O:R:p!==F&&h.top&&(a.y=a.y===D?h.top>0?B:P:a.y===B?P:B),a.string()===r.corner.string()||r.cornerTop===h.top&&r.cornerLeft===h.left||this.update(a,S)),o=this.calculate(a,h),o.right!==s&&(o.left=-o.right),o.bottom!==s&&(o.top=-o.bottom),o.user=this.offset,(d.left=c===F&&!!h.left)&&(a.x===D?u[he+"-left"]=d.x=o[he+"-left"]-h.left:(n=o.right!==s?[h.left,-o.left]:[-h.left,o.left],(d.x=Math.max(n[0],n[1]))>n[0]&&(i.left-=h.left,d.left=S),u[o.right!==s?V:L]=d.x)),(d.top=p===F&&!!h.top)&&(a.y===D?u[he+"-top"]=d.y=o[he+"-top"]-h.top:(n=o.bottom!==s?[h.top,-o.top]:[-h.top,o.top],(d.y=Math.max(n[0],n[1]))>n[0]&&(i.top-=h.top,d.top=S),u[o.bottom!==s?P:B]=d.y)),this.element.css(u).toggle(!(d.x&&d.y||a.x===D&&d.y||a.y===D&&d.x)),i.left-=o.left.charAt?o.user:c!==F||d.top||!d.left&&!d.top?o.left:0,i.top-=o.top.charAt?o.user:p!==F||d.left||!d.left&&!d.top?o.top:0,r.cornerLeft=h.left,r.cornerTop=h.top,r.corner=a.clone() -}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),ae=N.tip=function(t){return new x(t,t.options.style.tip)},ae.initialize="render",ae.sanitize=function(t){t.style&&"tip"in t.style&&(opts=t.style.tip,"object"!=typeof opts&&(opts=t.style.tip={corner:opts}),/string|boolean/i.test(typeof opts.corner)||(opts.corner=M))},z.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(t){this.size=size=[t.width,t.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},o.extend(M,T.defaults,{style:{tip:{corner:M,mimic:S,width:6,height:6,border:M,offset:0}}});var ye,be,we="qtip-modal",xe="."+we;be=function(){function i(t){if(o.expr[":"].focusable)return o.expr[":"].focusable;var e,i,s,n=!isNaN(o.attr(t,"tabindex")),r=t.nodeName&&t.nodeName.toLowerCase();return"area"===r?(e=t.parentNode,i=e.name,t.href&&i&&"map"===e.nodeName.toLowerCase()?(s=o("img[usemap=#"+i+"]")[0],!!s&&s.is(":visible")):!1):/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||n:n}function s(t){1>p.length&&t.length?t.not("body").blur():p.first().focus()}function n(t){if(l.is(":visible")){var e,i=o(t.target),n=r.tooltip,h=i.closest(G);e=1>h.length?S:parseInt(h[0].style.zIndex,10)>parseInt(n[0].style.zIndex,10),e||i.closest(G)[0]===n[0]||s(i),a=t.target===p[p.length-1]}}var r,a,h,l,c=this,p={};o.extend(c,{init:function(){function i(){var t=o(this);l.css({height:t.height(),width:t.width()})}return l=c.elem=o("
",{id:"qtip-overlay",html:"
",mousedown:function(){return S}}).hide(),o(t).bind("resize"+xe,i),i(),o(e.body).bind("focusin"+xe,n),o(e).bind("keydown"+xe,function(t){r&&r.options.show.modal.escape&&27===t.keyCode&&r.hide(t)}),l.bind("click"+xe,function(t){r&&r.options.show.modal.blur&&r.hide(t)}),c},update:function(t){r=t,p=t.options.show.modal.stealfocus!==S?t.tooltip.find("*").filter(function(){return i(this)}):[]},toggle:function(t,i,n){var a=(o(e.body),t.tooltip),p=t.options.show.modal,d=p.effect,u=i?"show":"hide",f=l.is(":visible"),g=o(xe).filter(":visible:not(:animated)").not(a);return c.update(t),i&&p.stealfocus!==S&&s(o(":focus")),l.toggleClass("blurs",p.blur),i&&l.css({left:0,top:0}).appendTo(e.body),l.is(":animated")&&f===i&&h!==S||!i&&g.length?c:(l.stop(M,S),o.isFunction(d)?d.call(l,i):d===S?l[u]():l.fadeTo(parseInt(n,10)||90,i?1:0,function(){i||l.hide()}),i||l.queue(function(t){l.css({left:"",top:""}),o(xe).length||l.detach(),t()}),h=i,r.destroyed&&(r=E),c)}}),c.init()},be=new be,o.extend(_.prototype,{init:function(t){var e=t.tooltip;return this.options.on?(t.elements.overlay=be.elem,e.addClass(we).css("z-index",N.modal.zindex+o(xe).length),t._bind(e,["tooltipshow","tooltiphide"],function(t,i,s){var n=t.originalEvent;if(t.target===e[0])if(n&&"tooltiphide"===t.type&&/mouse(leave|enter)/.test(n.type)&&o(n.relatedTarget).closest(overlay[0]).length)try{t.preventDefault()}catch(r){}else(!n||n&&!n.solo)&&this.toggle(t,"tooltipshow"===t.type,s)},this._ns,this),t._bind(e,"tooltipfocus",function(t,i){if(!t.isDefaultPrevented()&&t.target===e[0]){var s=o(xe),n=N.modal.zindex+s.length,r=parseInt(e[0].style.zIndex,10);be.elem[0].style.zIndex=n-1,s.each(function(){this.style.zIndex>r&&(this.style.zIndex-=1)}),s.filter("."+K).qtip("blur",t.originalEvent),e.addClass(K)[0].style.zIndex=n,be.update(i);try{t.preventDefault()}catch(a){}}},this._ns,this),t._bind(e,"tooltiphide",function(t){t.target===e[0]&&o(xe).filter(":visible").not(e).last().qtip("focus",t)},this._ns,this),s):this},toggle:function(t,e,i){return t&&t.isDefaultPrevented()?this:(be.toggle(this.qtip,!!e,i),s)},destroy:function(){this.qtip.tooltip.removeClass(we),this.qtip._unbind(this.qtip.tooltip,this._ns),be.toggle(this.qtip,S),delete this.qtip.elements.overlay}}),ye=N.modal=function(t){return new _(t,t.options.show.modal)},ye.sanitize=function(t){t.show&&("object"!=typeof t.show.modal?t.show.modal={on:!!t.show.modal}:t.show.modal.on===s&&(t.show.modal.on=M))},ye.zindex=T.zindex-200,ye.initialize="render",z.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},o.extend(M,T.defaults,{show:{modal:{on:S,effect:M,blur:M,stealfocus:M,escape:M}}}),N.viewport=function(i,s,o,n,r,a,h){function l(t,e,i,o,n,r,a,h,l){var c=s[n],d=g[t],u=m[t],f=i===F,v=-_.offset[n]+x.offset[n]+x["scroll"+n],y=d===n?l:d===r?-l:-l/2,b=u===n?h:u===r?-h:-h/2,w=T&&T.size?T.size[a]||0:0,q=T&&T.corner&&T.corner.precedance===t&&!f?w:0,C=v-c+q,j=c+l-x[a]-v+q,z=y-(g.precedance===t||d===g[e]?b:0)-(u===D?h/2:0);return f?(q=T&&T.corner&&T.corner.precedance===e?w:0,z=(d===n?1:-1)*y-q,s[n]+=C>0?C:j>0?-j:0,s[n]=Math.max(-_.offset[n]+x.offset[n]+(q&&T.corner[t]===D?T.offset:0),c-z,Math.min(Math.max(-_.offset[n]+x.offset[n]+x[a],c+z),s[n]))):(o*=i===A?2:0,C>0&&(d!==n||j>0)?(s[n]-=z+o,p.invert(t,n)):j>0&&(d!==r||C>0)&&(s[n]-=(d===D?-z:z)+o,p.invert(t,r)),v>s[n]&&-s[n]>j&&(s[n]=c,p=g.clone())),s[n]-c}var c,p,d,u=o.target,f=i.elements.tooltip,g=o.my,m=o.at,v=o.adjust,y=v.method.split(" "),b=y[0],w=y[1]||y[0],x=o.viewport,_=o.container,q=i.cache,T=i.plugins.tip,C={left:0,top:0};return x.jquery&&u[0]!==t&&u[0]!==e.body&&"none"!==v.method?(c="fixed"===f.css("position"),x={elem:x,width:x[0]===t?x.width():x.outerWidth(S),height:x[0]===t?x.height():x.outerHeight(S),scrollleft:c?0:x.scrollLeft(),scrolltop:c?0:x.scrollTop(),offset:x.offset()||{left:0,top:0}},_={elem:_,scrollLeft:_.scrollLeft(),scrollTop:_.scrollTop(),offset:_.offset()||{left:0,top:0}},("shift"!==b||"shift"!==w)&&(p=g.clone()),C={left:"none"!==b?l(O,R,b,v.x,L,V,I,n,a):0,top:"none"!==w?l(R,O,w,v.y,B,P,k,r,h):0},p&&q.lastClass!==(d=$+"-pos-"+p.abbrev())&&f.removeClass(i.cache.lastClass).addClass(i.cache.lastClass=d),C):C},N.polys={polygon:function(t,e){var i,s,o,n={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:S},r=0,a=[],h=1,l=1,c=0,p=0;for(r=t.length;r--;)i=[parseInt(t[--r],10),parseInt(t[r+1],10)],i[0]>n.position.right&&(n.position.right=i[0]),i[0]n.position.bottom&&(n.position.bottom=i[1]),i[1]0&&o>0&&h>0&&l>0;)for(s=Math.floor(s/2),o=Math.floor(o/2),e.x===L?h=s:e.x===V?h=n.width-s:h+=Math.floor(s/2),e.y===B?l=o:e.y===P?l=n.height-o:l+=Math.floor(o/2),r=a.length;r--&&!(2>a.length);)c=a[r][0]-n.position.left,p=a[r][1]-n.position.top,(e.x===L&&c>=h||e.x===V&&h>=c||e.x===D&&(h>c||c>n.width-h)||e.y===B&&p>=l||e.y===P&&l>=p||e.y===D&&(l>p||p>n.height-l))&&a.splice(r,1);n.position={left:a[0][0],top:a[0][1]}}return n},rect:function(t,e,i,s){return{width:Math.abs(i-t),height:Math.abs(s-e),position:{left:Math.min(t,i),top:Math.min(e,s)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(t,e,i,s,o){var n=N.polys._angles[o.abbrev()],r=i*Math.cos(n*Math.PI),a=s*Math.sin(n*Math.PI);return{width:2*i-Math.abs(r),height:2*s-Math.abs(a),position:{left:t+r,top:e+a},adjustable:S}},circle:function(t,e,i,s){return N.polys.ellipse(t,e,i,i,s)}},N.svg=function(t,s,n){for(var r,a,h,l=o(e),c=s[0],p={};!c.getBBox;)c=c.parentNode;if(!c.getBBox||!c.parentNode)return S;switch(c.nodeName){case"rect":a=N.svg.toPixel(c,c.x.baseVal.value,c.y.baseVal.value),h=N.svg.toPixel(c,c.x.baseVal.value+c.width.baseVal.value,c.y.baseVal.value+c.height.baseVal.value),p=N.polys.rect(a[0],a[1],h[0],h[1],n);break;case"ellipse":case"circle":a=N.svg.toPixel(c,c.cx.baseVal.value,c.cy.baseVal.value),p=N.polys.ellipse(a[0],a[1],(c.rx||c.r).baseVal.value,(c.ry||c.r).baseVal.value,n);break;case"line":case"polygon":case"polyline":for(points=c.points||[{x:c.x1.baseVal.value,y:c.y1.baseVal.value},{x:c.x2.baseVal.value,y:c.y2.baseVal.value}],p=[],i=-1,len=points.numberOfItems||points.length;len>++i;)next=points.getItem?points.getItem(i):points[i],p.push.apply(p,N.svg.toPixel(c,next.x,next.y));p=N.polys.polygon(p,n);break;default:if(r=c.getBBox(),mtx=c.getScreenCTM(),root=c.farthestViewportElement||c,!root.createSVGPoint)return S;point=root.createSVGPoint(),point.x=r.x,point.y=r.y,tPoint=point.matrixTransform(mtx),p.position={left:tPoint.x,top:tPoint.y},point.x+=r.width,point.y+=r.height,tPoint=point.matrixTransform(mtx),p.width=tPoint.x-p.position.left,p.height=tPoint.y-p.position.top}return p.position.left+=l.scrollLeft(),p.position.top+=l.scrollTop(),p},N.svg.toPixel=function(t,e,i){var s,o,n=t.getScreenCTM(),r=t.farthestViewportElement||t;return r.createSVGPoint?(o=r.createSVGPoint(),o.x=e,o.y=i,s=o.matrixTransform(n),[s.x,s.y]):S},N.imagemap=function(t,e,i){e.jquery||(e=o(e));var s,n,r,a=e.attr("shape").toLowerCase().replace("poly","polygon"),h=o('img[usemap="#'+e.parent("map").attr("name")+'"]'),l=e.attr("coords"),c=l.split(",");if(!h.length)return S;if("polygon"===a)result=N.polys.polygon(c,i);else{if(!N.polys[a])return S;for(r=-1,len=c.length,n=[];len>++r;)n.push(parseInt(c[r],10));result=N.polys[a].apply(this,n.concat(i))}return s=h.offset(),s.left+=Math.ceil((h.outerWidth(S)-h.width())/2),s.top+=Math.ceil((h.outerHeight(S)-h.height())/2),result.position.left+=s.left,result.position.top+=s.top,result};var _e,qe='';o.extend(q.prototype,{_scroll:function(){var e=this.qtip.elements.overlay;e&&(e[0].style.top=o(t).scrollTop()+"px")},init:function(i){var s=i.tooltip;1>o("select, object").length&&(this.bgiframe=i.elements.bgiframe=o(qe).appendTo(s),i._bind(s,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=o("
",{id:$+"-rcontainer"}).appendTo(e.body),i.elements.overlay&&i.elements.overlay.addClass("qtipmodal-ie6fix")&&(i._bind(t,["scroll","resize"],this._scroll,this._ns,this),i._bind(s,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var t,e,i=this.qtip.tooltip,s={height:i.outerHeight(S),width:i.outerWidth(S)},o=this.qtip.plugins.tip,n=this.qtip.elements.tip;e=parseInt(i.css("borderLeftWidth"),10)||0,e={left:-e,top:-e},o&&n&&(t="x"===o.corner.precedance?[I,L]:[k,B],e[t[1]]-=n[t[0]]()),this.bgiframe.css(e).css(s)},redraw:function(){if(1>this.qtip.rendered||this.drawing)return self;var t,e,i,s,o=this.qtip.tooltip,n=this.qtip.options.style,r=this.qtip.options.position.container;return this.qtip.drawing=1,n.height&&o.css(k,n.height),n.width?o.css(I,n.width):(o.css(I,"").appendTo(this.redrawContainer),e=o.width(),1>e%2&&(e+=1),i=o.css("maxWidth")||"",s=o.css("minWidth")||"",t=(i+s).indexOf("%")>-1?r.width()/100:0,i=(i.indexOf("%")>-1?t:1)*parseInt(i,10)||e,s=(s.indexOf("%")>-1?t:1)*parseInt(s,10)||0,e=i+s?Math.min(Math.max(e,s),i):e,o.css(I,Math.round(e)).appendTo(r)),this.drawing=0,self},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([t,this.qtip.tooltip],this._ns)}}),_e=N.ie6=function(t){return 6===BROWSER.ie?new q(t):S},_e.initialize="render",z.ie6={"^content|style$":function(){this.redraw()}}})})(window,document); \ No newline at end of file diff --git a/templates/base.tpl b/templates/base.tpl deleted file mode 100644 index 80c8569..0000000 --- a/templates/base.tpl +++ /dev/null @@ -1,108 +0,0 @@ - - - - MQWeb - <?= mqweb.qmgr ?> - - - - - - - - - - - - - - - - - - -
-
-
-
- - - - - - - Client Mode - - - Binding Mode - - -
- -
-
-
- - -
-
- - - diff --git a/templates/channel/head.tpl b/templates/channel/head.tpl deleted file mode 100644 index 4a7e275..0000000 --- a/templates/channel/head.tpl +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/templates/channel/index.tpl b/templates/channel/index.tpl deleted file mode 100644 index 617c361..0000000 --- a/templates/channel/index.tpl +++ /dev/null @@ -1,2 +0,0 @@ -
-
\ No newline at end of file diff --git a/templates/error.tpl b/templates/error.tpl deleted file mode 100644 index 8de93ed..0000000 --- a/templates/error.tpl +++ /dev/null @@ -1,26 +0,0 @@ - - - - MQWeb - ERROR - - - - - - -
- error -
- Object:
- Function:
- Code:
- Reason: - -
-
- - diff --git a/templates/events.tpl b/templates/events.tpl deleted file mode 100644 index af27f71..0000000 --- a/templates/events.tpl +++ /dev/null @@ -1,22 +0,0 @@ -

Events

- - - - - - - - - - - - - - - - - - -
DateReason
- - -
\ No newline at end of file diff --git a/templates/listener/head.tpl b/templates/listener/head.tpl deleted file mode 100644 index 4309120..0000000 --- a/templates/listener/head.tpl +++ /dev/null @@ -1,26 +0,0 @@ - - - - - diff --git a/templates/listener/index.tpl b/templates/listener/index.tpl deleted file mode 100644 index 617c361..0000000 --- a/templates/listener/index.tpl +++ /dev/null @@ -1,2 +0,0 @@ -
-
\ No newline at end of file diff --git a/templates/message/head.tpl b/templates/message/head.tpl deleted file mode 100644 index ef6b45e..0000000 --- a/templates/message/head.tpl +++ /dev/null @@ -1,24 +0,0 @@ - - - \ No newline at end of file diff --git a/templates/message/index.tpl b/templates/message/index.tpl deleted file mode 100644 index 617c361..0000000 --- a/templates/message/index.tpl +++ /dev/null @@ -1,2 +0,0 @@ -
-
\ No newline at end of file diff --git a/templates/qmgr/head.tpl b/templates/qmgr/head.tpl deleted file mode 100644 index d5e03bc..0000000 --- a/templates/qmgr/head.tpl +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - diff --git a/templates/qmgr/index.tpl b/templates/qmgr/index.tpl deleted file mode 100644 index 6126b3a..0000000 --- a/templates/qmgr/index.tpl +++ /dev/null @@ -1,202 +0,0 @@ -
-
-
-

QueueManager {{ qmgr.QMgrName.value }}

- briefcase - z/OS -
-

- {{qmgr.QMgrDesc.value}} -

- -
-
-

QueueManager ID

-
{{qmgr.QMgrIdentifier.value}}
-
-
-

Creation Date

-
- {{qmgr.CreationDate.value}} {{qmgr.CreationTime.value}} -
-
-
-

Alteration Date

-
- {{qmgr.AlterationDate.value}} {{qmgr.AlterationTime.value}} -
-
-
-

Platform

-
- {{qmgr.Platform.display}} -
-
-
-

Coded Characterset ID

-
- {{qmgr.CodedCharSetID.value}} -
-
-
-

Dead Letter Queue

- -
-
-

Dead Letter Queue

-
- error - There is no dead letter queue defined. It's recommended to have one! -
-
-
-
-
-
-
- It took {{mqweb.elapsed}} seconds to create this output. -
-
-
- - -
-
-
-
-
- Reload -

Local Queues

- - - - - - - - - - -
QueueDepth
{{ queue.QName.value }}{{ queue.CurrentQDepth.value | number }}
-

- There are no local queues which contains messages. System queues were discarded in this view. -

-

-
-
-
-
-
-
- Reload -

Transmission Queues

- - - - - - - - - - -
QueueDepth
{{ queue.QName.value }}{{ queue.CurrentQDepth.value | number : 0 }}
-

- All transmission queues are empty. -

-
-

-
-
-
-
-
- Reload -

Channel Status

- - - - - - - - - - - -
ChannelStatus
- The channel {{status.ChannelName.value}} has status Retrying - The channel {{status.ChannelName.value}} has status Stopped' } - The channel {{status.ChannelName.value}} has status Running' } - The channel {{status.ChannelName.value}} has status {{status.ChannelStatus.display}} - {{status.ChannelName.value}}{{ status.ChannelStatus.display }}
-

- No channel status found. -

-
-

-
-
-
-
-
-
-
-
- Reload -

SYSTEM.ADMIN.QMGR.EVENT

- - - - - - - - - - - - - - -
DateReason
{{item.message.PutDate}}{{item.event.reason.code}} -
{{item.event.reason.desc}}
-
-
-

- No event messages found. -

-

- Number of messages on this queue: {{ curdepth }}
- Only the first {{ events.length }} messages are shown. Use queue detail page to browse all messages. -

-
-
-
-
-
- -
-
diff --git a/templates/queue/head.tpl b/templates/queue/head.tpl deleted file mode 100644 index c8f0b36..0000000 --- a/templates/queue/head.tpl +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/templates/queue/index.tpl b/templates/queue/index.tpl deleted file mode 100644 index 617c361..0000000 --- a/templates/queue/index.tpl +++ /dev/null @@ -1,2 +0,0 @@ -
-
\ No newline at end of file From 8c1d23f21071b1402c1ba126e0ebd08d6536b035 Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 24 Dec 2015 18:59:00 +0100 Subject: [PATCH 02/60] Working on mqwebapp functionalities --- ...icRequestHandler.h => AppRequestHandler.h} | 13 ++- .../{WebController.h => MQWebController.h} | 47 +++----- ...questHandler.cpp => AppRequestHandler.cpp} | 11 +- MQWeb/src/Application.cpp | 49 ++------- MQWeb/src/ControllerRequestHandler.cpp | 36 +++---- MQWeb/src/MQWebController.cpp | 90 ++++++++++++++++ MQWeb/src/RequestHandlerFactory.cpp | 8 +- MQWeb/src/WebController.cpp | 100 ------------------ 8 files changed, 145 insertions(+), 209 deletions(-) rename MQWeb/include/MQ/Web/{StaticRequestHandler.h => AppRequestHandler.h} (72%) rename MQWeb/include/MQ/Web/{WebController.h => MQWebController.h} (54%) rename MQWeb/src/{StaticRequestHandler.cpp => AppRequestHandler.cpp} (92%) create mode 100644 MQWeb/src/MQWebController.cpp delete mode 100644 MQWeb/src/WebController.cpp diff --git a/MQWeb/include/MQ/Web/StaticRequestHandler.h b/MQWeb/include/MQ/Web/AppRequestHandler.h similarity index 72% rename from MQWeb/include/MQ/Web/StaticRequestHandler.h rename to MQWeb/include/MQ/Web/AppRequestHandler.h index 1db7bf2..2cee551 100644 --- a/MQWeb/include/MQ/Web/StaticRequestHandler.h +++ b/MQWeb/include/MQ/Web/AppRequestHandler.h @@ -19,8 +19,8 @@ * permissions and limitations under the Licence. */ -#ifndef _MQWeb_StaticRequestHandler_H -#define _MQWeb_StaticRequestHandler_H +#ifndef _MQWeb_AppRequestHandler_H +#define _MQWeb_AppRequestHandler_H #include "Poco/Net/HTTPRequestHandler.h" @@ -29,12 +29,11 @@ namespace MQ namespace Web { -class StaticRequestHandler: public Poco::Net::HTTPRequestHandler - /// An HTTPRequestHandler which returns static content like images, html, css, ... - /// All static content is resolved against the mq.web.static property. +class AppRequestHandler: public Poco::Net::HTTPRequestHandler + /// An HTTPRequestHandler which handles requests for the MQWeb App { public: - StaticRequestHandler(); + AppRequestHandler(); /// Constructor void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response); @@ -43,4 +42,4 @@ class StaticRequestHandler: public Poco::Net::HTTPRequestHandler } } // Namespace MQ::Web -#endif // _MQWeb_StaticRequestHandler_H +#endif // _MQWeb_AppRequestHandler_H diff --git a/MQWeb/include/MQ/Web/WebController.h b/MQWeb/include/MQ/Web/MQWebController.h similarity index 54% rename from MQWeb/include/MQ/Web/WebController.h rename to MQWeb/include/MQ/Web/MQWebController.h index fbbc57c..3081dce 100644 --- a/MQWeb/include/MQ/Web/WebController.h +++ b/MQWeb/include/MQ/Web/MQWebController.h @@ -19,66 +19,47 @@ * permissions and limitations under the Licence. */ -#ifndef _MQWeb_WebController_h -#define _MQWeb_WebController_h +#ifndef _MQWeb_MQWebController_h +#define _MQWeb_MQWebController_h -#include "MQ/Web/MQController.h" +#include "MQ/Web/Controller.h" #include "MQ/Web/MapInitializer.h" namespace MQ { namespace Web { -class WebController : public MQController - /// Controller that shows the details of a queue +class MQWebController : public Controller + /// Controller that shows the details of MQWeb { public: - WebController(); + MQWebController(); /// Constructor - virtual ~WebController(); + virtual ~MQWebController(); /// Destructor virtual const std::map& getActions() const; /// Returns all available actions - bool isJSON() const; + void inquire(); - void qmgr(); - - void queue(); - - void channel(); - - void chstatus(); - - void listener(); - - void lstatus(); - - void message(); + void list(); private: }; -inline const Controller::ActionMap& WebController::getActions() const +inline const Controller::ActionMap& MQWebController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer - ("qmgr", static_cast(&WebController::qmgr)) - ("queue", static_cast(&WebController::queue)) - ("channel", static_cast(&WebController::channel)) - ("listener", static_cast(&WebController::listener)) - ("message", static_cast(&WebController::message)) + ("inquire", static_cast(&MQWebController::inquire)) + ("list", static_cast(&MQWebController::list)) ; return actions; } -inline bool WebController::isJSON() const -{ - return false; -} } } // Namespace MQ::Web -#endif // _MQWeb_WebController_h +#endif // _MQWeb_MQWebController_h diff --git a/MQWeb/src/StaticRequestHandler.cpp b/MQWeb/src/AppRequestHandler.cpp similarity index 92% rename from MQWeb/src/StaticRequestHandler.cpp rename to MQWeb/src/AppRequestHandler.cpp index eb51c10..e04d35a 100644 --- a/MQWeb/src/StaticRequestHandler.cpp +++ b/MQWeb/src/AppRequestHandler.cpp @@ -19,7 +19,7 @@ * permissions and limitations under the Licence. */ -#include "MQ/Web/StaticRequestHandler.h" +#include "MQ/Web/AppRequestHandler.h" #include "Poco/Net/HTTPRequestHandlerFactory.h" #include "Poco/Net/HTTPServerRequest.h" @@ -38,11 +38,11 @@ namespace MQ namespace Web { -StaticRequestHandler::StaticRequestHandler() +AppRequestHandler::AppRequestHandler() { } -void StaticRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) +void AppRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) { // Check for the favicon.ico request, we don't have one for now, // so set status code to HTTP_NOT_FOUND @@ -58,10 +58,11 @@ void StaticRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::URI uri(request.getURI()); Poco::Util::Application& app = Poco::Util::Application::instance(); - std::string staticPathname = app.config().getString("mq.web.static", ""); + std::string staticPathname = app.config().getString("mq.web.app", ""); if ( staticPathname.empty() ) { - staticPathname = app.config().getString("application.dir"); + response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND); + response.send(); } if ( ! staticPathname.empty() ) diff --git a/MQWeb/src/Application.cpp b/MQWeb/src/Application.cpp index aa36dc0..e391bb1 100644 --- a/MQWeb/src/Application.cpp +++ b/MQWeb/src/Application.cpp @@ -168,55 +168,28 @@ int MQWebApplication::main(const std::vector& args) _cache.setLogger(logger); - if ( config().has("mq.web.templates") ) + // Check the web app path configuration (mq.web.app) + if ( config().has("mq.web.app") ) { - Poco::Path templatePath; - std::string templatesValue; + Poco::Path appPath; + std::string appValue; try { - templatesValue = config().getString("mq.web.templates"); - templatesValue = config().expand(templatesValue); - templatePath.assign(templatesValue); - templatePath.makeDirectory(); + appValue = config().getString("mq.web.app"); + appValue = config().expand(appValue); + appPath.assign(appValue); + appPath.makeDirectory(); } catch(Poco::PathSyntaxException&) { - poco_fatal_f1(logger, "Invalid path specified for mq.web.templates: %s", templatesValue); + poco_fatal_f1(logger, "Invalid path specified for mq.web.app: %s", appValue); return Application::EXIT_CONFIG; } - Poco::File file(templatePath); + Poco::File file = Poco::File(appPath); if ( !file.exists() ) { - poco_fatal_f1(logger, "Template path %s doesn't exist! Check the configuration file.", templatePath.toString()); - return Application::EXIT_CONFIG; - } - - _cache.addPath(templatePath); - } - - // Check the static path configuration (mq.web.static) - if ( config().has("mq.web.static") ) - { - Poco::Path staticPath; - std::string staticValue; - try - { - staticValue = config().getString("mq.web.static"); - staticValue = config().expand(staticValue); - staticPath.assign(staticValue); - staticPath.makeDirectory(); - } - catch(Poco::PathSyntaxException&) - { - poco_fatal_f1(logger, "Invalid path specified for mq.web.static: %s", staticValue); - return Application::EXIT_CONFIG; - } - - Poco::File file = Poco::File(staticPath); - if ( !file.exists() ) - { - poco_fatal_f1(logger, "Path for static files %s doesn't exist! Check the configuration file.", staticPath.toString()); + poco_fatal_f1(logger, "Path for static files %s doesn't exist! Check the configuration file.", appPath.toString()); return Application::EXIT_CONFIG; } } diff --git a/MQWeb/src/ControllerRequestHandler.cpp b/MQWeb/src/ControllerRequestHandler.cpp index 6263c34..db543fd 100644 --- a/MQWeb/src/ControllerRequestHandler.cpp +++ b/MQWeb/src/ControllerRequestHandler.cpp @@ -19,7 +19,7 @@ * permissions and limitations under the Licence. */ #include "MQ/Web/ControllerRequestHandler.h" -#include "MQ/Web/WebController.h" +#include "MQ/Web/AppRequestHandler.h" #include "MQ/Web/AuthenticationInformationController.h" #include "MQ/Web/AuthorityRecordController.h" #include "MQ/Web/AuthorityServiceController.h" @@ -31,6 +31,7 @@ #include "MQ/Web/ListenerController.h" #include "MQ/Web/ListenerStatusController.h" #include "MQ/Web/MessageController.h" +#include "MQ/Web/MQWebController.h" #include "MQ/Web/NamelistController.h" #include "MQ/Web/ProcessController.h" #include "MQ/Web/QueueController.h" @@ -61,29 +62,19 @@ void ControllerRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& reque std::vector paths; uri.getPathSegments(paths); - std::string controllerType; - std::string controllerName; - if ( paths.size() == 0 ) // Use the default controller type - { - controllerType = "web"; - } - else - { - controllerType = paths.front(); - paths.erase(paths.begin()); + if ( paths.size() == 0 ) { + response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Invalid path specified in URL. Did you specified api?"); + response.send(); + return; } + std::string controllerType = paths.front(); + paths.erase(paths.begin()); + + std::string controllerName; + Poco::SharedPtr controller; - if ( controllerType.compare("web") == 0 ) - { - controller = new WebController(); - if ( paths.size() == 0 ) - { - paths.push_back("qmgr"); // Default qmgr - } - controller->handle(paths, request, response); - } - else if ( controllerType.compare("api") == 0 ) + if ( controllerType.compare("api") == 0 ) { if ( paths.size() == 0 ) { @@ -108,7 +99,7 @@ void ControllerRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& reque } else { - response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Only web or api are allowed as controller type"); + response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Only api is allowed as controller type"); response.send(); } } @@ -138,6 +129,7 @@ void ControllerRequestHandler::registerControllers() _controllerFactory.registerClass("tpstatus"); _controllerFactory.registerClass("authservice"); _controllerFactory.registerClass("chinit"); + _controllerFactory.registerClass("mqweb"); } diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp new file mode 100644 index 0000000..ae15a5a --- /dev/null +++ b/MQWeb/src/MQWebController.cpp @@ -0,0 +1,90 @@ +/* + * Copyright 2010 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ +#include "Poco/JSON/Object.h" +#include "Poco/Util/Application.h" + +#include "MQ/Web/MQWebController.h" +#include "MQ/Web/Version.h" +#include "MQ/MQSubsystem.h" + +namespace MQ +{ +namespace Web +{ + + +MQWebController::MQWebController() : Controller() +{ +} + + +MQWebController::~MQWebController() +{ +} + + +void MQWebController::inquire() +{ + Poco::JSON::Object::Ptr mqweb = new Poco::JSON::Object(); + set("mqweb", mqweb); + + Poco::JSON::Object::Ptr version = new Poco::JSON::Object(); + mqweb->set("version", version); + + version->set("major", MQWEB_VERSION_MAJOR); + version->set("minor", MQWEB_VERSION_MINOR); + version->set("release", MQWEB_RELEASE_NUMBER); + version->set("short", MQWEB_VERSION); + version->set("complete", MQWEB_COMPLETE_VERSION); + + Poco::JSON::Object::Ptr date = new Poco::JSON::Object(); + mqweb->set("date", date); + date->set("start", Poco::DateTimeFormatter::format(Poco::Timestamp(), Poco::DateTimeFormat::HTTP_FORMAT)); + + MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); + Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); + mqweb->set("client", mqSystem.client()); +} + +void MQWebController::list() +{ + Poco::JSON::Array::Ptr queuemanagers = new Poco::JSON::Array(); + set("queuemanagers", queuemanagers); + + MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); + Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); + if ( mqSystem.client() ) + { + Poco::Util::AbstractConfiguration::Keys qmgrs; + config.keys("mq.web.qmgr", qmgrs); + + for(Poco::Util::AbstractConfiguration::Keys::iterator it = qmgrs.begin(); it != qmgrs.end(); ++it) + { + queuemanagers->add(*it); + } + } + else + { + } +} + +}} // Namespace MQ::Web + diff --git a/MQWeb/src/RequestHandlerFactory.cpp b/MQWeb/src/RequestHandlerFactory.cpp index 7ae111f..39182d2 100644 --- a/MQWeb/src/RequestHandlerFactory.cpp +++ b/MQWeb/src/RequestHandlerFactory.cpp @@ -19,7 +19,7 @@ * permissions and limitations under the Licence. */ #include "MQ/Web/RequestHandlerFactory.h" -#include "MQ/Web/StaticRequestHandler.h" +#include "MQ/Web/AppRequestHandler.h" #include "MQ/Web/DenyRequestHandler.h" #include "MQ/Web/WebSocketRequestHandler.h" #include "MQ/Web/ControllerRequestHandler.h" @@ -41,7 +41,7 @@ RequestHandlerFactory::RequestHandlerFactory() : Poco::Net::HTTPRequestHandlerFa Poco::Net::HTTPRequestHandler* RequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest& request) { - static std::string staticURI = "/static"; + static std::string appURI = "/web"; std::string uri = request.getURI(); Poco::Logger& logger = Poco::Logger::get("mq.web.access"); @@ -58,10 +58,10 @@ Poco::Net::HTTPRequestHandler* RequestHandlerFactory::createRequestHandler(const return new WebSocketRequestHandler(); } - if ( ! uri.compare(0, staticURI.size(), staticURI) + if ( ! uri.compare(0, appURI.size(), appURI) || ! uri.compare("/favicon.ico") ) { - return new StaticRequestHandler(); + return new AppRequestHandler(); } return new ControllerRequestHandler(); diff --git a/MQWeb/src/WebController.cpp b/MQWeb/src/WebController.cpp deleted file mode 100644 index bc1f8c3..0000000 --- a/MQWeb/src/WebController.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "MQ/Web/WebController.h" -#include "MQ/Web/MultiView.h" -#include "MQ/Web/JSONView.h" - -namespace MQ -{ -namespace Web -{ - - -WebController::WebController() : MQController() -{ -} - - -WebController::~WebController() -{ -} - - -void WebController::qmgr() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("qmgr/head.tpl")); - multiView->add("main", new TemplateView("qmgr/index.tpl")); - setView(multiView); -} - - -void WebController::queue() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("queue/head.tpl")); - multiView->add("main", new TemplateView("queue/index.tpl")); - setView(multiView); -} - - -void WebController::channel() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("channel/head.tpl")); - multiView->add("main", new TemplateView("channel/index.tpl")); - setView(multiView); -} - - -void WebController::listener() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("listener/head.tpl")); - multiView->add("main", new TemplateView("listener/index.tpl")); - setView(multiView); -} - - -void WebController::message() -{ - std::vector parameters = getParameters(); - if ( parameters.size() < 2 ) - { - setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Missing URI parameters"); - return; - } - - mqwebData().set("queue", parameters[1]); - std::string messageId; - if ( parameters.size() > 2 ) - { - messageId = parameters[2]; - mqwebData().set("messageId", messageId); - } - - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("message/head.tpl")); - multiView->add("main", new TemplateView("message/index.tpl")); - setView(multiView); -} - -} } // Namespace MQ::Web From ca2d9d8b13a1ece342aee75e8463c61beff1f3d2 Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 4 Jan 2016 18:14:57 +0100 Subject: [PATCH 03/60] Remove kdev4 files from repo --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 78836f5..e44b7e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /bin/ /build/ /.project +*.kdev4 From 534943d06815563efdab69a4d0662c69ee51c496 Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 4 Jan 2016 18:15:48 +0100 Subject: [PATCH 04/60] Remove kdev4 files from repo --- .kdev4/_custom.kdev4 | 19 ------------------- .kdev4/mqweb.kdev4 | 27 --------------------------- mqweb.kdev4 | 3 --- 3 files changed, 49 deletions(-) delete mode 100644 .kdev4/_custom.kdev4 delete mode 100644 .kdev4/mqweb.kdev4 delete mode 100644 mqweb.kdev4 diff --git a/.kdev4/_custom.kdev4 b/.kdev4/_custom.kdev4 deleted file mode 100644 index 47efd45..0000000 --- a/.kdev4/_custom.kdev4 +++ /dev/null @@ -1,19 +0,0 @@ -[Containments][1] -ActionPluginsSource=Global -activity=mqweb -activityId= -desktop=-1 -formfactor=0 -geometry=0,0,1128,486 -immutability=1 -lastDesktop=-1 -lastScreen=0 -location=0 -orientation=2 -plugin=newspaper -screen=0 -zvalue=0 - -[Project] -Manager=KDevCMakeManager -Name=mqweb diff --git a/.kdev4/mqweb.kdev4 b/.kdev4/mqweb.kdev4 deleted file mode 100644 index 6f83eed..0000000 --- a/.kdev4/mqweb.kdev4 +++ /dev/null @@ -1,27 +0,0 @@ -[Buildset] -BuildItems=@Variant(\x00\x00\x00\t\x00\x00\x00\x00\x01\x00\x00\x00\x0b\x00\x00\x00\x00\x01\x00\x00\x00\n\x00m\x00q\x00w\x00e\x00b) - -[CMake] -Build Directory Count=1 -Current Build Directory Index=0 -ProjectRootRelative=./ - -[CMake][CMake Build Directory 0] -Build Directory Path=file:///home/bronx/development/mqweb/build -Build Type=Debug -CMake Binary=file:///usr/bin/cmake -Environment Profile= -Install Directory=file:///usr/local - -[CustomDefinesAndIncludes][ProjectPath0] -Defines=\x00\x00\x00\x00 -Includes=\x00\x00\x00\x00 -Path=. - -[Defines And Includes][Compiler] -Name=GCC -Path=gcc -Type=GCC - -[Project] -VersionControlSupport=kdevgit diff --git a/mqweb.kdev4 b/mqweb.kdev4 deleted file mode 100644 index c03293c..0000000 --- a/mqweb.kdev4 +++ /dev/null @@ -1,3 +0,0 @@ -[Project] -Manager=KDevCMakeManager -Name=mqweb From ff61e24cc6be9569d6b41f439863bfddb2a54090 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 27 Jan 2016 14:08:31 +0100 Subject: [PATCH 05/60] Start working on support for Topics --- MQ/include/MQ/Message.h | 24 ++++--- MQ/include/MQ/QueueManager.h | 3 +- MQ/include/MQ/Topic.h | 111 +++++++++++++++++++++++++++++ MQ/src/Topic.cpp | 134 +++++++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+), 12 deletions(-) create mode 100644 MQ/include/MQ/Topic.h create mode 100644 MQ/src/Topic.cpp diff --git a/MQ/include/MQ/Message.h b/MQ/include/MQ/Message.h index 7303b39..a1bdb7f 100644 --- a/MQ/include/MQ/Message.h +++ b/MQ/include/MQ/Message.h @@ -46,13 +46,13 @@ class Message /// Constructor. Note: Message doesn't own the buffer. In this case /// the Buffer class only acts as a wrapper around the externally /// supplied memory. - + Buffer& buffer(); /// Returns the buffer used for storing the content of the message. const Buffer& buffer() const; /// Returns a const reference to the content of the message. - + void clear(); /// Clears the content and the fields of the message. @@ -63,8 +63,8 @@ class Message Buffer::Ptr accountingToken() const; /// Returns the account token as a Buffer. This is the - /// const version. The buffer is a copy, which means - /// you can resize and change it, but the orginal account + /// const version. The buffer is a copy, which means + /// you can resize and change it, but the orginal account /// token will not be changed. std::string getApplIdentityData() const; @@ -89,8 +89,8 @@ class Message Buffer::Ptr correlationId() const; /// Returns the correlation id as a Buffer. This is the - /// const version. The buffer is a copy, which means - /// you can resize and change it, but the orginal correlation + /// const version. The buffer is a copy, which means + /// you can resize and change it, but the orginal correlation /// id will not be changed. MQLONG getCodedCharSetId() const; @@ -104,7 +104,7 @@ class Message MQLONG getEncoding() const; /// Gets the encoding - + void setEncoding(MQLONG encoding); /// Sets the encoding @@ -133,8 +133,8 @@ class Message Buffer::Ptr groupId() const; /// Returns the group id as a Buffer. This is the - /// const version. The buffer is a copy, which means - /// you can resize and change it, but the orginal group + /// const version. The buffer is a copy, which means + /// you can resize and change it, but the orginal group /// id will not be changed. MQLONG getMsgFlags() const; @@ -150,8 +150,8 @@ class Message Buffer::Ptr messageId() const; /// Returns the message id as a Buffer. This is the - /// const version. The buffer is a copy, which means - /// you can resize and change it, but the orginal message + /// const version. The buffer is a copy, which means + /// you can resize and change it, but the orginal message /// id will not be changed. MQLONG getMsgSeqNumber() const; @@ -246,6 +246,8 @@ class Message friend class Queue; friend class MessageConsumer; + + friend class Topic; }; diff --git a/MQ/include/MQ/QueueManager.h b/MQ/include/MQ/QueueManager.h index 8c23ad3..126416c 100644 --- a/MQ/include/MQ/QueueManager.h +++ b/MQ/include/MQ/QueueManager.h @@ -74,7 +74,7 @@ class QueueManager /// Returns true when the queuemanager is connected. CommandServer* createCommandServer(const std::string& replyQ); - /// Create a command server. Once created, you can use commandServer to + /// Create a command server. Once created, you can use commandServer to /// get the associated command server. Can throw an MQException. The /// QueueManager instance is responsible for the CommandServer object /// and will destroy it when the queuemanager is disconnected. @@ -120,6 +120,7 @@ class QueueManager friend class Queue; friend class MessageConsumer; + friend class Topic; }; diff --git a/MQ/include/MQ/Topic.h b/MQ/include/MQ/Topic.h new file mode 100644 index 0000000..d984997 --- /dev/null +++ b/MQ/include/MQ/Topic.h @@ -0,0 +1,111 @@ +/* + * Copyright 2010 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ + +#ifndef _MQ_Topic_H +#define _MQ_Topic_H + +#include + +#include "Poco/SharedPtr.h" +#include "Poco/String.h" + +#include +#include +#include + +namespace MQ +{ +class QueueManager; +class Message; + +class Topic + /// Represents a Websphere MQ Topic to use for publish/subscribe +{ +public: + Topic(QueueManager& qmgr, const std::string& topic); + /// Constructor. Use this for a fixed topic. + + Topic(QueueManager& qmgr, const std::string& topic, const std::string& topicStr); + /// Constructor. Use this for a programmatically defined topic. + + virtual ~Topic(); + /// Destructor. Closes the topic when it is still open. + + void inquire(const std::vector& intSelectors, const std::map& charSelectors, std::map& intResult, std::map& charResult); + /// Inquire + + std::string name() const; + /// Returns the name of the topic. + + void open(long options); + /// Open the topic with the given options. Can throw an MQException. + + void close(); + /// Close the topic. Can throw an MQException. + + void publish(Message& msg, MQLONG options = MQPMO_NONE); + /// Publish a message to the topic. Can throw an MQException. + + std::string topicString() const; + /// Returns the topicstring + + std::string resultTopicString() const; + /// Returns the resolved topicstring + +private: + + QueueManager& _qmgr; + + MQHOBJ _handle; + + MQHOBJ handle() const; + + MQOD _od; + + std::string _topic; + + std::string _topicStr; + + std::string _resObjectStr; + + static MQOD _initialOD; + + friend class QueueManager; +}; + +inline MQHOBJ Topic::handle() const +{ + return _handle; +} + +inline std::string Topic::name() const +{ + return _topic; +} + +inline std::string Topic::resultTopicString() const +{ + return _resObjectStr; +} + +} // Namespace MQ + +#endif // _MQ_Topic_H diff --git a/MQ/src/Topic.cpp b/MQ/src/Topic.cpp new file mode 100644 index 0000000..4c2a84c --- /dev/null +++ b/MQ/src/Topic.cpp @@ -0,0 +1,134 @@ +/* + * Copyright 2010 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ +#include + +#include "Poco/Util/Application.h" + +#include "MQ/MQSubsystem.h" +#include "MQ/Topic.h" +#include "MQ/QueueManager.h" +#include "MQ/MQException.h" +#include "MQ/Message.h" + +namespace MQ +{ + +MQOD Topic::_initialOD = { MQOD_DEFAULT }; + +Topic::Topic(QueueManager& qmgr, const std::string& topic) + : _qmgr(qmgr) + , _handle(0) + , _od(_initialOD) + , _topic(topic) +{ + _od.ObjectType = MQOT_TOPIC; + strncpy(_od.ObjectName, topic.c_str(), MQ_Q_NAME_LENGTH); + _od.Version = MQOD_VERSION_4; +} + +Topic::Topic(QueueManager& qmgr, const std::string& topic, const std::string& topicStr) + : _qmgr(qmgr) + , _handle(0) + , _od(_initialOD) + , _topic(topic) + , _topicStr(topicStr) +{ + _od.ObjectType = MQOT_TOPIC; + strncpy(_od.ObjectName, topic.c_str(), MQ_Q_NAME_LENGTH); + _od.Version = MQOD_VERSION_4; + + _od.ObjectString.VSPtr = (MQPTR) _topicStr.c_str(); + _od.ObjectString.VSLength = (MQLONG) _topicStr.size(); +} + +Topic::~Topic() +{ + if ( _handle != 0 ) + { + try + { + close(); + } + catch(MQException&) + { + // Don't throw exceptions from a destructor + // See: http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.9 + } + } +} + +void Topic::open(long options) +{ + char resObjectString[MQ_TOPIC_STR_LENGTH]; + memset(resObjectString, 0, MQ_TOPIC_STR_LENGTH); + _od.ResObjectString.VSPtr = resObjectString; + _od.ResObjectString.VSBufSize = MQ_TOPIC_STR_LENGTH; + + MQ::MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); + _handle = mqSystem.functions().open(_qmgr.handle(), &_od, options); + + _resObjectStr = resObjectString; + _resObjectStr = Poco::trimRightInPlace(_resObjectStr); +} + +void Topic::close() +{ + if ( _handle != 0 ) + { + MQ::MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); + mqSystem.functions().close(_qmgr.handle(), &_handle, MQCO_NONE); + } +} + +void Topic::publish(Message& msg, MQLONG options) +{ + MQPMO pmo = { MQPMO_DEFAULT }; + pmo.Options = options; + + MQLONG size = (MQLONG) msg.buffer().size(); + + MQ::MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); + try + { + mqSystem.functions().put(_qmgr.handle(), _handle, msg.md(), &pmo, size, size > 0 ? msg.buffer().data() : NULL); + } + catch(MQException& mqe) + { + mqe.object(_topic); + throw; + } +} + +void Topic::inquire(const std::vector& intSelectors, const std::map& charSelectors, std::map& intResult, std::map& charResult) +{ + MQ::MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); + try + { + mqSystem.functions().inq(_qmgr.handle(), _handle, intSelectors, charSelectors, intResult, charResult); + } + catch(MQException& mqe) + { + mqe.object(_topic); + throw; + } +} + +} From d987f38fde646e0b466a3d0755c24b7251847a7c Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 27 Jan 2016 15:12:36 +0100 Subject: [PATCH 06/60] Working on publishing a message to a topic --- MQWeb/include/MQ/Web/MessageController.h | 4 ++++ MQWeb/src/MessageController.cpp | 29 +++++++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/MQWeb/include/MQ/Web/MessageController.h b/MQWeb/include/MQ/Web/MessageController.h index 6e2b62d..442c556 100644 --- a/MQWeb/include/MQ/Web/MessageController.h +++ b/MQWeb/include/MQ/Web/MessageController.h @@ -53,6 +53,10 @@ class MessageController : public MQController void event(); /// Shows an event message + void publish(); + /// Publish a message to a topic + /// /message/publish/// + virtual const std::map& getActions() const; /// Returns all available action diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 2dac6be..d5b24cb 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -32,6 +32,7 @@ #include "MQ/Message.h" #include "MQ/QueueManager.h" #include "MQ/Queue.h" +#include "MQ/Topic.h" #include "MQ/Buffer.h" static unsigned char EBCDIC_translate_ASCII[256] = @@ -51,7 +52,7 @@ static unsigned char EBCDIC_translate_ASCII[256] = 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x5C, 0x2E, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E }; #define DEFAULT_EVENT_MESSAGE_SIZE 512 @@ -367,14 +368,14 @@ void MessageController::dump() { jsonMessageDump->set("hex", hexPart); hexPart.clear(); - + jsonMessageDump = new Poco::JSON::Object(); std::ostringstream outputPos; outputPos << std::uppercase << std::right << std::setw(8) << std::setfill('0') << std::setbase(16) << (i / 2); jsonMessageDump->set("position", outputPos.str()); jsonDump->add(jsonMessageDump); } - + hexPart += fullHex[i]; } jsonMessageDump->set("hex", hexPart); @@ -602,4 +603,26 @@ void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Obj obj.set("Length", message.dataLength()); } + +void MessageController::publish() +{ + std::vector parameters = getParameters(); + + if ( parameters.size() < 2 ) + { + setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST); + return; + } + + std::string topicName = parameters[1]; + Topic topic(*qmgr().get(), topicName); + topic.open(MQOO_OUTPUT | MQOO_FAIL_IF_QUIESCING | MQBND_BIND_ON_OPEN); + + std::string topicString; + if ( parameters.size() > 2 ) + { + topicString = parameters[2]; + } +} + } } // Namespace MQ::Web From c81e5af4c6df5797a21bcf05bcd68f717a34b0cb Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 3 Feb 2016 19:20:14 +0100 Subject: [PATCH 07/60] Renamed filter into input --- ChangeLog.txt | 1 + .../AuthenticationInformationController.cpp | 6 +++--- MQWeb/src/AuthorityRecordController.cpp | 6 +++--- MQWeb/src/AuthorityServiceController.cpp | 6 +++--- MQWeb/src/ChannelController.cpp | 18 +++++++++--------- MQWeb/src/ChannelInitiatorController.cpp | 6 +++--- MQWeb/src/ChannelStatusController.cpp | 6 +++--- MQWeb/src/ClusterQueueManagerController.cpp | 18 +++++++++--------- MQWeb/src/ConnectionController.cpp | 6 +++--- MQWeb/src/Controller.cpp | 6 +++--- MQWeb/src/ListenerController.cpp | 6 +++--- MQWeb/src/ListenerStatusController.cpp | 6 +++--- MQWeb/src/NamelistController.cpp | 6 +++--- MQWeb/src/ProcessController.cpp | 6 +++--- MQWeb/src/QueueController.cpp | 6 +++--- MQWeb/src/QueueManagerController.cpp | 6 +++--- MQWeb/src/QueueManagerStatusController.cpp | 6 +++--- MQWeb/src/QueueStatusController.cpp | 6 +++--- MQWeb/src/ServiceController.cpp | 6 +++--- MQWeb/src/SubscriptionController.cpp | 6 +++--- MQWeb/src/SubscriptionStatusController.cpp | 6 +++--- MQWeb/src/TopicController.cpp | 6 +++--- MQWeb/src/TopicStatusController.cpp | 6 +++--- 23 files changed, 79 insertions(+), 78 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index f4a9a09..dba534f 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,6 @@ 0.1.0 - Web app has its own repository now: mqwebapp + - 'filter' renamed to 'input' in mqweb JSON answer 0.0.13 - Upgrade documents to use latest Jekyll release diff --git a/MQWeb/src/AuthenticationInformationController.cpp b/MQWeb/src/AuthenticationInformationController.cpp index d695d62..b4dfce4 100644 --- a/MQWeb/src/AuthenticationInformationController.cpp +++ b/MQWeb/src/AuthenticationInformationController.cpp @@ -41,14 +41,14 @@ void AuthenticationInformationController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/AuthorityRecordController.cpp b/MQWeb/src/AuthorityRecordController.cpp index 022a644..1e3923a 100644 --- a/MQWeb/src/AuthorityRecordController.cpp +++ b/MQWeb/src/AuthorityRecordController.cpp @@ -48,14 +48,14 @@ void AuthorityRecordController::inquire() Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/AuthorityServiceController.cpp b/MQWeb/src/AuthorityServiceController.cpp index 589a92b..2d2089b 100644 --- a/MQWeb/src/AuthorityServiceController.cpp +++ b/MQWeb/src/AuthorityServiceController.cpp @@ -41,9 +41,9 @@ void AuthorityServiceController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); // There is a bug in MQCMD_INQUIRE_AUTH_SERVICE, AuthServiceAttrs is required! if ( !pcfParameters->has("AuthServiceAttrs") ) { @@ -55,7 +55,7 @@ void AuthorityServiceController::inquire() else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); formElementToJSONArray("AuthServiceAttrs", attrs); diff --git a/MQWeb/src/ChannelController.cpp b/MQWeb/src/ChannelController.cpp index b70849e..05a3a82 100644 --- a/MQWeb/src/ChannelController.cpp +++ b/MQWeb/src/ChannelController.cpp @@ -41,14 +41,14 @@ void ChannelController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager @@ -127,14 +127,14 @@ void ChannelController::start() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager @@ -162,14 +162,14 @@ void ChannelController::stop() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/ChannelInitiatorController.cpp b/MQWeb/src/ChannelInitiatorController.cpp index 650fe32..3873038 100644 --- a/MQWeb/src/ChannelInitiatorController.cpp +++ b/MQWeb/src/ChannelInitiatorController.cpp @@ -41,14 +41,14 @@ void ChannelInitiatorController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); if ( form().has("CommandScope") ) { diff --git a/MQWeb/src/ChannelStatusController.cpp b/MQWeb/src/ChannelStatusController.cpp index 6664a39..7251f07 100644 --- a/MQWeb/src/ChannelStatusController.cpp +++ b/MQWeb/src/ChannelStatusController.cpp @@ -40,14 +40,14 @@ void ChannelStatusController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/ClusterQueueManagerController.cpp b/MQWeb/src/ClusterQueueManagerController.cpp index 5cbdcc5..993a298 100644 --- a/MQWeb/src/ClusterQueueManagerController.cpp +++ b/MQWeb/src/ClusterQueueManagerController.cpp @@ -41,14 +41,14 @@ void ClusterQueueManagerController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager @@ -112,14 +112,14 @@ void ClusterQueueManagerController::suspend() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager @@ -148,14 +148,14 @@ void ClusterQueueManagerController::resume() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/ConnectionController.cpp b/MQWeb/src/ConnectionController.cpp index 8019e2d..49bb9dc 100644 --- a/MQWeb/src/ConnectionController.cpp +++ b/MQWeb/src/ConnectionController.cpp @@ -41,14 +41,14 @@ void ConnectionController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index f9d5b4f..2441103 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -89,7 +89,7 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H Poco::Dynamic::Var json = parser.parse(request.stream()); if ( ! json.isEmpty() && json.type() == typeid(Poco::JSON::Object::Ptr) ) { - _data->set("filter", json.extract()); + _data->set("input", json.extract()); } } catch(Poco::JSON::JSONException& jsone) @@ -148,7 +148,7 @@ void Controller::render() if ( _view.isNull() ) return; // No view set, don't do anything _view->initializeResponse(*_response); - + std::stringstream ss; bool rendered = _view->render(_data, ss); if ( rendered ) @@ -164,7 +164,7 @@ void Controller::render() void Controller::formElementToJSONArray(const std::string& name, Poco::JSON::Array::Ptr arr) { - for(Poco::Net::NameValueCollection::ConstIterator it = form().find(name); + for(Poco::Net::NameValueCollection::ConstIterator it = form().find(name); it != form().end() && Poco::icompare(it->first, name) == 0; ++it) { diff --git a/MQWeb/src/ListenerController.cpp b/MQWeb/src/ListenerController.cpp index b2064a5..e7d6ff0 100644 --- a/MQWeb/src/ListenerController.cpp +++ b/MQWeb/src/ListenerController.cpp @@ -41,14 +41,14 @@ void ListenerController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/ListenerStatusController.cpp b/MQWeb/src/ListenerStatusController.cpp index b5d4ebf..4377e0a 100644 --- a/MQWeb/src/ListenerStatusController.cpp +++ b/MQWeb/src/ListenerStatusController.cpp @@ -41,14 +41,14 @@ void ListenerStatusController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/NamelistController.cpp b/MQWeb/src/NamelistController.cpp index 4c7a1b0..e831caf 100644 --- a/MQWeb/src/NamelistController.cpp +++ b/MQWeb/src/NamelistController.cpp @@ -41,14 +41,14 @@ void NamelistController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/ProcessController.cpp b/MQWeb/src/ProcessController.cpp index 9ca77b6..c7298f9 100644 --- a/MQWeb/src/ProcessController.cpp +++ b/MQWeb/src/ProcessController.cpp @@ -41,14 +41,14 @@ void ProcessController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/QueueController.cpp b/MQWeb/src/QueueController.cpp index 40b1215..a313075 100644 --- a/MQWeb/src/QueueController.cpp +++ b/MQWeb/src/QueueController.cpp @@ -41,14 +41,14 @@ void QueueController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/QueueManagerController.cpp b/MQWeb/src/QueueManagerController.cpp index 9ce8341..af0fc5f 100644 --- a/MQWeb/src/QueueManagerController.cpp +++ b/MQWeb/src/QueueManagerController.cpp @@ -41,14 +41,14 @@ void QueueManagerController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); formElementToJSONArray("QMgrAttrs", attrs); diff --git a/MQWeb/src/QueueManagerStatusController.cpp b/MQWeb/src/QueueManagerStatusController.cpp index 13d0b58..7cb47cb 100644 --- a/MQWeb/src/QueueManagerStatusController.cpp +++ b/MQWeb/src/QueueManagerStatusController.cpp @@ -48,14 +48,14 @@ void QueueManagerStatusController::inquire() Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); formElementToJSONArray("QMStatusAttrs", attrs); diff --git a/MQWeb/src/QueueStatusController.cpp b/MQWeb/src/QueueStatusController.cpp index 331f3c7..cd35368 100644 --- a/MQWeb/src/QueueStatusController.cpp +++ b/MQWeb/src/QueueStatusController.cpp @@ -41,14 +41,14 @@ void QueueStatusController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/ServiceController.cpp b/MQWeb/src/ServiceController.cpp index ec56382..6379a60 100644 --- a/MQWeb/src/ServiceController.cpp +++ b/MQWeb/src/ServiceController.cpp @@ -42,14 +42,14 @@ void ServiceController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/SubscriptionController.cpp b/MQWeb/src/SubscriptionController.cpp index bd34714..4fa31ff 100644 --- a/MQWeb/src/SubscriptionController.cpp +++ b/MQWeb/src/SubscriptionController.cpp @@ -41,14 +41,14 @@ void SubscriptionController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/SubscriptionStatusController.cpp b/MQWeb/src/SubscriptionStatusController.cpp index f18c8be..2978be7 100644 --- a/MQWeb/src/SubscriptionStatusController.cpp +++ b/MQWeb/src/SubscriptionStatusController.cpp @@ -41,14 +41,14 @@ void SubscriptionStatusController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/TopicController.cpp b/MQWeb/src/TopicController.cpp index 6c517ad..1970f4a 100644 --- a/MQWeb/src/TopicController.cpp +++ b/MQWeb/src/TopicController.cpp @@ -41,14 +41,14 @@ void TopicController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager diff --git a/MQWeb/src/TopicStatusController.cpp b/MQWeb/src/TopicStatusController.cpp index 3af459d..394a40b 100644 --- a/MQWeb/src/TopicStatusController.cpp +++ b/MQWeb/src/TopicStatusController.cpp @@ -39,14 +39,14 @@ void TopicStatusController::inquire() { Poco::JSON::Object::Ptr pcfParameters; - if ( data().has("filter") && data().isObject("filter") ) + if ( data().has("input") && data().isObject("input") ) { - pcfParameters = data().getObject("filter"); + pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("filter", pcfParameters); + set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager From 9fde608d948f19e1ad9f55820b9c3bbb36f0715d Mon Sep 17 00:00:00 2001 From: Franky Braem Date: Fri, 19 Feb 2016 13:29:49 +0100 Subject: [PATCH 08/60] Add setPutDate / setUser --- MQ/include/MQ/Message.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/MQ/include/MQ/Message.h b/MQ/include/MQ/Message.h index a1bdb7f..46c33ed 100644 --- a/MQ/include/MQ/Message.h +++ b/MQ/include/MQ/Message.h @@ -29,6 +29,7 @@ #include "Poco/String.h" #include "Poco/SharedPtr.h" #include "Poco/Buffer.h" +#include "Poco/DateTimeFormatter.h" #include "MQ/Buffer.h" @@ -200,7 +201,10 @@ class Message /// Sets the type of application that put the message Poco::DateTime getPutDate() const; - /// Returns the put datetime + /// Returns the put datetime (incl. time) + + void setPutDate(const Poco::DateTime& putDate, int tz = Poco::DateTimeFormatter::UTC); + /// Sets the put datetime (incl. time) std::string getReplyToQMgr() const; /// Returns the name of the reply queue manager @@ -229,6 +233,9 @@ class Message std::string getUser() const; /// Returns the name of the user + void setUser(const std::string& user); + /// Sets the name of the user + private: Buffer _buffer; @@ -571,6 +578,10 @@ inline std::string Message::getUser() const return Poco::trimRight(std::string(_md.UserIdentifier, MQ_USER_ID_LENGTH)); } +inline void Message::setUser(const std::string& user) +{ + strncpy(_md.UserIdentifier, user.c_str(), MQ_USER_ID_LENGTH); +} } // namespace MQ From 12ba917795aee3c57b28434cee4b829d569d2883 Mon Sep 17 00:00:00 2001 From: Franky Braem Date: Fri, 19 Feb 2016 13:30:34 +0100 Subject: [PATCH 09/60] Add setPutdate / setUser --- MQ/src/Message.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/MQ/src/Message.cpp b/MQ/src/Message.cpp index a52edb0..03049c5 100644 --- a/MQ/src/Message.cpp +++ b/MQ/src/Message.cpp @@ -25,6 +25,7 @@ #include "Poco/HexBinaryDecoder.h" #include "Poco/DateTime.h" #include "Poco/DateTimeParser.h" +#include "Poco/NumberFormatter.h" #include "MQ/Message.h" @@ -52,11 +53,25 @@ Poco::DateTime Message::getPutDate() const std::string dateValue(_md.PutDate, MQ_PUT_DATE_LENGTH); std::string timeValue(_md.PutTime, MQ_PUT_TIME_LENGTH); + timeValue += "0"; // Put time is hundredths of seconds dateValue += timeValue; int timeZone; - Poco::DateTimeParser::parse("%Y%n%e%H%M%S", dateValue, dateTime, timeZone); + Poco::DateTimeParser::parse("%Y%n%e%H%M%S%i", dateValue, dateTime, timeZone); return dateTime; } +void Message::setPutDate(const Poco::DateTime &putDate, int tz) +{ + std::string date = Poco::DateTimeFormatter::format(putDate, "%Y%m%d", tz); + strncpy(_md.PutDate, date.c_str(), MQ_PUT_DATE_LENGTH); + + int ms = putDate.microsecond(); + ms /= 10; // Put time is hundredths of seconds + + std::string time = Poco::DateTimeFormatter::format(putDate, "%H%M%S", tz); + time += Poco::NumberFormatter::format0(ms, 2); + strncpy(_md.PutTime, time.c_str(), MQ_PUT_TIME_LENGTH); +} + } From 28f5df5970adff580c82e7545f0c8574e5f3555a Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 6 Apr 2016 19:42:55 +0200 Subject: [PATCH 10/60] Add message property functions --- MQ/include/MQ/MQFunctions.h | 44 +++++++++++++ MQ/src/MQFunctions.cpp | 121 ++++++++++++++++++++++++++++++++++-- 2 files changed, 161 insertions(+), 4 deletions(-) diff --git a/MQ/include/MQ/MQFunctions.h b/MQ/include/MQ/MQFunctions.h index f5e098f..4092c29 100644 --- a/MQ/include/MQ/MQFunctions.h +++ b/MQ/include/MQ/MQFunctions.h @@ -62,6 +62,21 @@ typedef void (*CbFn)(MQHCONN, MQLONG, MQCBD*, MQHOBJ, MQMD*, MQGMO*, MQLONG*, MQ typedef void (*CtlFn)(MQHCONN, MQLONG, MQCTLO*, MQLONG*, MQLONG*); + +typedef void (*CrtMhFn)(MQHCONN, MQCMHO*, MQHMSG*, MQLONG*, MQLONG*); + + +typedef void (*DltMhFn)(MQHCONN, MQHMSG*, MQDMHO*, MQLONG*, MQLONG*); + + +typedef void (*SetMpFn)(MQHCONN, MQHMSG, MQSMPO*, MQCHARV*, MQPD*, MQLONG, MQLONG, MQBYTE*, MQLONG*, MQLONG*); + + +typedef void (*DltMpFn)(MQHCONN, MQHMSG, MQDMPO*, MQCHARV*, MQLONG*, MQLONG*); + + +typedef void (*InqMpFn)(MQHCONN, MQHMSG, MQIMPO*, MQCHARV*, MQPD*, MQLONG, MQLONG, MQBYTE*, MQLONG*, MQLONG*, MQLONG*); + class MQFunctions /// Helper class for calling Websphere MQ functions dynamically. Depending on the loaded library /// (binding or client) the correct function will be called. @@ -144,6 +159,25 @@ class MQFunctions void ctl(MQHCONN conn, MQLONG operation, MQCTLO* options); /// Calls MQCTL. Can throw an MQException. + void crtmh(MQHCONN conn, MQCMHO* options, MQHMSG* hmsg, MQLONG* cc, MQLONG* rc); + + void crtmh(MQHCONN conn, MQCMHO* options, MQHMSG* hmsg); + + void dltmh(MQHCONN conn, MQHMSG* hmsg, MQDMHO* options, MQLONG* cc, MQLONG* rc); + + void dltmh(MQHCONN conn, MQHMSG* hmsg, MQDMHO* options); + + void setmp(MQHCONN conn, MQHMSG hmsg, MQSMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* cc, MQLONG* rc); + + void setmp(MQHCONN conn, MQHMSG hmsg, MQSMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value); + + void dltmp(MQHCONN conn, MQHMSG hmsg, MQDMPO* options, MQCHARV* name, MQLONG* cc, MQLONG* rc); + + void dltmp(MQHCONN conn, MQHMSG hmsg, MQDMPO* options, MQCHARV* name); + + void inqmp(MQHCONN conn, MQHMSG, MQIMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* dataLength, MQLONG* cc, MQLONG* rc); + + void inqmp(MQHCONN conn, MQHMSG, MQIMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* dataLength); private: Poco::SharedLibrary _dll; @@ -167,6 +201,16 @@ class MQFunctions CtlFn _ctlFn; + CrtMhFn _crtMhFn; + + DltMhFn _dltMhFn; + + SetMpFn _setMpFn; + + DltMpFn _dltMpFn; + + InqMpFn _inqMpFn; + void trace(const std::string& subject, const std::string& function, MQLONG* cc, MQLONG* rc); }; diff --git a/MQ/src/MQFunctions.cpp b/MQ/src/MQFunctions.cpp index 9523c2b..2008faa 100644 --- a/MQ/src/MQFunctions.cpp +++ b/MQ/src/MQFunctions.cpp @@ -40,7 +40,14 @@ MQFunctions::MQFunctions() : _putFn(NULL), _getFn(NULL), _discFn(NULL), - _inqFn(NULL) + _inqFn(NULL), + _cbFn(NULL), + _ctlFn(NULL), + _crtMhFn(NULL), + _dltMhFn(NULL), + _setMpFn(NULL), + _dltMpFn(NULL), + _inqMpFn(NULL) { } @@ -300,9 +307,9 @@ void MQFunctions::inq(MQHCONN conn, MQHOBJ obj, const std::vector& intSelec } std::vector charAttrs(charAttrLength); - inq(conn, obj, selectors.size(), selectors.size() == 0 ? NULL : &selectors[0], - intAttrs.size(), intAttrs.size() == 0 ? NULL : &intAttrs[0], - charAttrs.size(), charAttrs.size() == 0 ? NULL : &charAttrs[0]); + inq(conn, obj, (MQLONG) selectors.size(), selectors.size() == 0 ? NULL : &selectors[0], + (MQLONG) intAttrs.size(), intAttrs.size() == 0 ? NULL : &intAttrs[0], + (MQLONG) charAttrs.size(), charAttrs.size() == 0 ? NULL : &charAttrs[0]); for(int i = 0; i < intAttrs.size(); i++) { @@ -360,6 +367,112 @@ void MQFunctions::ctl(MQHCONN conn, MQLONG operation, MQCTLO* options) } } +void MQFunctions::crtmh(MQHCONN conn, MQCMHO* options, MQHMSG* hmsg, MQLONG* cc, MQLONG* rc) +{ + poco_assert_dbg(_crtMhFn != NULL); + + _crtMhFn(conn, options, hmsg, cc, rc); + + trace("", "MQCRTMH", cc, rc); +} + +void MQFunctions::crtmh(MQHCONN conn, MQCMHO* options, MQHMSG* hmsg) +{ + MQLONG cc = MQCC_OK; + MQLONG rc = MQRC_NONE; + + crtmh(conn, options, hmsg, &cc, &rc); + if ( cc != MQCC_OK ) + { + throw MQException("", "MQCRTMH", cc, rc); + } +} + +void MQFunctions::dltmh(MQHCONN conn, MQHMSG* hmsg, MQDMHO* options, MQLONG* cc, MQLONG* rc) +{ + poco_assert_dbg(_dltMhFn != NULL); + + _dltMhFn(conn, hmsg, options, cc, rc); + + trace("", "MQDLTMH", cc, rc); +} + +void MQFunctions::dltmh(MQHCONN conn, MQHMSG* hmsg, MQDMHO* options) +{ + MQLONG cc = MQCC_OK; + MQLONG rc = MQRC_NONE; + + dltmh(conn, hmsg, options, &cc, &rc); + if ( cc != MQCC_OK ) + { + throw MQException("", "MQDLTMH", cc, rc); + } +} + +void MQFunctions::setmp(MQHCONN conn, MQHMSG hmsg, MQSMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* cc, MQLONG* rc) +{ + poco_assert_dbg(_setMpFn != NULL); + + _setMpFn(conn, hmsg, options, name, propDesc, type, valueLength, value, cc, rc); + + trace("", "MQSETMP", cc, rc); +} + +void MQFunctions::setmp(MQHCONN conn, MQHMSG hmsg, MQSMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value) +{ + MQLONG cc = MQCC_OK; + MQLONG rc = MQRC_NONE; + + setmp(conn, hmsg, options, name, propDesc, type, valueLength, value, &cc, &rc); + if ( cc != MQCC_OK ) + { + throw MQException("", "MQSETMP", cc, rc); + } +} + +void MQFunctions::dltmp(MQHCONN conn, MQHMSG hmsg, MQDMPO* options, MQCHARV* name, MQLONG* cc, MQLONG* rc) +{ + poco_assert_dbg(_dltMpFn != NULL); + + _dltMpFn(conn, hmsg, options, name, cc, rc); + + trace("", "MQDLTMP", cc, rc); +} + +void MQFunctions::dltmp(MQHCONN conn, MQHMSG hmsg, MQDMPO* options, MQCHARV* name) +{ + MQLONG cc = MQCC_OK; + MQLONG rc = MQRC_NONE; + + dltmp(conn, hmsg, options, name, &cc, &rc); + if ( cc != MQCC_OK ) + { + throw MQException("", "MQDLTMP", cc, rc); + } +} + +void MQFunctions::inqmp(MQHCONN conn, MQHMSG hmsg, MQIMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* dataLength, MQLONG* cc, MQLONG* rc) +{ + poco_assert_dbg(_inqMpFn != NULL); + + _inqMpFn(conn, hmsg, options, name, propDesc, type, valueLength, value, dataLength, cc, rc); + + trace("", "MQINQMP", cc, rc); +} + +void MQFunctions::inqmp(MQHCONN conn, MQHMSG hmsg, MQIMPO* options, MQCHARV* name, MQPD* propDesc, MQLONG type, MQLONG valueLength, MQBYTE* value, MQLONG* dataLength) +{ + MQLONG cc = MQCC_OK; + MQLONG rc = MQRC_NONE; + + inqmp(conn, hmsg, options, name, propDesc, type, valueLength, value, dataLength, &cc, &rc); + if ( cc != MQCC_OK ) + { + throw MQException("", "MQINQMP", cc, rc); + } +} + + void MQFunctions::trace(const std::string& subject, const std::string& function, MQLONG* cc, MQLONG* rc) { Poco::Logger& logger = Poco::Logger::get("mq"); From 29c39d86e9ce8e314184c661c77fdf163375a720 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 6 Apr 2016 19:43:29 +0200 Subject: [PATCH 11/60] Add more datetime functions --- MQ/include/MQ/Message.h | 73 +++++++++++++++++++++++++++++++++++++++-- MQ/src/Message.cpp | 23 ++++++++++++- 2 files changed, 92 insertions(+), 4 deletions(-) diff --git a/MQ/include/MQ/Message.h b/MQ/include/MQ/Message.h index 46c33ed..67c7b50 100644 --- a/MQ/include/MQ/Message.h +++ b/MQ/include/MQ/Message.h @@ -80,8 +80,11 @@ class Message void setApplOriginData(const std::string& applOriginData); /// Sets the application data relating to origin - MQLONG backoutCount() const; - // Returns the backout counter + MQLONG getBackoutCount() const; + /// Returns the backout counter + + void setBackoutCount(MQLONG count); + /// Sets the backout counter Buffer::Ptr correlationId(); /// Returns the correlation id as a Buffer. The buffer @@ -176,6 +179,12 @@ class Message MQLONG getOriginalLength() const; /// Gets length of original message + void setOriginalLength(MQLONG length); + /// Sets length of original message + + static Poco::DateTime createDatetime(const std::string& date, const std::string& time); + /// Creates a DateTime from a MQ date and MQ time + MQLONG getPersistence() const; /// Returns the persistence flag @@ -200,11 +209,32 @@ class Message void setPutApplType(MQLONG appType); /// Sets the type of application that put the message +<<<<<<< 28f5df5970adff580c82e7545f0c8574e5f3555a Poco::DateTime getPutDate() const; /// Returns the put datetime (incl. time) void setPutDate(const Poco::DateTime& putDate, int tz = Poco::DateTimeFormatter::UTC); /// Sets the put datetime (incl. time) +======= + std::string getPutDate() const; + /// Returns the put date + + Poco::DateTime getPutDatetime() const; + /// Returns the put datetime (incl. time) + + void setPutDate(const std::string& date); + /// Sets the put date. Date format must be YYYYMMDD where month is 01 through 12 + /// and day of month is 01 through 31. + + void setPutDatetime(const Poco::DateTime& putDate, int tz = Poco::DateTimeFormatter::UTC); + /// Sets the put date and time + + std::string getPutTime() const; + /// Returns the put time + + void setPutTime(const std::string& date); + /// Sets the put time. Time format must be HHMMSSTH. +>>>>>>> ef071155913e07c0dba2cbe2493e151d42bfc7db std::string getReplyToQMgr() const; /// Returns the name of the reply queue manager @@ -294,11 +324,15 @@ inline void Message::setApplOriginData(const std::string& applOriginData) } -inline MQLONG Message::backoutCount() const +inline MQLONG Message::getBackoutCount() const { return _md.BackoutCount; } +inline void Message::setBackoutCount(MQLONG count) +{ + _md.BackoutCount = count; +} inline Buffer& Message::buffer() { @@ -403,6 +437,7 @@ inline MQMD* Message::md() inline Buffer::Ptr Message::groupId() { + _md.Version = MQMD_VERSION_2; return new Buffer(_md.GroupId, MQ_GROUP_ID_LENGTH); } @@ -421,6 +456,7 @@ inline MQLONG Message::getMsgFlags() const inline void Message::setMsgFlags(MQLONG flags) { + _md.Version = MQMD_VERSION_2; _md.MsgFlags = flags; } @@ -445,6 +481,7 @@ inline MQLONG Message::getMsgSeqNumber() const inline void Message::setMsgSeqNumber(MQLONG seqNumber) { + _md.Version = MQMD_VERSION_2; _md.MsgSeqNumber = seqNumber; } @@ -457,6 +494,7 @@ inline MQLONG Message::getOffset() const inline void Message::setOffset(MQLONG offset) { + _md.Version = MQMD_VERSION_2; _md.Offset = offset; } @@ -466,6 +504,11 @@ inline MQLONG Message::getOriginalLength() const return _md.OriginalLength; } +inline void Message::setOriginalLength(MQLONG length) +{ + _md.Version = MQMD_VERSION_2; + _md.OriginalLength = length; +} inline MQLONG Message::getMsgType() const { @@ -526,6 +569,30 @@ inline void Message::setPutApplType(MQLONG applType) _md.PutApplType = applType; } +inline Poco::DateTime Message::getPutDatetime() const +{ + return createDatetime(getPutDate(), getPutTime()); +} + +inline void Message::setPutDate(const std::string& date) +{ + strncpy(_md.PutDate, date.c_str(), MQ_PUT_DATE_LENGTH); +} + +inline std::string Message::getPutDate() const +{ + return Poco::trimRight(std::string(_md.PutDate, MQ_PUT_DATE_LENGTH)); +} + +inline void Message::setPutTime(const std::string& time) +{ + strncpy(_md.PutTime, time.c_str(), MQ_PUT_TIME_LENGTH); +} + +inline std::string Message::getPutTime() const +{ + return Poco::trimRight(std::string(_md.PutTime, MQ_PUT_TIME_LENGTH)); +} inline void Message::setReplyToQMgr(const std::string& qmgr) { diff --git a/MQ/src/Message.cpp b/MQ/src/Message.cpp index 03049c5..d029f85 100644 --- a/MQ/src/Message.cpp +++ b/MQ/src/Message.cpp @@ -47,20 +47,39 @@ Message::Message(const MQBYTE* buffer, MQLONG size) { } -Poco::DateTime Message::getPutDate() const +void Message::setPutDatetime(const Poco::DateTime &putDate, int tz) +{ + setPutDate(Poco::DateTimeFormatter::format(putDate, "%Y%m%d", tz)); + + int ms = putDate.millisecond(); + ms /= 10; // Put time is hundredths of seconds + + std::string time = Poco::DateTimeFormatter::format(putDate, "%H%M%S", tz); + time += Poco::NumberFormatter::format0(ms, 2); + strncpy(_md.PutTime, time.c_str(), MQ_PUT_TIME_LENGTH); +} + +Poco::DateTime Message::createDatetime(const std::string& date, const std::string& time) { Poco::DateTime dateTime; +<<<<<<< 28f5df5970adff580c82e7545f0c8574e5f3555a std::string dateValue(_md.PutDate, MQ_PUT_DATE_LENGTH); std::string timeValue(_md.PutTime, MQ_PUT_TIME_LENGTH); timeValue += "0"; // Put time is hundredths of seconds dateValue += timeValue; +======= + std::string dateValue = date; + dateValue += time; + dateValue += "0"; // Put time is hundredths of seconds +>>>>>>> ef071155913e07c0dba2cbe2493e151d42bfc7db int timeZone; Poco::DateTimeParser::parse("%Y%n%e%H%M%S%i", dateValue, dateTime, timeZone); return dateTime; } +<<<<<<< 28f5df5970adff580c82e7545f0c8574e5f3555a void Message::setPutDate(const Poco::DateTime &putDate, int tz) { std::string date = Poco::DateTimeFormatter::format(putDate, "%Y%m%d", tz); @@ -73,5 +92,7 @@ void Message::setPutDate(const Poco::DateTime &putDate, int tz) time += Poco::NumberFormatter::format0(ms, 2); strncpy(_md.PutTime, time.c_str(), MQ_PUT_TIME_LENGTH); } +======= +>>>>>>> ef071155913e07c0dba2cbe2493e151d42bfc7db } From 8417fd84aff8d59b4c2a31b2066a1c8d64152909 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 6 Apr 2016 19:43:55 +0200 Subject: [PATCH 12/60] Reworking browse messages : show dlq, event ... --- MQWeb/include/MQ/Web/MessageController.h | 15 +- MQWeb/src/MessageController.cpp | 516 +++++++++++++++++------ 2 files changed, 400 insertions(+), 131 deletions(-) diff --git a/MQWeb/include/MQ/Web/MessageController.h b/MQWeb/include/MQ/Web/MessageController.h index 442c556..cdf233e 100644 --- a/MQWeb/include/MQ/Web/MessageController.h +++ b/MQWeb/include/MQ/Web/MessageController.h @@ -57,6 +57,10 @@ class MessageController : public MQController /// Publish a message to a topic /// /message/publish/// + void put(); + /// Put a message on a queue + /// /message/publish// + virtual const std::map& getActions() const; /// Returns all available action @@ -66,13 +70,16 @@ class MessageController : public MQController static void mapMessageToJSON(const Message& message, Poco::JSON::Object& obj); - static DisplayMap _reportCodes; + static void mapJSONToMessage(const Poco::JSON::Object& obj, Message& message); + + + static Dictionary _reportCodes; - static DisplayMap _messageTypeCodes; + static Dictionary _messageTypeCodes; - static DisplayMap _feedbackCodes; + static Dictionary _feedbackCodes; }; inline const Controller::ActionMap& MessageController::getActions() const @@ -82,6 +89,8 @@ inline const Controller::ActionMap& MessageController::getActions() const ("browse", static_cast(&MessageController::browse)) ("dump", static_cast(&MessageController::dump)) ("event", static_cast(&MessageController::event)) + ("publish", static_cast(&MessageController::publish)) + ("put", static_cast(&MessageController::put)) ; return actions; } diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index d5b24cb..e75a3c4 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -24,6 +24,7 @@ #include "Poco/DateTimeFormatter.h" #include "Poco/Logger.h" +#include "Poco/Timezone.h" #include "MQ/Web/MessageController.h" #include "MQ/Web/MQMapper.h" @@ -63,103 +64,108 @@ namespace Web { #define RCSTR(x) (x, #x) -DisplayMap MessageController::_reportCodes = DisplayMapInitializer - RCSTR(MQRO_EXCEPTION ) - RCSTR(MQRO_EXCEPTION_WITH_DATA ) - RCSTR(MQRO_EXCEPTION_WITH_FULL_DATA ) - RCSTR(MQRO_EXPIRATION ) - RCSTR(MQRO_EXPIRATION_WITH_DATA ) - RCSTR(MQRO_EXPIRATION_WITH_FULL_DATA ) - RCSTR(MQRO_COA ) - RCSTR(MQRO_COA_WITH_DATA ) - RCSTR(MQRO_COA_WITH_FULL_DATA ) - RCSTR(MQRO_COD ) - RCSTR(MQRO_COD_WITH_DATA ) - RCSTR(MQRO_COD_WITH_FULL_DATA ) - RCSTR(MQRO_PAN ) - RCSTR(MQRO_NAN ) - RCSTR(MQRO_ACTIVITY ) - RCSTR(MQRO_NEW_MSG_ID ) - RCSTR(MQRO_PASS_MSG_ID ) - RCSTR(MQRO_COPY_MSG_ID_TO_CORREL_ID ) - RCSTR(MQRO_PASS_CORREL_ID ) - RCSTR(MQRO_DEAD_LETTER_Q ) - RCSTR(MQRO_DISCARD_MSG ) - RCSTR(MQRO_PASS_DISCARD_AND_EXPIRY ) - RCSTR(MQRO_NONE ) +Dictionary MessageController::_reportCodes = Dictionary() + (0, "Report", DisplayMapInitializer + RCSTR(MQRO_EXCEPTION ) + RCSTR(MQRO_EXCEPTION_WITH_DATA ) + RCSTR(MQRO_EXCEPTION_WITH_FULL_DATA ) + RCSTR(MQRO_EXPIRATION ) + RCSTR(MQRO_EXPIRATION_WITH_DATA ) + RCSTR(MQRO_EXPIRATION_WITH_FULL_DATA ) + RCSTR(MQRO_COA ) + RCSTR(MQRO_COA_WITH_DATA ) + RCSTR(MQRO_COA_WITH_FULL_DATA ) + RCSTR(MQRO_COD ) + RCSTR(MQRO_COD_WITH_DATA ) + RCSTR(MQRO_COD_WITH_FULL_DATA ) + RCSTR(MQRO_PAN ) + RCSTR(MQRO_NAN ) + RCSTR(MQRO_ACTIVITY ) + RCSTR(MQRO_NEW_MSG_ID ) + RCSTR(MQRO_PASS_MSG_ID ) + RCSTR(MQRO_COPY_MSG_ID_TO_CORREL_ID ) + RCSTR(MQRO_PASS_CORREL_ID ) + RCSTR(MQRO_DEAD_LETTER_Q ) + RCSTR(MQRO_DISCARD_MSG ) + RCSTR(MQRO_PASS_DISCARD_AND_EXPIRY ) + RCSTR(MQRO_NONE ) + ) ; -DisplayMap MessageController::_messageTypeCodes = DisplayMapInitializer - RCSTR(MQMT_REQUEST) - RCSTR(MQMT_REPLY) - RCSTR(MQMT_DATAGRAM) - RCSTR(MQMT_REPORT) - RCSTR(MQMT_MQE_FIELDS_FROM_MQE) - RCSTR(MQMT_MQE_FIELDS) +Dictionary MessageController::_messageTypeCodes = Dictionary() + (0, "MsgType", DisplayMapInitializer + RCSTR(MQMT_REQUEST) + RCSTR(MQMT_REPLY) + RCSTR(MQMT_DATAGRAM) + RCSTR(MQMT_REPORT) + RCSTR(MQMT_MQE_FIELDS_FROM_MQE) + RCSTR(MQMT_MQE_FIELDS) + ) ; - -DisplayMap MessageController::_feedbackCodes = DisplayMapInitializer - RCSTR(MQFB_NONE ) - RCSTR(MQFB_QUIT ) - RCSTR(MQFB_EXPIRATION ) - RCSTR(MQFB_COA ) - RCSTR(MQFB_COD ) - RCSTR(MQFB_CHANNEL_COMPLETED ) - RCSTR(MQFB_CHANNEL_FAIL_RETRY ) - RCSTR(MQFB_CHANNEL_FAIL ) - RCSTR(MQFB_APPL_CANNOT_BE_STARTED ) - RCSTR(MQFB_TM_ERROR ) - RCSTR(MQFB_APPL_TYPE_ERROR ) - RCSTR(MQFB_STOPPED_BY_MSG_EXIT ) - RCSTR(MQFB_ACTIVITY ) - RCSTR(MQFB_XMIT_Q_MSG_ERROR ) - RCSTR(MQFB_PAN ) - RCSTR(MQFB_NAN ) - RCSTR(MQFB_STOPPED_BY_CHAD_EXIT ) - RCSTR(MQFB_STOPPED_BY_PUBSUB_EXIT ) - RCSTR(MQFB_NOT_A_REPOSITORY_MSG ) - RCSTR(MQFB_BIND_OPEN_CLUSRCVR_DEL ) - RCSTR(MQFB_MAX_ACTIVITIES ) - RCSTR(MQFB_NOT_FORWARDED ) - RCSTR(MQFB_NOT_DELIVERED ) - RCSTR(MQFB_UNSUPPORTED_FORWARDING ) - RCSTR(MQFB_UNSUPPORTED_DELIVERY ) - RCSTR(MQFB_DATA_LENGTH_ZERO ) - RCSTR(MQFB_DATA_LENGTH_NEGATIVE ) - RCSTR(MQFB_DATA_LENGTH_TOO_BIG ) - RCSTR(MQFB_BUFFER_OVERFLOW ) - RCSTR(MQFB_LENGTH_OFF_BY_ONE ) - RCSTR(MQFB_IIH_ERROR ) - RCSTR(MQFB_NOT_AUTHORIZED_FOR_IMS ) - RCSTR(MQFB_IMS_ERROR ) - RCSTR(MQFB_IMS_FIRST ) - RCSTR(MQFB_IMS_LAST ) - RCSTR(MQFB_CICS_INTERNAL_ERROR ) - RCSTR(MQFB_CICS_NOT_AUTHORIZED ) - RCSTR(MQFB_CICS_BRIDGE_FAILURE ) - RCSTR(MQFB_CICS_CORREL_ID_ERROR ) - RCSTR(MQFB_CICS_CCSID_ERROR ) - RCSTR(MQFB_CICS_ENCODING_ERROR ) - RCSTR(MQFB_CICS_CIH_ERROR ) - RCSTR(MQFB_CICS_UOW_ERROR ) - RCSTR(MQFB_CICS_COMMAREA_ERROR ) - RCSTR(MQFB_CICS_APPL_NOT_STARTED ) - RCSTR(MQFB_CICS_APPL_ABENDED ) - RCSTR(MQFB_CICS_DLQ_ERROR ) - RCSTR(MQFB_CICS_UOW_BACKED_OUT ) - RCSTR(MQFB_PUBLICATIONS_ON_REQUEST) - RCSTR(MQFB_SUBSCRIBER_IS_PUBLISHER) - RCSTR(MQFB_MSG_SCOPE_MISMATCH ) - RCSTR(MQFB_SELECTOR_MISMATCH ) - RCSTR(MQFB_NOT_A_GROUPUR_MSG ) - RCSTR(MQRC_PUT_INHIBITED ) - RCSTR(MQRC_Q_FULL ) - RCSTR(MQRC_NOT_AUTHORIZED ) - RCSTR(MQRC_Q_SPACE_NOT_AVAILABLE ) - RCSTR(MQRC_PERSISTENT_NOT_ALLOWED ) - RCSTR(MQRC_MSG_TOO_BIG_FOR_Q_MGR ) - RCSTR(MQRC_MSG_TOO_BIG_FOR_Q ) +Dictionary MessageController::_feedbackCodes = Dictionary() + (0, "Feedback", DisplayMapInitializer + RCSTR(MQFB_NONE ) + RCSTR(MQFB_QUIT ) + RCSTR(MQFB_EXPIRATION ) + RCSTR(MQFB_COA ) + RCSTR(MQFB_COD ) + RCSTR(MQFB_CHANNEL_COMPLETED ) + RCSTR(MQFB_CHANNEL_FAIL_RETRY ) + RCSTR(MQFB_CHANNEL_FAIL ) + RCSTR(MQFB_APPL_CANNOT_BE_STARTED ) + RCSTR(MQFB_TM_ERROR ) + RCSTR(MQFB_APPL_TYPE_ERROR ) + RCSTR(MQFB_STOPPED_BY_MSG_EXIT ) + RCSTR(MQFB_ACTIVITY ) + RCSTR(MQFB_XMIT_Q_MSG_ERROR ) + RCSTR(MQFB_PAN ) + RCSTR(MQFB_NAN ) + RCSTR(MQFB_STOPPED_BY_CHAD_EXIT ) + RCSTR(MQFB_STOPPED_BY_PUBSUB_EXIT ) + RCSTR(MQFB_NOT_A_REPOSITORY_MSG ) + RCSTR(MQFB_BIND_OPEN_CLUSRCVR_DEL ) + RCSTR(MQFB_MAX_ACTIVITIES ) + RCSTR(MQFB_NOT_FORWARDED ) + RCSTR(MQFB_NOT_DELIVERED ) + RCSTR(MQFB_UNSUPPORTED_FORWARDING ) + RCSTR(MQFB_UNSUPPORTED_DELIVERY ) + RCSTR(MQFB_DATA_LENGTH_ZERO ) + RCSTR(MQFB_DATA_LENGTH_NEGATIVE ) + RCSTR(MQFB_DATA_LENGTH_TOO_BIG ) + RCSTR(MQFB_BUFFER_OVERFLOW ) + RCSTR(MQFB_LENGTH_OFF_BY_ONE ) + RCSTR(MQFB_IIH_ERROR ) + RCSTR(MQFB_NOT_AUTHORIZED_FOR_IMS ) + RCSTR(MQFB_IMS_ERROR ) + RCSTR(MQFB_IMS_FIRST ) + RCSTR(MQFB_IMS_LAST ) + RCSTR(MQFB_CICS_INTERNAL_ERROR ) + RCSTR(MQFB_CICS_NOT_AUTHORIZED ) + RCSTR(MQFB_CICS_BRIDGE_FAILURE ) + RCSTR(MQFB_CICS_CORREL_ID_ERROR ) + RCSTR(MQFB_CICS_CCSID_ERROR ) + RCSTR(MQFB_CICS_ENCODING_ERROR ) + RCSTR(MQFB_CICS_CIH_ERROR ) + RCSTR(MQFB_CICS_UOW_ERROR ) + RCSTR(MQFB_CICS_COMMAREA_ERROR ) + RCSTR(MQFB_CICS_APPL_NOT_STARTED ) + RCSTR(MQFB_CICS_APPL_ABENDED ) + RCSTR(MQFB_CICS_DLQ_ERROR ) + RCSTR(MQFB_CICS_UOW_BACKED_OUT ) + RCSTR(MQFB_PUBLICATIONS_ON_REQUEST) + RCSTR(MQFB_SUBSCRIBER_IS_PUBLISHER) + RCSTR(MQFB_MSG_SCOPE_MISMATCH ) + RCSTR(MQFB_SELECTOR_MISMATCH ) + RCSTR(MQFB_NOT_A_GROUPUR_MSG ) + RCSTR(MQRC_PUT_INHIBITED ) + RCSTR(MQRC_Q_FULL ) + RCSTR(MQRC_NOT_AUTHORIZED ) + RCSTR(MQRC_Q_SPACE_NOT_AVAILABLE ) + RCSTR(MQRC_PERSISTENT_NOT_ALLOWED ) + RCSTR(MQRC_MSG_TOO_BIG_FOR_Q_MGR ) + RCSTR(MQRC_MSG_TOO_BIG_FOR_Q ) + ) ; @@ -173,7 +179,7 @@ MessageController::~MessageController() } /** - * URL: message/browse//?limit=n&teaser=n + * URL: message/browse//?limit=n&size=n * message/browse/// */ void MessageController::browse() @@ -191,7 +197,7 @@ void MessageController::browse() mqwebData().set("queue", queueName); int limit = -1; - int teaser = 0; + int maxMessageSize = 1024; std::string messageId; if ( parameters.size() > 2 ) @@ -208,10 +214,10 @@ void MessageController::browse() Poco::NumberParser::tryParse(limitField, limit); } - std::string teaserField = form().get("teaser", ""); - if ( ! teaserField.empty() ) + std::string sizeField = form().get("size", ""); + if ( ! sizeField.empty() ) { - Poco::NumberParser::tryParse(teaserField, teaser); + Poco::NumberParser::tryParse(sizeField, maxMessageSize); } } @@ -223,7 +229,7 @@ void MessageController::browse() int count = 0; while(limit == -1 || count < limit) { - Message msg(teaser); + Message msg(maxMessageSize); if ( ! messageId.empty() ) { msg.messageId()->fromHex(messageId); @@ -231,7 +237,7 @@ void MessageController::browse() try { - q.get(msg, MQGMO_BROWSE_NEXT + MQGMO_ACCEPT_TRUNCATED_MSG, 0); + q.get(msg, MQGMO_BROWSE_NEXT, 0); } catch(MQException mqe) { @@ -240,7 +246,21 @@ void MessageController::browse() if (! messageId.empty()) throw; break; } - else if ( mqe.reason() != MQRC_TRUNCATED_MSG_ACCEPTED ) + else if ( mqe.reason() == MQRC_TRUNCATED_MSG_FAILED ) + { + if ( msg.getFormat().compare(MQFMT_EVENT ) == 0 ) { + // ignore size limit for event messages and retry to get it with the + // real length + msg.buffer().resize(msg.dataLength(), false); + msg.clear(); + q.get(msg, MQGMO_BROWSE_NEXT); + } + else + { + continue; // TODO: or throw ???; + } + } + else { throw; } @@ -250,22 +270,78 @@ void MessageController::browse() Poco::JSON::Object::Ptr jsonMessage = new Poco::JSON::Object(); mapMessageToJSON(msg, *jsonMessage); - std::string data; - std::string format(msg.getFormat()); - if ( teaser > 0 && msg.getFormat().compare(MQFMT_STRING) == 0 ) + if ( msg.getFormat().compare(MQFMT_DEAD_LETTER_HEADER) == 0 ) { - if ( msg.dataLength() < msg.buffer().size() ) + if ( msg.buffer().size() >= sizeof(MQDLH) ) { - msg.buffer().resize(msg.dataLength()); + MQDLH* dlh = (MQDLH*) msg.buffer().data(); + Poco::JSON::Object::Ptr jsonDLH = new Poco::JSON::Object(); + jsonMessage->set("dlh", jsonDLH); + jsonDLH->set("Version", dlh->Version); + jsonDLH->set("Reason", dlh->Reason); + jsonDLH->set("DestQName", Poco::trimRight(std::string(dlh->DestQName, MQ_Q_NAME_LENGTH))); + jsonDLH->set("DestQMgrName", Poco::trimRight(std::string(dlh->DestQMgrName, MQ_Q_MGR_NAME_LENGTH))); + jsonDLH->set("Encoding", dlh->Encoding); + jsonDLH->set("CodedCharSetId", dlh->CodedCharSetId); + jsonDLH->set("Format", Poco::trimRight(std::string(dlh->Format, MQ_FORMAT_LENGTH))); + const DisplayMap& applTypes = MQMapper::getDisplayMap("QueueStatus", MQIA_APPL_TYPE); + DisplayMap::const_iterator it = applTypes.find(dlh->PutApplType); + jsonDLH->set("PutApplType", it == applTypes.end() ? "" : it->second); + jsonDLH->set("PutApplName", Poco::trimRight(std::string(dlh->PutApplName, MQ_PUT_APPL_NAME_LENGTH))); + + std::string putDate = Poco::trimRight(std::string(dlh->PutDate, MQ_PUT_DATE_LENGTH)); + std::string putTime = Poco::trimRight(std::string(dlh->PutTime, MQ_PUT_TIME_LENGTH)); + jsonDLH->set("PutDatetime", Poco::DateTimeFormatter::format(Message::createDatetime(putDate, putTime), "%Y-%m-%d %H:%M:%S.%i")); + jsonDLH->set("PutDate", putDate); + jsonDLH->set("PutTime", putTime); + } + } + else if ( msg.getFormat().compare(MQFMT_EVENT) == 0 ) + { + PCF pcfEvent; + pcfEvent.buffer().set(msg.buffer()); + pcfEvent.init(); + + Poco::JSON::Object::Ptr jsonEvent = new Poco::JSON::Object(); + jsonMessage->set("event", jsonEvent); + Poco::JSON::Object::Ptr jsonReason = new Poco::JSON::Object(); + jsonEvent->set("reason", jsonReason); + jsonReason->set("code", pcfEvent.getReasonCode()); + std::string reasonCodeStr = MQMapper::getReasonString(pcfEvent.getReasonCode()); + jsonReason->set("desc", reasonCodeStr); + + if ( pcfEvent.hasParameter(MQIACF_OBJECT_TYPE) ) + { + Poco::SharedPtr dictionary; + switch(pcfEvent.getParameterNum(MQIACF_OBJECT_TYPE)) + { + case MQOT_Q_MGR: dictionary = MQMapper::dictionary("QueueManager"); break; + case MQOT_CHANNEL: dictionary = MQMapper::dictionary("Channel"); break; + case MQOT_NAMELIST: dictionary = MQMapper::dictionary("Namelist"); break; + case MQOT_PROCESS: dictionary = MQMapper::dictionary("Process"); break; + case MQOT_Q: dictionary = MQMapper::dictionary("Queue"); break; + case MQOT_LISTENER: dictionary = MQMapper::dictionary("Listener"); break; + default: + Poco::Logger::get("mq.web").warning("No dictionary set for event. ObjectType $0", pcfEvent.getParameterNum(MQIACF_OBJECT_TYPE)); + } + if ( !dictionary.isNull() ) + { + dictionary->mapToJSON(pcfEvent, jsonEvent, false); + } } - data = msg.buffer().toString(); - if ( teaser < msg.dataLength() ) + + Poco::SharedPtr dictionary = MQMapper::dictionary("Event"); + poco_assert_dbg(! dictionary.isNull()); + dictionary->mapToJSON(pcfEvent, jsonEvent, false); + } + else if ( msg.getFormat().compare(MQFMT_STRING) == 0 ) + { + if ( msg.dataLength() < msg.buffer().size() ) { - data += " ..."; + msg.buffer().resize(msg.dataLength()); } - jsonMessage->set("data", data); + jsonMessage->set("data", msg.buffer().toString()); } - jsonMessages->add(jsonMessage); } @@ -556,32 +632,29 @@ void MessageController::event() void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Object& obj) { - DisplayMap::const_iterator it = _reportCodes.find(message.getReport()); - obj.set("Report", it == _reportCodes.end() ? "" : it->second); - - it = _messageTypeCodes.find(message.getMsgType()); - obj.set("MsgType", it == _messageTypeCodes.end() ? "" : it->second); + std::string report = _reportCodes.getDisplayValue(0, message.getReport()); + obj.set("Report", report); - obj.set("Expiry", message.getExpiry()); - - it = _feedbackCodes.find(message.getFeedback()); - if ( it == _feedbackCodes.end() ) + std::string msgType = _messageTypeCodes.getDisplayValue(0, message.getMsgType()); + if ( msgType.empty() ) { - obj.set("Feedback", message.getFeedback()); + obj.set("MsgType", message.getMsgType()); } else { - obj.set("Feedback", it->second); + obj.set("MsgType", msgType); } + obj.set("Expiry", message.getExpiry()); + obj.set("Feedback", _feedbackCodes.getDisplayValue(0, message.getFeedback())); obj.set("Encoding", message.getEncoding()); obj.set("CodedCharSetId", message.getCodedCharSetId()); - obj.set("Format", message.getFormat()); + obj.set("Format", Poco::trimRight(message.getFormat())); obj.set("Priority", message.getPriority()); obj.set("Persistence", message.getPersistence()); obj.set("MsgId", message.messageId()->toHex()); obj.set("CorrelId", message.correlationId()->toHex()); - obj.set("BackoutCount", message.backoutCount()); + obj.set("BackoutCount", message.getBackoutCount()); obj.set("ReplyToQ", message.getReplyToQueue()); obj.set("ReplyToQmgr", message.getReplyToQMgr()); obj.set("UserIdentifier", message.getUser()); @@ -589,11 +662,13 @@ void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Obj obj.set("ApplIdentityData", message.getApplIdentityData()); const DisplayMap& applTypes = MQMapper::getDisplayMap("QueueStatus", MQIA_APPL_TYPE); - it = applTypes.find(message.getPutApplType()); + DisplayMap::const_iterator it = applTypes.find(message.getPutApplType()); obj.set("PutApplType", it == applTypes.end() ? "" : it->second); obj.set("PutApplName", message.getPutApplName()); - obj.set("PutDate", Poco::DateTimeFormatter::format(message.getPutDate(), "%d-%m-%Y %H:%M:%S")); + obj.set("PutDatetime", Poco::DateTimeFormatter::format(message.getPutDatetime(), "%Y-%m-%d %H:%M:%S.%i")); + obj.set("PutDate", message.getPutDate()); + obj.set("PutTime", message.getPutTime()); obj.set("ApplOriginData", message.getApplOriginData()); obj.set("GroupId", message.groupId()->toHex()); obj.set("MsgSeqNumber", message.getMsgSeqNumber()); @@ -604,6 +679,113 @@ void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Obj } +void MessageController::mapJSONToMessage(const Poco::JSON::Object& obj, Message& message) +{ + // Set the putdate to the current timestamp to avoid an empty putdate when + // it is not set in the MD JSON object + Poco::DateTime now; + message.setPutDatetime(now); + + if ( obj.has("Report") ) + { + MQLONG reportCode = _reportCodes.getDisplayId(0, obj.optValue("Report", "")); + if ( reportCode != -1 ) + { + message.setReport(reportCode); + } + } + + if ( obj.has("Expiry") ) message.setExpiry(obj.optValue("Expiry", -1)); + + if ( obj.has("Feedback") ) + { + MQLONG feedbackCode = _feedbackCodes.getDisplayId(0, obj.optValue("Feedback", "")); + if ( feedbackCode != -1 ) + { + message.setFeedback(feedbackCode); + } + } + + if ( obj.has("Encoding") ) message.setEncoding(obj.optValue("Encoding", MQENC_NATIVE)); + if ( obj.has("CodedCharSetId") ) message.setCodedCharSetId(obj.optValue("CodedCharSetId", MQCCSI_Q_MGR)); + if ( obj.has("Format") ) message.setFormat(obj.optValue("Format", "")); + if ( obj.has("Priority") ) message.setPriority(obj.optValue("Priority", 0)); + if ( obj.has("Persistence") ) + { + bool persistency = obj.optValue("Persistence", false); + message.setPersistence(persistency); + } + if ( obj.has("MsgId") ) + { + std::string hex = obj.optValue("MsgId", ""); + message.messageId()->fromHex(hex); + } + if ( obj.has("CorrelId") ) + { + std::string hex = obj.optValue("CorrelId", ""); + message.correlationId()->fromHex(hex); + } + if ( obj.has("BackoutCount") ) message.setBackoutCount(obj.optValue("BackoutCount", 0)); + if ( obj.has("ReplyToQ") ) message.setReplyToQueue(obj.optValue("ReplyToQ", "")); + if ( obj.has("ReplyToQMgr") ) message.setReplyToQMgr(obj.optValue("ReplyToQMgr", "")); + if ( obj.has("UserIdentifier") ) message.setUser(obj.optValue("UserIdentifier", "")); + if ( obj.has("AccountToken") ) + { + std::string hex = obj.optValue("AccountToken", ""); + message.accountingToken()->fromHex(hex); + } + if ( obj.has("ApplIdentityData") ) message.setApplIdentityData(obj.optValue("ApplIdentityData", "")); + if ( obj.has("PutApplType") ) + { + Poco::SharedPtr dictionary = MQMapper::dictionary("QueueStatus"); + MQLONG id = dictionary->getDisplayId(MQIA_APPL_TYPE, obj.optValue("PutApplType", "")); + if ( id == -1 ) // User defined? + { + message.setPutApplType(obj.optValue("PutApplType", MQAT_DEFAULT)); + } + else + { + message.setPutApplType(obj.optValue("PutApplType", id)); + } + } + if ( obj.has("PutApplName") ) message.setPutApplName(obj.optValue("PutApplName", "")); + if ( obj.has("PutDate") ) message.setPutDate(obj.optValue("PutDate", "")); + if ( obj.has("PutTime") ) message.setPutDate(obj.optValue("PutTime", "")); + if ( obj.has("PutDatetime") ) + { + int tzd; + try + { + Poco::DateTime dateTime = Poco::DateTimeParser::parse("%Y-%m-%d %H:%M:%S.%i", obj.optValue("PutDatetime", ""), tzd); + message.setPutDatetime(dateTime, tzd); + } + catch(Poco::SyntaxException&) + { + } + } + if ( obj.has("ApplOriginData") ) message.setApplOriginData(obj.optValue("ApplOriginData", "")); + + // MQMQ_VERSION_2 fields + if ( obj.has("GroupId") ) + { + std::string hex = obj.optValue("GroupId", ""); + message.groupId()->fromHex(hex); + } + if ( obj.has("MsgFlags") ) message.setMsgFlags(obj.optValue("MsgFlags", 0)); + if ( obj.has("MsgSeqNumber") ) message.setMsgSeqNumber(obj.optValue("MsgSeqNumber", 0)); + if ( obj.has("MsgType") ) + { + MQLONG msgTypeCode = _messageTypeCodes.getDisplayId(0, obj.optValue("MsgType", "")); + if ( msgTypeCode != -1 ) + { + message.setMsgType(msgTypeCode); + } + } + if ( obj.has("Offset") ) message.setOffset(obj.optValue("Offset", 0)); + if ( obj.has("OriginalLength") ) message.setOriginalLength(obj.optValue("OriginalLength", 0)); +} + + void MessageController::publish() { std::vector parameters = getParameters(); @@ -615,14 +797,92 @@ void MessageController::publish() } std::string topicName = parameters[1]; - Topic topic(*qmgr().get(), topicName); - topic.open(MQOO_OUTPUT | MQOO_FAIL_IF_QUIESCING | MQBND_BIND_ON_OPEN); + + Poco::SharedPtr topic; + std::string topicStr; + if ( parameters.size() > 2 ) + { + topic = new Topic(*qmgr().get(), topicName, parameters[2]); + } + else + { + topic = new Topic(*qmgr().get(), topicName); + } std::string topicString; if ( parameters.size() > 2 ) { topicString = parameters[2]; } + + MQ::Message message; + + Poco::JSON::Object::Ptr input = data().getObject("input"); + if ( input.isNull() ) + { + setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "JSON object missing"); + return; + } + + MQLONG openOptions = MQOO_OUTPUT | MQOO_FAIL_IF_QUIESCING | MQBND_BIND_ON_OPEN; + MQLONG publishOptions = 0; + Poco::JSON::Object::Ptr md = input->getObject("MD"); + if ( ! md.isNull() ) + { + mapJSONToMessage(*md, message); + openOptions |= MQOO_SET_ALL_CONTEXT; + publishOptions |= MQPMO_SET_ALL_CONTEXT; + } + topic->open(openOptions); + + std::string d = input->getValue("data"); + message.setFormat("MQSTR"); + message.buffer().resize(d.length()); + memcpy(message.buffer().data(), d.c_str(), d.length()); + + topic->publish(message, publishOptions); +} + +void MessageController::put() +{ + std::vector parameters = getParameters(); + + if ( parameters.size() < 2 ) + { + setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST); + return; + } + + std::string qName = parameters[1]; + + MQ::Message message; + + Poco::JSON::Object::Ptr input = data().getObject("input"); + if ( input.isNull() ) + { + setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "JSON object missing"); + return; + } + + MQLONG openOptions = MQOO_OUTPUT | MQOO_FAIL_IF_QUIESCING | MQBND_BIND_ON_OPEN; + MQLONG putOptions = 0; + Poco::JSON::Object::Ptr md = input->getObject("MD"); + if ( ! md.isNull() ) + { + mapJSONToMessage(*md, message); + openOptions |= MQOO_SET_ALL_CONTEXT; + putOptions |= MQPMO_SET_ALL_CONTEXT; + } + + Queue q(*qmgr().get(), qName); + q.open(openOptions); + + std::string d = input->getValue("data"); + message.setFormat("MQSTR"); + message.buffer().resize(d.length()); + memcpy(message.buffer().data(), d.c_str(), d.length()); + + q.put(message, putOptions); } } } // Namespace MQ::Web From 5975450f1e8a9861d35c5679638b7c3492322b09 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 6 Apr 2016 21:56:34 +0200 Subject: [PATCH 13/60] Solve wrong commit --- MQ/include/MQ/Message.h | 8 -------- MQ/src/Message.cpp | 22 ---------------------- 2 files changed, 30 deletions(-) diff --git a/MQ/include/MQ/Message.h b/MQ/include/MQ/Message.h index 67c7b50..161742b 100644 --- a/MQ/include/MQ/Message.h +++ b/MQ/include/MQ/Message.h @@ -209,13 +209,6 @@ class Message void setPutApplType(MQLONG appType); /// Sets the type of application that put the message -<<<<<<< 28f5df5970adff580c82e7545f0c8574e5f3555a - Poco::DateTime getPutDate() const; - /// Returns the put datetime (incl. time) - - void setPutDate(const Poco::DateTime& putDate, int tz = Poco::DateTimeFormatter::UTC); - /// Sets the put datetime (incl. time) -======= std::string getPutDate() const; /// Returns the put date @@ -234,7 +227,6 @@ class Message void setPutTime(const std::string& date); /// Sets the put time. Time format must be HHMMSSTH. ->>>>>>> ef071155913e07c0dba2cbe2493e151d42bfc7db std::string getReplyToQMgr() const; /// Returns the name of the reply queue manager diff --git a/MQ/src/Message.cpp b/MQ/src/Message.cpp index d029f85..dd13c06 100644 --- a/MQ/src/Message.cpp +++ b/MQ/src/Message.cpp @@ -63,36 +63,14 @@ Poco::DateTime Message::createDatetime(const std::string& date, const std::strin { Poco::DateTime dateTime; -<<<<<<< 28f5df5970adff580c82e7545f0c8574e5f3555a - std::string dateValue(_md.PutDate, MQ_PUT_DATE_LENGTH); - std::string timeValue(_md.PutTime, MQ_PUT_TIME_LENGTH); - timeValue += "0"; // Put time is hundredths of seconds - dateValue += timeValue; -======= std::string dateValue = date; dateValue += time; dateValue += "0"; // Put time is hundredths of seconds ->>>>>>> ef071155913e07c0dba2cbe2493e151d42bfc7db int timeZone; Poco::DateTimeParser::parse("%Y%n%e%H%M%S%i", dateValue, dateTime, timeZone); return dateTime; } -<<<<<<< 28f5df5970adff580c82e7545f0c8574e5f3555a -void Message::setPutDate(const Poco::DateTime &putDate, int tz) -{ - std::string date = Poco::DateTimeFormatter::format(putDate, "%Y%m%d", tz); - strncpy(_md.PutDate, date.c_str(), MQ_PUT_DATE_LENGTH); - - int ms = putDate.microsecond(); - ms /= 10; // Put time is hundredths of seconds - - std::string time = Poco::DateTimeFormatter::format(putDate, "%H%M%S", tz); - time += Poco::NumberFormatter::format0(ms, 2); - strncpy(_md.PutTime, time.c_str(), MQ_PUT_TIME_LENGTH); -} -======= ->>>>>>> ef071155913e07c0dba2cbe2493e151d42bfc7db } From faea4dbd2963f67be506f7b54167b91dfbabb59a Mon Sep 17 00:00:00 2001 From: Franky Braem Date: Thu, 7 Apr 2016 07:21:14 +0200 Subject: [PATCH 14/60] Update ChangeLog.txt --- ChangeLog.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index dba534f..bf78479 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,6 +1,8 @@ 0.1.0 - Web app has its own repository now: mqwebapp - 'filter' renamed to 'input' in mqweb JSON answer + - Browse DLQ messages + - Integrate event messages in browse action 0.0.13 - Upgrade documents to use latest Jekyll release From 83212837ac03f464f41f0fbae9e28d4391c66233 Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 11 Apr 2016 22:14:33 +0200 Subject: [PATCH 15/60] Add RFH2 --- MQWeb/src/MessageController.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index e75a3c4..910a748 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -237,7 +237,7 @@ void MessageController::browse() try { - q.get(msg, MQGMO_BROWSE_NEXT, 0); + q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2, 0); } catch(MQException mqe) { @@ -342,6 +342,36 @@ void MessageController::browse() } jsonMessage->set("data", msg.buffer().toString()); } + else if ( msg.getFormat().compare(MQFMT_RF_HEADER_2) == 0 ) + { + MQBYTE* begin = (MQBYTE*) msg.buffer().data(); + MQRFH2* rfh2 = (MQRFH2*) begin; + Poco::JSON::Object::Ptr jsonRfh2 = new Poco::JSON::Object(); + jsonMessage->set("rfh2", jsonRfh2); + jsonRfh2->set("Encoding", rfh2->Encoding); + + Poco::JSON::Array::Ptr jsonNameValues = new Poco::JSON::Array(); + jsonRfh2->set("NameValues", jsonNameValues); + + MQBYTE* data = begin + sizeof(MQRFH2); + MQBYTE* end = begin + rfh2->StrucLength; + + while(data < end) + { + MQLONG len = *(MQLONG*) data; + data += sizeof(MQLONG); + + if ( len < 0 || data + len > end ) + { + //TODO: invalid RFH2 ... + } + std::string value((const char*) data, len); + if ( value[0] == '\0' ) value.resize(0); + Poco::trimRightInPlace(value); + jsonNameValues->add(value); + data += len; + } + } jsonMessages->add(jsonMessage); } From 2a73dfa910d18128e03c07cade92911175fa29d7 Mon Sep 17 00:00:00 2001 From: u77589 Date: Tue, 14 Jun 2016 10:58:28 +0200 Subject: [PATCH 16/60] Remove static to avoid null pointer exceptions when called from multiple threads --- MQWeb/src/MQMapper.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/MQWeb/src/MQMapper.cpp b/MQWeb/src/MQMapper.cpp index 890d360..d59ef59 100644 --- a/MQWeb/src/MQMapper.cpp +++ b/MQWeb/src/MQMapper.cpp @@ -68,14 +68,18 @@ MQMapper::~MQMapper() std::string MQMapper::getReasonString(MQLONG reasonCode) { - static Poco::SharedPtr dict = _dictionaryCache.getDictionary("Reason"); + Poco::SharedPtr dict = _dictionaryCache.getDictionary("Reason"); + poco_assert_dbg(!dict.isNull()); + return dict->getDisplayValue(MQIACF_REASON_CODE, reasonCode); } std::string MQMapper::getCommandString(MQLONG command) { - static Poco::SharedPtr dict = _dictionaryCache.getDictionary("Event"); + Poco::SharedPtr dict = _dictionaryCache.getDictionary("Event"); + poco_assert_dbg(!dict.isNull()); + return dict->getDisplayValue(MQIACF_COMMAND, command); } From 251f0b431f36505f1eaf68c274314fb95f6d3754 Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 14 Jun 2016 13:46:56 +0200 Subject: [PATCH 17/60] Add isJSONAPI --- MQWeb/include/MQ/Web/Controller.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MQWeb/include/MQ/Web/Controller.h b/MQWeb/include/MQ/Web/Controller.h index 227a590..68a479d 100644 --- a/MQWeb/include/MQ/Web/Controller.h +++ b/MQWeb/include/MQ/Web/Controller.h @@ -93,6 +93,9 @@ class Controller : public Poco::Net::PartHandler bool isPost() const; /// Returns true when the HTTP method POST is used. + bool isJSONAPI() const; + /// Returns true when the HTTP request accepts JSONAPI + void set(const std::string& name, const Poco::Dynamic::Var& var); /// Sets a variable in data for use in a view @@ -209,6 +212,11 @@ inline bool Controller::isJSON() const return true; } +inline bool Controller::isJSONAPI() const +{ + return _request->get("Accept", "").compare("application/vnd.api+json") == 0; +} + inline bool Controller::isPost() const { return _request->getMethod().compare("POST") == 0; From 106e1a89575d176a969ede8afa5af4a7d0df7e53 Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 14 Jun 2016 13:48:54 +0200 Subject: [PATCH 18/60] Wrong comment in #endif include guard --- MQWeb/include/MQ/Web/ControllerRequestHandler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MQWeb/include/MQ/Web/ControllerRequestHandler.h b/MQWeb/include/MQ/Web/ControllerRequestHandler.h index 579f447..c1d8e58 100644 --- a/MQWeb/include/MQ/Web/ControllerRequestHandler.h +++ b/MQWeb/include/MQ/Web/ControllerRequestHandler.h @@ -48,4 +48,4 @@ class ControllerRequestHandler: public Poco::Net::HTTPRequestHandler } } // Namespace MQ::Web -#endif // _MQWeb_RequestHandler_INCLUDED +#endif // _MQWeb_ControllerRequestHandler_INCLUDED From d5ff1a39b3709eddb9b4303e41e0074a65789109 Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 14 Jun 2016 13:50:51 +0200 Subject: [PATCH 19/60] Rename display into text --- MQWeb/include/MQ/Web/Dictionary.h | 42 +++++++++++++++---------------- MQWeb/include/MQ/Web/MQMapper.h | 4 +-- MQWeb/src/Dictionary.cpp | 42 +++++++++++++++---------------- MQWeb/src/DictionaryCache.cpp | 2 +- MQWeb/src/MQMapper.cpp | 21 ++++++++-------- 5 files changed, 55 insertions(+), 56 deletions(-) diff --git a/MQWeb/include/MQ/Web/Dictionary.h b/MQWeb/include/MQ/Web/Dictionary.h index 71ce493..f79ffbe 100644 --- a/MQWeb/include/MQ/Web/Dictionary.h +++ b/MQWeb/include/MQ/Web/Dictionary.h @@ -14,8 +14,8 @@ namespace MQ { namespace Web { -typedef std::map DisplayMap; -typedef MapInitializer DisplayMapInitializer; +typedef std::map TextMap; +typedef MapInitializer TextMapInitializer; class Dictionary /// Class for holding all names, ids and values for Websphere MQ fields. @@ -36,29 +36,29 @@ class Dictionary Dictionary& operator()(MQLONG id, const std::string& name = ""); /// Adds the name for the given id. - Dictionary& operator()(MQLONG id, const std::string& name, const DisplayMap& displayMap); + Dictionary& operator()(MQLONG id, const std::string& name, const TextMap& textMap); /// Adds the name and value for the given id. - const DisplayMap& getDisplayMap(MQLONG id) const; + const TextMap& getTextMap(MQLONG id) const; /// Returns all values for the given id. - std::string getDisplayValue(MQLONG id, MQLONG value) const; + std::string getTextForValue(MQLONG id, MQLONG value) const; /// Returns the display string for the given value of the given id. /// For example: in MQMapper getDisplayValue(MQIA_PLATFORM, MQPL_UNIX) will return "UNIX". - MQLONG getDisplayId(MQLONG id, const std::string& value) const; + MQLONG getIdForText(MQLONG id, const std::string& value) const; /// Returns the id for the given value and id. /// For example: in MQMapper getDisplayId(MQIA_PLATFORM, "UNIX") will return MQPL_UNIX. - MQLONG getId(const std::string& name) const; + MQLONG getIdForName(const std::string& name) const; /// Returns the id for the given name. /// For example: in MQMapper getId("Platform") will return MQIA_PLATFORM. - std::string getName(MQLONG id) const; + std::string getNameForId(MQLONG id) const; /// Returns the name for the given id /// For example: in MQMapper getName(MQIA_PLATFORM) will return "Platform". - bool hasDisplayMap(MQLONG id) const; + bool hasTextMap(MQLONG id) const; /// Returns true when the id has a corresponding map with display values. void mapToJSON(const PCF& pcf, Poco::JSON::Object::Ptr& json, bool alwaysCreate = true) const; @@ -72,7 +72,7 @@ class Dictionary void set(MQLONG id, const std::string& name); - void set(MQLONG id, const std::string& name, const DisplayMap& displayMap); + void set(MQLONG id, const std::string& name, const TextMap& textMap); private: @@ -80,11 +80,11 @@ class Dictionary std::map _nameMap; - std::map _displayMaps; + std::map _textMaps; }; -inline std::string Dictionary::getName(MQLONG id) const +inline std::string Dictionary::getNameForId(MQLONG id) const { std::string name; @@ -96,7 +96,7 @@ inline std::string Dictionary::getName(MQLONG id) const } -inline MQLONG Dictionary::getId(const std::string& name) const +inline MQLONG Dictionary::getIdForName(const std::string& name) const { MQLONG id = -1; @@ -108,20 +108,20 @@ inline MQLONG Dictionary::getId(const std::string& name) const } -inline const DisplayMap& Dictionary::getDisplayMap(MQLONG id) const +inline const TextMap& Dictionary::getTextMap(MQLONG id) const { - static DisplayMap emptyMap; + static TextMap emptyMap; - std::map::const_iterator it = _displayMaps.find(id); - if ( it == _displayMaps.end() ) + std::map::const_iterator it = _textMaps.find(id); + if ( it == _textMaps.end() ) return emptyMap; return it->second; } -inline bool Dictionary::hasDisplayMap(MQLONG id) const +inline bool Dictionary::hasTextMap(MQLONG id) const { - return _displayMaps.find(id) != _displayMaps.end(); + return _textMaps.find(id) != _textMaps.end(); } inline std::map::const_iterator Dictionary::begin() const @@ -140,10 +140,10 @@ inline void Dictionary::set(MQLONG id, const std::string& name) _nameMap[name] = id; } -inline void Dictionary::set(MQLONG id, const std::string& name, const DisplayMap& displayMap) +inline void Dictionary::set(MQLONG id, const std::string& name, const TextMap& textMap) { set(id, name); - _displayMaps[id] = displayMap; + _textMaps[id] = textMap; } }} // Namespace MQWeb diff --git a/MQWeb/include/MQ/Web/MQMapper.h b/MQWeb/include/MQ/Web/MQMapper.h index b02de80..3bfbe07 100644 --- a/MQWeb/include/MQ/Web/MQMapper.h +++ b/MQWeb/include/MQ/Web/MQMapper.h @@ -58,8 +58,8 @@ class MQMapper : public Mapper static std::string getReasonString(MQLONG reasonCode); /// Translates a reason code into a string - static const DisplayMap& getDisplayMap(const std::string& objectType, MQLONG id); - /// Returns the DisplayMap for the given Websphere MQ id + static const TextMap& getTextMap(const std::string& objectType, MQLONG id); + /// Returns the TextMap for the given Websphere MQ id static const Poco::SharedPtr dictionary(const std::string& objectType); /// Returns the dictionary for the given object type diff --git a/MQWeb/src/Dictionary.cpp b/MQWeb/src/Dictionary.cpp index 28e50b6..174f824 100644 --- a/MQWeb/src/Dictionary.cpp +++ b/MQWeb/src/Dictionary.cpp @@ -42,36 +42,36 @@ Dictionary& Dictionary::operator()(MQLONG id, const std::string& name) } -Dictionary& Dictionary::operator()(MQLONG id, const std::string& name, const DisplayMap& displayMap) +Dictionary& Dictionary::operator()(MQLONG id, const std::string& name, const TextMap& textMap) { _idMap.insert(std::make_pair(id, name)); _nameMap.insert(std::make_pair(name, id)); - _displayMaps.insert(std::make_pair(id, displayMap)); + _textMaps.insert(std::make_pair(id, textMap)); return *this; } -std::string Dictionary::getDisplayValue(MQLONG id, MQLONG displayId) const +std::string Dictionary::getTextForValue(MQLONG id, MQLONG value) const { - std::map::const_iterator it = _displayMaps.find(id); - if ( it == _displayMaps.end() ) + std::map::const_iterator it = _textMaps.find(id); + if ( it == _textMaps.end() ) return ""; - DisplayMap::const_iterator it2 = it->second.find(displayId); + TextMap::const_iterator it2 = it->second.find(value); if ( it2 == it->second.end() ) return ""; return it2->second; } -MQLONG Dictionary::getDisplayId(MQLONG id, const std::string& value) const +MQLONG Dictionary::getIdForText(MQLONG id, const std::string& value) const { - std::map::const_iterator it = _displayMaps.find(id); - if ( it == _displayMaps.end() ) + std::map::const_iterator it = _textMaps.find(id); + if ( it == _textMaps.end() ) return -1; - for(DisplayMap::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) + for(TextMap::const_iterator it2 = it->second.begin(); it2 != it->second.end(); ++it2) { if ( it2->second.compare(value) == 0 ) return it2->first; @@ -84,7 +84,7 @@ void Dictionary::mapToJSON(const PCF& pcf, Poco::JSON::Object::Ptr& json, bool a std::vector parameters = pcf.getParameters(); for(std::vector::iterator it = parameters.begin(); it != parameters.end(); ++it) { - std::string name = getName(*it); + std::string name = getNameForId(*it); if ( name.empty() ) { if ( alwaysCreate ) @@ -109,14 +109,14 @@ void Dictionary::mapToJSON(const PCF& pcf, Poco::JSON::Object::Ptr& json, bool a MQLONG value = pcf.getParameterNum(*it); field->set("value", value); - if ( hasDisplayMap(*it) ) + if ( hasTextMap(*it) ) { - std::string displayValue = getDisplayValue(*it, value); - if ( displayValue.empty() ) + std::string text = getTextForValue(*it, value); + if ( text.empty() ) { - displayValue = "Unknown value " + Poco::NumberFormatter::format(value) + " for " + Poco::NumberFormatter::format(*it); + text = "Unknown value " + Poco::NumberFormatter::format(value) + " for " + Poco::NumberFormatter::format(*it); } - field->set("display", displayValue); + field->set("text", text); } } else if ( pcf.isString(*it) ) @@ -129,19 +129,19 @@ void Dictionary::mapToJSON(const PCF& pcf, Poco::JSON::Object::Ptr& json, bool a Poco::JSON::Array::Ptr jsonValues = new Poco::JSON::Array(); field->set("value", jsonValues); - if ( hasDisplayMap(*it) ) + if ( hasTextMap(*it) ) { for(std::vector::iterator vit = values.begin(); vit != values.end(); ++vit) { Poco::JSON::Object::Ptr jsonValueObject = new Poco::JSON::Object(); - std::string displayValue = getDisplayValue(*it, *vit); - if ( displayValue.empty() ) + std::string text = getTextForValue(*it, *vit); + if ( text.empty() ) { - displayValue = "Unknown value " + Poco::NumberFormatter::format(*vit) + " for " + Poco::NumberFormatter::format(*it); + text = "Unknown value " + Poco::NumberFormatter::format(*vit) + " for " + Poco::NumberFormatter::format(*it); } jsonValueObject->set("value", *vit); - jsonValueObject->set("display", displayValue); + jsonValueObject->set("text", text); jsonValues->add(jsonValueObject); } } diff --git a/MQWeb/src/DictionaryCache.cpp b/MQWeb/src/DictionaryCache.cpp index 093a275..5046acc 100644 --- a/MQWeb/src/DictionaryCache.cpp +++ b/MQWeb/src/DictionaryCache.cpp @@ -93,7 +93,7 @@ Poco::SharedPtr DictionaryCache::load(const std::string& name) } int prevAttributeId = -1; - DisplayMap displayMap; + TextMap displayMap; std::string attributeName; diff --git a/MQWeb/src/MQMapper.cpp b/MQWeb/src/MQMapper.cpp index d59ef59..88fba46 100644 --- a/MQWeb/src/MQMapper.cpp +++ b/MQWeb/src/MQMapper.cpp @@ -71,8 +71,7 @@ std::string MQMapper::getReasonString(MQLONG reasonCode) Poco::SharedPtr dict = _dictionaryCache.getDictionary("Reason"); poco_assert_dbg(!dict.isNull()); - - return dict->getDisplayValue(MQIACF_REASON_CODE, reasonCode); + return dict->getTextForValue(MQIACF_REASON_CODE, reasonCode); } std::string MQMapper::getCommandString(MQLONG command) @@ -80,15 +79,15 @@ std::string MQMapper::getCommandString(MQLONG command) Poco::SharedPtr dict = _dictionaryCache.getDictionary("Event"); poco_assert_dbg(!dict.isNull()); - return dict->getDisplayValue(MQIACF_COMMAND, command); + return dict->getTextForValue(MQIACF_COMMAND, command); } MQLONG MQMapper::getOperator(const std::string& op) { - return _operators.getId(op); + return _operators.getIdForName(op); } -const DisplayMap& MQMapper::getDisplayMap(const std::string& objectType, MQLONG id) +const TextMap& MQMapper::getTextMap(const std::string& objectType, MQLONG id) { Poco::SharedPtr dict = _dictionaryCache.getDictionary(objectType); poco_assert_dbg(!dict.isNull()); @@ -99,7 +98,7 @@ const DisplayMap& MQMapper::getDisplayMap(const std::string& objectType, MQLONG logger.error(Poco::Logger::format("$0 not found in dictionary database", objectType)); } - return dict->getDisplayMap(id); + return dict->getTextMap(id); } void MQMapper::addIntegerFilter() @@ -111,7 +110,7 @@ void MQMapper::addIntegerFilter() return; std::string parameterName = integerFilter->optValue("Parameter", ""); - MQLONG parameter = _dictionary->getId(parameterName); + MQLONG parameter = _dictionary->getIdForName(parameterName); if ( parameter == -1 ) return; @@ -124,7 +123,7 @@ void MQMapper::addIntegerFilter() if ( value.isString() ) { // A String is passed ... try to find the MQ integer value - filterValue = _dictionary->getDisplayId(parameter, value); + filterValue = _dictionary->getIdForText(parameter, value); } else if ( value.isNumeric() ) { @@ -142,7 +141,7 @@ void MQMapper::addStringFilter() return; std::string parameterName = stringFilter->optValue("Parameter", ""); - MQLONG parameter = _dictionary->getId(parameterName); + MQLONG parameter = _dictionary->getIdForName(parameterName); if ( parameter == -1 ) return; @@ -171,7 +170,7 @@ void MQMapper::addAttributeList(MQLONG attrId, const std::string& attr) { numList.push_back(MQIACF_ALL); } - MQLONG id = _dictionary->getId(*it); + MQLONG id = _dictionary->getIdForName(*it); if ( id != -1 ) numList.push_back(id); } if ( numList.size() > 0 ) _pcf->addParameterList(attrId, numList); @@ -189,7 +188,7 @@ void MQMapper::addParameterNumFromString(MQLONG parameter, const std::string& na try { std::string stringValue = value.convert(); - MQLONG numValue = _dictionary->getDisplayId(parameter, stringValue); + MQLONG numValue = _dictionary->getIdForText(parameter, stringValue); poco_assert_dbg(numValue != -1); if ( numValue != - 1 ) { From 7f26092e64551efcd190f06a38e40c5ccde51565 Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 14 Jun 2016 13:53:57 +0200 Subject: [PATCH 20/60] Add missing file --- MQWeb/src/WebController.cpp | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 MQWeb/src/WebController.cpp diff --git a/MQWeb/src/WebController.cpp b/MQWeb/src/WebController.cpp new file mode 100644 index 0000000..ed11259 --- /dev/null +++ b/MQWeb/src/WebController.cpp @@ -0,0 +1,100 @@ +/* + * Copyright 2010 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ +#include "MQ/Web/WebController.h" +#include "MQ/Web/MultiView.h" +#include "MQ/Web/JSONView.h" + +namespace MQ +{ +namespace Web +{ + + +WebController::WebController() : MQController() +{ +} + + +WebController::~WebController() +{ +} + + +void WebController::qmgr() +{ + Poco::SharedPtr multiView = new MultiView("base.tpl"); + multiView->add("head", new TemplateView("qmgr/head.tpl")); + multiView->add("main", new TemplateView("qmgr/index.tpl")); + setView(multiView); +} + + +void WebController::queue() +{ + Poco::SharedPtr multiView = new MultiView("base.tpl"); + multiView->add("head", new TemplateView("queue/head.tpl")); + multiView->add("main", new TemplateView("queue/index.tpl")); + setView(multiView); +} + + +void WebController::channel() +{ + Poco::SharedPtr multiView = new MultiView("base.tpl"); + multiView->add("head", new TemplateView("channel/head.tpl")); + multiView->add("main", new TemplateView("channel/index.tpl")); + setView(multiView); +} + + +void WebController::listener() +{ + Poco::SharedPtr multiView = new MultiView("base.tpl"); + multiView->add("head", new TemplateView("listener/head.tpl")); + multiView->add("main", new TemplateView("listener/index.tpl")); + setView(multiView); +} + + +void WebController::message() +{ + std::vector parameters = getParameters(); + if ( parameters.size() < 2 ) + { + setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Missing URI parameters"); + return; + } + + meta().set("queue", parameters[1]); + std::string messageId; + if ( parameters.size() > 2 ) + { + messageId = parameters[2]; + meta().set("messageId", messageId); + } + + Poco::SharedPtr multiView = new MultiView("base.tpl"); + multiView->add("head", new TemplateView("message/head.tpl")); + multiView->add("main", new TemplateView("message/index.tpl")); + setView(multiView); +} + +} } // Namespace MQ::Web From 5dfecbf7bb89f6d2ebed6acff48d6ae89147805d Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 14 Jun 2016 13:54:35 +0200 Subject: [PATCH 21/60] Working on JSONAPI implementation --- MQWeb/include/MQ/Web/MQController.h | 12 +-- MQWeb/src/Controller.cpp | 11 ++- MQWeb/src/ControllerRequestHandler.cpp | 1 - MQWeb/src/MQController.cpp | 22 +++--- MQWeb/src/MQWebController.cpp | 39 +++++++++- MQWeb/src/MessageController.cpp | 100 +++++++++++++++++++------ MQWeb/src/QueueController.cpp | 4 +- MQWeb/src/QueueManagerController.cpp | 51 +++++++++---- MQWeb/src/QueueManagerMapper.cpp | 6 +- MQWeb/src/QueueMapper.cpp | 6 +- 10 files changed, 190 insertions(+), 62 deletions(-) diff --git a/MQWeb/include/MQ/Web/MQController.h b/MQWeb/include/MQ/Web/MQController.h index 23b7340..237db81 100644 --- a/MQWeb/include/MQ/Web/MQController.h +++ b/MQWeb/include/MQ/Web/MQController.h @@ -64,8 +64,8 @@ class MQController : public Controller /// Creates an IntegerFilterCommand or StringFilterCommand /// when a filter is passed. - Poco::JSON::Object& mqwebData(); - /// Returns the JSON object for storing MQWeb data. + Poco::JSON::Object& meta(); + /// Returns the JSON object for storing meta data (see JSON-API). /// This object can be used to store common data like queuemanager name, /// queue, elapsed time, ... @@ -84,7 +84,7 @@ class MQController : public Controller CommandServer* _commandServer; - Poco::JSON::Object::Ptr _mqwebData; + Poco::JSON::Object::Ptr _meta; Poco::Stopwatch _stopwatch; @@ -102,11 +102,11 @@ inline CommandServer* MQController::commandServer() return _commandServer; } -inline Poco::JSON::Object& MQController::mqwebData() +inline Poco::JSON::Object& MQController::meta() { - poco_assert_dbg(_mqwebData); + poco_assert_dbg(_meta); - return *_mqwebData; + return *_meta; } }} // Namespace MQ::Web diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index 2441103..72f46e7 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -37,7 +37,7 @@ namespace Web { -Controller::Controller() : _data(new Poco::JSON::Object()) +Controller::Controller() : _data(new Poco::JSON::Object()), _request(NULL), _response(NULL) { } @@ -58,7 +58,14 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H _request = &request; _response = &response; - if ( _parameters.size() > 0 ) + if ( isJSONAPI() ) + { + if ( isGet() ) + { + _action = "inquire"; + } + } + else if ( _parameters.size() > 0 ) { _action = _parameters.front(); _parameters.erase(_parameters.begin()); diff --git a/MQWeb/src/ControllerRequestHandler.cpp b/MQWeb/src/ControllerRequestHandler.cpp index db543fd..714d6c4 100644 --- a/MQWeb/src/ControllerRequestHandler.cpp +++ b/MQWeb/src/ControllerRequestHandler.cpp @@ -19,7 +19,6 @@ * permissions and limitations under the Licence. */ #include "MQ/Web/ControllerRequestHandler.h" -#include "MQ/Web/AppRequestHandler.h" #include "MQ/Web/AuthenticationInformationController.h" #include "MQ/Web/AuthorityRecordController.h" #include "MQ/Web/AuthorityServiceController.h" diff --git a/MQWeb/src/MQController.cpp b/MQWeb/src/MQController.cpp index 975e51f..d3763f5 100644 --- a/MQWeb/src/MQController.cpp +++ b/MQWeb/src/MQController.cpp @@ -34,9 +34,9 @@ namespace MQ { namespace Web { -MQController::MQController() : Controller(), _mqwebData(new Poco::JSON::Object()), _commandServer(NULL) +MQController::MQController() : Controller(), _meta(new Poco::JSON::Object()), _commandServer(NULL) { - set("mqweb", _mqwebData); + set("meta", _meta); } @@ -50,13 +50,13 @@ void MQController::beforeAction() _stopwatch.start(); Poco::JSON::Object::Ptr date = new Poco::JSON::Object(); - _mqwebData->set("date", date); + _meta->set("date", date); date->set("start", Poco::DateTimeFormatter::format(Poco::Timestamp(), Poco::DateTimeFormat::HTTP_FORMAT)); MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); - _mqwebData->set("client", mqSystem.client()); + _meta->set("client", mqSystem.client()); std::string qmgrName; if ( config.hasProperty("mq.web.qmgr") ) @@ -94,9 +94,9 @@ void MQController::beforeAction() } _qmgrPoolGuard = new QueueManagerPoolGuard(qmgrPool, qmgr); - _mqwebData->set("qmgr", qmgr->name()); - _mqwebData->set("zos", qmgr->zos()); - _mqwebData->set("qmgrId", qmgr->id()); + _meta->set("qmgr", qmgr->name()); + _meta->set("zos", qmgr->zos()); + _meta->set("qmgrId", qmgr->id()); _commandServer = qmgr->commandServer(); if ( _commandServer == NULL ) @@ -117,8 +117,8 @@ void MQController::beforeAction() if ( _commandServer != NULL ) { - _mqwebData->set("replyq", _commandServer->replyQName()); - _mqwebData->set("cmdq", _commandServer->commandQName()); + _meta->set("replyq", _commandServer->replyQName()); + _meta->set("cmdq", _commandServer->commandQName()); } } @@ -155,14 +155,14 @@ void MQController::handleException(const MQException& mqe) void MQController::afterAction() { - Poco::JSON::Object::Ptr date = _mqwebData->getObject("date"); + Poco::JSON::Object::Ptr date = _meta->getObject("date"); if ( ! date.isNull() ) { date->set("end", Poco::DateTimeFormatter::format(Poco::Timestamp(), Poco::DateTimeFormat::HTTP_FORMAT)); } _stopwatch.stop(); - _mqwebData->set("elapsed", (double) _stopwatch.elapsed() / 1000000 ); + _meta->set("elapsed", (double) _stopwatch.elapsed() / 1000000 ); Controller::afterAction(); } diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp index ae15a5a..4c12ae9 100644 --- a/MQWeb/src/MQWebController.cpp +++ b/MQWeb/src/MQWebController.cpp @@ -20,6 +20,12 @@ */ #include "Poco/JSON/Object.h" #include "Poco/Util/Application.h" +#include "Poco/Process.h" +#include "Poco/Pipe.h" +#include "Poco/PipeStream.h" +#include "Poco/LineEndingConverter.h" +#include "Poco/RegularExpression.h" +#include "Poco/Logger.h" #include "MQ/Web/MQWebController.h" #include "MQ/Web/Version.h" @@ -81,8 +87,39 @@ void MQWebController::list() queuemanagers->add(*it); } } - else + else // Binding mode, try dspmq to get the list of installed queuemanagers { + Poco::RegularExpression re("QMNAME\\((.*)\\)\\s*STATUS\\((.*)\\)"); + + Poco::Process::Args args; + args.push_back("-n"); + args.push_back("-s"); + Poco::Pipe outPipe; + + try + { + Poco::ProcessHandle ph = Poco::Process::launch("C:/Program Files (x86)/IBM/WebSphere MQ Runtime V750/bin/dspmq", args, 0, &outPipe, 0); + + Poco::PipeInputStream istr(outPipe); + + std::string line; + int lc = 0; + while(std::getline(istr, line)) + { + Poco::RegularExpression::MatchVec match; + if ( re.match(line, 0, match) == 3 ) + { + queuemanagers->add(line.substr(match[1].offset, match[1].length)); + } + } + int rc = ph.wait(); + //assert (rc == 1); + } + catch(Poco::SystemException& e) + { + Poco::Logger& logger = Poco::Logger::get("mq.web"); + poco_error(logger, e.displayText()); + } } } diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 910a748..345cd2b 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -65,7 +65,7 @@ namespace Web { #define RCSTR(x) (x, #x) Dictionary MessageController::_reportCodes = Dictionary() - (0, "Report", DisplayMapInitializer + (0, "Report", TextMapInitializer RCSTR(MQRO_EXCEPTION ) RCSTR(MQRO_EXCEPTION_WITH_DATA ) RCSTR(MQRO_EXCEPTION_WITH_FULL_DATA ) @@ -93,7 +93,7 @@ Dictionary MessageController::_reportCodes = Dictionary() ; Dictionary MessageController::_messageTypeCodes = Dictionary() - (0, "MsgType", DisplayMapInitializer + (0, "MsgType", TextMapInitializer RCSTR(MQMT_REQUEST) RCSTR(MQMT_REPLY) RCSTR(MQMT_DATAGRAM) @@ -104,7 +104,7 @@ Dictionary MessageController::_messageTypeCodes = Dictionary() ; Dictionary MessageController::_feedbackCodes = Dictionary() - (0, "Feedback", DisplayMapInitializer + (0, "Feedback", TextMapInitializer RCSTR(MQFB_NONE ) RCSTR(MQFB_QUIT ) RCSTR(MQFB_EXPIRATION ) @@ -194,7 +194,7 @@ void MessageController::browse() } std::string queueName = parameters[1]; - mqwebData().set("queue", queueName); + meta().set("queue", queueName); int limit = -1; int maxMessageSize = 1024; @@ -204,7 +204,7 @@ void MessageController::browse() { limit = 1; messageId = parameters[2]; - mqwebData().set("messageId", messageId); + meta().set("messageId", messageId); } else { @@ -239,7 +239,7 @@ void MessageController::browse() { q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2, 0); } - catch(MQException mqe) + catch(MQException& mqe) { if ( mqe.reason() == MQRC_NO_MSG_AVAILABLE ) { @@ -253,9 +253,55 @@ void MessageController::browse() // real length msg.buffer().resize(msg.dataLength(), false); msg.clear(); - q.get(msg, MQGMO_BROWSE_NEXT); + try + { + q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); + } + catch(MQException& mqe2) + { + if ( mqe2.reason() != MQRC_TRUNCATED_MSG_ACCEPTED ) + { + throw; + } + } } - else + else if ( msg.getFormat().compare(MQFMT_XMIT_Q_HEADER) == 0 ) + { + // ignore size limit for xmitq messages and retry to get it with at least the + // length of the xmitq header + msg.buffer().resize(sizeof(MQXQH), false); + msg.clear(); + try + { + q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); + } + catch(MQException& mqe2) + { + if ( mqe2.reason() != MQRC_TRUNCATED_MSG_ACCEPTED ) + { + throw; + } + } + } + else if ( msg.getFormat().compare(MQFMT_DEAD_LETTER_HEADER) == 0 ) + { + // ignore size limit for dlh messages and retry to get it with at least the + // length of the dlh header + msg.buffer().resize(sizeof(MQDLH), false); + msg.clear(); + try + { + q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); + } + catch(MQException& mqe2) + { + if ( mqe2.reason() != MQRC_TRUNCATED_MSG_ACCEPTED ) + { + throw; + } + } + } + else { continue; // TODO: or throw ???; } @@ -278,14 +324,20 @@ void MessageController::browse() Poco::JSON::Object::Ptr jsonDLH = new Poco::JSON::Object(); jsonMessage->set("dlh", jsonDLH); jsonDLH->set("Version", dlh->Version); - jsonDLH->set("Reason", dlh->Reason); + + Poco::JSON::Object::Ptr jsonReason = new Poco::JSON::Object(); + jsonDLH->set("Reason", jsonReason); + jsonReason->set("code", dlh->Reason); + std::string reasonCodeStr = MQMapper::getReasonString(dlh->Reason); + jsonReason->set("desc", reasonCodeStr); + jsonDLH->set("DestQName", Poco::trimRight(std::string(dlh->DestQName, MQ_Q_NAME_LENGTH))); jsonDLH->set("DestQMgrName", Poco::trimRight(std::string(dlh->DestQMgrName, MQ_Q_MGR_NAME_LENGTH))); jsonDLH->set("Encoding", dlh->Encoding); jsonDLH->set("CodedCharSetId", dlh->CodedCharSetId); jsonDLH->set("Format", Poco::trimRight(std::string(dlh->Format, MQ_FORMAT_LENGTH))); - const DisplayMap& applTypes = MQMapper::getDisplayMap("QueueStatus", MQIA_APPL_TYPE); - DisplayMap::const_iterator it = applTypes.find(dlh->PutApplType); + const TextMap& applTypes = MQMapper::getTextMap("QueueStatus", MQIA_APPL_TYPE); + TextMap::const_iterator it = applTypes.find(dlh->PutApplType); jsonDLH->set("PutApplType", it == applTypes.end() ? "" : it->second); jsonDLH->set("PutApplName", Poco::trimRight(std::string(dlh->PutApplName, MQ_PUT_APPL_NAME_LENGTH))); @@ -305,7 +357,7 @@ void MessageController::browse() Poco::JSON::Object::Ptr jsonEvent = new Poco::JSON::Object(); jsonMessage->set("event", jsonEvent); Poco::JSON::Object::Ptr jsonReason = new Poco::JSON::Object(); - jsonEvent->set("reason", jsonReason); + jsonEvent->set("Reason", jsonReason); jsonReason->set("code", pcfEvent.getReasonCode()); std::string reasonCodeStr = MQMapper::getReasonString(pcfEvent.getReasonCode()); jsonReason->set("desc", reasonCodeStr); @@ -390,10 +442,10 @@ void MessageController::dump() } std::string queueName = parameters[1]; - mqwebData().set("queue", queueName); + meta().set("queue", queueName); std::string messageId = parameters[2]; - mqwebData().set("messageId", messageId); + meta().set("messageId", messageId); Message message; @@ -553,7 +605,7 @@ void MessageController::event() { limit = 1; messageId = parameters[2]; - mqwebData().set("messageId", messageId); + meta().set("messageId", messageId); } else { @@ -662,10 +714,10 @@ void MessageController::event() void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Object& obj) { - std::string report = _reportCodes.getDisplayValue(0, message.getReport()); + std::string report = _reportCodes.getTextForValue(0, message.getReport()); obj.set("Report", report); - std::string msgType = _messageTypeCodes.getDisplayValue(0, message.getMsgType()); + std::string msgType = _messageTypeCodes.getTextForValue(0, message.getMsgType()); if ( msgType.empty() ) { obj.set("MsgType", message.getMsgType()); @@ -676,7 +728,7 @@ void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Obj } obj.set("Expiry", message.getExpiry()); - obj.set("Feedback", _feedbackCodes.getDisplayValue(0, message.getFeedback())); + obj.set("Feedback", _feedbackCodes.getTextForValue(0, message.getFeedback())); obj.set("Encoding", message.getEncoding()); obj.set("CodedCharSetId", message.getCodedCharSetId()); obj.set("Format", Poco::trimRight(message.getFormat())); @@ -691,8 +743,8 @@ void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Obj obj.set("AccountingToken", message.accountingToken()->toHex()); obj.set("ApplIdentityData", message.getApplIdentityData()); - const DisplayMap& applTypes = MQMapper::getDisplayMap("QueueStatus", MQIA_APPL_TYPE); - DisplayMap::const_iterator it = applTypes.find(message.getPutApplType()); + const TextMap& applTypes = MQMapper::getTextMap("QueueStatus", MQIA_APPL_TYPE); + TextMap::const_iterator it = applTypes.find(message.getPutApplType()); obj.set("PutApplType", it == applTypes.end() ? "" : it->second); obj.set("PutApplName", message.getPutApplName()); @@ -718,7 +770,7 @@ void MessageController::mapJSONToMessage(const Poco::JSON::Object& obj, Message& if ( obj.has("Report") ) { - MQLONG reportCode = _reportCodes.getDisplayId(0, obj.optValue("Report", "")); + MQLONG reportCode = _reportCodes.getIdForText(0, obj.optValue("Report", "")); if ( reportCode != -1 ) { message.setReport(reportCode); @@ -729,7 +781,7 @@ void MessageController::mapJSONToMessage(const Poco::JSON::Object& obj, Message& if ( obj.has("Feedback") ) { - MQLONG feedbackCode = _feedbackCodes.getDisplayId(0, obj.optValue("Feedback", "")); + MQLONG feedbackCode = _feedbackCodes.getIdForText(0, obj.optValue("Feedback", "")); if ( feedbackCode != -1 ) { message.setFeedback(feedbackCode); @@ -768,7 +820,7 @@ void MessageController::mapJSONToMessage(const Poco::JSON::Object& obj, Message& if ( obj.has("PutApplType") ) { Poco::SharedPtr dictionary = MQMapper::dictionary("QueueStatus"); - MQLONG id = dictionary->getDisplayId(MQIA_APPL_TYPE, obj.optValue("PutApplType", "")); + MQLONG id = dictionary->getIdForText(MQIA_APPL_TYPE, obj.optValue("PutApplType", "")); if ( id == -1 ) // User defined? { message.setPutApplType(obj.optValue("PutApplType", MQAT_DEFAULT)); @@ -805,7 +857,7 @@ void MessageController::mapJSONToMessage(const Poco::JSON::Object& obj, Message& if ( obj.has("MsgSeqNumber") ) message.setMsgSeqNumber(obj.optValue("MsgSeqNumber", 0)); if ( obj.has("MsgType") ) { - MQLONG msgTypeCode = _messageTypeCodes.getDisplayId(0, obj.optValue("MsgType", "")); + MQLONG msgTypeCode = _messageTypeCodes.getIdForText(0, obj.optValue("MsgType", "")); if ( msgTypeCode != -1 ) { message.setMsgType(msgTypeCode); diff --git a/MQWeb/src/QueueController.cpp b/MQWeb/src/QueueController.cpp index a313075..a75ab4c 100644 --- a/MQWeb/src/QueueController.cpp +++ b/MQWeb/src/QueueController.cpp @@ -48,7 +48,7 @@ void QueueController::inquire() else { pcfParameters = new Poco::JSON::Object(); - set("input", pcfParameters); + meta().set("input", pcfParameters); std::vector parameters = getParameters(); // First parameter is queuemanager @@ -180,7 +180,7 @@ void QueueController::inquire() } QueueMapper mapper(*commandServer(), pcfParameters); - set("queues", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/QueueManagerController.cpp b/MQWeb/src/QueueManagerController.cpp index af0fc5f..5610a8b 100644 --- a/MQWeb/src/QueueManagerController.cpp +++ b/MQWeb/src/QueueManagerController.cpp @@ -21,6 +21,8 @@ #include "MQ/Web/QueueManagerController.h" #include "MQ/Web/QueueManagerMapper.h" +#include "Poco/StringTokenizer.h" + namespace MQ { namespace Web @@ -43,27 +45,49 @@ void QueueManagerController::inquire() if ( data().has("input") && data().isObject("input") ) { + // Posted JSON pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); - set("input", pcfParameters); - - Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); - formElementToJSONArray("QMgrAttrs", attrs); - if ( attrs->size() == 0 ) // Nothing found for QMgrAttrs, try Attrs + meta().set("input", pcfParameters); + if ( isJSONAPI() ) { - formElementToJSONArray("Attrs", attrs); + if ( form().has("fields") ) + { + std::string fields = form().get("fields"); + Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); + + Poco::StringTokenizer tokenizer(fields, ",", Poco::StringTokenizer::TOK_IGNORE_EMPTY); + for(Poco::StringTokenizer::Iterator it = tokenizer.begin(); it != tokenizer.end(); ++it) + { + attrs->add(*it); + } + + if ( attrs->size() > 0 ) + { + pcfParameters->set("QMgrAttrs", attrs); + } + } } - if ( attrs->size() > 0 ) + else { - pcfParameters->set("QMgrAttrs", attrs); - } + Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); + formElementToJSONArray("QMgrAttrs", attrs); + if ( attrs->size() == 0 ) // Nothing found for QMgrAttrs, try Attrs + { + formElementToJSONArray("Attrs", attrs); + } + if ( attrs->size() > 0 ) + { + pcfParameters->set("QMgrAttrs", attrs); + } - if ( form().has("CommandScope") ) - { - pcfParameters->set("CommandScope", form().get("CommandScope")); + if ( form().has("CommandScope") ) + { + pcfParameters->set("CommandScope", form().get("CommandScope")); + } } } @@ -71,7 +95,8 @@ void QueueManagerController::inquire() Poco::JSON::Array::Ptr json = mapper.inquire(); if ( json->size() > 0 ) { - set("qmgr", json->get(0)); + Poco::JSON::Object::Ptr data = new Poco::JSON::Object(); + set("data", json->get(0)); } } diff --git a/MQWeb/src/QueueManagerMapper.cpp b/MQWeb/src/QueueManagerMapper.cpp index 843b652..76f07b7 100644 --- a/MQWeb/src/QueueManagerMapper.cpp +++ b/MQWeb/src/QueueManagerMapper.cpp @@ -70,7 +70,11 @@ Poco::JSON::Array::Ptr QueueManagerMapper::inquire() if ( (*it)->isExtendedResponse() ) // Skip extended response continue; - json->add(createJSON(**it)); + Poco::JSON::Object::Ptr data = new Poco::JSON::Object(); + json->add(data); + data->set("type", "queuemanager"); + data->set("id", (*it)->getParameterString(MQCA_Q_MGR_NAME)); + data->set("attributes", createJSON(**it)); } return json; diff --git a/MQWeb/src/QueueMapper.cpp b/MQWeb/src/QueueMapper.cpp index 2e2998f..fc8e344 100644 --- a/MQWeb/src/QueueMapper.cpp +++ b/MQWeb/src/QueueMapper.cpp @@ -136,7 +136,11 @@ Poco::JSON::Array::Ptr QueueMapper::inquire() continue; } - json->add(createJSON(**it)); + Poco::JSON::Object::Ptr data = new Poco::JSON::Object(); + json->add(data); + data->set("type", "queue"); + data->set("id", (*it)->getParameterString(MQCA_Q_NAME)); + data->set("attributes", createJSON(**it)); } return json; From 6faa915ea60c2ff1e92dc1023472639b6ca10279 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 15 Jun 2016 11:20:46 +0200 Subject: [PATCH 22/60] Add missing file --- MQWeb/include/MQ/Web/WebController.h | 84 ++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 MQWeb/include/MQ/Web/WebController.h diff --git a/MQWeb/include/MQ/Web/WebController.h b/MQWeb/include/MQ/Web/WebController.h new file mode 100644 index 0000000..fbbc57c --- /dev/null +++ b/MQWeb/include/MQ/Web/WebController.h @@ -0,0 +1,84 @@ +/* + * Copyright 2010 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ + +#ifndef _MQWeb_WebController_h +#define _MQWeb_WebController_h + +#include "MQ/Web/MQController.h" +#include "MQ/Web/MapInitializer.h" + +namespace MQ { +namespace Web { + +class WebController : public MQController + /// Controller that shows the details of a queue +{ +public: + WebController(); + /// Constructor + + virtual ~WebController(); + /// Destructor + + virtual const std::map& getActions() const; + /// Returns all available actions + + bool isJSON() const; + + void qmgr(); + + void queue(); + + void channel(); + + void chstatus(); + + void listener(); + + void lstatus(); + + void message(); + +private: +}; + + +inline const Controller::ActionMap& WebController::getActions() const +{ + static Controller::ActionMap actions + = MapInitializer + ("qmgr", static_cast(&WebController::qmgr)) + ("queue", static_cast(&WebController::queue)) + ("channel", static_cast(&WebController::channel)) + ("listener", static_cast(&WebController::listener)) + ("message", static_cast(&WebController::message)) + ; + return actions; +} + +inline bool WebController::isJSON() const +{ + return false; +} + +} } // Namespace MQ::Web + +#endif // _MQWeb_WebController_h From e08bfa4c143fc060cb71fd8e2445dc537bb158b0 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 15 Jun 2016 11:21:28 +0200 Subject: [PATCH 23/60] Rename display into text --- MQDictionary/src/Application.cpp | 388 +++++++++++++++---------------- MQWeb/src/DictionaryCache.cpp | 18 +- 2 files changed, 203 insertions(+), 203 deletions(-) diff --git a/MQDictionary/src/Application.cpp b/MQDictionary/src/Application.cpp index f1b7bc5..71cac21 100644 --- a/MQDictionary/src/Application.cpp +++ b/MQDictionary/src/Application.cpp @@ -15,77 +15,77 @@ using namespace Poco::Data::Keywords; #define MQCONST2STR(x) (x, #x) Dictionary queueManagerDictionary = Dictionary() - (MQIA_ACCOUNTING_CONN_OVERRIDE, "AccountingConnOverride", DisplayMapInitializer + (MQIA_ACCOUNTING_CONN_OVERRIDE, "AccountingConnOverride", TextMapInitializer (MQMON_DISABLED, "Disabled") (MQMON_ENABLED, "Enabled") ) (MQIA_ACCOUNTING_INTERVAL, "AccountingInterval") - (MQIA_ACTIVITY_CONN_OVERRIDE, "ActivityConnOverride", DisplayMapInitializer + (MQIA_ACTIVITY_CONN_OVERRIDE, "ActivityConnOverride", TextMapInitializer (MQMON_DISABLED, "Disabled") (MQMON_ENABLED, "Enabled") ) - (MQIA_ACTIVITY_RECORDING, "ActivityRecording", DisplayMapInitializer + (MQIA_ACTIVITY_RECORDING, "ActivityRecording", TextMapInitializer (MQRECORDING_DISABLED, "Disabled") (MQRECORDING_MSG, "Msg") (MQRECORDING_Q, "Queue") ) - (MQIA_ACTIVITY_TRACE, "ActivityTrace", DisplayMapInitializer + (MQIA_ACTIVITY_TRACE, "ActivityTrace", TextMapInitializer (MQMON_OFF, "Off") (MQMON_ON, "On") ) - (MQIA_ADOPTNEWMCA_CHECK, "AdoptNewMCACheck", DisplayMapInitializer + (MQIA_ADOPTNEWMCA_CHECK, "AdoptNewMCACheck", TextMapInitializer (MQADOPT_CHECK_Q_MGR_NAME, "QmgrName") (MQADOPT_CHECK_NET_ADDR, "NetAddr") (MQADOPT_CHECK_ALL, "All") (MQADOPT_CHECK_NONE, "None") ) - (MQIA_ADOPTNEWMCA_TYPE, "AdoptNewMCAType", DisplayMapInitializer + (MQIA_ADOPTNEWMCA_TYPE, "AdoptNewMCAType", TextMapInitializer (MQADOPT_TYPE_NO, "No") (MQADOPT_TYPE_ALL, "All") ) (MQCA_ALTERATION_DATE, "AlterationDate") (MQCA_ALTERATION_TIME, "AlterationTime") - (MQIA_AUTHORITY_EVENT, "AuthorityEvent", DisplayMapInitializer + (MQIA_AUTHORITY_EVENT, "AuthorityEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) - (MQIA_BRIDGE_EVENT, "BridgeEvent", DisplayMapInitializer + (MQIA_BRIDGE_EVENT, "BridgeEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) #ifdef MQIA_CERT_VAL_POLICY - (MQIA_CERT_VAL_POLICY, "CertificateValPolicy", DisplayMapInitializer + (MQIA_CERT_VAL_POLICY, "CertificateValPolicy", TextMapInitializer (MQ_CERT_VAL_POLICY_ANY, "Policy Any") (MQ_CERT_VAL_POLICY_RFC5280, "Policy RFC5280") ) #endif - (MQIA_QMGR_CFCONLOS, "CFConlos", DisplayMapInitializer + (MQIA_QMGR_CFCONLOS, "CFConlos", TextMapInitializer (MQCFCONLOS_TERMINATE, "Terminate") (MQCFCONLOS_TOLERATE, "Tolerate") ) - (MQIA_CHANNEL_AUTO_DEF, "ChannelAutoDef", DisplayMapInitializer + (MQIA_CHANNEL_AUTO_DEF, "ChannelAutoDef", TextMapInitializer (MQCHAD_DISABLED, "Disabled") (MQCHAD_ENABLED, "Enabled") ) - (MQIA_CHANNEL_AUTO_DEF_EVENT, "ChannelAutoDefEvent", DisplayMapInitializer + (MQIA_CHANNEL_AUTO_DEF_EVENT, "ChannelAutoDefEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) (MQCA_CHANNEL_AUTO_DEF_EXIT, "ChannelAutoDefExit") - (MQIA_CHLAUTH_RECORDS, "ChannelAuthenticationRecords", DisplayMapInitializer + (MQIA_CHLAUTH_RECORDS, "ChannelAuthenticationRecords", TextMapInitializer (MQCHLA_DISABLED, "Disabled") (MQCHLA_ENABLED, "Enabled") ) - (MQIA_CHANNEL_EVENT, "ChannelEvent", DisplayMapInitializer + (MQIA_CHANNEL_EVENT, "ChannelEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") (MQEVR_EXCEPTION, "Exception") ) - (MQIA_CHINIT_CONTROL, "ChannelInitiatorControl", DisplayMapInitializer + (MQIA_CHINIT_CONTROL, "ChannelInitiatorControl", TextMapInitializer (MQSVC_CONTROL_MANUAL, "Manual") (MQSVC_CONTROL_Q_MGR, "Qmgr") ) - (MQIA_MONITORING_CHANNEL, "ChannelMonitoring", DisplayMapInitializer + (MQIA_MONITORING_CHANNEL, "ChannelMonitoring", TextMapInitializer (MQMON_NONE, "None") (MQMON_Q_MGR, "Qmgr") (MQMON_OFF, "Off") @@ -93,7 +93,7 @@ Dictionary queueManagerDictionary = Dictionary() (MQMON_MEDIUM, "Medium") (MQMON_HIGH, "High") ) - (MQIA_STATISTICS_CHANNEL, "ChannelStatistics", DisplayMapInitializer + (MQIA_STATISTICS_CHANNEL, "ChannelStatistics", TextMapInitializer (MQMON_NONE, "None") (MQMON_Q_MGR, "Qmgr") (MQMON_OFF, "Off") @@ -104,19 +104,19 @@ Dictionary queueManagerDictionary = Dictionary() (MQIA_CHINIT_ADAPTERS, "ChinitAdapters") (MQIA_CHINIT_DISPATCHERS, "ChinitDispatchers") (MQCA_CHINIT_SERVICE_PARM, "ChinitServiceParm") - (MQIA_CHINIT_TRACE_AUTO_START, "ChinitTraceAutoStart", DisplayMapInitializer + (MQIA_CHINIT_TRACE_AUTO_START, "ChinitTraceAutoStart", TextMapInitializer (MQTRAXSTR_YES, "Yes") (MQTRAXSTR_NO, "No") ) (MQIA_CHINIT_TRACE_TABLE_SIZE, "ChinitTraceTableSize") - (MQIA_MONITORING_AUTO_CLUSSDR, "ClusterSenderMonitoringDefault", DisplayMapInitializer + (MQIA_MONITORING_AUTO_CLUSSDR, "ClusterSenderMonitoringDefault", TextMapInitializer (MQMON_Q_MGR, "Qmgr") (MQMON_OFF, "Off") (MQMON_LOW, "Low") (MQMON_MEDIUM, "Medium") (MQMON_HIGH, "High") ) - (MQIA_STATISTICS_AUTO_CLUSSDR, "ClusterSenderStatistics", DisplayMapInitializer + (MQIA_STATISTICS_AUTO_CLUSSDR, "ClusterSenderStatistics", TextMapInitializer (MQMON_Q_MGR, "Qmgr") (MQMON_OFF, "Off") (MQMON_LOW, "Low") @@ -127,19 +127,19 @@ Dictionary queueManagerDictionary = Dictionary() (MQCA_CLUSTER_WORKLOAD_EXIT, "ClusterWorkLoadExit") (MQIA_CLUSTER_WORKLOAD_LENGTH, "ClusterWorkLoadLength") (MQIA_CLWL_MRU_CHANNELS, "CLWLMRUChannels") - (MQIA_CLWL_USEQ, "CLWLUseQ", DisplayMapInitializer + (MQIA_CLWL_USEQ, "CLWLUseQ", TextMapInitializer (MQCLWL_USEQ_ANY, "Any") (MQCLWL_USEQ_LOCAL, "Local") (MQCLWL_USEQ_AS_Q_MGR, "AsQMgr") ) (MQIA_CODED_CHAR_SET_ID, "CodedCharSetID") - (MQIA_COMMAND_EVENT, "CommandEvent", DisplayMapInitializer + (MQIA_COMMAND_EVENT, "CommandEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") (MQEVR_NO_DISPLAY, "NoDisplay") ) (MQCA_COMMAND_INPUT_Q_NAME, "CommandInputQName") - (MQIA_COMMAND_LEVEL, "CommandLevel", DisplayMapInitializer + (MQIA_COMMAND_LEVEL, "CommandLevel", TextMapInitializer (MQCMDL_LEVEL_1, "Level 1") (MQCMDL_LEVEL_101, "Level 101") (MQCMDL_LEVEL_110, "Level 110") @@ -158,11 +158,11 @@ Dictionary queueManagerDictionary = Dictionary() (MQCMDL_LEVEL_701, "Level 701") (MQCMDL_LEVEL_710, "Level 710") ) - (MQIA_CMD_SERVER_CONTROL, "CommandServerControl", DisplayMapInitializer + (MQIA_CMD_SERVER_CONTROL, "CommandServerControl", TextMapInitializer (MQSVC_CONTROL_MANUAL, "Manual") (MQSVC_CONTROL_Q_MGR, "Qmgr") ) - (MQIA_CONFIGURATION_EVENT, "ConfigurationEvent", DisplayMapInitializer + (MQIA_CONFIGURATION_EVENT, "ConfigurationEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) @@ -171,56 +171,56 @@ Dictionary queueManagerDictionary = Dictionary() (MQCA_CUSTOM, "Custom") (MQCA_DEAD_LETTER_Q_NAME, "DeadLetterQName") #ifdef MQIA_DEF_CLUSTER_XMIT_Q_TYPE - (MQIA_DEF_CLUSTER_XMIT_Q_TYPE, "DefClusterXmitQueueType", DisplayMapInitializer + (MQIA_DEF_CLUSTER_XMIT_Q_TYPE, "DefClusterXmitQueueType", TextMapInitializer (MQCLXQ_SCTQ, "SCTQ") (MQCLXQ_CHANNEL, "Channel") ) #endif (MQCA_DEF_XMIT_Q_NAME, "DefXmitQName") - (MQIA_DIST_LISTS, "DistLists", DisplayMapInitializer + (MQIA_DIST_LISTS, "DistLists", TextMapInitializer (MQDL_SUPPORTED, "Supported") (MQDL_NOT_SUPPORTED, "Not Supported") ) (MQCA_DNS_GROUP, "DNSGroup") - (MQIA_DNS_WLM, "DNSWLM", DisplayMapInitializer + (MQIA_DNS_WLM, "DNSWLM", TextMapInitializer (MQDNSWLM_YES, "Yes") (MQDNSWLM_NO, "No") ) - (MQIA_SUITE_B_STRENGTH, "EncryptionPolicySuiteB", DisplayMapInitializer + (MQIA_SUITE_B_STRENGTH, "EncryptionPolicySuiteB", TextMapInitializer (MQ_SUITE_B_NONE, "None") (MQ_SUITE_B_128_BIT, "128 Bit") (MQ_SUITE_B_192_BIT, "192 Bit") ) (MQIA_EXPIRY_INTERVAL, "ExpiryInterval") - (MQIA_GROUP_UR, "GroupUR", DisplayMapInitializer + (MQIA_GROUP_UR, "GroupUR", TextMapInitializer (MQGUR_DISABLED, "Disabled") (MQGUR_ENABLED, "Enabled") ) - (MQIA_IGQ_PUT_AUTHORITY, "IGQPutAuthority", DisplayMapInitializer + (MQIA_IGQ_PUT_AUTHORITY, "IGQPutAuthority", TextMapInitializer (MQIGQPA_DEFAULT, "Default") (MQIGQPA_CONTEXT, "Context") (MQIGQPA_ONLY_IGQ, "Only IGQ") (MQIGQPA_ALTERNATE_OR_IGQ, "Alternate or IGQ") ) (MQCA_IGQ_USER_ID, "IGQUserId") - (MQIA_INHIBIT_EVENT, "InhibitEvent", DisplayMapInitializer + (MQIA_INHIBIT_EVENT, "InhibitEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) - (MQIA_INTRA_GROUP_QUEUING, "IntraGroupQueueing", DisplayMapInitializer + (MQIA_INTRA_GROUP_QUEUING, "IntraGroupQueueing", TextMapInitializer (MQIGQ_DISABLED, "Disabled") (MQIGQ_ENABLED, "Enabled") ) - (MQIA_IP_ADDRESS_VERSION, "IPAddressVersion", DisplayMapInitializer + (MQIA_IP_ADDRESS_VERSION, "IPAddressVersion", TextMapInitializer (MQIPADDR_IPV4, "IPV4") (MQIPADDR_IPV6, "IPV6") ) (MQIA_LISTENER_TIMER, "ListenerTimer") - (MQIA_LOCAL_EVENT, "LocalEvent", DisplayMapInitializer + (MQIA_LOCAL_EVENT, "LocalEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) - (MQIA_LOGGER_EVENT, "LoggerEvent", DisplayMapInitializer + (MQIA_LOGGER_EVENT, "LoggerEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) @@ -235,11 +235,11 @@ Dictionary queueManagerDictionary = Dictionary() (MQIA_MAX_PRIORITY, "MaxPriority") (MQIA_MAX_PROPERTIES_LENGTH, "MaxPropertiesLength") (MQIA_MAX_UNCOMMITTED_MSGS, "MaxUncommitedMsgs") - (MQIA_ACCOUNTING_MQI, "MQIAccounting", DisplayMapInitializer + (MQIA_ACCOUNTING_MQI, "MQIAccounting", TextMapInitializer (MQMON_OFF, "Off") (MQMON_ON, "On") ) - (MQIA_STATISTICS_MQI, "MQIStatistics", DisplayMapInitializer + (MQIA_STATISTICS_MQI, "MQIStatistics", TextMapInitializer (MQMON_OFF, "Off") (MQMON_ON, "On") ) @@ -247,11 +247,11 @@ Dictionary queueManagerDictionary = Dictionary() (MQIA_OUTBOUND_PORT_MAX, "OutBoundPortMax") (MQIA_OUTBOUND_PORT_MIN, "OutBoundPortMin") (MQCA_PARENT, "Parent") - (MQIA_PERFORMANCE_EVENT, "LoggerEvent", DisplayMapInitializer + (MQIA_PERFORMANCE_EVENT, "LoggerEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) - (MQIA_PLATFORM, "Platform", DisplayMapInitializer + (MQIA_PLATFORM, "Platform", TextMapInitializer (MQPL_UNIX, "UNIX") (MQPL_NSK, "Compaq NonStop Kernel") (MQPL_OS400, "i5/OS") @@ -260,32 +260,32 @@ Dictionary queueManagerDictionary = Dictionary() (MQPL_ZOS, "z/OS") ) #ifdef MQIA_PROT_POLICY_CAPABILITY - (MQIA_PROT_POLICY_CAPABILITY, "SplCap", DisplayMapInitializer + (MQIA_PROT_POLICY_CAPABILITY, "SplCap", TextMapInitializer (MQCAP_SUPPORTED, "Supported") (MQCAP_NOT_SUPPORTED, "Not Supported") ) #endif - (MQIA_PUBSUB_CLUSTER, "PubSubClus", DisplayMapInitializer + (MQIA_PUBSUB_CLUSTER, "PubSubClus", TextMapInitializer (MQPSCLUS_ENABLED, "Enabled") (MQPSCLUS_DISABLED, "Disabled") ) (MQIA_PUBSUB_MAXMSG_RETRY_COUNT, "PubSubMaxMsgRetryCount") - (MQIA_PUBSUB_MODE, "PubSubMode", DisplayMapInitializer + (MQIA_PUBSUB_MODE, "PubSubMode", TextMapInitializer (MQPSM_COMPAT, "Compat") (MQPSM_DISABLED, "Disabled") (MQPSM_ENABLED, "Enabled") ) - (MQIA_PUBSUB_NP_MSG, "PubSubNPInputMsg", DisplayMapInitializer + (MQIA_PUBSUB_NP_MSG, "PubSubNPInputMsg", TextMapInitializer (MQUNDELIVERED_DISCARD, "Discard") (MQUNDELIVERED_KEEP, "Keep") ) - (MQIA_PUBSUB_NP_RESP, "PubSubNPResponse", DisplayMapInitializer + (MQIA_PUBSUB_NP_RESP, "PubSubNPResponse", TextMapInitializer (MQUNDELIVERED_NORMAL, "Normal") (MQUNDELIVERED_SAFE, "Safe") (MQUNDELIVERED_DISCARD, "Discard") (MQUNDELIVERED_KEEP, "Keep") ) - (MQIA_PUBSUB_SYNC_PT, "PubSubSyncPoiunt", DisplayMapInitializer + (MQIA_PUBSUB_SYNC_PT, "PubSubSyncPoiunt", TextMapInitializer (MQSYNCPOINT_IFPER, "IFPER") (MQSYNCPOINT_YES, "Yes") ) @@ -293,13 +293,13 @@ Dictionary queueManagerDictionary = Dictionary() (MQCA_Q_MGR_IDENTIFIER, "QMgrIdentifier") (MQCA_Q_MGR_NAME, "QMgrName") (MQCA_QSG_NAME, "QSGName") - (MQIA_ACCOUNTING_Q, "QueueAccounting", DisplayMapInitializer + (MQIA_ACCOUNTING_Q, "QueueAccounting", TextMapInitializer (MQMON_NONE, "None") (MQMON_OFF, "Off") (MQMON_ON, "On") (MQMON_Q_MGR, "Qmgr") ) - (MQIA_MONITORING_Q, "QueueMonitoring", DisplayMapInitializer + (MQIA_MONITORING_Q, "QueueMonitoring", TextMapInitializer (MQMON_OFF, "Off") (MQMON_NONE, "None") (MQMON_LOW, "Low") @@ -307,7 +307,7 @@ Dictionary queueManagerDictionary = Dictionary() (MQMON_HIGH, "High") (MQMON_Q_MGR, "Qmgr") ) - (MQIA_STATISTICS_Q, "QueueStatistics", DisplayMapInitializer + (MQIA_STATISTICS_Q, "QueueStatistics", TextMapInitializer (MQMON_NONE, "None") (MQMON_OFF, "Off") (MQMON_ON, "On") @@ -315,58 +315,58 @@ Dictionary queueManagerDictionary = Dictionary() ) (MQIA_RECEIVE_TIMEOUT, "ReceiveTimeout") (MQIA_RECEIVE_TIMEOUT_MIN, "ReceiveTimeoutMin") - (MQIA_RECEIVE_TIMEOUT_TYPE, "ReceiveTimeoutType", DisplayMapInitializer + (MQIA_RECEIVE_TIMEOUT_TYPE, "ReceiveTimeoutType", TextMapInitializer (MQRCVTIME_MULTIPLY, "Multiply") (MQRCVTIME_ADD, "Add") (MQRCVTIME_EQUAL, "Equal") ) - (MQIA_REMOTE_EVENT, "RemoveEvent", DisplayMapInitializer + (MQIA_REMOTE_EVENT, "RemoveEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) (MQCA_REPOSITORY_NAME, "RepositoryName") (MQCA_REPOSITORY_NAMELIST, "RepositoryNamelist") - (MQIA_SECURITY_CASE, "SecurityCase", DisplayMapInitializer + (MQIA_SECURITY_CASE, "SecurityCase", TextMapInitializer (MQSCYC_UPPER, "Upper") (MQSCYC_MIXED, "Mixed") ) - (MQIA_SHARED_Q_Q_MGR_NAME, "SharedQQmgrName", DisplayMapInitializer + (MQIA_SHARED_Q_Q_MGR_NAME, "SharedQQmgrName", TextMapInitializer (MQSQQM_USE, "Use") (MQSQQM_IGNORE, "Ignore") ) (MQCA_SSL_CRL_NAMELIST, "SSLCRLNamelist") (MQCA_SSL_CRYPTO_HARDWARE, "SSLCryptoHardware") - (MQIA_SSL_EVENT, "SSLEvent", DisplayMapInitializer + (MQIA_SSL_EVENT, "SSLEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) - (MQIA_SSL_FIPS_REQUIRED, "SSLFipsRequired", DisplayMapInitializer + (MQIA_SSL_FIPS_REQUIRED, "SSLFipsRequired", TextMapInitializer (MQSSL_FIPS_NO, "No") (MQSSL_FIPS_YES, "Yes") ) (MQCA_SSL_KEY_REPOSITORY, "SSLKeyRepository") (MQIA_SSL_RESET_COUNT, "SSLKeyResetCount") (MQIA_SSL_TASKS, "SSLTasks") - (MQIA_START_STOP_EVENT, "StartStopEvent", DisplayMapInitializer + (MQIA_START_STOP_EVENT, "StartStopEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) (MQIA_STATISTICS_INTERVAL, "StatisticsInterval") - (MQIA_SYNCPOINT, "SyncPoint", DisplayMapInitializer + (MQIA_SYNCPOINT, "SyncPoint", TextMapInitializer (MQSP_AVAILABLE, "Available") (MQSP_NOT_AVAILABLE, "Not Available") ) (MQIA_TCP_CHANNELS, "TCPChannels") - (MQIA_TCP_KEEP_ALIVE, "TCPKeepAlive", DisplayMapInitializer + (MQIA_TCP_KEEP_ALIVE, "TCPKeepAlive", TextMapInitializer (MQTCPKEEP_NO, "No") (MQTCPKEEP_YES, "Yes") ) (MQCA_TCP_NAME, "TCPName") - (MQIA_TCP_STACK_TYPE, "TCPStackType", DisplayMapInitializer + (MQIA_TCP_STACK_TYPE, "TCPStackType", TextMapInitializer (MQTCPSTACK_SINGLE, "Single") (MQTCPSTACK_MULTIPLE, "Multiple") ) - (MQIA_TRACE_ROUTE_RECORDING, "TraceRouteRecording", DisplayMapInitializer + (MQIA_TRACE_ROUTE_RECORDING, "TraceRouteRecording", TextMapInitializer (MQRECORDING_DISABLED, "Disabled") (MQRECORDING_MSG, "Msg") (MQRECORDING_Q, "Q") @@ -374,7 +374,7 @@ Dictionary queueManagerDictionary = Dictionary() (MQIA_TREE_LIFE_TIME, "TreeLifeTime") (MQIA_TRIGGER_INTERVAL, "TriggerInterval") (MQCA_VERSION, "Version") - (MQIA_XR_CAPABILITY, "XrCapability", DisplayMapInitializer + (MQIA_XR_CAPABILITY, "XrCapability", TextMapInitializer (MQCAP_SUPPORTED, "Supported") (MQCAP_NOT_SUPPORTED, "Not Supported") ) @@ -384,14 +384,14 @@ Dictionary queueManagerDictionary = Dictionary() ; Dictionary queueManagerStatusDictionary = Dictionary() - (MQIACF_CHINIT_STATUS, "ChannelInitiatorStatus", DisplayMapInitializer + (MQIACF_CHINIT_STATUS, "ChannelInitiatorStatus", TextMapInitializer (MQSVC_STATUS_STOPPED, "Stopped") (MQSVC_STATUS_STARTING, "Starting") (MQSVC_STATUS_RUNNING, "Running") (MQSVC_STATUS_STOPPING, "Stopping") (MQSVC_STATUS_RETRYING, "Retrying") ) - (MQIACF_CMD_SERVER_STATUS, "CommandServerStatus", DisplayMapInitializer + (MQIACF_CMD_SERVER_STATUS, "CommandServerStatus", TextMapInitializer (MQSVC_STATUS_STOPPED, "Stopped") (MQSVC_STATUS_STARTING, "Starting") (MQSVC_STATUS_RUNNING, "Running") @@ -406,7 +406,7 @@ Dictionary queueManagerStatusDictionary = Dictionary() (MQCACF_LOG_PATH, "LogPath") (MQCACF_MEDIA_LOG_EXTENT_NAME, "MediaRecoveryLog") (MQCA_Q_MGR_NAME) - (MQIACF_Q_MGR_STATUS, "QMgrStatus", DisplayMapInitializer + (MQIACF_Q_MGR_STATUS, "QMgrStatus", TextMapInitializer (MQQMSTA_STARTING, "Starting") (MQQMSTA_RUNNING, "Running") (MQQMSTA_QUIESCING, "Quiescing") @@ -414,7 +414,7 @@ Dictionary queueManagerStatusDictionary = Dictionary() (MQCACF_RESTART_LOG_EXTENT_NAME, "RestartRecoveryLog") (MQCACF_Q_MGR_START_DATE, "StartDate") (MQCACF_Q_MGR_START_TIME, "StartTime") - (MQIACF_PERMIT_STANDBY, "PermitStandby", DisplayMapInitializer + (MQIACF_PERMIT_STANDBY, "PermitStandby", TextMapInitializer (MQSTDBY_NOT_PERMITTED, "Not Permitted") (MQSTDBY_PERMITTED, "Permitted") ) @@ -430,7 +430,7 @@ Dictionary queueDictionary = Dictionary() (MQIA_BACKOUT_THRESHOLD, "BackoutThreshold") //(MQCA_BASE_Q_NAME, "BaseQName") (MQCA_BASE_OBJECT_NAME, "BaseObjectName") - (MQIA_BASE_TYPE, "BaseType", DisplayMapInitializer + (MQIA_BASE_TYPE, "BaseType", TextMapInitializer (MQOT_Q, "Queue") (MQOT_TOPIC, "Topic") ) @@ -441,7 +441,7 @@ Dictionary queueDictionary = Dictionary() (MQCA_CLUSTER_DATE, "ClusterDate") (MQCA_CLUSTER_NAME, "ClusterName") (MQCA_CLUSTER_NAMELIST, "ClusterNamelist") - (MQIA_CLUSTER_Q_TYPE, "ClusterQType", DisplayMapInitializer + (MQIA_CLUSTER_Q_TYPE, "ClusterQType", TextMapInitializer (MQCQT_LOCAL_Q, "Local") (MQCQT_ALIAS_Q, "Alias") (MQCQT_REMOTE_Q, "Remote") @@ -455,65 +455,65 @@ Dictionary queueDictionary = Dictionary() (MQCA_CREATION_TIME) (MQIA_CURRENT_Q_DEPTH, "CurrentQDepth") (MQCA_CUSTOM) - (MQIA_DEF_PUT_RESPONSE_TYPE, "DefaultPutResponse", DisplayMapInitializer + (MQIA_DEF_PUT_RESPONSE_TYPE, "DefaultPutResponse", TextMapInitializer (MQPRT_SYNC_RESPONSE, "Sync") (MQPRT_ASYNC_RESPONSE, "Async") ) - (MQIA_DEF_BIND, "DefBind", DisplayMapInitializer + (MQIA_DEF_BIND, "DefBind", TextMapInitializer (MQBND_BIND_ON_OPEN, "On Open") (MQBND_BIND_NOT_FIXED, "Not Fixed") #ifdef MQBND_BIND_ON_GROUP (MQBND_BIND_ON_GROUP, "On Group") #endif ) - (MQIA_DEFINITION_TYPE, "DefinitionType", DisplayMapInitializer + (MQIA_DEFINITION_TYPE, "DefinitionType", TextMapInitializer (MQQDT_PREDEFINED, "Predefined") (MQQDT_PERMANENT_DYNAMIC, "Permanent Dynamically") (MQQDT_SHARED_DYNAMIC, "Shared Dynamic") (MQQDT_TEMPORARY_DYNAMIC, "Temporary Dynamic") ) - (MQIA_DEF_INPUT_OPEN_OPTION, "DefInputOpenOption", DisplayMapInitializer + (MQIA_DEF_INPUT_OPEN_OPTION, "DefInputOpenOption", TextMapInitializer (MQOO_INPUT_EXCLUSIVE, "Exclusive") (MQOO_INPUT_SHARED, "Shared") ) - (MQIA_DEF_PERSISTENCE, "DefPersistence", DisplayMapInitializer + (MQIA_DEF_PERSISTENCE, "DefPersistence", TextMapInitializer (MQPER_PERSISTENT, "Persistent") (MQPER_NOT_PERSISTENT, "Not Persistent") ) (MQIA_DEF_PRIORITY, "DefPriority") - (MQIA_DEF_READ_AHEAD, "DefReadAhead", DisplayMapInitializer + (MQIA_DEF_READ_AHEAD, "DefReadAhead", TextMapInitializer (MQREADA_NO, "No") (MQREADA_YES, "Yes") (MQREADA_DISABLED, "Disabled") ) (MQIA_DIST_LISTS) - (MQIA_HARDEN_GET_BACKOUT, "HardenGetBackout", DisplayMapInitializer + (MQIA_HARDEN_GET_BACKOUT, "HardenGetBackout", TextMapInitializer (MQQA_BACKOUT_HARDENED, "Hardened") (MQQA_BACKOUT_NOT_HARDENED, "Not Hardened") ) - (MQIA_INDEX_TYPE, "IndexType", DisplayMapInitializer + (MQIA_INDEX_TYPE, "IndexType", TextMapInitializer (MQIT_NONE, "None") (MQIT_MSG_ID, "Message ID") (MQIT_CORREL_ID, "Correlation ID") (MQIT_MSG_TOKEN, "Message Token") (MQIT_GROUP_ID, "Group ID") ) - (MQIA_INHIBIT_GET, "InhibitGet", DisplayMapInitializer + (MQIA_INHIBIT_GET, "InhibitGet", TextMapInitializer (MQQA_GET_ALLOWED, "Allowed") (MQQA_GET_INHIBITED, "Inhibited") ) - (MQIA_INHIBIT_PUT, "InhibitPut", DisplayMapInitializer + (MQIA_INHIBIT_PUT, "InhibitPut", TextMapInitializer (MQQA_PUT_ALLOWED, "Allowed") (MQQA_PUT_INHIBITED, "Inhibited") ) (MQCA_INITIATION_Q_NAME, "InitiationQName") (MQIA_MAX_MSG_LENGTH) (MQIA_MAX_Q_DEPTH, "MaxQDepth") - (MQIA_MSG_DELIVERY_SEQUENCE, "MsgDeliverySequence", DisplayMapInitializer + (MQIA_MSG_DELIVERY_SEQUENCE, "MsgDeliverySequence", TextMapInitializer (MQMDS_PRIORITY, "priority") (MQMDS_FIFO, "FIFO") ) - (MQIA_NPM_CLASS, "NonPersistentMessageClass", DisplayMapInitializer + (MQIA_NPM_CLASS, "NonPersistentMessageClass", TextMapInitializer (MQNPM_CLASS_NORMAL, "Normal") (MQNPM_CLASS_HIGH, "High") ) @@ -521,23 +521,23 @@ Dictionary queueDictionary = Dictionary() (MQIA_OPEN_OUTPUT_COUNT, "OpenOutputCount") (MQIA_PAGESET_ID, "PageSetID") (MQCA_PROCESS_NAME, "ProcessName") - (MQIA_PROPERTY_CONTROL, "PropertyControl", DisplayMapInitializer + (MQIA_PROPERTY_CONTROL, "PropertyControl", TextMapInitializer (MQPROP_COMPATIBILITY, "Compatibility") (MQPROP_NONE, "None") (MQPROP_ALL, "All") (MQPROP_FORCE_MQRFH2, "Force MQRFH2") ) - (MQIA_Q_DEPTH_HIGH_EVENT, "QDepthHighEvent", DisplayMapInitializer + (MQIA_Q_DEPTH_HIGH_EVENT, "QDepthHighEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) (MQIA_Q_DEPTH_HIGH_LIMIT, "QDepthHighLimit") - (MQIA_Q_DEPTH_LOW_EVENT, "QDepthLowEvent", DisplayMapInitializer + (MQIA_Q_DEPTH_LOW_EVENT, "QDepthLowEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) (MQIA_Q_DEPTH_LOW_LIMIT, "QDepthLowLimit") - (MQIA_Q_DEPTH_MAX_EVENT, "QDepthMaxEvent", DisplayMapInitializer + (MQIA_Q_DEPTH_MAX_EVENT, "QDepthMaxEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) @@ -545,14 +545,14 @@ Dictionary queueDictionary = Dictionary() (MQCA_Q_MGR_IDENTIFIER) (MQCA_Q_MGR_NAME) (MQCA_Q_NAME, "QName") - (MQIA_QSG_DISP, "QSGDisposition", DisplayMapInitializer + (MQIA_QSG_DISP, "QSGDisposition", TextMapInitializer (MQQSGD_COPY, "Copy") (MQQSGD_GROUP, "Group") (MQQSGD_Q_MGR, "Qmgr") (MQQSGD_SHARED, "Shared") ) (MQIA_Q_SERVICE_INTERVAL, "QServiceInterval") - (MQIA_Q_SERVICE_INTERVAL_EVENT, "QServiceIntervalEvent", DisplayMapInitializer + (MQIA_Q_SERVICE_INTERVAL_EVENT, "QServiceIntervalEvent", TextMapInitializer (MQQSIE_HIGH, "High") (MQQSIE_OK, "Ok") (MQQSIE_NONE, "None") @@ -560,7 +560,7 @@ Dictionary queueDictionary = Dictionary() (MQIA_ACCOUNTING_Q) (MQIA_MONITORING_Q) (MQIA_STATISTICS_Q) - (MQIA_Q_TYPE, "QType", DisplayMapInitializer + (MQIA_Q_TYPE, "QType", TextMapInitializer (MQQT_ALL, "All") (MQQT_LOCAL, "Local") (MQQT_ALIAS, "Alias") @@ -571,30 +571,30 @@ Dictionary queueDictionary = Dictionary() (MQCA_REMOTE_Q_MGR_NAME, "RemoteQmgrName") (MQCA_REMOTE_Q_NAME, "RemoteQName") (MQIA_RETENTION_INTERVAL, "RetentionInterval") - (MQIA_SCOPE, "Scope", DisplayMapInitializer + (MQIA_SCOPE, "Scope", TextMapInitializer (MQSCO_Q_MGR, "Qmgr") (MQSCO_CELL, "Cell") ) - (MQIA_SHAREABILITY, "Shareability", DisplayMapInitializer + (MQIA_SHAREABILITY, "Shareability", TextMapInitializer (MQQA_SHAREABLE, "Shareable") (MQQA_NOT_SHAREABLE, "Not Shareable") ) (MQCA_STORAGE_CLASS, "StorageClass") (MQCA_TPIPE_NAME, "TpipeNames") - (MQIA_TRIGGER_CONTROL, "TriggerControl", DisplayMapInitializer + (MQIA_TRIGGER_CONTROL, "TriggerControl", TextMapInitializer (MQTC_OFF, "Off") (MQTC_ON, "On") ) (MQCA_TRIGGER_DATA, "TriggerData") (MQIA_TRIGGER_DEPTH, "TriggerDepth") (MQIA_TRIGGER_MSG_PRIORITY, "TriggerMsgPriority") - (MQIA_TRIGGER_TYPE, "TriggerType", DisplayMapInitializer + (MQIA_TRIGGER_TYPE, "TriggerType", TextMapInitializer (MQTT_NONE, "None") (MQTT_FIRST, "First") (MQTT_EVERY, "Every") (MQTT_DEPTH, "Depth") ) - (MQIA_USAGE, "Usage", DisplayMapInitializer + (MQIA_USAGE, "Usage", TextMapInitializer (MQUS_NORMAL, "Normal") (MQUS_TRANSMISSION, "Transmission") ) @@ -617,13 +617,13 @@ Dictionary queueStatusDictionary = Dictionary() (MQIA_OPEN_OUTPUT_COUNT) (MQIA_QSG_DISP) (MQIA_MONITORING_Q) - (MQIACF_UNCOMMITTED_MSGS, "UncommitedMsgs", DisplayMapInitializer + (MQIACF_UNCOMMITTED_MSGS, "UncommitedMsgs", TextMapInitializer (MQQSUM_YES, "Yes") (MQQSUM_NO, "No") ) (MQCACF_APPL_DESC, "ApplDesc") (MQCACF_APPL_TAG, "ApplTag") - (MQIA_APPL_TYPE, "ApplType", DisplayMapInitializer + (MQIA_APPL_TYPE, "ApplType", TextMapInitializer (MQAT_UNKNOWN, "Unknown") (MQAT_NO_CONTEXT, "No Context") (MQAT_CICS, "CICS Transaction") @@ -660,7 +660,7 @@ Dictionary queueStatusDictionary = Dictionary() (MQAT_SYSTEM_EXTENSION, "System Extension") ) (MQCACF_ASID, "ASId") - (MQIACF_ASYNC_STATE, "AsynchronousState", DisplayMapInitializer + (MQIACF_ASYNC_STATE, "AsynchronousState", TextMapInitializer (MQAS_ACTIVE, "Active") (MQAS_INACTIVE, "Inactive") (MQAS_SUSPENDED, "Suspended") @@ -673,29 +673,29 @@ Dictionary queueStatusDictionary = Dictionary() (MQCACH_CHANNEL_NAME, "ChannelName") (MQCACH_CONNECTION_NAME) (MQBACF_EXTERNAL_UOW_ID, "ExternalUOWId") - (MQIACF_HANDLE_STATE, "HandleState", DisplayMapInitializer + (MQIACF_HANDLE_STATE, "HandleState", TextMapInitializer (MQHSTATE_ACTIVE, "Active") (MQHSTATE_INACTIVE, "Inactive") ) - (MQIACF_OPEN_BROWSE, "OpenBrowse", DisplayMapInitializer + (MQIACF_OPEN_BROWSE, "OpenBrowse", TextMapInitializer (MQQSO_YES, "Yes") (MQQSO_NO, "No") ) - (MQIACF_OPEN_INPUT_TYPE, "OpenInputType", DisplayMapInitializer + (MQIACF_OPEN_INPUT_TYPE, "OpenInputType", TextMapInitializer (MQQSO_NO, "No") (MQQSO_SHARED, "Shared") (MQQSO_EXCLUSIVE, "Exclusive") ) - (MQIACF_OPEN_INQUIRE, "OpenInquire", DisplayMapInitializer + (MQIACF_OPEN_INQUIRE, "OpenInquire", TextMapInitializer (MQQSO_YES, "Yes") (MQQSO_NO, "No") ) (MQIACF_OPEN_OPTIONS, "OpenOptions") - (MQIACF_OPEN_OUTPUT, "OpenOutput", DisplayMapInitializer + (MQIACF_OPEN_OUTPUT, "OpenOutput", TextMapInitializer (MQQSO_YES, "Yes") (MQQSO_NO, "No") ) - (MQIACF_OPEN_SET, "OpenSet", DisplayMapInitializer + (MQIACF_OPEN_SET, "OpenSet", TextMapInitializer (MQQSO_YES, "Yes") (MQQSO_NO, "No") ) @@ -705,7 +705,7 @@ Dictionary queueStatusDictionary = Dictionary() (MQBACF_Q_MGR_UOW_ID, "QMgrUOWId") (MQCA_Q_NAME) (MQIA_QSG_DISP) - (MQIACF_Q_STATUS_TYPE, "StatusType", DisplayMapInitializer + (MQIACF_Q_STATUS_TYPE, "StatusType", TextMapInitializer (MQIACF_Q_STATUS, "Queue Status") (MQIACF_Q_HANDLE, "Handle") ) @@ -713,7 +713,7 @@ Dictionary queueStatusDictionary = Dictionary() (MQIACF_THREAD_ID, "ThreadId") (MQCACF_TRANSACTION_ID, "TransactionId") (MQBACF_EXTERNAL_UOW_ID, "UOWIdentifier") - (MQIACF_UOW_TYPE, "UOWType", DisplayMapInitializer + (MQIACF_UOW_TYPE, "UOWType", TextMapInitializer (MQUOWT_Q_MGR, "QueueManager") (MQUOWT_CICS, "CICS") (MQUOWT_RRS, "RRS") @@ -741,7 +741,7 @@ Dictionary channelDictionary = Dictionary() (MQCACH_CHANNEL_START_DATE, "ChannelStartDate") (MQCACH_CHANNEL_START_TIME, "ChannelStartTime") (MQIA_STATISTICS_CHANNEL) - (MQIACH_CHANNEL_TYPE, "ChannelType", DisplayMapInitializer + (MQIACH_CHANNEL_TYPE, "ChannelType", TextMapInitializer (MQCHT_ALL, "All") (MQCHT_SENDER, "Sender") (MQCHT_SERVER, "Server") @@ -764,16 +764,16 @@ Dictionary channelDictionary = Dictionary() (MQIACH_CLWL_CHANNEL_PRIORITY, "CLWLChannelPriority") (MQIACH_CLWL_CHANNEL_RANK, "CLWLChannelRank") (MQIACH_CLWL_CHANNEL_WEIGHT, "CLWLChannelWeight") - (MQIACH_CONNECTION_AFFINITY, "ConnectionAffinity", DisplayMapInitializer + (MQIACH_CONNECTION_AFFINITY, "ConnectionAffinity", TextMapInitializer (MQCAFTY_PREFERRED, "Preferred") (MQCAFTY_NONE, "None") ) (MQCACH_CONNECTION_NAME, "ConnectionName") - (MQIACH_DATA_CONVERSION, "DataConversion", DisplayMapInitializer + (MQIACH_DATA_CONVERSION, "DataConversion", TextMapInitializer (MQCDC_NO_SENDER_CONVERSION, "No") (MQCDC_SENDER_CONVERSION, "Sender") ) - (MQIACH_CHANNEL_DISP, "ChannelDisposition", DisplayMapInitializer + (MQIACH_CHANNEL_DISP, "ChannelDisposition", TextMapInitializer (MQCHLD_ALL, "All") (MQCHLD_PRIVATE, "Private") (MQCHLD_FIXSHARED, "Fix Shared") @@ -781,14 +781,14 @@ Dictionary channelDictionary = Dictionary() ) (MQIACH_DISC_INTERVAL, "DiscInterval") #ifdef MQIACH_DEF_RECONNECT - (MQIACH_DEF_RECONNECT, "DefReconnect", DisplayMapInitializer + (MQIACH_DEF_RECONNECT, "DefReconnect", TextMapInitializer (MQRCN_NO, "No") (MQRCN_YES, "Yes") (MQRCN_Q_MGR, "Qmgr") (MQRCN_DISABLED, "Disabled") ) #endif - (MQIACH_HDR_COMPRESSION, "HeaderCompression", DisplayMapInitializer + (MQIACH_HDR_COMPRESSION, "HeaderCompression", TextMapInitializer (MQCOMPRESS_NONE, "None") (MQCOMPRESS_SYSTEM, "System") (MQCOMPRESS_NOT_AVAILABLE, "Not Available") @@ -819,12 +819,12 @@ Dictionary channelDictionary = Dictionary() (MQIACH_MAX_INSTS_PER_CLIENT, "MaxInstancesPerClient") (MQIACH_MAX_MSG_LENGTH, "MaxMsgLength") (MQCACH_MCA_NAME, "MCAName") - (MQIACH_MCA_TYPE, "MCAType", DisplayMapInitializer + (MQIACH_MCA_TYPE, "MCAType", TextMapInitializer (MQMCAT_PROCESS, "Process") (MQMCAT_THREAD, "Thread") ) (MQCACH_MCA_USER_ID, "MCAUserIdentifier") - (MQIACH_MSG_COMPRESSION, "MessageCompression", DisplayMapInitializer + (MQIACH_MSG_COMPRESSION, "MessageCompression", TextMapInitializer (MQCOMPRESS_NONE, "None") (MQCOMPRESS_RLE, "RLE") (MQCOMPRESS_ZLIBFAST, "Zlib Fast") @@ -845,17 +845,17 @@ Dictionary channelDictionary = Dictionary() #endif (MQCACH_MSG_EXIT_USER_DATA, "MsgUserData") (MQIACH_NETWORK_PRIORITY, "NetworkPriority") - (MQIACH_NPM_SPEED, "NonPersistentMsgSpeed", DisplayMapInitializer + (MQIACH_NPM_SPEED, "NonPersistentMsgSpeed", TextMapInitializer (MQNPMS_FAST, "Fast") (MQNPMS_NORMAL, "Normal") ) (MQCACH_PASSWORD, "Password") - (MQIA_PROPERTY_CONTROL, "PropertyControl", DisplayMapInitializer + (MQIA_PROPERTY_CONTROL, "PropertyControl", TextMapInitializer (MQPROP_COMPATIBILITY, "Compatibility") (MQPROP_NONE, "None") (MQPROP_ALL, "All") ) - (MQIACH_PUT_AUTHORITY, "PutAuthority", DisplayMapInitializer + (MQIACH_PUT_AUTHORITY, "PutAuthority", TextMapInitializer (MQPA_DEFAULT, "Default") (MQPA_CONTEXT, "Context") ) @@ -873,13 +873,13 @@ Dictionary channelDictionary = Dictionary() (MQIACH_SHORT_RETRY, "ShortRetryCount") (MQIACH_SHORT_TIMER, "ShortRetryInterval") (MQCACH_SSL_CIPHER_SPEC, "SSLCipherSpec") - (MQIACH_SSL_CLIENT_AUTH, "SSLClientAuth", DisplayMapInitializer + (MQIACH_SSL_CLIENT_AUTH, "SSLClientAuth", TextMapInitializer (MQSCA_REQUIRED, "Required") (MQSCA_OPTIONAL, "Optional") ) (MQCACH_SSL_PEER_NAME, "SSLPeerName") (MQCACH_TP_NAME, "TpName") - (MQIACH_XMIT_PROTOCOL_TYPE, "TransportType", DisplayMapInitializer + (MQIACH_XMIT_PROTOCOL_TYPE, "TransportType", TextMapInitializer (MQXPT_ALL, "All") (MQXPT_LOCAL, "Local") (MQXPT_LU62, "LU62") @@ -890,7 +890,7 @@ Dictionary channelDictionary = Dictionary() (MQXPT_UDP, "UDP") ) #ifdef MQIA_USE_DEAD_LETTER_Q - (MQIA_USE_DEAD_LETTER_Q, "UseDLQ", DisplayMapInitializer + (MQIA_USE_DEAD_LETTER_Q, "UseDLQ", TextMapInitializer (MQUSEDLQ_NO, "No") (MQUSEDLQ_YES, "Yes") (MQUSEDLQ_AS_PARENT, "As Parent") @@ -911,13 +911,13 @@ Dictionary channelStatusDictionary = Dictionary() (MQIACH_BUFFERS_SENT, "BuffersSent") (MQIACH_BYTES_RECEIVED, "BytesReceived") (MQIACH_BYTES_SENT, "BytesSent") - (MQIACH_CHANNEL_DISP, "ChannelDisposition", DisplayMapInitializer + (MQIACH_CHANNEL_DISP, "ChannelDisposition", TextMapInitializer (MQCHLD_ALL, "All") (MQCHLD_PRIVATE, "Private") (MQCHLD_FIXSHARED, "Fix Shared") (MQCHLD_SHARED, "Shared") ) - (MQIACH_CHANNEL_INSTANCE_TYPE, "ChannelInstanceType", DisplayMapInitializer + (MQIACH_CHANNEL_INSTANCE_TYPE, "ChannelInstanceType", TextMapInitializer (MQOT_CURRENT_CHANNEL, "Current") (MQOT_SAVED_CHANNEL, "Saved") (MQOT_SHORT_CHANNEL, "Short") @@ -926,7 +926,7 @@ Dictionary channelStatusDictionary = Dictionary() (MQCACH_CHANNEL_NAME) (MQCACH_CHANNEL_START_DATE) (MQCACH_CHANNEL_START_TIME) - (MQIACH_CHANNEL_STATUS, "ChannelStatus", DisplayMapInitializer + (MQIACH_CHANNEL_STATUS, "ChannelStatus", TextMapInitializer (MQCHS_BINDING, "Binding") (MQCHS_STARTING, "Starting") (MQCHS_RUNNING, "Running") @@ -947,7 +947,7 @@ Dictionary channelStatusDictionary = Dictionary() (MQIACH_CURRENT_SEQ_NUMBER, "CurrentSequenceNumber") (MQIACH_CURRENT_SHARING_CONVS, "CurrentSharingConverstations") (MQIACH_EXIT_TIME_INDICATOR, "ExitTime") - (MQIACH_HDR_COMPRESSION, "HeaderCompression", DisplayMapInitializer + (MQIACH_HDR_COMPRESSION, "HeaderCompression", TextMapInitializer (MQCOMPRESS_NONE, "None") (MQCOMPRESS_SYSTEM, "System") (MQCOMPRESS_NOT_AVAILABLE, "Not Available") @@ -958,7 +958,7 @@ Dictionary channelStatusDictionary = Dictionary() (MQCOMPRESS_SYSTEM, "System") ) (MQIACH_HB_INTERVAL, "HeartbeatInterval") - (MQIACH_INDOUBT_STATUS, "InDoubtStatus", DisplayMapInitializer + (MQIACH_INDOUBT_STATUS, "InDoubtStatus", TextMapInitializer (MQCHIDS_NOT_INDOUBT, "Not Indoubt") (MQCHIDS_INDOUBT, "Indoubt") ) @@ -972,7 +972,7 @@ Dictionary channelStatusDictionary = Dictionary() (MQIACH_MAX_MSG_LENGTH, "MaxMsgLength") (MQIACH_MAX_SHARING_CONVS, "MaxSharingConversations") (MQCACH_MCA_JOB_NAME, "MCAJobName") - (MQIACH_MCA_STATUS, "MCAStatus", DisplayMapInitializer + (MQIACH_MCA_STATUS, "MCAStatus", TextMapInitializer (MQMCAS_STOPPED, "Stopped") (MQMCAS_RUNNING, "Running") ) @@ -983,14 +983,14 @@ Dictionary channelStatusDictionary = Dictionary() #endif (MQIACH_XMITQ_MSGS_AVAILABLE, "MsgsAvailable") (MQIACH_NETWORK_TIME_INDICATOR, "NetTime") - (MQIACH_NPM_SPEED, "NonPersistentMsgSpeed", DisplayMapInitializer + (MQIACH_NPM_SPEED, "NonPersistentMsgSpeed", TextMapInitializer (MQNPMS_FAST, "Fast") (MQNPMS_NORMAL, "Normal") ) (MQCA_Q_MGR_NAME) (MQCACH_REMOTE_APPL_TAG, "RemoteApplTag") #ifdef MQCACH_REMOTE_PRODUCT - (MQCACH_REMOTE_PRODUCT, "RemoteProduct", DisplayMapInitializer + (MQCACH_REMOTE_PRODUCT, "RemoteProduct", TextMapInitializer #ifdef MQMM (MQMM, "Queue Manager (non z/OS Platform") #endif @@ -1041,11 +1041,11 @@ Dictionary channelStatusDictionary = Dictionary() (MQIACH_SSL_KEY_RESETS, "SSLKeyResets") (MQCACH_SSL_KEY_RESET_TIME, "SSLKeyResetTime") (MQCACH_SSL_SHORT_PEER_NAME, "SSLShortPeerName") - (MQIACH_STOP_REQUESTED, "StopRequested", DisplayMapInitializer + (MQIACH_STOP_REQUESTED, "StopRequested", TextMapInitializer (MQCHSR_STOP_NOT_REQUESTED, "Stop Not Requested") (MQCHSR_STOP_REQUESTED, "Stop Requested") ) - (MQIACH_CHANNEL_SUBSTATE, "SubState", DisplayMapInitializer + (MQIACH_CHANNEL_SUBSTATE, "SubState", TextMapInitializer #ifdef MQCHSSTATE_CHADEXIT (MQCHSSTATE_CHADEXIT, "Running Channel Auto-definition Exit") #endif @@ -1100,12 +1100,12 @@ Dictionary clusterQueueManagerDictionary = Dictionary() (MQIACH_CLWL_CHANNEL_RANK, "CLWLChannelRank") (MQIACH_CLWL_CHANNEL_WEIGHT, "CLWLChannelWeight") (MQCACH_CONNECTION_NAME) - (MQIACH_DATA_CONVERSION, "DataConversion", DisplayMapInitializer + (MQIACH_DATA_CONVERSION, "DataConversion", TextMapInitializer (MQCDC_NO_SENDER_CONVERSION, "No") (MQCDC_SENDER_CONVERSION, "Sender") ) (MQIACH_DISC_INTERVAL, "DiscInterval") - (MQIACH_HDR_COMPRESSION, "HeaderCompression", DisplayMapInitializer + (MQIACH_HDR_COMPRESSION, "HeaderCompression", TextMapInitializer (MQCOMPRESS_NONE, "None") (MQCOMPRESS_SYSTEM, "System") (MQCOMPRESS_NOT_AVAILABLE, "Not Available") @@ -1122,12 +1122,12 @@ Dictionary clusterQueueManagerDictionary = Dictionary() (MQIACH_LONG_TIMER, "LongRetryInterval") (MQIACH_MAX_MSG_LENGTH, "MaxMsgLength") (MQCACH_MCA_NAME, "MCAName") - (MQIACH_MCA_TYPE, "MCAType", DisplayMapInitializer + (MQIACH_MCA_TYPE, "MCAType", TextMapInitializer (MQMCAT_PROCESS, "Process") (MQMCAT_THREAD, "Thread") ) (MQCACH_MCA_USER_ID, "MCAUserIdentifier") - (MQIACH_MSG_COMPRESSION, "MessageCompression", DisplayMapInitializer + (MQIACH_MSG_COMPRESSION, "MessageCompression", TextMapInitializer (MQCOMPRESS_NONE, "None") (MQCOMPRESS_RLE, "RLE") (MQCOMPRESS_ZLIBFAST, "Zlib Fast") @@ -1142,17 +1142,17 @@ Dictionary clusterQueueManagerDictionary = Dictionary() (MQCACH_MR_EXIT_USER_DATA, "MsgRetryUserData") (MQCACH_MSG_EXIT_USER_DATA, "MsgUserData") (MQIACH_NETWORK_PRIORITY, "NetworkPriority") - (MQIACH_NPM_SPEED, "NonPersistentMsgSpeed", DisplayMapInitializer + (MQIACH_NPM_SPEED, "NonPersistentMsgSpeed", TextMapInitializer (MQNPMS_FAST, "Fast") (MQNPMS_NORMAL, "Normal") ) (MQCACH_PASSWORD, "Password") (MQIA_PROPERTY_CONTROL, "PropertyControl") - (MQIACH_PUT_AUTHORITY, "PutAuthority", DisplayMapInitializer + (MQIACH_PUT_AUTHORITY, "PutAuthority", TextMapInitializer (MQPA_DEFAULT, "Default") (MQPA_CONTEXT, "Context") ) - (MQIACF_Q_MGR_DEFINITION_TYPE, "QMgrDefinitionType", DisplayMapInitializer + (MQIACF_Q_MGR_DEFINITION_TYPE, "QMgrDefinitionType", TextMapInitializer (MQQMDT_EXPLICIT_CLUSTER_SENDER, "Explicit Cluster Sender") (MQQMDT_AUTO_CLUSTER_SENDER, "Auto Cluster Sender") (MQQMDT_CLUSTER_RECEIVER, "Cluster Receiver") @@ -1160,7 +1160,7 @@ Dictionary clusterQueueManagerDictionary = Dictionary() ) (MQCA_Q_MGR_IDENTIFIER) (MQCA_CLUSTER_Q_MGR_NAME, "QMgrName") - (MQIACF_Q_MGR_TYPE, "QMgrType", DisplayMapInitializer + (MQIACF_Q_MGR_TYPE, "QMgrType", TextMapInitializer (MQQMT_NORMAL, "Normal") (MQQMT_REPOSITORY, "Repository") ) @@ -1174,12 +1174,12 @@ Dictionary clusterQueueManagerDictionary = Dictionary() (MQIACH_SHORT_RETRY, "ShortRetryCount") (MQIACH_SHORT_TIMER, "ShortRetryInterval") (MQCACH_SSL_CIPHER_SPEC, "SSLCipherSpec") - (MQIACH_SSL_CLIENT_AUTH, "SSLClientAuth", DisplayMapInitializer + (MQIACH_SSL_CLIENT_AUTH, "SSLClientAuth", TextMapInitializer (MQSCA_REQUIRED, "Required") (MQSCA_OPTIONAL, "Optional") ) (MQCACH_SSL_PEER_NAME, "SSLPeerName") - (MQIACF_SUSPEND, "Suspend", DisplayMapInitializer + (MQIACF_SUSPEND, "Suspend", TextMapInitializer (MQSUS_NO, "No") (MQSUS_YES, "Yes") ) @@ -1205,7 +1205,7 @@ Dictionary connectionDictionary = Dictionary() (MQBACF_CONNECTION_ID, "ConnectionId") (MQCACH_CONNECTION_NAME) (MQIACF_CONNECT_OPTIONS, "ConnectOptions") - (MQIACF_CONN_INFO_TYPE, "ConnInfoType", DisplayMapInitializer + (MQIACF_CONN_INFO_TYPE, "ConnInfoType", TextMapInitializer (MQIACF_CONN_INFO_CONN, "Connection") (MQIACF_CONN_INFO_HANDLE, "Handle") (MQIACF_CONN_INFO_ALL, "All") @@ -1213,7 +1213,7 @@ Dictionary connectionDictionary = Dictionary() (MQCACF_DESTINATION, "Destination") (MQCACF_DESTINATION_Q_MGR, "DestinationQueueManager") (MQBACF_GENERIC_CONNECTION_ID, "GenericConnectionId") - (MQIACF_HANDLE_STATE, "HandleState", DisplayMapInitializer + (MQIACF_HANDLE_STATE, "HandleState", TextMapInitializer (MQHSTATE_ACTIVE, "Active") (MQHSTATE_INACTIVE, "Inactive") ) @@ -1227,7 +1227,7 @@ Dictionary connectionDictionary = Dictionary() (MQCACF_PST_ID) (MQBACF_Q_MGR_UOW_ID, "QMgrUOWId") (MQIA_QSG_DISP) - (MQIA_READ_AHEAD, "ReadAhead", DisplayMapInitializer + (MQIA_READ_AHEAD, "ReadAhead", TextMapInitializer (MQREADA_NO, "No") (MQREADA_YES, "Yes") (MQREADA_BACKLOG, "Backlog") @@ -1244,20 +1244,20 @@ Dictionary connectionDictionary = Dictionary() (MQCACF_UOW_LOG_START_TIME, "UOWLogStartTime") (MQCACF_UOW_START_DATE, "UOWStartDate") (MQCACF_UOW_START_TIME, "UOWStartTime") - (MQIACF_UOW_STATE, "UOWState", DisplayMapInitializer + (MQIACF_UOW_STATE, "UOWState", TextMapInitializer (MQUOWST_NONE, "None") (MQUOWST_ACTIVE, "Active") (MQUOWST_PREPARED, "Prepared") (MQUOWST_UNRESOLVED, "Unresolved") ) - (MQIACF_UOW_TYPE, "UOWType", DisplayMapInitializer + (MQIACF_UOW_TYPE, "UOWType", TextMapInitializer (MQUOWT_Q_MGR, "Queuemanager") (MQUOWT_CICS, "CICS") (MQUOWT_RRS, "RRS") (MQUOWT_IMS, "IMS") (MQUOWT_XA, "XA") ) - (MQIA_UR_DISP, "URDisposition", DisplayMapInitializer + (MQIA_UR_DISP, "URDisposition", TextMapInitializer (MQQSGD_ALL, "All") (MQQSGD_GROUP, "Group") (MQQSGD_Q_MGR, "Queuemanager") @@ -1283,7 +1283,7 @@ Dictionary listenerDictionary = Dictionary() (MQIACF_PROCESS_ID) (MQIACH_SESSION_COUNT, "Sessions") (MQIACH_SOCKET, "Socket") - (MQIACH_LISTENER_CONTROL, "StartMode", DisplayMapInitializer + (MQIACH_LISTENER_CONTROL, "StartMode", TextMapInitializer (MQSVC_CONTROL_MANUAL, "Manual") (MQSVC_CONTROL_Q_MGR, "Qmgr") (MQSVC_CONTROL_Q_MGR_START, "Qmgr Start") @@ -1307,14 +1307,14 @@ Dictionary listenerStatusDictionary = Dictionary() (MQIACH_PORT, "Port") (MQIACF_PROCESS_ID) (MQIACH_SOCKET, "Socket") - (MQIACH_LISTENER_CONTROL, "StartMode", DisplayMapInitializer + (MQIACH_LISTENER_CONTROL, "StartMode", TextMapInitializer (MQSVC_CONTROL_MANUAL, "Manual") (MQSVC_CONTROL_Q_MGR, "Qmgr") (MQSVC_CONTROL_Q_MGR_START, "Qmgr Start") ) (MQCACH_LISTENER_START_DATE, "StartDate") (MQCACH_LISTENER_START_TIME, "StartTime") - (MQIACH_LISTENER_STATUS, "Status", DisplayMapInitializer + (MQIACH_LISTENER_STATUS, "Status", TextMapInitializer (MQSVC_STATUS_STARTING, "Starting") (MQSVC_STATUS_RUNNING, "Running") (MQSVC_STATUS_STOPPING, "Stopping") @@ -1333,57 +1333,57 @@ Dictionary topicDictionary = Dictionary() (MQCA_ALTERATION_TIME) (MQCA_CLUSTER_NAME) (MQCA_CUSTOM) - (MQIA_TOPIC_DEF_PERSISTENCE, "DefPersistence", DisplayMapInitializer + (MQIA_TOPIC_DEF_PERSISTENCE, "DefPersistence", TextMapInitializer (MQPER_PERSISTENCE_AS_PARENT, "As Parent") (MQPER_PERSISTENT, "Persistent") (MQPER_NOT_PERSISTENT, "Non Persistent") ) (MQIA_DEF_PRIORITY) - (MQIA_DEF_PUT_RESPONSE_TYPE, "DefPutResponse", DisplayMapInitializer + (MQIA_DEF_PUT_RESPONSE_TYPE, "DefPutResponse", TextMapInitializer (MQPRT_ASYNC_RESPONSE, "Async Response") (MQPRT_RESPONSE_AS_PARENT, "As Parent") (MQPRT_SYNC_RESPONSE, "Sync Response") ) (MQCA_MODEL_DURABLE_Q, "DurableModelQName") - (MQIA_DURABLE_SUB, "DurableSubscriptions", DisplayMapInitializer + (MQIA_DURABLE_SUB, "DurableSubscriptions", TextMapInitializer (MQSUB_DURABLE_AS_PARENT, "As Parent") (MQSUB_DURABLE_ALLOWED, "Allowed") (MQSUB_DURABLE_INHIBITED, "Inhibited") ) - (MQIA_INHIBIT_PUB, "InhibitPublications", DisplayMapInitializer + (MQIA_INHIBIT_PUB, "InhibitPublications", TextMapInitializer (MQTA_PUB_AS_PARENT, "As Parent") (MQTA_PUB_INHIBITED, "Inhibited") (MQTA_PUB_ALLOWED, "Allowed") ) - (MQIA_INHIBIT_SUB, "InhibitSubscriptions", DisplayMapInitializer + (MQIA_INHIBIT_SUB, "InhibitSubscriptions", TextMapInitializer (MQTA_SUB_AS_PARENT, "As Parent") (MQTA_SUB_INHIBITED, "Inhibited") (MQTA_SUB_ALLOWED, "Allowed") ) (MQCA_MODEL_NON_DURABLE_Q, "NonDurableModelQName") - (MQIA_NPM_DELIVERY, "NonPersistentMsgDelivery", DisplayMapInitializer + (MQIA_NPM_DELIVERY, "NonPersistentMsgDelivery", TextMapInitializer (MQDLV_AS_PARENT, "As Parent") (MQDLV_ALL, "ALL") (MQDLV_ALL_DUR, "All Durable") (MQDLV_ALL_AVAIL, "All Available") ) - (MQIA_PM_DELIVERY, "PersistentMsgDelivery", DisplayMapInitializer + (MQIA_PM_DELIVERY, "PersistentMsgDelivery", TextMapInitializer (MQDLV_AS_PARENT, "As Parent") (MQDLV_ALL, "ALL") (MQDLV_ALL_DUR, "All Durable") (MQDLV_ALL_AVAIL, "All Available") ) - (MQIA_PROXY_SUB, "ProxySubscriptions", DisplayMapInitializer + (MQIA_PROXY_SUB, "ProxySubscriptions", TextMapInitializer (MQTA_PROXY_SUB_FORCE, "Sub Force") (MQTA_PROXY_SUB_FIRSTUSE, "Sub Firstuse") ) - (MQIA_PUB_SCOPE, "PublicationScope", DisplayMapInitializer + (MQIA_PUB_SCOPE, "PublicationScope", TextMapInitializer (MQSCOPE_ALL, "All") (MQSCOPE_AS_PARENT, "As Parent") (MQSCOPE_QMGR, "Qmgr") ) (MQCA_CLUSTER_Q_MGR_NAME) - (MQIA_SUB_SCOPE, "SubscriptionScope", DisplayMapInitializer + (MQIA_SUB_SCOPE, "SubscriptionScope", TextMapInitializer (MQSCOPE_ALL, "All") (MQSCOPE_AS_PARENT, "As Parent") (MQSCOPE_QMGR, "Qmgr") @@ -1391,7 +1391,7 @@ Dictionary topicDictionary = Dictionary() (MQCA_TOPIC_DESC, "TopicDesc") (MQCA_TOPIC_NAME, "TopicName") (MQCA_TOPIC_STRING) - (MQIA_TOPIC_TYPE, "TopicType", DisplayMapInitializer + (MQIA_TOPIC_TYPE, "TopicType", TextMapInitializer (MQTOPT_LOCAL, "All") (MQTOPT_LOCAL, "Local") (MQTOPT_CLUSTER, "Cluster") @@ -1399,7 +1399,7 @@ Dictionary topicDictionary = Dictionary() #ifdef MQIA_USE_DEAD_LETTER_Q (MQIA_USE_DEAD_LETTER_Q) #endif - (MQIA_WILDCARD_OPERATION, "WildcardOperation", DisplayMapInitializer + (MQIA_WILDCARD_OPERATION, "WildcardOperation", TextMapInitializer (MQTA_PASSTHRU, "Passthru") (MQTA_BLOCK, "Block") ) @@ -1431,11 +1431,11 @@ Dictionary topicStatusDictionary = Dictionary() #endif (MQBACF_SUB_ID) (MQCACF_SUB_USER_ID, "SubscriptionUserId") - (MQIACF_DURABLE_SUBSCRIPTION, "Durable", DisplayMapInitializer + (MQIACF_DURABLE_SUBSCRIPTION, "Durable", TextMapInitializer (MQSUB_DURABLE_YES, "Yes") (MQSUB_DURABLE_NO, "No") ) - (MQIACF_SUB_TYPE, "SubscriptionType", DisplayMapInitializer + (MQIACF_SUB_TYPE, "SubscriptionType", TextMapInitializer (MQSUBTYPE_PROXY, "Proxy") (MQSUBTYPE_ADMIN, "Admin") (MQSUBTYPE_API, "API") @@ -1463,14 +1463,14 @@ Dictionary eventDictionary = Dictionary() (MQCA_BASE_OBJECT_NAME, "BaseObjectName") (MQIA_BASE_TYPE) (MQCACF_BRIDGE_NAME, "BridgeName") - (MQIACF_BRIDGE_TYPE, "BridgeType", DisplayMapInitializer + (MQIACF_BRIDGE_TYPE, "BridgeType", TextMapInitializer (MQBT_OTMA, "OTMA") ) (MQCA_CF_STRUC_NAME, "CFStrucName") (MQCACH_CHANNEL_NAME) (MQIACH_CHANNEL_TYPE) (MQCACH_CLIENT_USER_ID, "ClientUserIdentifier") - (MQIACF_COMMAND, "Command", DisplayMapInitializer + (MQIACF_COMMAND, "Command", TextMapInitializer MQCONST2STR(MQCMD_CHANGE_Q_MGR ) MQCONST2STR(MQCMD_INQUIRE_Q_MGR ) MQCONST2STR(MQCMD_CHANGE_PROCESS ) @@ -1666,7 +1666,7 @@ Dictionary eventDictionary = Dictionary() (MQCACF_COMMAND_MQSC, "CommandMQSC") (MQCA_COMM_INFO_NAME, "CommInfoName") (MQCACH_CONNECTION_NAME) - (MQIACF_CONV_REASON_CODE, "ConversionReasonCode", DisplayMapInitializer + (MQIACF_CONV_REASON_CODE, "ConversionReasonCode", TextMapInitializer MQCONST2STR(MQRC_CONVERTED_MSG_TOO_BIG) MQCONST2STR(MQRC_FORMAT_ERROR) MQCONST2STR(MQRC_NOT_CONVERTED) @@ -1687,7 +1687,7 @@ Dictionary eventDictionary = Dictionary() (MQCACF_EVENT_APPL_IDENTITY, "EventApplIdentity") (MQCACF_EVENT_APPL_NAME, "EventApplName") (MQCACF_EVENT_APPL_ORIGIN, "EventApplOrigin") - (MQIACF_EVENT_APPL_TYPE, "EventApplType", DisplayMapInitializer + (MQIACF_EVENT_APPL_TYPE, "EventApplType", TextMapInitializer (MQAT_UNKNOWN, "Unknown") (MQAT_NO_CONTEXT, "No Context") (MQAT_CICS, "CICS Transaction") @@ -1724,7 +1724,7 @@ Dictionary eventDictionary = Dictionary() (MQAT_SYSTEM_EXTENSION, "System Extension") ) (MQCACF_EVENT_USER_ID, "EventUserId") - (MQIACF_EVENT_ORIGIN, "EventOrigin", DisplayMapInitializer + (MQIACF_EVENT_ORIGIN, "EventOrigin", TextMapInitializer (MQEVO_CONSOLE, "Console") (MQEVO_INIT, "Initialization") (MQEVO_INTERNAL, "Internal") @@ -1746,7 +1746,7 @@ Dictionary eventDictionary = Dictionary() (MQIA_MSG_ENQ_COUNT, "MsgEnqCount") (MQIA_MSG_DEQ_COUNT, "MsgDeqCount") (MQCACF_OBJECT_Q_MGR_NAME, "ObjectQMgrName") - (MQIACF_OBJECT_TYPE, "ObjectType", DisplayMapInitializer + (MQIACF_OBJECT_TYPE, "ObjectType", TextMapInitializer (MQOT_ALL, "All") (MQOT_CHANNEL, "Channel") (MQOT_CHLAUTH, "Channel Authentication Record") @@ -1794,7 +1794,7 @@ Dictionary eventDictionary = Dictionary() (MQIA_TIME_SINCE_RESET, "TimeSinceReset") (MQCA_TOPIC_NAME, "TopicName") (MQCA_TOPIC_STRING) - (MQIACF_REASON_QUALIFIER, "ReasonQualifier", DisplayMapInitializer + (MQIACF_REASON_QUALIFIER, "ReasonQualifier", TextMapInitializer (MQRQ_CONN_NOT_AUTHORIZED, "Conn Not Authorized") (MQRQ_OPEN_NOT_AUTHORIZED, "Open Not Authorized") (MQRQ_CLOSE_NOT_AUTHORIZED, "Close Not Authorized") @@ -1830,7 +1830,7 @@ Dictionary eventDictionary = Dictionary() ; Dictionary reasonDictionary = Dictionary() - (MQIACF_REASON_CODE, "Reason", DisplayMapInitializer + (MQIACF_REASON_CODE, "Reason", TextMapInitializer MQCONST2STR(MQRC_NONE ) MQCONST2STR(MQRC_APPL_FIRST ) MQCONST2STR(MQRC_APPL_LAST ) @@ -2621,7 +2621,7 @@ Dictionary namelistDictionary = Dictionary() (MQIA_NAME_COUNT, "NameCount") (MQCA_NAMELIST_DESC, "NamelistDesc") (MQCA_NAMELIST_NAME) - (MQIA_NAMELIST_TYPE, "NamelistType", DisplayMapInitializer + (MQIA_NAMELIST_TYPE, "NamelistType", TextMapInitializer (MQNT_NONE, "None") (MQNT_Q, "Queue") (MQNT_CLUSTER, "Cluster") @@ -2651,13 +2651,13 @@ Dictionary serviceDictionary = Dictionary() (MQCA_ALTERATION_TIME) (MQCA_SERVICE_DESC, "ServiceDesc") (MQCA_SERVICE_NAME, "ServiceName") - (MQIA_SERVICE_TYPE, "ServiceType", DisplayMapInitializer + (MQIA_SERVICE_TYPE, "ServiceType", TextMapInitializer (MQSVC_TYPE_SERVER, "Server") (MQSVC_TYPE_COMMAND, "Command") ) (MQCA_SERVICE_START_ARGS, "StartArguments") (MQCA_SERVICE_START_COMMAND, "StartCommand") - (MQIA_SERVICE_CONTROL, "StartMode", DisplayMapInitializer + (MQIA_SERVICE_CONTROL, "StartMode", TextMapInitializer (MQSVC_CONTROL_MANUAL, "Manual") (MQSVC_CONTROL_Q_MGR, "Qmgr") (MQSVC_CONTROL_Q_MGR_START, "QmgrStart") @@ -2677,7 +2677,7 @@ Dictionary authenticationInformationDictionary = Dictionary() (MQCA_AUTH_INFO_CONN_NAME, "AuthInfoConnName") (MQCA_AUTH_INFO_DESC, "AuthInfoDesc") (MQCA_AUTH_INFO_NAME, "AuthInfoName") - (MQIA_AUTH_INFO_TYPE, "AuthInfoType", DisplayMapInitializer + (MQIA_AUTH_INFO_TYPE, "AuthInfoType", TextMapInitializer (MQAIT_ALL, "All") (MQAIT_CRL_LDAP, "CRL LDAP") (MQAIT_OCSP, "OCSP") @@ -2692,7 +2692,7 @@ Dictionary authenticationInformationDictionary = Dictionary() ; Dictionary authorityRecordDictionary = Dictionary() - (MQIACF_AUTHORIZATION_LIST, "AuthorizationList", DisplayMapInitializer + (MQIACF_AUTHORIZATION_LIST, "AuthorizationList", TextMapInitializer (MQAUTH_NONE, "None") (MQAUTH_ALT_USER_AUTHORITY, "Alt User Authority") (MQAUTH_BROWSE, "Browse") @@ -2721,7 +2721,7 @@ Dictionary authorityRecordDictionary = Dictionary() (MQAUTH_ALL_MQI, "All MQI") ) (MQCACF_ENTITY_NAME, "EntityName") - (MQIACF_ENTITY_TYPE, "EntityType", DisplayMapInitializer + (MQIACF_ENTITY_TYPE, "EntityType", TextMapInitializer (MQZAET_GROUP, "Group") (MQZAET_PRINCIPAL, "Principal") (MQZAET_UNKNOWN, "Unknown") @@ -2741,14 +2741,14 @@ Dictionary subDictionary = Dictionary() (MQCA_CREATION_DATE) (MQCA_CREATION_TIME) (MQCACF_DESTINATION, "Destination") - (MQIACF_DESTINATION_CLASS, "DestinationClass", DisplayMapInitializer + (MQIACF_DESTINATION_CLASS, "DestinationClass", TextMapInitializer (MQDC_MANAGED, "Managed") (MQDC_PROVIDED, "Provided") ) (MQBACF_DESTINATION_CORREL_ID, "DestinationCorrelId") (MQCACF_DESTINATION_Q_MGR, "DestionationQueueManager") #ifdef MQIA_DISPLAY_TYPE - (MQIA_DISPLAY_TYPE, "DisplayType", DisplayMapInitializer + (MQIA_DISPLAY_TYPE, "DisplayType", TextMapInitializer (MQDOPT_RESOLVED, "Resolved") (MQDOPT_DEFINED, "Defined") ) @@ -2758,18 +2758,18 @@ Dictionary subDictionary = Dictionary() (MQBACF_ACCOUNTING_TOKEN, "PublishedAccountingToken") (MQCACF_APPL_IDENTITY_DATA, "PublishedApplicationIdentityData") (MQIACF_PUB_PRIORITY, "PublishPriority") - (MQIACF_PUBSUB_PROPERTIES, "PublishSubscribeProperties", DisplayMapInitializer + (MQIACF_PUBSUB_PROPERTIES, "PublishSubscribeProperties", TextMapInitializer (MQPSPROP_NONE, "None") (MQPSPROP_MSGPROP, "MsgProp") (MQPSPROP_COMPAT, "Compat") (MQPSPROP_RFH2, "RFH2") ) - (MQIACF_REQUEST_ONLY, "Requestonly", DisplayMapInitializer + (MQIACF_REQUEST_ONLY, "Requestonly", TextMapInitializer (MQRU_PUBLISH_ALL, "All") (MQRU_PUBLISH_ON_REQUEST, "On Request") ) (MQCACF_SUB_SELECTOR, "Selector") - (MQIACF_SELECTOR_TYPE, "SelectorType", DisplayMapInitializer + (MQIACF_SELECTOR_TYPE, "SelectorType", TextMapInitializer (MQSELTYPE_NONE, "None") (MQSELTYPE_STANDARD, "Standard") (MQSELTYPE_EXTENDED, "Extended") @@ -2777,7 +2777,7 @@ Dictionary subDictionary = Dictionary() (MQBACF_SUB_ID, "SubId") (MQIACF_SUB_LEVEL, "SubLevel") (MQCACF_SUB_NAME) - (MQIACF_SUBSCRIPTION_SCOPE, "SubscriptionScope", DisplayMapInitializer + (MQIACF_SUBSCRIPTION_SCOPE, "SubscriptionScope", TextMapInitializer (MQTSCOPE_ALL, "All") (MQTSCOPE_QMGR, "QMgr") ) @@ -2787,7 +2787,7 @@ Dictionary subDictionary = Dictionary() (MQCA_TOPIC_STRING) (MQCACF_SUB_USER_DATA, "UserData") (MQIACF_VARIABLE_USER_ID, "VariableUser") - (MQIACF_WILDCARD_SCHEMA, "WildcardSchema", DisplayMapInitializer + (MQIACF_WILDCARD_SCHEMA, "WildcardSchema", TextMapInitializer (MQWS_CHAR, "Char") (MQWS_TOPIC, "Topic") ) @@ -2817,7 +2817,7 @@ Dictionary subStatusDictionary = Dictionary() Dictionary authorityServiceDictionary = Dictionary() (MQIACF_INTERFACE_VERSION, "InterfaceVersion") (MQCACF_SERVICE_COMPONENT, "ServiceComponent") - (MQIACF_USER_ID_SUPPORT, "UserIDSupport", DisplayMapInitializer + (MQIACF_USER_ID_SUPPORT, "UserIDSupport", TextMapInitializer (MQUIDSUPP_YES, "Yes") (MQUIDSUPP_NO, "No") ) @@ -2842,7 +2842,7 @@ Dictionary channelInitiatorDictionary = Dictionary() (MQIACH_SSLTASKS_MAX, "SSLTasksMax") (MQIACH_SSLTASKS_STARTED, "SSLTasksStarted") (MQCACH_TCP_NAME, "TCPName") - (MQIACH_INBOUND_DISP, "InboundDisposition", DisplayMapInitializer + (MQIACH_INBOUND_DISP, "InboundDisposition", TextMapInitializer (MQINBD_GROUP, "Group") (MQINBD_Q_MGR, "Qmgr") ) @@ -2891,7 +2891,7 @@ void store(Poco::Data::Session& session, int oid, const std::string& name, const if ( it->second.empty() ) continue; // Empty attributes are ignored, we assume they are already defined ... - // Already inserted skip it (we assume that display map and + // Already inserted skip it (we assume that text and // name are defined on the first occurrence) if ( allAttributes.find(it->first) != allAttributes.end() ) continue; @@ -2899,19 +2899,19 @@ void store(Poco::Data::Session& session, int oid, const std::string& name, const attributes.insert(std::make_pair(it->first, Attribute(it->first, it->second))); allAttributes.insert(std::make_pair(it->first, it->second)); - if ( dict.hasDisplayMap(it->first) ) + if ( dict.hasTextMap(it->first) ) { - typedef Poco::Tuple Display; - typedef std::vector Displays; - Displays displays; + typedef Poco::Tuple Text; + typedef std::vector Texts; + Texts texts; - const DisplayMap& displayMap = dict.getDisplayMap(it->first); - for(DisplayMap::const_iterator itDsp = displayMap.begin(); itDsp != displayMap.end(); ++itDsp) + const TextMap& textMap = dict.getTextMap(it->first); + for(TextMap::const_iterator itTxt = textMap.begin(); itTxt != textMap.end(); ++itTxt) { - displays.push_back(Display(it->first, itDsp->first, itDsp->second)); + texts.push_back(Text(it->first, itTxt->first, itTxt->second)); } - std::cout << "Inserting Display Map for " << it->second << std::endl; - session << "INSERT INTO displays(attribute_id, value, display) VALUES(?, ?, ?)", use(displays), now; + std::cout << "Inserting Text Map for " << it->second << std::endl; + session << "INSERT INTO texts(attribute_id, value, text) VALUES(?, ?, ?)", use(texts), now; } objectAttributes.push_back(ObjectAttribute(oid, it->first)); @@ -2945,11 +2945,11 @@ int main(const std::vector& args) session << "DROP TABLE IF EXISTS objects", now; session << "DROP TABLE IF EXISTS attributes", now; session << "DROP TABLE IF EXISTS object_attributes", now; - session << "DROP TABLE IF EXISTS displays", now; + session << "DROP TABLE IF EXISTS texts", now; session << "CREATE TABLE IF NOT EXISTS objects (id INTEGER PRIMARY KEY, name VARCHAR)", now; session << "CREATE TABLE IF NOT EXISTS attributes (id INTEGER PRIMARY KEY, name VARCHAR)", now; session << "CREATE TABLE IF NOT EXISTS object_attributes (object_id INTEGER, attribute_id INTEGER)", now; - session << "CREATE TABLE IF NOT EXISTS displays (attribute_id INTEGER, value INTEGER, display VARCHAR)", now; + session << "CREATE TABLE IF NOT EXISTS texts (attribute_id INTEGER, value INTEGER, text VARCHAR)", now; int oid = 0; store(session, ++oid, "QueueManager", queueManagerDictionary); diff --git a/MQWeb/src/DictionaryCache.cpp b/MQWeb/src/DictionaryCache.cpp index 5046acc..435b6c5 100644 --- a/MQWeb/src/DictionaryCache.cpp +++ b/MQWeb/src/DictionaryCache.cpp @@ -76,7 +76,7 @@ Poco::SharedPtr DictionaryCache::load(const std::string& name) int objectId = 0; session << "SELECT id FROM objects WHERE name == :n", into(objectId), useRef(name), now; - session << "SELECT a.id, a.name, d.value, d.display FROM object_attributes oa INNER JOIN attributes a ON oa.attribute_id = a.id LEFT JOIN displays d ON oa.attribute_id = d.attribute_id WHERE oa.object_id = ?", use(objectId), into(attributes), now; + session << "SELECT a.id, a.name, d.value, d.text FROM object_attributes oa INNER JOIN attributes a ON oa.attribute_id = a.id LEFT JOIN texts d ON oa.attribute_id = d.attribute_id WHERE oa.object_id = ?", use(objectId), into(attributes), now; } catch(Poco::Data::DataException& de) { @@ -93,7 +93,7 @@ Poco::SharedPtr DictionaryCache::load(const std::string& name) } int prevAttributeId = -1; - TextMap displayMap; + TextMap textMap; std::string attributeName; @@ -101,10 +101,10 @@ Poco::SharedPtr DictionaryCache::load(const std::string& name) { if ( prevAttributeId != it->get<0>() ) { - if ( displayMap.size() > 0 ) + if ( textMap.size() > 0 ) { - dictionary->set(prevAttributeId, attributeName, displayMap); - displayMap.clear(); + dictionary->set(prevAttributeId, attributeName, textMap); + textMap.clear(); } prevAttributeId = it->get<0>(); } @@ -115,15 +115,15 @@ Poco::SharedPtr DictionaryCache::load(const std::string& name) continue; } - displayMap.insert(std::make_pair(it->get<2>(), it->get<3>())); + textMap.insert(std::make_pair(it->get<2>(), it->get<3>())); attributeName = it->get<1>(); } // Do the last one ... - if ( displayMap.size() > 0 ) + if ( textMap.size() > 0 ) { - dictionary->set(prevAttributeId, attributeName, displayMap); - displayMap.clear(); + dictionary->set(prevAttributeId, attributeName, textMap); + textMap.clear(); } return dictionary; From 7a41d9752011f27d2a02c43ca4aed4f0d78f537b Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 15 Jun 2016 11:27:13 +0200 Subject: [PATCH 24/60] Check mq.web.app configuration --- MQWeb/src/AppRequestHandler.cpp | 135 ++++++++++++++++---------------- 1 file changed, 66 insertions(+), 69 deletions(-) diff --git a/MQWeb/src/AppRequestHandler.cpp b/MQWeb/src/AppRequestHandler.cpp index e04d35a..81512e2 100644 --- a/MQWeb/src/AppRequestHandler.cpp +++ b/MQWeb/src/AppRequestHandler.cpp @@ -61,94 +61,91 @@ void AppRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poc std::string staticPathname = app.config().getString("mq.web.app", ""); if ( staticPathname.empty() ) { - response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND); + Poco::Logger& logger = Poco::Logger::get("mq.web"); + logger.error("mq.web.app property not defined. Check your configuration."); + response.setStatus(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); response.send(); + return; } - if ( ! staticPathname.empty() ) + Poco::Path staticPath(staticPathname); + staticPath.makeDirectory(); + + std::vector uriPathSegments; + uri.getPathSegments(uriPathSegments); + std::vector::iterator it = uriPathSegments.begin(); + it++; + for(; it != uriPathSegments.end(); ++it) { - Poco::Path staticPath(staticPathname); - staticPath.makeDirectory(); - - std::vector uriPathSegments; - uri.getPathSegments(uriPathSegments); - std::vector::iterator it = uriPathSegments.begin(); - it++; - for(; it != uriPathSegments.end(); ++it) - { - staticPath.append(*it); - } + staticPath.append(*it); + } - Poco::File staticFile(staticPath); + Poco::File staticFile(staticPath); - Poco::Logger& logger = Poco::Logger::get("mq.web.access"); - if ( staticFile.exists() ) + Poco::Logger& logger = Poco::Logger::get("mq.web.access"); + if ( staticFile.exists() ) + { + if ( !lastModifiedHeader.empty() ) { - if ( !lastModifiedHeader.empty() ) + Poco::DateTime lastModifiedDate; + int timeZoneDifferential = 0; + if ( Poco::DateTimeParser::tryParse(Poco::DateTimeFormat::HTTP_FORMAT, lastModifiedHeader, lastModifiedDate, timeZoneDifferential) ) { - Poco::DateTime lastModifiedDate; - int timeZoneDifferential = 0; - if ( Poco::DateTimeParser::tryParse(Poco::DateTimeFormat::HTTP_FORMAT, lastModifiedHeader, lastModifiedDate, timeZoneDifferential) ) + if ( staticFile.getLastModified() <= lastModifiedDate.timestamp() ) { - if ( staticFile.getLastModified() <= lastModifiedDate.timestamp() ) - { - logger.information(Poco::Logger::format("$0 : HTTP_NOT_MODIFIED", staticPath.toString())); - response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_MODIFIED); - response.send(); - return; - } + logger.information(Poco::Logger::format("$0 : HTTP_NOT_MODIFIED", staticPath.toString())); + response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_MODIFIED); + response.send(); + return; } } + } - logger.information(Poco::Logger::format("$0 : HTTP_OK", staticPath.toString())); + logger.information(Poco::Logger::format("$0 : HTTP_OK", staticPath.toString())); - std::string mimeType; - if ( staticPath.getExtension().compare("gif") == 0 ) - { - mimeType = "image/gif"; - } - else if ( staticPath.getExtension().compare("css") == 0 ) - { - mimeType = "text/css"; - } - else if ( staticPath.getExtension().compare("html") == 0 || staticPath.getExtension().compare("htm") == 0) - { - mimeType = "text/html"; - } - else if ( staticPath.getExtension().compare("js") == 0 ) - { - mimeType = "text/javascript"; - } - else if ( staticPath.getExtension().compare("png") == 0 ) - { - mimeType = "image/png"; - } - else if ( staticPath.getExtension().compare("jpg") == 0 || staticPath.getExtension().compare("jpeg") == 0) - { - mimeType = "image/jpeg"; - } + std::string mimeType; + if ( staticPath.getExtension().compare("gif") == 0 ) + { + mimeType = "image/gif"; + } + else if ( staticPath.getExtension().compare("css") == 0 ) + { + mimeType = "text/css"; + } + else if ( staticPath.getExtension().compare("html") == 0 || staticPath.getExtension().compare("htm") == 0) + { + mimeType = "text/html"; + } + else if ( staticPath.getExtension().compare("js") == 0 ) + { + mimeType = "text/javascript"; + } + else if ( staticPath.getExtension().compare("png") == 0 ) + { + mimeType = "image/png"; + } + else if ( staticPath.getExtension().compare("jpg") == 0 || staticPath.getExtension().compare("jpeg") == 0) + { + mimeType = "image/jpeg"; + } - try - { - response.sendFile(staticPath.toString(), mimeType); - } - catch(Poco::FileNotFoundException&) - { - // We can't get here normally ... but you never know :) - response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_NOT_FOUND, Poco::Logger::format("Can't find file $0", staticPath.toString())); - } - catch(Poco::OpenFileException&) - { - response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR, Poco::Logger::format("Can't open file $0", staticPath.toString())); - } - return; + try + { + response.sendFile(staticPath.toString(), mimeType); } - else + catch(Poco::FileNotFoundException&) { - logger.error(Poco::Logger::format("$0 : HTTP_NOT_FOUND", staticFile.path())); + // We can't get here normally ... but you never know :) + response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_NOT_FOUND, Poco::Logger::format("Can't find file $0", staticPath.toString())); } + catch(Poco::OpenFileException&) + { + response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR, Poco::Logger::format("Can't open file $0", staticPath.toString())); + } + return; } + logger.error(Poco::Logger::format("$0 : HTTP_NOT_FOUND", staticFile.path())); response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND); response.send(); } From 74fd486d8b75677809996453dc29b1b0ae1be46d Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 15 Jun 2016 11:27:50 +0200 Subject: [PATCH 25/60] Add mq.bin property to set path for dspmq --- MQWeb/src/MQWebController.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp index 4c12ae9..2d1dfe6 100644 --- a/MQWeb/src/MQWebController.cpp +++ b/MQWeb/src/MQWebController.cpp @@ -98,7 +98,11 @@ void MQWebController::list() try { - Poco::ProcessHandle ph = Poco::Process::launch("C:/Program Files (x86)/IBM/WebSphere MQ Runtime V750/bin/dspmq", args, 0, &outPipe, 0); + Poco::Util::Application& app = Poco::Util::Application::instance(); + std::string mqBinPathname = app.config().getString("mq.bin", ""); + std::string command = mqBinPathname + "/dspmq"; + + Poco::ProcessHandle ph = Poco::Process::launch(command, args, mqBinPathname, 0, &outPipe, 0); Poco::PipeInputStream istr(outPipe); From 9dc75fe7d8b5a83cdd10cc661af156608acd6fd3 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 15 Jun 2016 13:22:42 +0200 Subject: [PATCH 26/60] Add comments --- MQWeb/include/MQ/Web/MQWebController.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/MQWeb/include/MQ/Web/MQWebController.h b/MQWeb/include/MQ/Web/MQWebController.h index 3081dce..466da9e 100644 --- a/MQWeb/include/MQ/Web/MQWebController.h +++ b/MQWeb/include/MQ/Web/MQWebController.h @@ -42,8 +42,12 @@ class MQWebController : public Controller /// Returns all available actions void inquire(); + /// Returns MQWeb information like: version, client/binding mode, ... void list(); + /// Returns a list of available queuemanagers. In client mode, all queuemanagers + /// that are configured are returned, in binding mode MQWeb will try to + /// execute the mq utility dspmq. private: }; From aa351cf0a5e7de70a94bef867ec5f2accacf0ca2 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 15 Jun 2016 14:41:18 +0200 Subject: [PATCH 27/60] initialDirectory doesn't seem to work ... --- MQWeb/src/MQWebController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp index 2d1dfe6..a877cb1 100644 --- a/MQWeb/src/MQWebController.cpp +++ b/MQWeb/src/MQWebController.cpp @@ -102,7 +102,7 @@ void MQWebController::list() std::string mqBinPathname = app.config().getString("mq.bin", ""); std::string command = mqBinPathname + "/dspmq"; - Poco::ProcessHandle ph = Poco::Process::launch(command, args, mqBinPathname, 0, &outPipe, 0); + Poco::ProcessHandle ph = Poco::Process::launch(command, args, 0, &outPipe, 0); Poco::PipeInputStream istr(outPipe); From 2721b3a09d0b7a78886f199293465ede68e67e96 Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 16 Jun 2016 07:12:00 +0200 Subject: [PATCH 28/60] Change error json to JSONAPI --- MQWeb/src/MQController.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/MQWeb/src/MQController.cpp b/MQWeb/src/MQController.cpp index d3763f5..3008d4d 100644 --- a/MQWeb/src/MQController.cpp +++ b/MQWeb/src/MQController.cpp @@ -125,22 +125,35 @@ void MQController::beforeAction() void MQController::handleException(const MQException& mqe) { + Poco::JSON::Array::Ptr errors = new Poco::JSON::Array(); + set("errors", errors); + Poco::JSON::Object::Ptr error = new Poco::JSON::Object(); + errors->add(error); - set("error", error); - error->set("object", mqe.object()); - error->set("fn", mqe.function()); + Poco::JSON::Object::Ptr meta = new Poco::JSON::Object(); + error->set("meta", meta); + meta->set("object", mqe.object()); + meta->set("fn", mqe.function()); + + Poco::JSON::Object::Ptr completion = new Poco::JSON::Object(); + meta->set("completion", completion); + completion->set("code", mqe.code()); switch(mqe.code()) { - case MQCC_OK: error->set("code", "OK"); break; - case MQCC_WARNING: error->set("code", "WARNING"); break; - case MQCC_FAILED: error->set("code", "ERROR"); break; + case MQCC_OK: completion->set("desc", "OK"); break; + case MQCC_WARNING: completion->set("desc", "WARNING"); break; + case MQCC_FAILED: completion->set("desc", "ERROR"); break; } + std::string reasonStr = MQMapper::getReasonString(mqe.reason()); Poco::JSON::Object::Ptr reason = new Poco::JSON::Object(); - error->set("reason", reason); + meta->set("reason", reason); reason->set("code", mqe.reason()); - reason->set("desc", MQMapper::getReasonString(mqe.reason())); + reason->set("desc", reasonStr); + + error->set("code", Poco::NumberFormatter::format(mqe.reason())); + error->set("title", reasonStr); if ( isJSON() ) { From 14ee4153da9a9a8d62aa796619846837936acd9f Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 16 Jun 2016 07:49:47 +0200 Subject: [PATCH 29/60] Remove views. MQWeb will only support JSONAPI. --- MQWeb/include/MQ/Web/Controller.h | 19 ----- MQWeb/include/MQ/Web/JSONPView.h | 50 -------------- MQWeb/include/MQ/Web/JSONView.h | 49 ------------- MQWeb/include/MQ/Web/MultiView.h | 64 ----------------- MQWeb/include/MQ/Web/TemplateView.h | 53 -------------- MQWeb/include/MQ/Web/View.h | 50 -------------- MQWeb/include/MQ/Web/WebController.h | 84 ---------------------- MQWeb/src/Controller.cpp | 35 +++++----- MQWeb/src/JSONPView.cpp | 45 ------------ MQWeb/src/JSONView.cpp | 53 -------------- MQWeb/src/MQController.cpp | 11 --- MQWeb/src/MessageController.cpp | 1 - MQWeb/src/MultiView.cpp | 65 ----------------- MQWeb/src/ServiceController.cpp | 1 - MQWeb/src/TemplateView.cpp | 69 ------------------ MQWeb/src/View.cpp | 35 ---------- MQWeb/src/WebController.cpp | 100 --------------------------- 17 files changed, 17 insertions(+), 767 deletions(-) delete mode 100644 MQWeb/include/MQ/Web/JSONPView.h delete mode 100644 MQWeb/include/MQ/Web/JSONView.h delete mode 100644 MQWeb/include/MQ/Web/MultiView.h delete mode 100644 MQWeb/include/MQ/Web/TemplateView.h delete mode 100644 MQWeb/include/MQ/Web/View.h delete mode 100644 MQWeb/include/MQ/Web/WebController.h delete mode 100644 MQWeb/src/JSONPView.cpp delete mode 100644 MQWeb/src/JSONView.cpp delete mode 100644 MQWeb/src/MultiView.cpp delete mode 100644 MQWeb/src/TemplateView.cpp delete mode 100644 MQWeb/src/View.cpp delete mode 100644 MQWeb/src/WebController.cpp diff --git a/MQWeb/include/MQ/Web/Controller.h b/MQWeb/include/MQ/Web/Controller.h index 68a479d..f87a42a 100644 --- a/MQWeb/include/MQ/Web/Controller.h +++ b/MQWeb/include/MQ/Web/Controller.h @@ -33,7 +33,6 @@ #include "MQ/QueueManager.h" #include "MQ/CommandServer.h" -#include "MQ/Web/View.h" namespace MQ { namespace Web { @@ -105,9 +104,6 @@ class Controller : public Poco::Net::PartHandler Poco::Net::HTTPServerResponse& response(); /// Returns the HTTP response - void setJSONView(); - /// Checks for JSONP or JSON request and creates the corresponding view class - void setResponseStatus(Poco::Net::HTTPServerResponse::HTTPStatus status); /// Sets the HTTP response status. This will send the response to the client. @@ -117,9 +113,6 @@ class Controller : public Poco::Net::PartHandler void render(); /// Renders the view - void setView(Poco::SharedPtr v); - /// Set the view - protected: @@ -153,18 +146,12 @@ class Controller : public Poco::Net::PartHandler std::map _namedParameters; - Poco::SharedPtr _view; - - friend class ControllerRequestHandler; }; inline void Controller::afterAction() { - // When no view is set yet, we assume JSON - if ( _view.isNull() ) setJSONView(); - render(); } @@ -258,12 +245,6 @@ inline Poco::Net::HTTPServerResponse& Controller::response() return *_response; } - -inline void Controller::setView(Poco::SharedPtr v) -{ - _view = v; -} - }} // Namespace MQ::Web #endif // _MQWeb_Controller_h diff --git a/MQWeb/include/MQ/Web/JSONPView.h b/MQWeb/include/MQ/Web/JSONPView.h deleted file mode 100644 index f7975db..0000000 --- a/MQWeb/include/MQ/Web/JSONPView.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - -#ifndef _MQWeb_JSONPView_H -#define _MQWeb_JSONPView_H - -#include "Poco/Net/HTTPServerResponse.h" -#include "MQ/Web/JSONView.h" - -namespace MQ { -namespace Web { - -class JSONPView : public JSONView - /// A special JSON view that implments the JSONP technique -{ -public: - JSONPView(const std::string& callback); - /// Constructor - - virtual ~JSONPView(); - /// Destructor - - bool render(Poco::JSON::Object::Ptr data, std::ostream& os); - /// Renders the JSON as JSONP - -private: - std::string _callback; -}; - -} } // Namespace MQ::Web - -#endif //_MQWeb_JSONPView_H diff --git a/MQWeb/include/MQ/Web/JSONView.h b/MQWeb/include/MQ/Web/JSONView.h deleted file mode 100644 index ab38e6f..0000000 --- a/MQWeb/include/MQ/Web/JSONView.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - -#ifndef _MQWeb_JSONView_H -#define _MQWeb_JSONView_H - -#include "Poco/Net/HTTPServerResponse.h" -#include "MQ/Web/View.h" - -namespace MQ { -namespace Web { - -class JSONView : public View - /// A view that renders a JSON object -{ -public: - JSONView(); - /// Constructor - - virtual ~JSONView(); - /// Destructor - - void initializeResponse(Poco::Net::HTTPServerResponse& response); - - bool render(Poco::JSON::Object::Ptr data, std::ostream& os); - /// Renders the JSON object -}; - -} } // Namespace MQ::Web - -#endif //_MQWeb_JSONView_H diff --git a/MQWeb/include/MQ/Web/MultiView.h b/MQWeb/include/MQ/Web/MultiView.h deleted file mode 100644 index cf0d808..0000000 --- a/MQWeb/include/MQ/Web/MultiView.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - -#ifndef _MQWeb_MultiView_H -#define _MQWeb_MultiView_H - -#include - -#include "Poco/Net/HTTPServerResponse.h" -#include "MQ/Web/TemplateView.h" - -namespace MQ { -namespace Web { - -class MultiView : public TemplateView - /// A template view that can have child views -{ -public: - - typedef std::multimap > ViewMap; - - MultiView(const std::string& templateFile); - /// Constructor - - virtual ~MultiView(); - /// Destructor - - void add(const std::string& name, Poco::SharedPtr view); - /// Add a view - - bool render(Poco::JSON::Object::Ptr data, std::ostream& os); - /// Renders the JSON object - -private: - ViewMap _views; -}; - - -inline void MultiView::add(const std::string& name, Poco::SharedPtr view) -{ - _views.insert(std::pair >(name, view)); -} - -} } // Namespace MQ::Web - -#endif //_MQWeb_MultiView_H diff --git a/MQWeb/include/MQ/Web/TemplateView.h b/MQWeb/include/MQ/Web/TemplateView.h deleted file mode 100644 index 469261e..0000000 --- a/MQWeb/include/MQ/Web/TemplateView.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - -#ifndef _MQWeb_TemplateView_H -#define _MQWeb_TemplateView_H - -#include "Poco/Net/HTTPServerResponse.h" -#include "MQ/Web/View.h" - -namespace MQ { -namespace Web { - -class TemplateView : public View - /// Renders a JSON template to return HTML -{ -public: - TemplateView(const std::string& templateFile); - /// Constructor - - virtual ~TemplateView(); - /// Destructor - - void initializeResponse(Poco::Net::HTTPServerResponse& response); - /// Initialize response headers - - bool render(Poco::JSON::Object::Ptr data, std::ostream& os); - /// Renders the JSON template. - -private: - std::string _templateFile; -}; - -} } // Namespace MQ::Web - -#endif //_MQWeb_TemplateView_H diff --git a/MQWeb/include/MQ/Web/View.h b/MQWeb/include/MQ/Web/View.h deleted file mode 100644 index 7a0b067..0000000 --- a/MQWeb/include/MQ/Web/View.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - -#ifndef _MQWeb_View_H -#define _MQWeb_View_H - -#include "Poco/Net/HTTPServerResponse.h" -#include "Poco/JSON/Object.h" - -namespace MQ { -namespace Web { - -class View - /// Base class for our views -{ -public: - View(); - /// Constructor - - virtual ~View(); - /// Destructor - - virtual void initializeResponse(Poco::Net::HTTPServerResponse& response) = 0; - /// Called before the main view is rendered. Set headers, ... - - virtual bool render(Poco::JSON::Object::Ptr data, std::ostream& os) = 0; - /// Renders a view. Returns true on success, false on failure -}; - -} } // Namespace MQ::Web - -#endif //_MQWeb_View_H diff --git a/MQWeb/include/MQ/Web/WebController.h b/MQWeb/include/MQ/Web/WebController.h deleted file mode 100644 index fbbc57c..0000000 --- a/MQWeb/include/MQ/Web/WebController.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - -#ifndef _MQWeb_WebController_h -#define _MQWeb_WebController_h - -#include "MQ/Web/MQController.h" -#include "MQ/Web/MapInitializer.h" - -namespace MQ { -namespace Web { - -class WebController : public MQController - /// Controller that shows the details of a queue -{ -public: - WebController(); - /// Constructor - - virtual ~WebController(); - /// Destructor - - virtual const std::map& getActions() const; - /// Returns all available actions - - bool isJSON() const; - - void qmgr(); - - void queue(); - - void channel(); - - void chstatus(); - - void listener(); - - void lstatus(); - - void message(); - -private: -}; - - -inline const Controller::ActionMap& WebController::getActions() const -{ - static Controller::ActionMap actions - = MapInitializer - ("qmgr", static_cast(&WebController::qmgr)) - ("queue", static_cast(&WebController::queue)) - ("channel", static_cast(&WebController::channel)) - ("listener", static_cast(&WebController::listener)) - ("message", static_cast(&WebController::message)) - ; - return actions; -} - -inline bool WebController::isJSON() const -{ - return false; -} - -} } // Namespace MQ::Web - -#endif // _MQWeb_WebController_h diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index 72f46e7..19c1fa0 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -21,7 +21,6 @@ #include #include "MQ/Web/Controller.h" -#include "MQ/Web/JSONPView.h" #include "MQ/MQSubsystem.h" #include "Poco/Util/Application.h" @@ -78,7 +77,7 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H for(std::vector::iterator it = _parameters.begin(); it != _parameters.end(); ++it) { - int pos = it->find_first_of(':'); + size_t pos = it->find_first_of(':'); if ( pos != std::string::npos ) { std::string name = it->substr(0, pos); @@ -143,30 +142,30 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H } -void Controller::setJSONView() -{ - if ( _form.has("callback") ) setView(new JSONPView(_form.get("callback"))); - else if ( _form.has("jsonp") ) setView(new JSONPView(_form.get("jsonp"))); - else setView(new JSONView()); -} - void Controller::render() { - if ( _view.isNull() ) return; // No view set, don't do anything - - _view->initializeResponse(*_response); + response().setChunkedTransferEncoding(true); + response().setContentType("application/json"); + response().set("Cache-Controle", "no-cache,no-store,must-revalidate"); // HTTP 1.1 + response().set("Pragma", "no-cache"); // HTTP 1.0 + response().set("Expires", "0"); // Proxies std::stringstream ss; - bool rendered = _view->render(_data, ss); - if ( rendered ) + + if ( _form.has("callback") ) { - Poco::StreamCopier::copyStream(ss, _response->send()); + ss << _form.get("callback") << '('; } - else + + data().stringify(ss); + ss.flush(); + + if ( _form.has("callback") ) { - //TODO: redirect to an error page? - setResponseStatus(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); + ss << ');'; } + + Poco::StreamCopier::copyStream(ss, _response->send()); } void Controller::formElementToJSONArray(const std::string& name, Poco::JSON::Array::Ptr arr) diff --git a/MQWeb/src/JSONPView.cpp b/MQWeb/src/JSONPView.cpp deleted file mode 100644 index f8ba707..0000000 --- a/MQWeb/src/JSONPView.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "MQ/Web/JSONPView.h" - -namespace MQ { -namespace Web { - -JSONPView::JSONPView(const std::string& callback) : JSONView(), _callback(callback) -{ -} - - -JSONPView::~JSONPView() -{ -} - -bool JSONPView::render(Poco::JSON::Object::Ptr data, std::ostream& os) -{ - os << _callback; - os << '('; - JSONView::render(data, os); - os << ");"; - return true; -} - - -}} // Namespace MQ::Web diff --git a/MQWeb/src/JSONView.cpp b/MQWeb/src/JSONView.cpp deleted file mode 100644 index dfc9ea7..0000000 --- a/MQWeb/src/JSONView.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "MQ/Web/JSONView.h" - -namespace MQ { -namespace Web { - -JSONView::JSONView() : - View() -{ -} - - -JSONView::~JSONView() -{ -} - -void JSONView::initializeResponse(Poco::Net::HTTPServerResponse& response) -{ - response.setChunkedTransferEncoding(true); - response.setContentType("application/json"); - response.set("Cache-Controle", "no-cache,no-store,must-revalidate"); // HTTP 1.1 - response.set("Pragma", "no-cache"); // HTTP 1.0 - response.set("Expires", "0"); // Proxies -} - -bool JSONView::render(Poco::JSON::Object::Ptr data, std::ostream& os) -{ - data->stringify(os); - os.flush(); - return true; -} - - -}} // Namespace MQ::Web diff --git a/MQWeb/src/MQController.cpp b/MQWeb/src/MQController.cpp index 3008d4d..eab1eb0 100644 --- a/MQWeb/src/MQController.cpp +++ b/MQWeb/src/MQController.cpp @@ -27,8 +27,6 @@ #include "MQ/Web/MQController.h" #include "MQ/Web/MQMapper.h" -#include "MQ/Web/TemplateView.h" -#include "MQ/Web/JSONView.h" namespace MQ { namespace Web { @@ -154,15 +152,6 @@ void MQController::handleException(const MQException& mqe) error->set("code", Poco::NumberFormatter::format(mqe.reason())); error->set("title", reasonStr); - - if ( isJSON() ) - { - setJSONView(); - } - else - { - setView(new TemplateView("error.tpl")); - } } diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 345cd2b..71a6a1d 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -28,7 +28,6 @@ #include "MQ/Web/MessageController.h" #include "MQ/Web/MQMapper.h" -#include "MQ/Web/JSONView.h" #include "MQ/MQException.h" #include "MQ/Message.h" #include "MQ/QueueManager.h" diff --git a/MQWeb/src/MultiView.cpp b/MQWeb/src/MultiView.cpp deleted file mode 100644 index 1c82dfb..0000000 --- a/MQWeb/src/MultiView.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "Poco/JSON/TemplateCache.h" - -#include "MQ/Web/MultiView.h" - -namespace MQ { -namespace Web { - -MultiView::MultiView(const std::string &templateFile) : - TemplateView(templateFile) -{ -} - - -MultiView::~MultiView() -{ -} - - -bool MultiView::render(Poco::JSON::Object::Ptr data, std::ostream& os) -{ - Poco::JSON::Object::Ptr jsonViews = data->getObject("views"); - if ( jsonViews.isNull() ) - { - jsonViews = new Poco::JSON::Object(); - data->set("views", jsonViews); - } - - for(ViewMap::iterator it = _views.begin(); it != _views.end(); ++it) - { - std::ostringstream oss; - if ( it->second->render(data, oss) ) - { - jsonViews->set(it->first, oss.str()); - } - else - { - return false; - } - } - - return TemplateView::render(data, os); -} - - -}} // Namespace MQ::Web diff --git a/MQWeb/src/ServiceController.cpp b/MQWeb/src/ServiceController.cpp index 6379a60..8865cb7 100644 --- a/MQWeb/src/ServiceController.cpp +++ b/MQWeb/src/ServiceController.cpp @@ -20,7 +20,6 @@ */ #include "MQ/Web/ServiceController.h" #include "MQ/Web/ServiceMapper.h" -#include "MQ/Web/JSONView.h" namespace MQ { diff --git a/MQWeb/src/TemplateView.cpp b/MQWeb/src/TemplateView.cpp deleted file mode 100644 index 605f620..0000000 --- a/MQWeb/src/TemplateView.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "Poco/JSON/TemplateCache.h" - -#include "MQ/Web/TemplateView.h" - -namespace MQ { -namespace Web { - -TemplateView::TemplateView(const std::string &templateFile) : - _templateFile(templateFile) -{ -} - - -TemplateView::~TemplateView() -{ -} - -void TemplateView::initializeResponse(Poco::Net::HTTPServerResponse& response) -{ - response.setChunkedTransferEncoding(true); - response.setContentType("text/html"); - - // Don't cache are views - response.set("Cache-Control", "no-cache,no-store,must-revalidate"); - response.set("Pragma", "no-cache"); - response.set("Expires", "0"); -} - -bool TemplateView::render(Poco::JSON::Object::Ptr data, std::ostream& os) -{ - bool ok = true; - - Poco::JSON::Template::Ptr tpl; - try - { - tpl = Poco::JSON::TemplateCache::instance()->getTemplate(Poco::Path(_templateFile)); - tpl->render(data, os); - os.flush(); - } - catch(Poco::FileNotFoundException&) - { - poco_error_f1(Poco::Logger::get("mq.web"), "Can't render template %s", _templateFile); - ok = false; - } - return ok; -} - - -}} // Namespace MQ::Web diff --git a/MQWeb/src/View.cpp b/MQWeb/src/View.cpp deleted file mode 100644 index 4c56c1a..0000000 --- a/MQWeb/src/View.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "MQ/Web/View.h" - -namespace MQ { -namespace Web { - -View::View() -{ -} - - -View::~View() -{ -} - -}} // Namespace MQ::Web diff --git a/MQWeb/src/WebController.cpp b/MQWeb/src/WebController.cpp deleted file mode 100644 index ed11259..0000000 --- a/MQWeb/src/WebController.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ -#include "MQ/Web/WebController.h" -#include "MQ/Web/MultiView.h" -#include "MQ/Web/JSONView.h" - -namespace MQ -{ -namespace Web -{ - - -WebController::WebController() : MQController() -{ -} - - -WebController::~WebController() -{ -} - - -void WebController::qmgr() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("qmgr/head.tpl")); - multiView->add("main", new TemplateView("qmgr/index.tpl")); - setView(multiView); -} - - -void WebController::queue() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("queue/head.tpl")); - multiView->add("main", new TemplateView("queue/index.tpl")); - setView(multiView); -} - - -void WebController::channel() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("channel/head.tpl")); - multiView->add("main", new TemplateView("channel/index.tpl")); - setView(multiView); -} - - -void WebController::listener() -{ - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("listener/head.tpl")); - multiView->add("main", new TemplateView("listener/index.tpl")); - setView(multiView); -} - - -void WebController::message() -{ - std::vector parameters = getParameters(); - if ( parameters.size() < 2 ) - { - setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Missing URI parameters"); - return; - } - - meta().set("queue", parameters[1]); - std::string messageId; - if ( parameters.size() > 2 ) - { - messageId = parameters[2]; - meta().set("messageId", messageId); - } - - Poco::SharedPtr multiView = new MultiView("base.tpl"); - multiView->add("head", new TemplateView("message/head.tpl")); - multiView->add("main", new TemplateView("message/index.tpl")); - setView(multiView); -} - -} } // Namespace MQ::Web From d1cce8d224df453fc43e648955e8a5884c9e6e3e Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 16 Jun 2016 14:02:15 +0200 Subject: [PATCH 30/60] Remove JSONAPI for now, but ... return "data" in every inquire method --- MQWeb/include/MQ/Web/Controller.h | 8 --- .../AuthenticationInformationController.cpp | 2 +- MQWeb/src/AuthorityRecordController.cpp | 2 +- MQWeb/src/AuthorityServiceController.cpp | 2 +- MQWeb/src/ChannelController.cpp | 50 +++++++++---------- MQWeb/src/ChannelInitiatorController.cpp | 2 +- MQWeb/src/ChannelStatusController.cpp | 2 +- MQWeb/src/ClusterQueueManagerController.cpp | 2 +- MQWeb/src/ConnectionController.cpp | 2 +- MQWeb/src/Controller.cpp | 9 +--- MQWeb/src/ListenerController.cpp | 2 +- MQWeb/src/ListenerStatusController.cpp | 2 +- MQWeb/src/MQController.cpp | 29 +++-------- MQWeb/src/MQWebController.cpp | 4 +- MQWeb/src/MessageController.cpp | 4 +- MQWeb/src/NamelistController.cpp | 2 +- MQWeb/src/ProcessController.cpp | 2 +- MQWeb/src/QueueManagerController.cpp | 50 +++++-------------- MQWeb/src/QueueManagerMapper.cpp | 5 +- MQWeb/src/QueueManagerStatusController.cpp | 7 +-- MQWeb/src/QueueMapper.cpp | 5 +- MQWeb/src/QueueStatusController.cpp | 2 +- MQWeb/src/ServiceController.cpp | 2 +- MQWeb/src/SubscriptionStatusController.cpp | 2 +- MQWeb/src/TopicController.cpp | 2 +- test/authinfo.py | 31 +----------- test/authrec.py | 32 +----------- test/channel.py | 30 +---------- test/chstatus.py | 32 +----------- test/clusqmgr.py | 33 +----------- test/connection.py | 34 +------------ test/listener.py | 34 +------------ test/lsstatus.py | 34 +------------ test/nl.py | 33 +----------- test/process.py | 33 +----------- test/qmgr.py | 27 +--------- test/qmstatus.py | 27 +--------- test/queue.py | 32 +----------- test/service.py | 30 +---------- test/testbase.py | 36 +++++++++++-- 40 files changed, 128 insertions(+), 551 deletions(-) diff --git a/MQWeb/include/MQ/Web/Controller.h b/MQWeb/include/MQ/Web/Controller.h index f87a42a..0cbbd33 100644 --- a/MQWeb/include/MQ/Web/Controller.h +++ b/MQWeb/include/MQ/Web/Controller.h @@ -92,9 +92,6 @@ class Controller : public Poco::Net::PartHandler bool isPost() const; /// Returns true when the HTTP method POST is used. - bool isJSONAPI() const; - /// Returns true when the HTTP request accepts JSONAPI - void set(const std::string& name, const Poco::Dynamic::Var& var); /// Sets a variable in data for use in a view @@ -199,11 +196,6 @@ inline bool Controller::isJSON() const return true; } -inline bool Controller::isJSONAPI() const -{ - return _request->get("Accept", "").compare("application/vnd.api+json") == 0; -} - inline bool Controller::isPost() const { return _request->getMethod().compare("POST") == 0; diff --git a/MQWeb/src/AuthenticationInformationController.cpp b/MQWeb/src/AuthenticationInformationController.cpp index b4dfce4..0a4a5bf 100644 --- a/MQWeb/src/AuthenticationInformationController.cpp +++ b/MQWeb/src/AuthenticationInformationController.cpp @@ -108,7 +108,7 @@ void AuthenticationInformationController::inquire() } AuthenticationInformationMapper mapper(*commandServer(), pcfParameters); - set("authinfos", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/AuthorityRecordController.cpp b/MQWeb/src/AuthorityRecordController.cpp index 1e3923a..1b1893d 100644 --- a/MQWeb/src/AuthorityRecordController.cpp +++ b/MQWeb/src/AuthorityRecordController.cpp @@ -105,7 +105,7 @@ void AuthorityRecordController::inquire() } AuthorityRecordMapper mapper(*commandServer(), pcfParameters); - set("authrecs", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/AuthorityServiceController.cpp b/MQWeb/src/AuthorityServiceController.cpp index 2d2089b..273aaa2 100644 --- a/MQWeb/src/AuthorityServiceController.cpp +++ b/MQWeb/src/AuthorityServiceController.cpp @@ -78,7 +78,7 @@ void AuthorityServiceController::inquire() } AuthorityServiceMapper mapper(*commandServer(), pcfParameters); - set("authservices", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ChannelController.cpp b/MQWeb/src/ChannelController.cpp index 05a3a82..3c9b1cf 100644 --- a/MQWeb/src/ChannelController.cpp +++ b/MQWeb/src/ChannelController.cpp @@ -120,22 +120,22 @@ void ChannelController::inquire() } ChannelMapper mapper(*commandServer(), pcfParameters); - set("channels", mapper.inquire()); + set("data", mapper.inquire()); } void ChannelController::start() { - Poco::JSON::Object::Ptr pcfParameters; - - if ( data().has("input") && data().isObject("input") ) - { + Poco::JSON::Object::Ptr pcfParameters; + + if ( data().has("input") && data().isObject("input") ) + { pcfParameters = data().getObject("input"); - } - else - { + } + else + { pcfParameters = new Poco::JSON::Object(); set("input", pcfParameters); - + std::vector parameters = getParameters(); // First parameter is queuemanager // Second parameter is a channelname @@ -150,18 +150,18 @@ void ChannelController::start() if ( form().has("CommandScope") ) pcfParameters->set("CommandScope", form().get("CommandScope")); if ( form().has("ChannelDisposition") ) pcfParameters->set("ChannelDisposition", form().get("ChannelDisposition")); - } - - ChannelMapper mapper(*commandServer(), pcfParameters); - - Poco::JSON::Object::Ptr error = mapper.start(); - if ( error->size() > 0 ) set("error", error); + } + + ChannelMapper mapper(*commandServer(), pcfParameters); + + Poco::JSON::Object::Ptr error = mapper.start(); + if ( error->size() > 0 ) set("error", error); } - + void ChannelController::stop() { Poco::JSON::Object::Ptr pcfParameters; - + if ( data().has("input") && data().isObject("input") ) { pcfParameters = data().getObject("input"); @@ -170,7 +170,7 @@ void ChannelController::stop() { pcfParameters = new Poco::JSON::Object(); set("input", pcfParameters); - + std::vector parameters = getParameters(); // First parameter is queuemanager // Second parameter is a channelname @@ -182,18 +182,18 @@ void ChannelController::stop() { if ( form().has("ChannelName") ) pcfParameters->set("ChannelName", form().get("ChannelName")); } - + if ( form().has("ChannelDisposition") ) pcfParameters->set("ChannelDisposition", form().get("ChannelDisposition")); if ( form().has("ChannelStatus") ) pcfParameters->set("ChannelStatus", form().get("ChannelStatus")); if ( form().has("ConnectionName") ) pcfParameters->set("ConnectionName", form().get("ConnectionName")); if ( form().has("Mode") ) pcfParameters->set("Mode", form().get("Mode")); if ( form().has("QMgrName") ) pcfParameters->set("QMgrName", form().get("QMgrName")); - } - - ChannelMapper mapper(*commandServer(), pcfParameters); - - Poco::JSON::Object::Ptr error = mapper.stop(); - if ( error->size() > 0 ) set("error", error); + } + + ChannelMapper mapper(*commandServer(), pcfParameters); + + Poco::JSON::Object::Ptr error = mapper.stop(); + if ( error->size() > 0 ) set("error", error); } } } // Namespace MQ::Web diff --git a/MQWeb/src/ChannelInitiatorController.cpp b/MQWeb/src/ChannelInitiatorController.cpp index 3873038..5b2c895 100644 --- a/MQWeb/src/ChannelInitiatorController.cpp +++ b/MQWeb/src/ChannelInitiatorController.cpp @@ -58,7 +58,7 @@ void ChannelInitiatorController::inquire() } ChannelInitiatorMapper mapper(*commandServer(), pcfParameters); - set("response", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ChannelStatusController.cpp b/MQWeb/src/ChannelStatusController.cpp index 7251f07..a43bc5c 100644 --- a/MQWeb/src/ChannelStatusController.cpp +++ b/MQWeb/src/ChannelStatusController.cpp @@ -106,7 +106,7 @@ void ChannelStatusController::inquire() handleFilterForm(pcfParameters); } ChannelStatusMapper mapper(*commandServer(), pcfParameters); - set("statuses", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ClusterQueueManagerController.cpp b/MQWeb/src/ClusterQueueManagerController.cpp index 993a298..f42348b 100644 --- a/MQWeb/src/ClusterQueueManagerController.cpp +++ b/MQWeb/src/ClusterQueueManagerController.cpp @@ -104,7 +104,7 @@ void ClusterQueueManagerController::inquire() } ClusterQueueManagerMapper mapper(*commandServer(), pcfParameters); - set("clusqmgrs", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ConnectionController.cpp b/MQWeb/src/ConnectionController.cpp index 49bb9dc..c554c0a 100644 --- a/MQWeb/src/ConnectionController.cpp +++ b/MQWeb/src/ConnectionController.cpp @@ -89,7 +89,7 @@ void ConnectionController::inquire() } ConnectionMapper mapper(*commandServer(), pcfParameters); - set("connections", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index 19c1fa0..0efc760 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -57,14 +57,7 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H _request = &request; _response = &response; - if ( isJSONAPI() ) - { - if ( isGet() ) - { - _action = "inquire"; - } - } - else if ( _parameters.size() > 0 ) + if ( _parameters.size() > 0 ) { _action = _parameters.front(); _parameters.erase(_parameters.begin()); diff --git a/MQWeb/src/ListenerController.cpp b/MQWeb/src/ListenerController.cpp index e7d6ff0..ebc0a95 100644 --- a/MQWeb/src/ListenerController.cpp +++ b/MQWeb/src/ListenerController.cpp @@ -102,7 +102,7 @@ void ListenerController::inquire() } ListenerMapper mapper(*commandServer(), pcfParameters); - set("listeners", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ListenerStatusController.cpp b/MQWeb/src/ListenerStatusController.cpp index 4377e0a..1e9a2ea 100644 --- a/MQWeb/src/ListenerStatusController.cpp +++ b/MQWeb/src/ListenerStatusController.cpp @@ -93,7 +93,7 @@ void ListenerStatusController::inquire() handleFilterForm(pcfParameters); ListenerStatusMapper mapper(*commandServer(), pcfParameters); - set("statuses", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/MQController.cpp b/MQWeb/src/MQController.cpp index eab1eb0..1d14856 100644 --- a/MQWeb/src/MQController.cpp +++ b/MQWeb/src/MQController.cpp @@ -123,35 +123,22 @@ void MQController::beforeAction() void MQController::handleException(const MQException& mqe) { - Poco::JSON::Array::Ptr errors = new Poco::JSON::Array(); - set("errors", errors); - Poco::JSON::Object::Ptr error = new Poco::JSON::Object(); - errors->add(error); - Poco::JSON::Object::Ptr meta = new Poco::JSON::Object(); - error->set("meta", meta); - meta->set("object", mqe.object()); - meta->set("fn", mqe.function()); - - Poco::JSON::Object::Ptr completion = new Poco::JSON::Object(); - meta->set("completion", completion); - completion->set("code", mqe.code()); + set("error", error); + error->set("object", mqe.object()); + error->set("fn", mqe.function()); switch(mqe.code()) { - case MQCC_OK: completion->set("desc", "OK"); break; - case MQCC_WARNING: completion->set("desc", "WARNING"); break; - case MQCC_FAILED: completion->set("desc", "ERROR"); break; + case MQCC_OK: error->set("code", "OK"); break; + case MQCC_WARNING: error->set("code", "WARNING"); break; + case MQCC_FAILED: error->set("code", "ERROR"); break; } - std::string reasonStr = MQMapper::getReasonString(mqe.reason()); Poco::JSON::Object::Ptr reason = new Poco::JSON::Object(); - meta->set("reason", reason); + error->set("reason", reason); reason->set("code", mqe.reason()); - reason->set("desc", reasonStr); - - error->set("code", Poco::NumberFormatter::format(mqe.reason())); - error->set("title", reasonStr); + reason->set("desc", MQMapper::getReasonString(mqe.reason())); } diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp index a877cb1..ac9c226 100644 --- a/MQWeb/src/MQWebController.cpp +++ b/MQWeb/src/MQWebController.cpp @@ -50,7 +50,7 @@ MQWebController::~MQWebController() void MQWebController::inquire() { Poco::JSON::Object::Ptr mqweb = new Poco::JSON::Object(); - set("mqweb", mqweb); + set("data", mqweb); Poco::JSON::Object::Ptr version = new Poco::JSON::Object(); mqweb->set("version", version); @@ -73,7 +73,7 @@ void MQWebController::inquire() void MQWebController::list() { Poco::JSON::Array::Ptr queuemanagers = new Poco::JSON::Array(); - set("queuemanagers", queuemanagers); + set("data", queuemanagers); MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 71a6a1d..48cf5da 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -426,7 +426,7 @@ void MessageController::browse() jsonMessages->add(jsonMessage); } - set("messages", jsonMessages); + set("data", jsonMessages); } @@ -560,7 +560,7 @@ void MessageController::dump() } mapMessageToJSON(message, *jsonMessage); - set("message", jsonMessage); + set("data", jsonMessage); } diff --git a/MQWeb/src/NamelistController.cpp b/MQWeb/src/NamelistController.cpp index e831caf..4fe249e 100644 --- a/MQWeb/src/NamelistController.cpp +++ b/MQWeb/src/NamelistController.cpp @@ -112,7 +112,7 @@ void NamelistController::inquire() pcfParameters->set("ExcludeSystem", form().get("ExcludeSystem", "false").compare("true") == 0); NamelistMapper mapper(*commandServer(), pcfParameters); - set("namelists", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ProcessController.cpp b/MQWeb/src/ProcessController.cpp index c7298f9..c15257d 100644 --- a/MQWeb/src/ProcessController.cpp +++ b/MQWeb/src/ProcessController.cpp @@ -104,7 +104,7 @@ void ProcessController::inquire() } ProcessMapper mapper(*commandServer(), pcfParameters); - set("processes", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/QueueManagerController.cpp b/MQWeb/src/QueueManagerController.cpp index 5610a8b..cbe69f6 100644 --- a/MQWeb/src/QueueManagerController.cpp +++ b/MQWeb/src/QueueManagerController.cpp @@ -52,52 +52,26 @@ void QueueManagerController::inquire() { pcfParameters = new Poco::JSON::Object(); meta().set("input", pcfParameters); - if ( isJSONAPI() ) - { - if ( form().has("fields") ) - { - std::string fields = form().get("fields"); - Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); - - Poco::StringTokenizer tokenizer(fields, ",", Poco::StringTokenizer::TOK_IGNORE_EMPTY); - for(Poco::StringTokenizer::Iterator it = tokenizer.begin(); it != tokenizer.end(); ++it) - { - attrs->add(*it); - } - if ( attrs->size() > 0 ) - { - pcfParameters->set("QMgrAttrs", attrs); - } - } + Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); + formElementToJSONArray("QMgrAttrs", attrs); + if ( attrs->size() == 0 ) // Nothing found for QMgrAttrs, try Attrs + { + formElementToJSONArray("Attrs", attrs); } - else + if ( attrs->size() > 0 ) { - Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); - formElementToJSONArray("QMgrAttrs", attrs); - if ( attrs->size() == 0 ) // Nothing found for QMgrAttrs, try Attrs - { - formElementToJSONArray("Attrs", attrs); - } - if ( attrs->size() > 0 ) - { - pcfParameters->set("QMgrAttrs", attrs); - } + pcfParameters->set("QMgrAttrs", attrs); + } - if ( form().has("CommandScope") ) - { - pcfParameters->set("CommandScope", form().get("CommandScope")); - } + if ( form().has("CommandScope") ) + { + pcfParameters->set("CommandScope", form().get("CommandScope")); } } QueueManagerMapper mapper(*commandServer(), pcfParameters); - Poco::JSON::Array::Ptr json = mapper.inquire(); - if ( json->size() > 0 ) - { - Poco::JSON::Object::Ptr data = new Poco::JSON::Object(); - set("data", json->get(0)); - } + set("data", mapper.inquire()); } diff --git a/MQWeb/src/QueueManagerMapper.cpp b/MQWeb/src/QueueManagerMapper.cpp index 76f07b7..eb30a3a 100644 --- a/MQWeb/src/QueueManagerMapper.cpp +++ b/MQWeb/src/QueueManagerMapper.cpp @@ -71,10 +71,7 @@ Poco::JSON::Array::Ptr QueueManagerMapper::inquire() continue; Poco::JSON::Object::Ptr data = new Poco::JSON::Object(); - json->add(data); - data->set("type", "queuemanager"); - data->set("id", (*it)->getParameterString(MQCA_Q_MGR_NAME)); - data->set("attributes", createJSON(**it)); + json->add(createJSON(**it)); } return json; diff --git a/MQWeb/src/QueueManagerStatusController.cpp b/MQWeb/src/QueueManagerStatusController.cpp index 7cb47cb..53697ef 100644 --- a/MQWeb/src/QueueManagerStatusController.cpp +++ b/MQWeb/src/QueueManagerStatusController.cpp @@ -70,12 +70,7 @@ void QueueManagerStatusController::inquire() } QueueManagerStatusMapper mapper(*commandServer(), pcfParameters); - Poco::JSON::Array::Ptr json = mapper.inquire(); - - if ( json->size() > 0 ) - { - set("status", json->get(0)); - } + set("data", mapper.inquire()); } diff --git a/MQWeb/src/QueueMapper.cpp b/MQWeb/src/QueueMapper.cpp index fc8e344..0f634f0 100644 --- a/MQWeb/src/QueueMapper.cpp +++ b/MQWeb/src/QueueMapper.cpp @@ -137,10 +137,7 @@ Poco::JSON::Array::Ptr QueueMapper::inquire() } Poco::JSON::Object::Ptr data = new Poco::JSON::Object(); - json->add(data); - data->set("type", "queue"); - data->set("id", (*it)->getParameterString(MQCA_Q_NAME)); - data->set("attributes", createJSON(**it)); + json->add(createJSON(**it)); } return json; diff --git a/MQWeb/src/QueueStatusController.cpp b/MQWeb/src/QueueStatusController.cpp index cd35368..c1a3b7e 100644 --- a/MQWeb/src/QueueStatusController.cpp +++ b/MQWeb/src/QueueStatusController.cpp @@ -113,7 +113,7 @@ void QueueStatusController::inquire() } QueueStatusMapper mapper(*commandServer(), pcfParameters); - set("statuses", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/ServiceController.cpp b/MQWeb/src/ServiceController.cpp index 8865cb7..6a119a9 100644 --- a/MQWeb/src/ServiceController.cpp +++ b/MQWeb/src/ServiceController.cpp @@ -94,7 +94,7 @@ void ServiceController::inquire() } ServiceMapper mapper(*commandServer(), pcfParameters); - set("services", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/SubscriptionStatusController.cpp b/MQWeb/src/SubscriptionStatusController.cpp index 2978be7..8fe1de7 100644 --- a/MQWeb/src/SubscriptionStatusController.cpp +++ b/MQWeb/src/SubscriptionStatusController.cpp @@ -108,7 +108,7 @@ void SubscriptionStatusController::inquire() } SubscriptionStatusMapper mapper(*commandServer(), pcfParameters); - set("statuses", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/TopicController.cpp b/MQWeb/src/TopicController.cpp index 1970f4a..bc7759d 100644 --- a/MQWeb/src/TopicController.cpp +++ b/MQWeb/src/TopicController.cpp @@ -115,7 +115,7 @@ void TopicController::inquire() } TopicMapper mapper(*commandServer(), pcfParameters); - set("topics", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/test/authinfo.py b/test/authinfo.py index 5611f99..f60c8fc 100644 --- a/test/authinfo.py +++ b/test/authinfo.py @@ -11,24 +11,7 @@ class TestAuthInfoActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/authinfo/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('authinfos' not in data, - 'No authentication information returned') - self.assertFalse(len(data['authinfos']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['authinfos'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/authinfo/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST @@ -38,17 +21,7 @@ def testInquireJSON(self): print filter = { "AuthInfoName" : "*" } - data = self.appJSON('/api/authinfo/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('authinfos' not in data, 'No information returned') - self.assertFalse(len(data['authinfos']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/authinfo/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestAuthInfoActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/authrec.py b/test/authrec.py index 516945e..796130d 100644 --- a/test/authrec.py +++ b/test/authrec.py @@ -11,45 +11,17 @@ class TestAuthorityRecordActions(MQWebTest): ''' def testInquire(self): - data = self.getJSON('/api/authrec/inquire/' + + json = self.getJSON('/api/authrec/inquire/' + self.qmgr + '?options=Name%20All%20Matching&options=Entity%20Explicit') - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('authrecs' not in data, - 'No authority records returned') - self.assertFalse(len(data['authrecs']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['authrecs'][0]), - 'There are unmapped Websphere MQ attributes') ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "Options" : ["Name All Matching", "Entity Explicit"] } - - data = self.appJSON('/api/authrec/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('authrecs' not in data, 'No information returned') - self.assertFalse(len(data['authrecs']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/authrec/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestAuthorityRecordActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/channel.py b/test/channel.py index 116c81e..3a466a9 100644 --- a/test/channel.py +++ b/test/channel.py @@ -11,41 +11,15 @@ class TestChannelActions(MQWebTest): ''' def testInquire(self): - data = self.getJSON('/api/channel/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('channels' not in data, 'No status data returned') - self.assertFalse(len(data['channels']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['channels'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/channel/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ChannelName" : "*" } - data = self.appJSON('/api/channel/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('channels' not in data, 'No channels returned') - self.assertFalse(len(data['channels']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/channel/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestChannelActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/chstatus.py b/test/chstatus.py index 520199e..62f3699 100644 --- a/test/chstatus.py +++ b/test/chstatus.py @@ -11,43 +11,15 @@ class TestChannelStatusActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/chstatus/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('statuses' not in data, 'No status data returned') - self.assertFalse(len(data['statuses']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['statuses'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/chstatus/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ChannelName" : "*" } - data = self.appJSON('/api/chstatus/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('statuses' not in data, 'No statuses returned') - self.assertFalse(len(data['statuses']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/chstatus/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestChannelStatusActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/clusqmgr.py b/test/clusqmgr.py index c43cfae..19f489c 100644 --- a/test/clusqmgr.py +++ b/test/clusqmgr.py @@ -8,44 +8,15 @@ class TestClusQmgrActions(MQWebTest): def testInquire(self): - print - - data = self.getJSON('/api/clusqmgr/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('clusqmgrs' not in data, 'No clusqmgrs array returned') - - self.assertFalse(len(data['clusqmgrs']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['clusqmgrs'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/clusqmgr/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ClusterName" : "*", "ClusterQMgrName" : "*" } - data = self.appJSON('/api/clusqmgr/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('clusqmgrs' not in data, 'No clusqmgrs returned') - self.assertFalse(len(data['clusqmgrs']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/clusqmgr/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestClusQmgrActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/connection.py b/test/connection.py index e94c5a8..2f5a49a 100644 --- a/test/connection.py +++ b/test/connection.py @@ -11,45 +11,15 @@ class TestConnectionActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/conn/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('connections' not in data, 'No connections returned') - - self.assertFalse(len(data['connections']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['connections'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/conn/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { } - - data = self.appJSON('/api/conn/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('connections' not in data, 'No information returned') - self.assertFalse(len(data['connections']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/conn/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestConnectionActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/listener.py b/test/listener.py index 3aed2f1..02a417a 100644 --- a/test/listener.py +++ b/test/listener.py @@ -11,45 +11,15 @@ class TestListenerActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/listener/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('listeners' not in data, 'No listeners returned') - - self.assertFalse(len(data['listeners']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['listeners'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/listener/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ListenerName" : "*" } - - data = self.appJSON('/api/listener/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('listeners' not in data, 'No information returned') - self.assertFalse(len(data['listeners']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/listener/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestListenerActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/lsstatus.py b/test/lsstatus.py index 0e28987..13c4840 100644 --- a/test/lsstatus.py +++ b/test/lsstatus.py @@ -11,45 +11,15 @@ class TestListenerStatusActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/lsstatus/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('statuses' not in data, 'No status data returned') - - self.assertFalse(len(data['statuses']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['statuses'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/lsstatus/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ListenerName" : "*" } - - data = self.appJSON('/api/lsstatus/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('statuses' not in data, 'No information returned') - self.assertFalse(len(data['statuses']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/lsstatus/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestListenerStatusActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/nl.py b/test/nl.py index bf02a1e..67765f2 100644 --- a/test/nl.py +++ b/test/nl.py @@ -11,44 +11,15 @@ class TestNamelistActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/nl/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('namelists' not in data, 'No information returned') - self.assertFalse(len(data['namelists']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['namelists'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/nl/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "NamelistName" : "*" } - - data = self.appJSON('/api/nl/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('namelists' not in data, 'No information returned') - self.assertFalse(len(data['namelists']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/nl/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestNamelistActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/process.py b/test/process.py index 3d46324..c176ac4 100644 --- a/test/process.py +++ b/test/process.py @@ -11,44 +11,15 @@ class TestProcessActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/process/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('processes' not in data, 'No processes returned') - self.assertFalse(len(data['processes']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['processes'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/process/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ProcessName" : "*" } - - data = self.appJSON('/api/process/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('processes' not in data, 'No information returned') - self.assertFalse(len(data['processes']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/process/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestProcessActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/qmgr.py b/test/qmgr.py index e749e28..6eac008 100644 --- a/test/qmgr.py +++ b/test/qmgr.py @@ -11,38 +11,15 @@ class TestQueueManagerActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/qmgr/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('qmgr' not in data, 'No queuemanager data returned') - - self.assertTrue(self.checkIds(data['qmgr']), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/qmgr/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - - print filter = { } - - data = self.appJSON('/api/qmgr/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('qmgr' not in data, 'No information returned') + json = self.appJSON('/api/qmgr/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestQueueManagerActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/qmstatus.py b/test/qmstatus.py index 6e480bd..f98b106 100644 --- a/test/qmstatus.py +++ b/test/qmstatus.py @@ -11,38 +11,15 @@ class TestQManagerStatusActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/qmstatus/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('status' not in data, 'No status data returned') - - self.assertTrue(self.checkIds(data['status']), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/qmstatus/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { } - - data = self.appJSON('/api/qmstatus/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('status' not in data, 'No information returned') + json = self.appJSON('/api/qmstatus/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestQManagerStatusActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/queue.py b/test/queue.py index 00723b9..bdac71c 100644 --- a/test/queue.py +++ b/test/queue.py @@ -11,43 +11,15 @@ class TestQueueActions(MQWebTest): ''' def testInquire(self): - print - - data = self.getJSON('/api/queue/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('queues' not in data, 'No information returned') - self.assertFalse(len(data['queues']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['queues'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/queue/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "QName" : "*" } - data = self.appJSON('/api/queue/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('queues' not in data, 'No information returned') - self.assertFalse(len(data['queues']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/queue/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestQueueActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/service.py b/test/service.py index 8451ccc..0c78c08 100644 --- a/test/service.py +++ b/test/service.py @@ -11,41 +11,15 @@ class TestServiceActions(MQWebTest): ''' def testInquire(self): - data = self.getJSON('/api/service/inquire/' + self.qmgr) - - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' + - str(data['error']['reason']['code'])) - - self.assertFalse('services' not in data, 'No information returned') - self.assertFalse(len(data['services']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') - - self.assertTrue(self.checkIds(data['services'][0]), - 'There are unmapped Websphere MQ attributes') + json = self.getJSON('/api/service/inquire/' + self.qmgr) ''' Test Inquire with HTTP POST ''' def testInquireJSON(self): - print - filter = { "ServiceName" : "*" } - data = self.appJSON('/api/service/inquire/' + self.qmgr, filter) - self.assertFalse('mqweb' not in data, 'No mqweb data returned') - - if 'error' in data: - self.assertFalse(True, 'Received a WebSphere MQ error:' - + str(data['error']['reason']['code'])) - - self.assertFalse('services' not in data, 'No information returned') - self.assertFalse(len(data['services']) == 0, - 'Empty JSON array returned. ' + - 'Does MQWeb have permission to view this information?') + json = self.appJSON('/api/service/inquire/' + self.qmgr, filter) suite = unittest.TestLoader().loadTestsFromTestCase(TestServiceActions) unittest.TextTestRunner(verbosity=2).run(suite) diff --git a/test/testbase.py b/test/testbase.py index 6df532c..a702386 100644 --- a/test/testbase.py +++ b/test/testbase.py @@ -77,7 +77,23 @@ def getJSON(self, url): conn = httplib.HTTPConnection(self.mqWebHost, self.mqWebPort) conn.request('GET', url); res = conn.getresponse() - data = json.loads(res.read()) + result = json.loads(res.read()) + + self.assertFalse('meta' not in result, 'No meta data returned') + + if 'error' in result: + self.assertFalse(True, 'Received a WebSphere MQ error:' + + str(result['error']['reason']['code'])) + + self.assertFalse('data' not in result, + 'No information returned') + self.assertFalse(len(result['data']) == 0, + 'Empty JSON array returned. ' + + 'Does MQWeb have permission to view this information?') + + self.assertTrue(self.checkIds(result['data'][0]), + 'There are unmapped Websphere MQ attributes') + except httplib.HTTPException as e: print 'Exception Caught: ' + e.errno + e.strerror self.assertFalse(True, "Can't connect to MQWeb: " + @@ -85,7 +101,7 @@ def getJSON(self, url): self.mqWebPort + ' (qmgr: ' + self.qmgr + ')') - return data + return result ''' HTTP POST implemenation @@ -96,11 +112,23 @@ def appJSON(self, url, filter): conn = httplib.HTTPConnection(self.mqWebHost, self.mqWebPort) conn.request('POST', url, json.dumps(filter), self.headers) res = conn.getresponse() - data = json.loads(res.read()) + result = json.loads(res.read()) + + self.assertFalse('meta' not in result, 'No meta data returned') + + if 'error' in result: + self.assertFalse(True, 'Received a WebSphere MQ error:' + + str(result['error']['reason']['code'])) + + self.assertFalse('data' not in result, 'No information returned') + self.assertFalse(len(result['data']) == 0, + 'Empty JSON array returned. ' + + 'Does MQWeb have permission to view this information?') + except httplib.HTTPException as e: print 'Exception Caught: ' + e.errno + e.strerror self.assertFalse(True, "Can't connect to MQWeb: " + self.mqWebHost + ":" + self.mqWebPort + ' (qmgr: ' + self.qmgr + ')') - return data + return result From 72bd625e3e6e41cf39cef710fbbaf8245033c1e1 Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 21 Jun 2016 10:53:21 +0200 Subject: [PATCH 31/60] Remove event action --- MQWeb/include/MQ/Web/MessageController.h | 4 - MQWeb/src/MessageController.cpp | 147 ----------------------- 2 files changed, 151 deletions(-) diff --git a/MQWeb/include/MQ/Web/MessageController.h b/MQWeb/include/MQ/Web/MessageController.h index cdf233e..e217b5f 100644 --- a/MQWeb/include/MQ/Web/MessageController.h +++ b/MQWeb/include/MQ/Web/MessageController.h @@ -50,9 +50,6 @@ class MessageController : public MQController /// /// Currently the message size is restricted to 16K. - void event(); - /// Shows an event message - void publish(); /// Publish a message to a topic /// /message/publish/// @@ -88,7 +85,6 @@ inline const Controller::ActionMap& MessageController::getActions() const = MapInitializer ("browse", static_cast(&MessageController::browse)) ("dump", static_cast(&MessageController::dump)) - ("event", static_cast(&MessageController::event)) ("publish", static_cast(&MessageController::publish)) ("put", static_cast(&MessageController::put)) ; diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 48cf5da..739c70a 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -564,153 +564,6 @@ void MessageController::dump() } -/** - * URL: message/event//[/] - * - * List all event messages (when is omitted) or - * browses one event message. A JSON and HTML response is - * supported. - */ -void MessageController::event() -{ - std::vector parameters = getParameters(); - - if ( parameters.size() < 2 ) - { - setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST); - return; - } - - std::string queueName = parameters[1]; - Queue q(*qmgr().get(), queueName); - q.open(MQOO_INQUIRE | MQOO_BROWSE | MQBND_BIND_ON_OPEN); - - std::vector intSelectors; - intSelectors.push_back(MQIA_CURRENT_Q_DEPTH); - std::map charSelectors; - std::map intResult; - std::map charResult; - q.inquire(intSelectors, charSelectors, intResult, charResult); - - MQLONG curdepth = intResult[MQIA_CURRENT_Q_DEPTH]; - Poco::JSON::Object::Ptr jsonQueue = new Poco::JSON::Object(); - set("queue", jsonQueue); - jsonQueue->set("name", q.name()); - jsonQueue->set("curdepth", curdepth); - - int limit = -1; // -1 -> no limit - std::string messageId; - if ( parameters.size() > 2 ) - { - limit = 1; - messageId = parameters[2]; - meta().set("messageId", messageId); - } - else - { - if ( form().has("limit") ) - { - Poco::NumberParser::tryParse(form().get("limit"), limit); - } - } - - Poco::JSON::Array::Ptr jsonEvents = new Poco::JSON::Array(); - set("events", jsonEvents); - - int count = 0; - while(limit == -1 || count < limit) - { - PCF message(qmgr()->zos()); - if ( !messageId.empty() ) - { - try - { - message.messageId()->fromHex(messageId); - } - catch(Poco::DataFormatException&) - { - //An invalid message id is passed (No valid HEX character) - setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "An invalid message id is passed (No valid HEX character)"); - return; - } - } - - message.buffer().resize(DEFAULT_EVENT_MESSAGE_SIZE, false); - try - { - q.get(message, MQGMO_BROWSE_NEXT | MQGMO_CONVERT); - } - catch(MQException& mqe) - { - if ( mqe.reason() == MQRC_NO_MSG_AVAILABLE ) - { - if (! messageId.empty()) throw; - break; - } - else if ( mqe.reason() == MQRC_TRUNCATED_MSG_FAILED ) - { - message.buffer().resize(message.dataLength(), false); - message.clear(); - if ( !messageId.empty() ) - { - message.messageId()->fromHex(messageId); - } - q.get(message, MQGMO_BROWSE_NEXT | MQGMO_CONVERT); - } - else - { - throw; - } - } - - message.buffer().resize(message.dataLength()); - message.init(); - - Poco::JSON::Object::Ptr jsonEventMessage = new Poco::JSON::Object(); - jsonEvents->add(jsonEventMessage); - - Poco::JSON::Object::Ptr jsonMessage = new Poco::JSON::Object(); - jsonEventMessage->set("message", jsonMessage); - mapMessageToJSON(message, *jsonMessage); - - Poco::JSON::Object::Ptr jsonEvent = new Poco::JSON::Object(); - jsonEventMessage->set("event", jsonEvent); - - Poco::JSON::Object::Ptr jsonReason = new Poco::JSON::Object(); - jsonEvent->set("reason", jsonReason); - jsonReason->set("code", message.getReasonCode()); - std::string reasonCodeStr = MQMapper::getReasonString(message.getReasonCode()); - jsonReason->set("desc", reasonCodeStr); - - if ( message.hasParameter(MQIACF_OBJECT_TYPE) ) - { - Poco::SharedPtr dictionary; - switch(message.getParameterNum(MQIACF_OBJECT_TYPE)) - { - case MQOT_Q_MGR: dictionary = MQMapper::dictionary("QueueManager"); break; - case MQOT_CHANNEL: dictionary = MQMapper::dictionary("Channel"); break; - case MQOT_NAMELIST: dictionary = MQMapper::dictionary("Namelist"); break; - case MQOT_PROCESS: dictionary = MQMapper::dictionary("Process"); break; - case MQOT_Q: dictionary = MQMapper::dictionary("Queue"); break; - case MQOT_LISTENER: dictionary = MQMapper::dictionary("Listener"); break; - default: - Poco::Logger::get("mq.web").warning("No dictionary set for event. ObjectType $0", message.getParameterNum(MQIACF_OBJECT_TYPE)); - } - if ( !dictionary.isNull() ) - { - dictionary->mapToJSON(message, jsonEvent, false); - } - } - - Poco::SharedPtr dictionary = MQMapper::dictionary("Event"); - poco_assert_dbg(! dictionary.isNull()); - dictionary->mapToJSON(message, jsonEvent, false); - - count++; - } -} - - void MessageController::mapMessageToJSON(const Message& message, Poco::JSON::Object& obj) { std::string report = _reportCodes.getTextForValue(0, message.getReport()); From b3a775db89a98112e380934288debe94fdf61cee Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 21 Jun 2016 10:53:31 +0200 Subject: [PATCH 32/60] Update changelog --- ChangeLog.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index bf78479..ecd43ce 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,8 +1,10 @@ 0.1.0 - Web app has its own repository now: mqwebapp - 'filter' renamed to 'input' in mqweb JSON answer + - 'mqweb' property in JSON answer renamed to 'meta' + - On success the information is always stored in a 'data' array. - Browse DLQ messages - - Integrate event messages in browse action + - Integrate event messages in browse action. Message event action removed. 0.0.13 - Upgrade documents to use latest Jekyll release From 4b5b4c014c6c2e8e27280722674601a79cb1a1b7 Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 21 Jun 2016 15:11:07 +0200 Subject: [PATCH 33/60] MQWeb response is always data --- samples/js/queue_inq.js | 6 +++--- samples/perl/authinfo_inq.pl | 2 +- samples/perl/authrec_inq.pl | 2 +- samples/perl/authservice_inq.pl | 2 +- samples/perl/channel_inq.pl | 2 +- samples/perl/chinit_inq.pl | 2 +- samples/perl/chstatus_inq.pl | 2 +- samples/perl/clusqmgr_inq.pl | 2 +- samples/perl/conn_inq.pl | 2 +- samples/perl/listener_inq.pl | 2 +- samples/perl/lsstatus_inq.pl | 2 +- samples/perl/namelist_inq.pl | 2 +- samples/perl/process_inq.pl | 2 +- samples/perl/qmgr_inq.pl | 4 ++-- samples/perl/qmstatus_inq.pl | 5 ++--- samples/perl/queue_inq.pl | 2 +- samples/perl/service_inq.pl | 2 +- samples/perl/sub_inq.pl | 2 +- samples/perl/substatus_inq.pl | 2 +- samples/perl/topic_inq.pl | 2 +- samples/perl/tpstatus_inq.pl | 2 +- 21 files changed, 25 insertions(+), 26 deletions(-) diff --git a/samples/js/queue_inq.js b/samples/js/queue_inq.js index bd60ce2..958c80c 100644 --- a/samples/js/queue_inq.js +++ b/samples/js/queue_inq.js @@ -25,9 +25,9 @@ var req = http.request(options, function(res) { console.log("An MQException occurred: RC= " + json.error.reason.code + " - " + json.error.reason.desc); } else { - if ( json.queues ) { - for(q in json.queues) { - console.log(json.queues[q].QName.value); + if ( json.data ) { + for(q in json.data) { + console.log(json.data[q].QName.value); } } } diff --git a/samples/perl/authinfo_inq.pl b/samples/perl/authinfo_inq.pl index 6c5e1a3..56ceceb 100644 --- a/samples/perl/authinfo_inq.pl +++ b/samples/perl/authinfo_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $authinfo(@{$mqweb->{authinfos}}) { + foreach my $authinfo(@{$mqweb->{data}}) { say $authinfo->{AuthInfoName}->{value}; } } diff --git a/samples/perl/authrec_inq.pl b/samples/perl/authrec_inq.pl index 6d8046e..58a3d89 100644 --- a/samples/perl/authrec_inq.pl +++ b/samples/perl/authrec_inq.pl @@ -44,7 +44,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $authrec(@{$mqweb->{authrecs}}) { + foreach my $authrec(@{$mqweb->{data}}) { my $output = $authrec->{ProfileName}->{value}; $output .= '(' . $authrec->{ObjectType}->{display} . ')'; $output .= ' - ' . $authrec->{EntityName}->{value}; diff --git a/samples/perl/authservice_inq.pl b/samples/perl/authservice_inq.pl index 7bd4ad2..a56b030 100644 --- a/samples/perl/authservice_inq.pl +++ b/samples/perl/authservice_inq.pl @@ -42,7 +42,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $authservice(@{$mqweb->{authservices}}) { + foreach my $authservice(@{$mqweb->{data}}) { foreach my $serviceComponent(@{$authservice->{ServiceComponent}->{value}}) { say $serviceComponent; } diff --git a/samples/perl/channel_inq.pl b/samples/perl/channel_inq.pl index 94f06ac..7a905fb 100644 --- a/samples/perl/channel_inq.pl +++ b/samples/perl/channel_inq.pl @@ -46,7 +46,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $channel(@{$mqweb->{channels}}) { + foreach my $channel(@{$mqweb->{data}}) { my $output = $channel->{ChannelName}->{value}; $output .= '(' . $channel->{ChannelType}->{display} . ')'; if ( exists($channel->{ConnectionName}) ) { diff --git a/samples/perl/chinit_inq.pl b/samples/perl/chinit_inq.pl index c4ef20e..5353707 100644 --- a/samples/perl/chinit_inq.pl +++ b/samples/perl/chinit_inq.pl @@ -38,7 +38,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $response(@{$mqweb->{response}}) { + foreach my $response(@{$mqweb->{data}}) { if ( exists($response->{TransportType}) && $response->{TransportType}->{display} eq 'TCP' ) { my $ip = ''; diff --git a/samples/perl/chstatus_inq.pl b/samples/perl/chstatus_inq.pl index 1215c96..01aec92 100644 --- a/samples/perl/chstatus_inq.pl +++ b/samples/perl/chstatus_inq.pl @@ -45,7 +45,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $status(@{$mqweb->{statuses}}) { + foreach my $status(@{$mqweb->{data}}) { say $status->{ChannelName}->{value} , ' : ' , $status->{ChannelStatus}->{display} diff --git a/samples/perl/clusqmgr_inq.pl b/samples/perl/clusqmgr_inq.pl index b5ad7a1..5156307 100644 --- a/samples/perl/clusqmgr_inq.pl +++ b/samples/perl/clusqmgr_inq.pl @@ -41,7 +41,7 @@ } else { my %clusters; - foreach my $clusqmgr(@{$mqweb->{clusqmgrs}}) { + foreach my $clusqmgr(@{$mqweb->{data}}) { my $clusterName = $clusqmgr->{ClusterName}->{value}; push(@{$clusters{$clusterName}}, $clusqmgr->{QMgrName}->{value}); } diff --git a/samples/perl/conn_inq.pl b/samples/perl/conn_inq.pl index e3ff6e2..bb0511d 100644 --- a/samples/perl/conn_inq.pl +++ b/samples/perl/conn_inq.pl @@ -45,7 +45,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $connection(@{$mqweb->{connections}}) { + foreach my $connection(@{$mqweb->{data}}) { say $connection->{ApplTag}->{value} , ' = ' , $connection->{ApplType}->{display} diff --git a/samples/perl/listener_inq.pl b/samples/perl/listener_inq.pl index 53812d8..6c1ba15 100644 --- a/samples/perl/listener_inq.pl +++ b/samples/perl/listener_inq.pl @@ -46,7 +46,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $listener(@{$mqweb->{listeners}}) { + foreach my $listener(@{$mqweb->{data}}) { say $listener->{ListenerName}->{value} , ' - ' , $listener->{TransportType}->{display}; diff --git a/samples/perl/lsstatus_inq.pl b/samples/perl/lsstatus_inq.pl index 811ac4a..3df1bba 100644 --- a/samples/perl/lsstatus_inq.pl +++ b/samples/perl/lsstatus_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; }} else { - foreach my $status(@{$mqweb->{statuses}}) { + foreach my $status(@{$mqweb->{data}}) { print $status->{ListenerName}->{value}; print ' : ', $status->{Status}->{display}; print "\n"; diff --git a/samples/perl/namelist_inq.pl b/samples/perl/namelist_inq.pl index 229899b..a056fb6 100644 --- a/samples/perl/namelist_inq.pl +++ b/samples/perl/namelist_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $namelist(@{$mqweb->{namelists}}) { + foreach my $namelist(@{$mqweb->{data}}) { say $namelist->{NamelistName}->{value}; my @names = @{$namelist->{Names}->{value}}; foreach my $name(@names) { diff --git a/samples/perl/process_inq.pl b/samples/perl/process_inq.pl index f7e7052..898e67f 100644 --- a/samples/perl/process_inq.pl +++ b/samples/perl/process_inq.pl @@ -41,7 +41,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $process(@{$mqweb->{processes}}) { + foreach my $process(@{$mqweb->{data}}) { say $process->{ProcessName}->{value}; } } diff --git a/samples/perl/qmgr_inq.pl b/samples/perl/qmgr_inq.pl index 0855ffe..7059189 100644 --- a/samples/perl/qmgr_inq.pl +++ b/samples/perl/qmgr_inq.pl @@ -41,8 +41,8 @@ $mqweb->{error}->{reason}->{desc}; } else { - say $mqweb->{qmgr}->{QMgrName}->{value}, + say $mqweb->{data}->[0]->{QMgrName}->{value}, ' : ', - $mqweb->{qmgr}->{QMgrDesc}->{value}; + $mqweb->{data}->[0]->{QMgrDesc}->{value}; } diff --git a/samples/perl/qmstatus_inq.pl b/samples/perl/qmstatus_inq.pl index e1e789e..cc57e69 100644 --- a/samples/perl/qmstatus_inq.pl +++ b/samples/perl/qmstatus_inq.pl @@ -37,8 +37,7 @@ $mqweb->{error}->{reason}->{desc}; } else { - say $mqweb->{status}->{QMgrName}->{value}, + say $mqweb->{data}->[0]->{QMgrName}->{value}, ' : ', - $mqweb->{status}->{QMgrStatus}->{display}; + $mqweb->{data}->[0]->{QMgrStatus}->{text}; } - diff --git a/samples/perl/queue_inq.pl b/samples/perl/queue_inq.pl index e491135..0fa56b4 100644 --- a/samples/perl/queue_inq.pl +++ b/samples/perl/queue_inq.pl @@ -45,7 +45,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $queue(@{$mqweb->{queues}}) { + foreach my $queue(@{$mqweb->{data}}) { my $output = $queue->{QName}->{value}; $output .= ' : ' . $queue->{CurrentQDepth}->{value} if ( exists($queue->{CurrentQDepth}) ); diff --git a/samples/perl/service_inq.pl b/samples/perl/service_inq.pl index daa5184..b40cf7d 100644 --- a/samples/perl/service_inq.pl +++ b/samples/perl/service_inq.pl @@ -42,7 +42,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $service(@{$mqweb->{services}}) { + foreach my $service(@{$mqweb->{data}}) { say $service->{ServiceName}->{value}; } } diff --git a/samples/perl/sub_inq.pl b/samples/perl/sub_inq.pl index 101d276..0223a51 100644 --- a/samples/perl/sub_inq.pl +++ b/samples/perl/sub_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $sub(@{$mqweb->{subs}}) { + foreach my $sub(@{$mqweb->{data}}) { say $sub->{SubName}->{value}; } } diff --git a/samples/perl/substatus_inq.pl b/samples/perl/substatus_inq.pl index 2e0a0a8..ca3a8b9 100644 --- a/samples/perl/substatus_inq.pl +++ b/samples/perl/substatus_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $status(@{$mqweb->{statuses}}) { + foreach my $status(@{$mqweb->{data}}) { say $status->{SubName}->{value}; } } diff --git a/samples/perl/topic_inq.pl b/samples/perl/topic_inq.pl index 30fe78e..a41063e 100644 --- a/samples/perl/topic_inq.pl +++ b/samples/perl/topic_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $topic(@{$mqweb->{topics}}) { + foreach my $topic(@{$mqweb->{data}}) { say $topic->{TopicName}->{value}; } } diff --git a/samples/perl/tpstatus_inq.pl b/samples/perl/tpstatus_inq.pl index 663eba6..a988e85 100644 --- a/samples/perl/tpstatus_inq.pl +++ b/samples/perl/tpstatus_inq.pl @@ -40,7 +40,7 @@ , $mqweb->{error}->{reason}->{desc}; } else { - foreach my $status(@{$mqweb->{statuses}}) { + foreach my $status(@{$mqweb->{data}}) { say $status->{TopicName}->{value}; } } From 889bca87a5e4506e3594819a77a2de9b05602ead Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 22 Jun 2016 13:34:00 +0200 Subject: [PATCH 34/60] Solve multi-character character constant --- MQWeb/src/Controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index 0efc760..4ab0a85 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -155,7 +155,7 @@ void Controller::render() if ( _form.has("callback") ) { - ss << ');'; + ss << ");"; } Poco::StreamCopier::copyStream(ss, _response->send()); From 22ed7619ee6f1ad1a553b739aa3616f150fff8b7 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 22 Jun 2016 13:34:32 +0200 Subject: [PATCH 35/60] MQWeb returns information in data property --- samples/ruby/authinfo_inq.rb | 2 +- samples/ruby/queue_inq.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/ruby/authinfo_inq.rb b/samples/ruby/authinfo_inq.rb index 2779aed..150bb26 100644 --- a/samples/ruby/authinfo_inq.rb +++ b/samples/ruby/authinfo_inq.rb @@ -18,7 +18,7 @@ if json["error"] puts "An MQException occurred: RC= #{json["error"]["reason"]["code"]} - #{json["error"]["reason"]["desc"]}" else - json["authinfos"].each do |authinfo| + json["data"].each do |authinfo| puts authinfo["AuthInfoName"]["value"] end end diff --git a/samples/ruby/queue_inq.rb b/samples/ruby/queue_inq.rb index 05de043..a76ff2b 100644 --- a/samples/ruby/queue_inq.rb +++ b/samples/ruby/queue_inq.rb @@ -18,7 +18,7 @@ if json["error"] puts "An MQException occurred: RC= #{json["error"]["reason"]["code"]} - #{json["error"]["reason"]["desc"]}" else - json["queues"].each do |queue| + json["data"].each do |queue| puts queue["QName"]["value"] end end From f241d90e8eca3ca243c7e84e008f55d78e29c365 Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 30 Jun 2016 15:09:21 +0200 Subject: [PATCH 36/60] All inquire methods return data --- MQWeb/src/SubscriptionController.cpp | 2 +- MQWeb/src/TopicStatusController.cpp | 2 +- samples/php/authinfo_inq.php | 4 ++-- samples/php/authrec_inq.php | 4 ++-- samples/php/authservice_inq.php | 4 ++-- samples/php/channel_inq.php | 4 ++-- samples/php/chstatus_inq.php | 4 ++-- samples/php/clusqmgr_inq.php | 4 ++-- samples/php/conn_inq.php | 4 ++-- samples/php/namelist_inq.php | 4 ++-- samples/php/process_inq.php | 4 ++-- samples/php/qmgr_inq.php | 6 +++--- samples/php/qmstatus_inq.php | 8 ++++---- samples/php/queue_inq.php | 4 ++-- samples/php/service_inq.php | 4 ++-- samples/php/sub_inq.php | 4 ++-- samples/php/substatus_inq.php | 4 ++-- samples/php/topic_inq.php | 4 ++-- samples/php/tpstatus_inq.php | 4 ++-- 19 files changed, 39 insertions(+), 39 deletions(-) diff --git a/MQWeb/src/SubscriptionController.cpp b/MQWeb/src/SubscriptionController.cpp index 4fa31ff..48d7f3a 100644 --- a/MQWeb/src/SubscriptionController.cpp +++ b/MQWeb/src/SubscriptionController.cpp @@ -110,7 +110,7 @@ void SubscriptionController::inquire() } SubscriptionMapper mapper(*commandServer(), pcfParameters); - set("subs", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/MQWeb/src/TopicStatusController.cpp b/MQWeb/src/TopicStatusController.cpp index 394a40b..50fc764 100644 --- a/MQWeb/src/TopicStatusController.cpp +++ b/MQWeb/src/TopicStatusController.cpp @@ -87,7 +87,7 @@ void TopicStatusController::inquire() } TopicStatusMapper mapper(*commandServer(), pcfParameters); - set("statuses", mapper.inquire()); + set("data", mapper.inquire()); } diff --git a/samples/php/authinfo_inq.php b/samples/php/authinfo_inq.php index a1f4c18..3fa8793 100644 --- a/samples/php/authinfo_inq.php +++ b/samples/php/authinfo_inq.php @@ -20,8 +20,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->authinfos) && count($json->authinfos) > 0 ) { - foreach($json->authinfos as $authinfo) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $authinfo) { echo $authinfo->AuthInfoName->value; echo "\n"; diff --git a/samples/php/authrec_inq.php b/samples/php/authrec_inq.php index 64a1d74..5355acd 100644 --- a/samples/php/authrec_inq.php +++ b/samples/php/authrec_inq.php @@ -20,8 +20,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->authrecs) && count($json->authrecs) > 0 ) { - foreach($json->authrecs as $authrec) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $authrec) { echo $authrec->ProfileName->value; echo '('; diff --git a/samples/php/authservice_inq.php b/samples/php/authservice_inq.php index cd865ff..8249ffa 100644 --- a/samples/php/authservice_inq.php +++ b/samples/php/authservice_inq.php @@ -38,8 +38,8 @@ , PHP_EOL; } else { - if ( isset($json->authservices) && count($json->authservices) > 0 ) { - foreach($json->authservices as $authservice) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $authservice) { foreach($authservice->ServiceComponent->value as $serviceComponent) { echo $serviceComponent, PHP_EOL; diff --git a/samples/php/channel_inq.php b/samples/php/channel_inq.php index 8245d02..3968620 100644 --- a/samples/php/channel_inq.php +++ b/samples/php/channel_inq.php @@ -21,8 +21,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->channels) && count($json->channels) > 0 ) { - foreach($json->channels as $channel) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $channel) { echo $channel->ChannelName->value; echo "\n"; diff --git a/samples/php/chstatus_inq.php b/samples/php/chstatus_inq.php index cbcd066..421f82c 100644 --- a/samples/php/chstatus_inq.php +++ b/samples/php/chstatus_inq.php @@ -20,8 +20,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->statuses) && count($json->statuses) > 0 ) { - foreach($json->statuses as $status) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $status) { echo $status->ChannelName->value; echo " : "; diff --git a/samples/php/clusqmgr_inq.php b/samples/php/clusqmgr_inq.php index ffa5eb4..fcb8378 100644 --- a/samples/php/clusqmgr_inq.php +++ b/samples/php/clusqmgr_inq.php @@ -21,8 +21,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->clusqmgrs) && count($json->clusqmgrs) > 0 ) { - foreach($json->clusqmgrs as $clusqmgr) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $clusqmgr) { echo $clusqmgr->ClusterName->value; echo " : "; diff --git a/samples/php/conn_inq.php b/samples/php/conn_inq.php index 619fbe7..944cfba 100644 --- a/samples/php/conn_inq.php +++ b/samples/php/conn_inq.php @@ -20,8 +20,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->connections) && count($json->connections) > 0 ) { - foreach($json->connections as $connection) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $connection) { echo $connection->ApplTag->value; echo ' ('; diff --git a/samples/php/namelist_inq.php b/samples/php/namelist_inq.php index 4535206..3833f75 100644 --- a/samples/php/namelist_inq.php +++ b/samples/php/namelist_inq.php @@ -21,8 +21,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->namelists) && count($json->namelists) > 0 ) { - foreach($json->namelists as $namelist) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $namelist) { echo $namelist->NamelistName->value; echo ': '; diff --git a/samples/php/process_inq.php b/samples/php/process_inq.php index ff5d2dd..9c73e85 100644 --- a/samples/php/process_inq.php +++ b/samples/php/process_inq.php @@ -20,8 +20,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->processes) && count($json->processes) > 0 ) { - foreach($json->processes as $process) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $process) { echo $process->ProcessName->value; echo "\n"; diff --git a/samples/php/qmgr_inq.php b/samples/php/qmgr_inq.php index 4171283..0afb537 100644 --- a/samples/php/qmgr_inq.php +++ b/samples/php/qmgr_inq.php @@ -27,10 +27,10 @@ . PHP_EOL; } else { - if ( isset($json->qmgr) ) { - echo $json->qmgr->QMgrName->value + if ( isset($json->data) && count($json->data) > 0 ) { + echo $json->data[0]->QMgrName->value . ' : ' - . $json->qmgr->QMgrDesc->value + . $json->data[0]->QMgrDesc->value . PHP_EOL; } else { diff --git a/samples/php/qmstatus_inq.php b/samples/php/qmstatus_inq.php index 8aae7e0..8040348 100644 --- a/samples/php/qmstatus_inq.php +++ b/samples/php/qmstatus_inq.php @@ -27,12 +27,12 @@ . PHP_EOL; } else { - if ( isset($json->status) ) { - echo $json->status->QMgrName->value + if ( isset($json->data) && count($json->data) > 0 ) { + echo $json->data[0]->QMgrName->value . ' started on ' - . $json->status->StartDate->value + . $json->data[0]->StartDate->value . ' ' - . $json->status->StartTime->value + . $json->data[0]->StartTime->value . PHP_EOL; } else { diff --git a/samples/php/queue_inq.php b/samples/php/queue_inq.php index acd014a..6755fc9 100644 --- a/samples/php/queue_inq.php +++ b/samples/php/queue_inq.php @@ -21,8 +21,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->queues) && count($json->queues) > 0 ) { - foreach($json->queues as $queue) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $queue) { echo $queue->QName->value; if ( isset($queue->CurrentQDepth) ) { diff --git a/samples/php/service_inq.php b/samples/php/service_inq.php index 0b6567f..ed80d30 100644 --- a/samples/php/service_inq.php +++ b/samples/php/service_inq.php @@ -20,8 +20,8 @@ echo "Reason Code: {$json->error->reason->code} - {$json->error->reason->desc}\n"; } else { - if ( isset($json->services) && count($json->services) > 0 ) { - foreach($json->services as $service) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $service) { echo $service->ServiceName->value; echo "\n"; diff --git a/samples/php/sub_inq.php b/samples/php/sub_inq.php index 09f01be..5c395ed 100644 --- a/samples/php/sub_inq.php +++ b/samples/php/sub_inq.php @@ -41,8 +41,8 @@ else { echo 'Subscriptions on ', $qmgr, PHP_EOL; echo '-----------------', str_repeat('-', strlen($qmgr)), PHP_EOL; - if ( isset($json->subs) && count($json->subs) > 0 ) { - foreach($json->subs as $sub) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $sub) { echo $sub->SubName->value, PHP_EOL; } diff --git a/samples/php/substatus_inq.php b/samples/php/substatus_inq.php index 6c02f80..bfec02e 100644 --- a/samples/php/substatus_inq.php +++ b/samples/php/substatus_inq.php @@ -41,8 +41,8 @@ else { echo 'Subscription Status on ', $qmgr, PHP_EOL; echo '-----------------------', str_repeat('-', strlen($qmgr)), PHP_EOL; - if ( isset($json->statuses) && count($json->statuses) > 0 ) { - foreach($json->statuses as $status) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $status) { echo $status->SubName->value, PHP_EOL; } diff --git a/samples/php/topic_inq.php b/samples/php/topic_inq.php index 8884d6c..63ff034 100644 --- a/samples/php/topic_inq.php +++ b/samples/php/topic_inq.php @@ -42,8 +42,8 @@ else { echo 'Topics on ', $qmgr, PHP_EOL; echo '----------', str_repeat('-', strlen($qmgr)), PHP_EOL; - if ( isset($json->topics) && count($json->topics) > 0 ) { - foreach($json->topics as $topic) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $topic) { echo $topic->TopicName->value, PHP_EOL; } diff --git a/samples/php/tpstatus_inq.php b/samples/php/tpstatus_inq.php index 16e70f1..152acbd 100644 --- a/samples/php/tpstatus_inq.php +++ b/samples/php/tpstatus_inq.php @@ -42,8 +42,8 @@ else { echo 'Topic Status on ', $qmgr, PHP_EOL; echo '----------------', str_repeat('-', strlen($qmgr)), PHP_EOL; - if ( isset($json->statuses) && count($json->statuses) > 0 ) { - foreach($json->statuses as $status) + if ( isset($json->data) && count($json->data) > 0 ) { + foreach($json->data as $status) { echo $status->TopicName->value, PHP_EOL; } From dea42a9c0dc60af9c84467188972e2fd88da87c0 Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 30 Jun 2016 15:10:59 +0200 Subject: [PATCH 37/60] Add Python samples --- samples/python/authinfo_inq.py | 39 +++++++++++++++++++++++++ samples/python/authrec_inq.py | 45 ++++++++++++++++++++++++++++ samples/python/authservice_inq.py | 39 +++++++++++++++++++++++++ samples/python/channel_inq.py | 38 ++++++++++++++++++++++++ samples/python/channel_start.py | 36 +++++++++++++++++++++++ samples/python/channel_stop.py | 35 ++++++++++++++++++++++ samples/python/chstatus_inq.py | 40 +++++++++++++++++++++++++ samples/python/clusqmgr_inq.py | 40 +++++++++++++++++++++++++ samples/python/clusqmgr_resume.py | 35 ++++++++++++++++++++++ samples/python/clusqmgr_suspend.py | 35 ++++++++++++++++++++++ samples/python/conn_inq.py | 40 +++++++++++++++++++++++++ samples/python/listener_inq.py | 38 ++++++++++++++++++++++++ samples/python/lsstatus_inq.py | 40 +++++++++++++++++++++++++ samples/python/namelist_inq.py | 40 +++++++++++++++++++++++++ samples/python/process_inq.py | 38 ++++++++++++++++++++++++ samples/python/qmgr_inq.py | 37 +++++++++++++++++++++++ samples/python/qmstatus_inq.py | 47 ++++++++++++++++++++++++++++++ samples/python/queue_inq.py | 40 +++++++++++++++++++++++++ samples/python/service_inq.py | 36 +++++++++++++++++++++++ samples/python/sub_inq.py | 39 +++++++++++++++++++++++++ samples/python/substatus_inq.py | 38 ++++++++++++++++++++++++ samples/python/topic_inq.py | 36 +++++++++++++++++++++++ samples/python/tpstatus_inq.py | 40 +++++++++++++++++++++++++ 23 files changed, 891 insertions(+) create mode 100644 samples/python/authinfo_inq.py create mode 100644 samples/python/authrec_inq.py create mode 100644 samples/python/authservice_inq.py create mode 100644 samples/python/channel_inq.py create mode 100644 samples/python/channel_start.py create mode 100644 samples/python/channel_stop.py create mode 100644 samples/python/chstatus_inq.py create mode 100644 samples/python/clusqmgr_inq.py create mode 100644 samples/python/clusqmgr_resume.py create mode 100644 samples/python/clusqmgr_suspend.py create mode 100644 samples/python/conn_inq.py create mode 100644 samples/python/listener_inq.py create mode 100644 samples/python/lsstatus_inq.py create mode 100644 samples/python/namelist_inq.py create mode 100644 samples/python/process_inq.py create mode 100644 samples/python/qmgr_inq.py create mode 100644 samples/python/qmstatus_inq.py create mode 100644 samples/python/queue_inq.py create mode 100644 samples/python/service_inq.py create mode 100644 samples/python/sub_inq.py create mode 100644 samples/python/substatus_inq.py create mode 100644 samples/python/topic_inq.py create mode 100644 samples/python/tpstatus_inq.py diff --git a/samples/python/authinfo_inq.py b/samples/python/authinfo_inq.py new file mode 100644 index 0000000..ee00b5a --- /dev/null +++ b/samples/python/authinfo_inq.py @@ -0,0 +1,39 @@ +''' + Inquire all SYSTEM authentication information objects from a queuemanager + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/authinfo/inquire/" + sys.argv[1] + '/SYSTEM*'; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0 : + print "No authentication information found" + else: + for data in result['data']: + print data['AuthInfoName']['value'] + +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring authentication information: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/authrec_inq.py b/samples/python/authrec_inq.py new file mode 100644 index 0000000..5d25a88 --- /dev/null +++ b/samples/python/authrec_inq.py @@ -0,0 +1,45 @@ +''' + Inquire all authority records for a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/authrec/inquire/' + sys.argv[1] + '/?Options=Name%20All%20Matching&Options=Entity%20Explicit' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No authority records found" + else: + for data in result['data']: + print(data['ProfileName']['value'] + + '(' + + data['ObjectType']['text'] + + ')' + + ' - ' + + data['EntityName']['value'] + ) + print " " + ', '.join([authorization['text'] for authorization in data['AuthorizationList']['value']]) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring authority services: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/authservice_inq.py b/samples/python/authservice_inq.py new file mode 100644 index 0000000..9b19ca7 --- /dev/null +++ b/samples/python/authservice_inq.py @@ -0,0 +1,39 @@ +''' + Inquire all authority service information for a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/authservice/inquire/' + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No authority services found" + else: + for data in result['data']: + for service in data['ServiceComponent']['value']: + print service +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring authority services: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/channel_inq.py b/samples/python/channel_inq.py new file mode 100644 index 0000000..dcbe5d7 --- /dev/null +++ b/samples/python/channel_inq.py @@ -0,0 +1,38 @@ +''' + Inquire all server-connection channels from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/channel/inquire/' + sys.argv[1] + '/*/Server-connection' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No channels found" + else: + for data in result['data']: + print data['ChannelName']['value'] +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring channels: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/channel_start.py b/samples/python/channel_start.py new file mode 100644 index 0000000..7d92577 --- /dev/null +++ b/samples/python/channel_start.py @@ -0,0 +1,36 @@ +''' + Starts a channel on a queuemanager + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 3 : + print 'Please pass me the name of a queuemanager and a channelname as argument' + sys.exit(1) + +url = "/api/channel/start/" + sys.argv[1] + '/' + sys.argv[2]; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + print "Start command succesfully send." + print "Note: this doesn't mean the channel is running! Use chstatus to get the status of the channel." + +except httplib.HTTPException as e: + print ('An HTTP error occurred while starting a channel: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/channel_stop.py b/samples/python/channel_stop.py new file mode 100644 index 0000000..dfabb22 --- /dev/null +++ b/samples/python/channel_stop.py @@ -0,0 +1,35 @@ +''' + Stops a channel on a queuemanager + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 3 : + print 'Please pass me the name of a queuemanager and a channelname as argument' + sys.exit(1) + +url = "/api/channel/stop/" + sys.argv[1] + '/' + sys.argv[2]; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + print "Stop command succesfully send." + +except httplib.HTTPException as e: + print ('An HTTP error occurred while stopping the channel: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/chstatus_inq.py b/samples/python/chstatus_inq.py new file mode 100644 index 0000000..fa25267 --- /dev/null +++ b/samples/python/chstatus_inq.py @@ -0,0 +1,40 @@ +''' + Inquire all server connection channel statuses for a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/chstatus/inquire/' + sys.argv[1] + '?ChannelType=Server-connection' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No channelstatus found" + else: + for data in result['data']: + print (data['ChannelName']['value'] + ': ' + + data['ChannelStatus']['text'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring channel statuses: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/clusqmgr_inq.py b/samples/python/clusqmgr_inq.py new file mode 100644 index 0000000..c1c0423 --- /dev/null +++ b/samples/python/clusqmgr_inq.py @@ -0,0 +1,40 @@ +''' + Inquire all cluster information from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/clusqmgr/inquire/' + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No cluster queuemanagers found" + else: + for data in result['data']: + print (data['ClusterName']['value'] + ': ' + + data['QMgrName']['value'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring cluster queuemanagers: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/clusqmgr_resume.py b/samples/python/clusqmgr_resume.py new file mode 100644 index 0000000..6ef1d8b --- /dev/null +++ b/samples/python/clusqmgr_resume.py @@ -0,0 +1,35 @@ +''' + Resumes a queuemanager in a cluster + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 3 : + print 'Please pass me the name of a queuemanager and a clustername as argument' + sys.exit(1) + +url = "/api/clusqmgr/resume/" + sys.argv[1] + '/' + sys.argv[2]; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + print "Resume command succesfully send." + +except httplib.HTTPException as e: + print ('An HTTP error occurred while resuming the queuemanager in the cluster: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/clusqmgr_suspend.py b/samples/python/clusqmgr_suspend.py new file mode 100644 index 0000000..af9c8f5 --- /dev/null +++ b/samples/python/clusqmgr_suspend.py @@ -0,0 +1,35 @@ +''' + Supends a queuemanager in a cluster + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 3 : + print 'Please pass me the name of a queuemanager and a clustername as argument' + sys.exit(1) + +url = "/api/clusqmgr/suspend/" + sys.argv[1] + '/' + sys.argv[2]; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + print "Suspend command succesfully send." + +except httplib.HTTPException as e: + print ('An HTTP error occurred while suspending the queuemanager in the cluster: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/conn_inq.py b/samples/python/conn_inq.py new file mode 100644 index 0000000..ccd2545 --- /dev/null +++ b/samples/python/conn_inq.py @@ -0,0 +1,40 @@ +''' + Inquire all connections from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/conn/inquire/' + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No connections found" + else: + for data in result['data']: + print (data['ApplTag']['value'] + ': ' + + data['ApplType']['text'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring connections: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/listener_inq.py b/samples/python/listener_inq.py new file mode 100644 index 0000000..1837f86 --- /dev/null +++ b/samples/python/listener_inq.py @@ -0,0 +1,38 @@ +''' + Inquire all SYSTEM listeners with transporttype TCP from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/listener/inquire/' + sys.argv[1] + '/SYSTEM*/TCP' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No listeners found" + else: + for data in result['data']: + print data['ListenerName']['value'] +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring listeners: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/lsstatus_inq.py b/samples/python/lsstatus_inq.py new file mode 100644 index 0000000..f5cb23a --- /dev/null +++ b/samples/python/lsstatus_inq.py @@ -0,0 +1,40 @@ +''' + Inquire all listener statuses from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/lsstatus/inquire/' + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No listener status found" + else: + for data in result['data']: + print ( data['ListenerName']['value'] + + ': ' + data['Status']['text'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring listener statuses: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/namelist_inq.py b/samples/python/namelist_inq.py new file mode 100644 index 0000000..e40c72b --- /dev/null +++ b/samples/python/namelist_inq.py @@ -0,0 +1,40 @@ +''' + This sample will show all SYSTEM namelists from a queuemanager with + their description. MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/nl/inquire/' + sys.argv[1] + '/SYSTEM*' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No namelists found" + else: + for data in result['data']: + print (data['NamelistName']['value'] + ': ' + + data['NamelistDesc']['value'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring namelists: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/process_inq.py b/samples/python/process_inq.py new file mode 100644 index 0000000..b49cb0f --- /dev/null +++ b/samples/python/process_inq.py @@ -0,0 +1,38 @@ +''' + This sample will show all SYSTEM processes from a queuemanager with + their description. MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/process/inquire/' + sys.argv[1] + '/SYSTEM*' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No processes found" + else: + for data in result['data']: + print data['ProcessName']['value'] +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring processes: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/qmgr_inq.py b/samples/python/qmgr_inq.py new file mode 100644 index 0000000..31f1028 --- /dev/null +++ b/samples/python/qmgr_inq.py @@ -0,0 +1,37 @@ +''' + This sample will show the description of a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' + +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/qmgr/inquire/" + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + print (result['data'][0]['QMgrName']['value'] + + ' : ' + result['data'][0]['QMgrDesc']['value'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring queuemanager: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/qmstatus_inq.py b/samples/python/qmstatus_inq.py new file mode 100644 index 0000000..f34816a --- /dev/null +++ b/samples/python/qmstatus_inq.py @@ -0,0 +1,47 @@ +''' + This sample will show the startdate/time of a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' + +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/qmstatus/inquire/" + sys.argv[1] +input = { + 'QMStatusAttrs' : [ + 'StartDate', + 'StartTime' + ] +} + +try: + headers = { + 'Content-Type': 'application/json' + } + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('POST', url, json.dumps(input), headers) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + print (result['data'][0]['QMgrName']['value'] + + ' started on ' + result['data'][0]['StartDate']['value'] + + ' ' + result['data'][0]['StartTime']['value'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring queuemanager status: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/queue_inq.py b/samples/python/queue_inq.py new file mode 100644 index 0000000..51751de --- /dev/null +++ b/samples/python/queue_inq.py @@ -0,0 +1,40 @@ +''' + This sample will show all SYSTEM queues from a queuemanager and + prints the current queue depth if this property exists for the queue. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/queue/inquire/" + sys.argv[1] + "/SYSTEM*"; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + for data in result['data']: + line = data['QName']['value'] + if 'CurrentQDepth' in data: + line += ': ' + str(data['CurrentQDepth']['value']) + print line + +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring queues: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/service_inq.py b/samples/python/service_inq.py new file mode 100644 index 0000000..ef88631 --- /dev/null +++ b/samples/python/service_inq.py @@ -0,0 +1,36 @@ +''' + This sample will show all services from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/service/inquire/" + sys.argv[1]; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + for data in result['data']: + print data['ServiceName']['value'] + +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring topics: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/sub_inq.py b/samples/python/sub_inq.py new file mode 100644 index 0000000..4d44f5f --- /dev/null +++ b/samples/python/sub_inq.py @@ -0,0 +1,39 @@ +''' + This sample will show all subscriptions from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/sub/inquire/" + sys.argv[1] + "/*"; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No subscriptions found" + else: + for data in result['data']: + print data['SubName']['value'] + +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring subscriptions: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/substatus_inq.py b/samples/python/substatus_inq.py new file mode 100644 index 0000000..bd3da69 --- /dev/null +++ b/samples/python/substatus_inq.py @@ -0,0 +1,38 @@ +''' + This sample will show all subscription statuses from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/sbstatus/inquire/' + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No substatus found" + else: + for data in result['data']: + print data['SubName']['value'] +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring sub statuses: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/topic_inq.py b/samples/python/topic_inq.py new file mode 100644 index 0000000..1d8b199 --- /dev/null +++ b/samples/python/topic_inq.py @@ -0,0 +1,36 @@ +''' + This sample will show all topics from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/topic/inquire/" + sys.argv[1] + "/SYSTEM*"; + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + for data in result['data']: + print data['TopicName']['value'] + +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring topics: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' diff --git a/samples/python/tpstatus_inq.py b/samples/python/tpstatus_inq.py new file mode 100644 index 0000000..a416fa7 --- /dev/null +++ b/samples/python/tpstatus_inq.py @@ -0,0 +1,40 @@ +''' + This sample will show all topic statuses from a queuemanager. + MQWeb runs on localhost and is listening on port 8081. +''' +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = '/api/tpstatus/inquire/' + sys.argv[1] + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print ('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + if len(result['data']) == 0: + print "No topicstatus found" + else: + for data in result['data']: + print (data['TopicName']['value'] + ': ' + + data['TopicStatus']['text'] + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring topic statuses: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' \ No newline at end of file From 6da020c058d46d0617ff6d22e07ebd770bed8d35 Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 30 Jun 2016 21:09:12 +0200 Subject: [PATCH 38/60] Add dictionary change --- ChangeLog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index ecd43ce..286b34c 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -5,6 +5,7 @@ - On success the information is always stored in a 'data' array. - Browse DLQ messages - Integrate event messages in browse action. Message event action removed. + - Dictionary tables changed: 'display' renamed into 'text' 0.0.13 - Upgrade documents to use latest Jekyll release From 9bfbce5bef479b1cf8242423c6f50ab11a233162 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 9 Dec 2016 07:44:27 +0100 Subject: [PATCH 39/60] Add event sample --- samples/python/event.py | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 samples/python/event.py diff --git a/samples/python/event.py b/samples/python/event.py new file mode 100644 index 0000000..b428026 --- /dev/null +++ b/samples/python/event.py @@ -0,0 +1,43 @@ +''' + This sample will read all event messages from queue SYSTEM.ADMIN.CONFIG.EVENT + and show all events that are related to queues. + MQWeb runs on localhost and is listening on port 8081. +''' + +import sys +import json +import httplib +import socket + +if len(sys.argv) < 2 : + print 'Please pass me the name of a queuemanager as argument' + sys.exit(1) + +url = "/api/message/browse/" + sys.argv[1] + '/SYSTEM.ADMIN.CONFIG.EVENT' + +try: + conn = httplib.HTTPConnection('localhost', 8081) + conn.request('GET', url) + res = conn.getresponse() + result = json.loads(res.read()) + + if 'error' in result: + print('Received a WebSphere MQ error: ' + + str(result['error']['reason']['code']) + ) + else: + for message in result['data']: + if 'event' in message : + #print(json.dumps(message, indent=2)) + if message['event']['ObjectType']['text'] == 'Queue' : + print("MQ Command {0} generated a config event for {1}".format( + message['event']['EventOrigin']['text'], + message['event']['QName']['value']) + ) +except httplib.HTTPException as e: + print ('An HTTP error occurred while inquiring queuemanager: ' + + e.errno + e.strerror + ) +except socket.error as e: + print e.strerror + print 'Is the MQWeb daemon running?' From 592b9b5203a125225f94700ef587ca259becb40d Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 2 Jan 2017 12:57:04 +0100 Subject: [PATCH 40/60] Remove the note about built-in webpages --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 23bfb8f..0ac02ac 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,5 @@ MQWeb MQWeb - Administer Websphere MQ with a browser MQWeb is a HTTP server that can be used to get information from WebSphere MQ. -MQWeb contains built-in web pages, but you can also use AJAJ to get the -information you need for your own applications. All documentation is now available on [MQWeb.org](http://www.mqweb.org). From 42cd6b722e70dbef8e84377c1617ddad3424ddde Mon Sep 17 00:00:00 2001 From: fbraem Date: Thu, 12 Jan 2017 14:12:12 +0100 Subject: [PATCH 41/60] Add config arugment --- MQWeb/src/Application.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/MQWeb/src/Application.cpp b/MQWeb/src/Application.cpp index e391bb1..2272ee4 100644 --- a/MQWeb/src/Application.cpp +++ b/MQWeb/src/Application.cpp @@ -54,7 +54,14 @@ void MQWebApplication::initialize(Application& self) { try { - loadConfiguration(); // load default configuration files, if present + if (config().has("mq.web.cfg")) + { + loadConfiguration(config().getString("mq.web.cfg")); + } + else + { + loadConfiguration(); // load default configuration files, if present + } } catch(Poco::FileException& fe) { @@ -100,6 +107,13 @@ void MQWebApplication::defineOptions(Poco::Util::OptionSet& options) .binding("mq.web.qmgr") .argument("")); + options.addOption( + Option("config", "c", "Configuration file to load") + .required(false) + .repeatable(false) + .binding("mq.web.cfg") + .argument("")); + options.addOption( Option("port", "p", "Port for HTTP listener") .required(false) From a51d462a7155c842700e232629b16a16aba0654c Mon Sep 17 00:00:00 2001 From: fbraem Date: Tue, 28 Mar 2017 11:13:23 +0200 Subject: [PATCH 42/60] Extract configuration code to separate classes --- MQWeb/include/MQ/Web/QueueManagerConfig.h | 58 ++++++++++++++ .../MQ/Web/QueueManagerDefaultConfig.h | 51 +++++++++++++ MQWeb/src/QueueManagerConfig.cpp | 35 +++++++++ MQWeb/src/QueueManagerDefaultConfig.cpp | 75 +++++++++++++++++++ MQWeb/src/QueueManagerPoolCache.cpp | 47 +----------- 5 files changed, 223 insertions(+), 43 deletions(-) create mode 100644 MQWeb/include/MQ/Web/QueueManagerConfig.h create mode 100644 MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h create mode 100644 MQWeb/src/QueueManagerConfig.cpp create mode 100644 MQWeb/src/QueueManagerDefaultConfig.cpp diff --git a/MQWeb/include/MQ/Web/QueueManagerConfig.h b/MQWeb/include/MQ/Web/QueueManagerConfig.h new file mode 100644 index 0000000..b6c4ff6 --- /dev/null +++ b/MQWeb/include/MQ/Web/QueueManagerConfig.h @@ -0,0 +1,58 @@ +/* + * Copyright 2017 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ +#ifndef _MQ_QueueManagerConfig_h +#define _MQ_QueueManagerConfig_h + +#include "Poco/Dynamic/Struct.h" + +namespace MQ { +namespace Web { + +class QueueManagerConfig + /// Base class for queuemanager configuration. +{ +public: + + QueueManagerConfig(const std::string& qmgrName); + /// Constructor. + + virtual ~QueueManagerConfig(); + /// Destructor. + + std::string qmgrName() const; + /// Returns the queuemanager name + + virtual Poco::DynamicStruct read() = 0; + /// Read the configuration + +private: + + std::string _qmgrName; +}; + +inline std::string QueueManagerConfig::qmgrName() const +{ + return _qmgrName; +} + +}} // Namespace MQ::Web + +#endif // _MQ_QueueManagerConfig_h diff --git a/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h b/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h new file mode 100644 index 0000000..47fbf5a --- /dev/null +++ b/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h @@ -0,0 +1,51 @@ +/* + * Copyright 2017 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ +#ifndef _MQ_QueueManagerDefaultConfig_h +#define _MQ_QueueManagerDefaultConfig_h + +#include "MQ/Web/QueueManagerConfig.h" + +#include "Poco/Util/AbstractConfiguration.h" + +namespace MQ { +namespace Web { + +class QueueManagerDefaultConfig : public QueueManagerConfig + /// Default class for queuemanager configuration. The default configuration +{ +public: + + QueueManagerDefaultConfig(const std::string& qmgrName, Poco::Util::AbstractConfiguration& config); + /// Constructor. + + virtual ~QueueManagerDefaultConfig(); + /// Destructor. + + Poco::DynamicStruct read(); + /// Read the configuration + +private: + Poco::Util::AbstractConfiguration& _config; +}; + +}} // Namespace MQ::Web + +#endif // _MQ_QueueManagerDefaultConfig_h diff --git a/MQWeb/src/QueueManagerConfig.cpp b/MQWeb/src/QueueManagerConfig.cpp new file mode 100644 index 0000000..b0ec60a --- /dev/null +++ b/MQWeb/src/QueueManagerConfig.cpp @@ -0,0 +1,35 @@ +/* + * Copyright 2017 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ + +#include "MQ/Web/QueueManagerConfig.h" + +namespace MQ { +namespace Web { + +QueueManagerConfig::QueueManagerConfig(const std::string& qmgrName) : _qmgrName(qmgrName) +{ +} + +QueueManagerConfig::~QueueManagerConfig() +{ +} + +} } // Namespace MQ::Web diff --git a/MQWeb/src/QueueManagerDefaultConfig.cpp b/MQWeb/src/QueueManagerDefaultConfig.cpp new file mode 100644 index 0000000..572a600 --- /dev/null +++ b/MQWeb/src/QueueManagerDefaultConfig.cpp @@ -0,0 +1,75 @@ +/* + * Copyright 2017 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ + +#include "MQ/Web/QueueManagerDefaultConfig.h" + +namespace MQ { +namespace Web { + +QueueManagerDefaultConfig::QueueManagerDefaultConfig(const std::string& qmgrName, Poco::Util::AbstractConfiguration& config) +: QueueManagerConfig(qmgrName), _config(config) +{ +} + +QueueManagerDefaultConfig::~QueueManagerDefaultConfig() +{ +} + +Poco::DynamicStruct QueueManagerDefaultConfig::read() +{ + std::string qmgrConfig = "mq.web.qmgr." + qmgrName(); + + Poco::DynamicStruct connectionInformation; + std::string qmgrConfigConnection = qmgrConfig + ".connection"; + if ( _config.has(qmgrConfigConnection) ) + { + std::string connection; + std::string channel; + connectionInformation.insert("connection", _config.getString(qmgrConfigConnection)); + std::string qmgrConfigChannel = qmgrConfig + ".channel"; + if ( _config.has(qmgrConfigChannel) ) + { + connectionInformation.insert("channel", _config.getString(qmgrConfigChannel)); + } + else + { + connectionInformation.insert("channel", _config.getString("mq.web.defaultChannel", "SYSTEM.DEF.SVRCONN")); + } + + if ( _config.has("mq.web.ssl.keyrepos") ) + { + Poco::DynamicStruct ssl; + connectionInformation.insert("ssl", ssl); + + Poco::Util::AbstractConfiguration::Keys keys; + Poco::AutoPtr sslConfig = _config.createView("mq.web.ssl"); + sslConfig->keys(keys); + for(Poco::Util::AbstractConfiguration::Keys::iterator it = keys.begin(); it != keys.end(); ++it) + { + ssl.insert(*it, _config.getString(*it)); + } + } + } + + return connectionInformation; +} + +} } // Namespace MQ::Web diff --git a/MQWeb/src/QueueManagerPoolCache.cpp b/MQWeb/src/QueueManagerPoolCache.cpp index 6ccf693..2082e80 100644 --- a/MQWeb/src/QueueManagerPoolCache.cpp +++ b/MQWeb/src/QueueManagerPoolCache.cpp @@ -23,6 +23,7 @@ #include "MQ/MQSubsystem.h" #include "MQ/Web/QueueManagerPoolCache.h" +#include "MQ/Web/QueueManagerDefaultConfig.h" namespace MQ { namespace Web { @@ -73,53 +74,12 @@ QueueManagerPool::Ptr QueueManagerPoolCache::createPool(const std::string& qmgrN MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); - std::string qmgrConfig = "mq.web.qmgr." + qmgrName; - Poco::SharedPtr factory; if ( mqSystem.client() ) { - Poco::DynamicStruct connectionInformation; - - // In client mode we check for a configuration - // When this is not available, we hope that a channel tab file - // is configured. - std::string qmgrConfigConnection = qmgrConfig + ".connection"; - if ( config.has(qmgrConfigConnection) ) - { - std::string connection; - std::string channel; - connectionInformation.insert("connection", config.getString(qmgrConfigConnection)); - std::string qmgrConfigChannel = qmgrConfig + ".channel"; - if ( config.has(qmgrConfigChannel) ) - { - connectionInformation.insert("channel", config.getString(qmgrConfigChannel)); - } - else - { - connectionInformation.insert("channel", config.getString("mq.web.defaultChannel", "SYSTEM.DEF.SVRCONN")); - } - - if ( config.has("mq.web.ssl.keyrepos") ) - { - Poco::DynamicStruct ssl; - connectionInformation.insert("ssl", ssl); - - Poco::Util::AbstractConfiguration::Keys keys; - Poco::AutoPtr sslConfig = config.createView("mq.web.ssl"); - sslConfig->keys(keys); - for(Poco::Util::AbstractConfiguration::Keys::iterator it = keys.begin(); it != keys.end(); ++it) - { - ssl.insert(*it, config.getString(*it)); - } - } - - factory = new QueueManagerFactory(qmgrName, connectionInformation); - } - else - { - factory = new QueueManagerFactory(qmgrName); - } + QueueManagerDefaultConfig qmgrConfig(qmgrName, config); + factory = new QueueManagerFactory(qmgrName, qmgrConfig.read()); } else { @@ -130,6 +90,7 @@ QueueManagerPool::Ptr QueueManagerPoolCache::createPool(const std::string& qmgrN std::size_t peakCapacity; int idle; + std::string qmgrConfig = "mq.web.qmgr." + qmgrName; std::string qmgrPoolCapacity = qmgrConfig + ".pool.capacity"; if ( !config.has(qmgrPoolCapacity) ) { From 15a701975a8fab14fbbead5529a4ae62c616adda Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 29 Mar 2017 09:24:13 +0200 Subject: [PATCH 43/60] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0ac02ac..796d9d0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ MQWeb ===== -MQWeb - Administer Websphere MQ with a browser +MQWeb - A REST API server for Websphere MQ MQWeb is a HTTP server that can be used to get information from WebSphere MQ. From b93acbf74fbc0b335b9a23cb5652b6e5f09c2369 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 29 Mar 2017 14:38:39 +0200 Subject: [PATCH 44/60] Add database configuration --- MQWeb/include/MQ/Web/QueueManagerConfig.h | 5 ++ .../MQ/Web/QueueManagerDatabaseConfig.h | 55 +++++++++++++ .../MQ/Web/QueueManagerDefaultConfig.h | 3 + MQWeb/src/MQWebController.cpp | 23 ++++-- MQWeb/src/QueueManagerDatabaseConfig.cpp | 81 +++++++++++++++++++ MQWeb/src/QueueManagerDefaultConfig.cpp | 11 +++ MQWeb/src/QueueManagerPoolCache.cpp | 19 ++++- 7 files changed, 190 insertions(+), 7 deletions(-) create mode 100644 MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h create mode 100644 MQWeb/src/QueueManagerDatabaseConfig.cpp diff --git a/MQWeb/include/MQ/Web/QueueManagerConfig.h b/MQWeb/include/MQ/Web/QueueManagerConfig.h index b6c4ff6..c492ede 100644 --- a/MQWeb/include/MQ/Web/QueueManagerConfig.h +++ b/MQWeb/include/MQ/Web/QueueManagerConfig.h @@ -21,6 +21,8 @@ #ifndef _MQ_QueueManagerConfig_h #define _MQ_QueueManagerConfig_h +#include + #include "Poco/Dynamic/Struct.h" namespace MQ { @@ -40,6 +42,9 @@ class QueueManagerConfig std::string qmgrName() const; /// Returns the queuemanager name + virtual void list(std::vector& arr) const = 0; + /// Returns all configured queuemanagers + virtual Poco::DynamicStruct read() = 0; /// Read the configuration diff --git a/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h b/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h new file mode 100644 index 0000000..d09f9aa --- /dev/null +++ b/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h @@ -0,0 +1,55 @@ +/* + * Copyright 2017 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ +#ifndef _MQ_QueueManagerDatabaseConfig_h +#define _MQ_QueueManagerDatabaseConfig_h + +#include "MQ/Web/QueueManagerConfig.h" + +#include "Poco/Data/Session.h" + +namespace MQ { +namespace Web { + +class QueueManagerDatabaseConfig : public QueueManagerConfig + /// Class that retrieves queuemanager configuration from a database. +{ +public: + + QueueManagerDatabaseConfig(const std::string& qmgrName, const std::string& connector, const std::string& connectionString); + /// Constructor. + + virtual ~QueueManagerDatabaseConfig(); + /// Destructor. + + void list(std::vector& arr) const; + /// Returns all configured queuemanagers + + Poco::DynamicStruct read(); + /// Read the configuration + +private: + + mutable Poco::SharedPtr _session; +}; + +}} // Namespace MQ::Web + +#endif // _MQ_QueueManagerDatabaseConfig_h diff --git a/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h b/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h index 47fbf5a..12ebf5f 100644 --- a/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h +++ b/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h @@ -39,6 +39,9 @@ class QueueManagerDefaultConfig : public QueueManagerConfig virtual ~QueueManagerDefaultConfig(); /// Destructor. + void list(std::vector& arr) const; + /// Returns all configured queuemanagers. + Poco::DynamicStruct read(); /// Read the configuration diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp index ac9c226..b2c62ed 100644 --- a/MQWeb/src/MQWebController.cpp +++ b/MQWeb/src/MQWebController.cpp @@ -27,9 +27,13 @@ #include "Poco/RegularExpression.h" #include "Poco/Logger.h" +#include "Poco/Data/SQLite/Connector.h" + #include "MQ/Web/MQWebController.h" #include "MQ/Web/Version.h" #include "MQ/MQSubsystem.h" +#include "MQ/Web/QueueManagerDefaultConfig.h" +#include "MQ/Web/QueueManagerDatabaseConfig.h" namespace MQ { @@ -79,10 +83,20 @@ void MQWebController::list() Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); if ( mqSystem.client() ) { - Poco::Util::AbstractConfiguration::Keys qmgrs; - config.keys("mq.web.qmgr", qmgrs); - - for(Poco::Util::AbstractConfiguration::Keys::iterator it = qmgrs.begin(); it != qmgrs.end(); ++it) + std::vector configuredQueuemanagers; + Poco::SharedPtr qmgrConfig; + if ( config.has("mq.web.config.connection") ) + { + std::string dbConnector = config.getString("mq.web.config.connector", Poco::Data::SQLite::Connector::KEY); + std::string dbConnection = config.getString("mq.web.config.connection"); + qmgrConfig = new QueueManagerDatabaseConfig("", dbConnector, dbConnection); + } + else + { + qmgrConfig = new QueueManagerDefaultConfig("", config); + } + qmgrConfig->list(configuredQueuemanagers); + for(std::vector::iterator it = configuredQueuemanagers.begin(); it != configuredQueuemanagers.end(); ++it) { queuemanagers->add(*it); } @@ -128,4 +142,3 @@ void MQWebController::list() } }} // Namespace MQ::Web - diff --git a/MQWeb/src/QueueManagerDatabaseConfig.cpp b/MQWeb/src/QueueManagerDatabaseConfig.cpp new file mode 100644 index 0000000..8c6dee8 --- /dev/null +++ b/MQWeb/src/QueueManagerDatabaseConfig.cpp @@ -0,0 +1,81 @@ +/* + * Copyright 2017 MQWeb - Franky Braem + * + * Licensed under the EUPL, Version 1.1 or – as soon they + * will be approved by the European Commission - subsequent + * versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the + * Licence. + * You may obtain a copy of the Licence at: + * + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in + * writing, software distributed under the Licence is + * distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. + * See the Licence for the specific language governing + * permissions and limitations under the Licence. + */ + +#include "MQ/Web/QueueManagerDatabaseConfig.h" + +namespace MQ { +namespace Web { + +using namespace Poco::Data::Keywords; + +QueueManagerDatabaseConfig::QueueManagerDatabaseConfig(const std::string& qmgrName, const std::string& connector, const std::string& connectionString) +: QueueManagerConfig(qmgrName), _session(new Poco::Data::Session(connector, connectionString)) +{ +} + +QueueManagerDatabaseConfig::~QueueManagerDatabaseConfig() +{ +} + +void QueueManagerDatabaseConfig::list(std::vector& arr) const +{ + typedef Poco::Tuple Attribute; + std::vector attributes; + + try + { + *_session << "SELECT name FROM queuemanagers", into(attributes), now; + for(std::vector::iterator it = attributes.begin(); it != attributes.end(); ++it) + { + arr.push_back(it->get<0>()); + } + } + catch(Poco::Data::DataException& de) + { + //TODO: logging? or rethrow? + } +} + +Poco::DynamicStruct QueueManagerDatabaseConfig::read() +{ + Poco::DynamicStruct connectionInformation; + + std::string name = qmgrName(); + std::string channel; + std::string server; + int port = 0; + + try + { + *_session << "SELECT channel, server, port FROM queuemanagers WHERE name = :n", into(channel), into(server), into(port), useRef(name), now; + + connectionInformation.insert("channel", channel); + connectionInformation.insert("connection", Poco::format("%s(%d)", server, port)); + } + catch(Poco::Data::DataException& de) + { + //TODO: log or throw it?; + } + + return connectionInformation; +} + +} } // Namespace MQ::Web diff --git a/MQWeb/src/QueueManagerDefaultConfig.cpp b/MQWeb/src/QueueManagerDefaultConfig.cpp index 572a600..d9b727b 100644 --- a/MQWeb/src/QueueManagerDefaultConfig.cpp +++ b/MQWeb/src/QueueManagerDefaultConfig.cpp @@ -33,6 +33,17 @@ QueueManagerDefaultConfig::~QueueManagerDefaultConfig() { } +void QueueManagerDefaultConfig::list(std::vector& arr) const +{ + Poco::Util::AbstractConfiguration::Keys qmgrs; + _config.keys("mq.web.qmgr", qmgrs); + + for(Poco::Util::AbstractConfiguration::Keys::iterator it = qmgrs.begin(); it != qmgrs.end(); ++it) + { + arr.push_back(*it); + } +} + Poco::DynamicStruct QueueManagerDefaultConfig::read() { std::string qmgrConfig = "mq.web.qmgr." + qmgrName(); diff --git a/MQWeb/src/QueueManagerPoolCache.cpp b/MQWeb/src/QueueManagerPoolCache.cpp index 2082e80..1a8cbd8 100644 --- a/MQWeb/src/QueueManagerPoolCache.cpp +++ b/MQWeb/src/QueueManagerPoolCache.cpp @@ -19,11 +19,14 @@ * permissions and limitations under the Licence. */ #include "Poco/Util/Application.h" +#include "Poco/Data/SessionFactory.h" +#include "Poco/Data/SQLite/Connector.h" #include "MQ/MQSubsystem.h" #include "MQ/Web/QueueManagerPoolCache.h" #include "MQ/Web/QueueManagerDefaultConfig.h" +#include "MQ/Web/QueueManagerDatabaseConfig.h" namespace MQ { namespace Web { @@ -78,8 +81,20 @@ QueueManagerPool::Ptr QueueManagerPoolCache::createPool(const std::string& qmgrN if ( mqSystem.client() ) { - QueueManagerDefaultConfig qmgrConfig(qmgrName, config); - factory = new QueueManagerFactory(qmgrName, qmgrConfig.read()); + Poco::SharedPtr qmgrConfig; + if ( config.has("mq.web.config.connection") ) + { + // Queuemanagers connection information is stored in a database + std::string dbConnector = config.getString("mq.web.config.connector", Poco::Data::SQLite::Connector::KEY); + std::string dbConnection = config.getString("mq.web.config.connection"); + qmgrConfig = new QueueManagerDatabaseConfig(qmgrName, dbConnector, dbConnection); + } + else + { + qmgrConfig = new QueueManagerDefaultConfig(qmgrName, config); + } + + factory = new QueueManagerFactory(qmgrName, qmgrConfig->read()); } else { From 944fe4061a70f686be18ac8c56811144aa578567 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:05:04 +0200 Subject: [PATCH 45/60] Register/Unregister SQLite connector --- MQDictionary/src/Application.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/MQDictionary/src/Application.cpp b/MQDictionary/src/Application.cpp index 71cac21..acfd997 100644 --- a/MQDictionary/src/Application.cpp +++ b/MQDictionary/src/Application.cpp @@ -2862,10 +2862,12 @@ class MQDictionary : public Poco::Util::Application MQDictionary() { + Poco::Data::SQLite::Connector::registerConnector(); } ~MQDictionary() { + Poco::Data::SQLite::Connector::unregisterConnector(); } void store(Poco::Data::Session& session, int oid, const std::string& name, const Dictionary& dict) From becd12165e211d6be7c0f5a3aa23b7b1d2122d95 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:05:35 +0200 Subject: [PATCH 46/60] Register/Unregister SQLite connector --- MQWeb/src/Application.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MQWeb/src/Application.cpp b/MQWeb/src/Application.cpp index 2272ee4..d3a315a 100644 --- a/MQWeb/src/Application.cpp +++ b/MQWeb/src/Application.cpp @@ -30,6 +30,8 @@ #include "Poco/Net/HTTPServerResponse.h" #include "Poco/Net/HTTPServerParams.h" +#include "Poco/Data/SQLite/Connector.h" + #include "Poco/Logger.h" #include "Poco/File.h" @@ -68,6 +70,8 @@ void MQWebApplication::initialize(Application& self) std::cout << "Caught a file exception when loading configuration file: " << fe.message() << std::endl; } + Poco::Data::SQLite::Connector::registerConnector(); + try { ServerApplication::initialize(self); @@ -83,6 +87,8 @@ void MQWebApplication::uninitialize() { Poco::Logger::get("mq.web").information("MQWeb process stopped!"); + Poco::Data::SQLite::Connector::unregisterConnector(); + ServerApplication::uninitialize(); } From 1874db39022db92bd994a93ba41fd09d76dbdc03 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:07:01 +0200 Subject: [PATCH 47/60] Don't call action when an error occurred in beforeAction --- MQWeb/src/Controller.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index 4ab0a85..e4240b1 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -114,24 +114,24 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H beforeAction(); - if ( response.getStatus() != Poco::Net::HTTPResponse::HTTP_OK - || _data->has("error") ) + // It's possible that already an error occurred in beforeAction. + // So check for it and don't do anything when there was already a problem. + if ( response.getStatus() == Poco::Net::HTTPResponse::HTTP_OK + && !_data->has("error") ) { - //TODO: return error template file or json error - } + const ActionMap& actions = getActions(); + ActionMap::const_iterator it = actions.find(_action); + if ( it == actions.end() ) + { + setResponseStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND, "Invalid action '" + _action + "' specified."); + return; + } - const ActionMap& actions = getActions(); - ActionMap::const_iterator it = actions.find(_action); - if ( it == actions.end() ) - { - setResponseStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND, "Invalid action '" + _action + "' specified."); - return; + ActionFn action = it->second; + (this->*action)(); + + afterAction(); } - - ActionFn action = it->second; - (this->*action)(); - - afterAction(); } From 1b40b06813294e5a4d77281cbb1c6be6709cdcfd Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:07:49 +0200 Subject: [PATCH 48/60] Change error message when no queuemanager pool is returned --- MQWeb/src/MQController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MQWeb/src/MQController.cpp b/MQWeb/src/MQController.cpp index 1d14856..50cc507 100644 --- a/MQWeb/src/MQController.cpp +++ b/MQWeb/src/MQController.cpp @@ -80,7 +80,7 @@ void MQController::beforeAction() Poco::SharedPtr qmgrPool = QueueManagerPoolCache::instance()->getQueueManagerPool(qmgrName); if ( qmgrPool.isNull() ) { - setResponseStatus(Poco::Net::HTTPServerResponse::HTTP_INTERNAL_SERVER_ERROR, "Out of memory: can't create a pool for queuemanager."); + setResponseStatus(Poco::Net::HTTPServerResponse::HTTP_INTERNAL_SERVER_ERROR, "Can't create a pool for queuemanager. Check your configuration or memory limitations."); return; } From 2684242a43e2dc4206716e2076d870b6308c32b6 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:08:12 +0200 Subject: [PATCH 49/60] Add exception handling --- MQWeb/src/QueueManagerDatabaseConfig.cpp | 26 ++------ MQWeb/src/QueueManagerPoolCache.cpp | 85 ++++++++++++++++-------- 2 files changed, 65 insertions(+), 46 deletions(-) diff --git a/MQWeb/src/QueueManagerDatabaseConfig.cpp b/MQWeb/src/QueueManagerDatabaseConfig.cpp index 8c6dee8..98a9348 100644 --- a/MQWeb/src/QueueManagerDatabaseConfig.cpp +++ b/MQWeb/src/QueueManagerDatabaseConfig.cpp @@ -40,17 +40,10 @@ void QueueManagerDatabaseConfig::list(std::vector& arr) const typedef Poco::Tuple Attribute; std::vector attributes; - try + *_session << "SELECT name FROM queuemanagers", into(attributes), now; + for(std::vector::iterator it = attributes.begin(); it != attributes.end(); ++it) { - *_session << "SELECT name FROM queuemanagers", into(attributes), now; - for(std::vector::iterator it = attributes.begin(); it != attributes.end(); ++it) - { - arr.push_back(it->get<0>()); - } - } - catch(Poco::Data::DataException& de) - { - //TODO: logging? or rethrow? + arr.push_back(it->get<0>()); } } @@ -63,17 +56,10 @@ Poco::DynamicStruct QueueManagerDatabaseConfig::read() std::string server; int port = 0; - try - { - *_session << "SELECT channel, server, port FROM queuemanagers WHERE name = :n", into(channel), into(server), into(port), useRef(name), now; + *_session << "SELECT channel, server, port FROM queuemanagers WHERE name = :n", into(channel), into(server), into(port), useRef(name), now; - connectionInformation.insert("channel", channel); - connectionInformation.insert("connection", Poco::format("%s(%d)", server, port)); - } - catch(Poco::Data::DataException& de) - { - //TODO: log or throw it?; - } + connectionInformation.insert("channel", channel); + connectionInformation.insert("connection", Poco::format("%s(%d)", server, port)); return connectionInformation; } diff --git a/MQWeb/src/QueueManagerPoolCache.cpp b/MQWeb/src/QueueManagerPoolCache.cpp index 1a8cbd8..4d53b30 100644 --- a/MQWeb/src/QueueManagerPoolCache.cpp +++ b/MQWeb/src/QueueManagerPoolCache.cpp @@ -21,6 +21,7 @@ #include "Poco/Util/Application.h" #include "Poco/Data/SessionFactory.h" #include "Poco/Data/SQLite/Connector.h" +#include "Poco/Logger.h" #include "MQ/MQSubsystem.h" @@ -87,49 +88,81 @@ QueueManagerPool::Ptr QueueManagerPoolCache::createPool(const std::string& qmgrN // Queuemanagers connection information is stored in a database std::string dbConnector = config.getString("mq.web.config.connector", Poco::Data::SQLite::Connector::KEY); std::string dbConnection = config.getString("mq.web.config.connection"); - qmgrConfig = new QueueManagerDatabaseConfig(qmgrName, dbConnector, dbConnection); + + Poco::Logger& logger = Poco::Logger::get("mq.web"); + poco_information_f3(logger, "Using connector %s with connection %s to get information for queuemanager %s", dbConnector, dbConnection, qmgrName); + + try + { + qmgrConfig = new QueueManagerDatabaseConfig(qmgrName, dbConnector, dbConnection); + } + catch(Poco::Exception& e) + { + logger.log(e); + } } else { qmgrConfig = new QueueManagerDefaultConfig(qmgrName, config); } - factory = new QueueManagerFactory(qmgrName, qmgrConfig->read()); + if (qmgrConfig.isNull()) + { + // Problems with the database configuration? An empty pool will be returned. + return pool; + } + + Poco::Logger& logger = Poco::Logger::get("mq.web"); + + try + { + Poco::DynamicStruct connectionInformation = qmgrConfig->read(); + poco_information_f1(logger, "Connection information: %s", connectionInformation.toString()); + factory = new QueueManagerFactory(qmgrName, connectionInformation); + } + catch(Poco::Exception& e) + { + logger.log(e); + } } else { factory = new QueueManagerFactory(qmgrName); } - std::size_t capacity; - std::size_t peakCapacity; - int idle; - - std::string qmgrConfig = "mq.web.qmgr." + qmgrName; - std::string qmgrPoolCapacity = qmgrConfig + ".pool.capacity"; - if ( !config.has(qmgrPoolCapacity) ) + if (!factory.isNull()) { - qmgrPoolCapacity = "mq.web.pool.capacity"; - } - capacity = config.getInt(qmgrPoolCapacity, 10); + std::size_t capacity; + std::size_t peakCapacity; + int idle; - std::string qmgrPoolPeakCapacity = qmgrConfig + ".pool.peakcapacity"; - if ( !config.has(qmgrPoolPeakCapacity) ) - { - qmgrPoolPeakCapacity = "mq.web.pool.peakcapacity"; - } - peakCapacity = config.getInt(qmgrPoolPeakCapacity, 20); + std::string qmgrConfig = "mq.web.qmgr." + qmgrName; + std::string qmgrPoolCapacity = qmgrConfig + ".pool.capacity"; + if ( !config.has(qmgrPoolCapacity) ) + { + qmgrPoolCapacity = "mq.web.pool.capacity"; + } + capacity = config.getInt(qmgrPoolCapacity, 10); - std::string qmgrPoolIdle = qmgrConfig + ".pool.idle"; - if ( !config.has(qmgrPoolIdle) ) - { - qmgrPoolIdle = "mq.web.pool.idle"; - } - idle = config.getInt(qmgrPoolIdle, 60); + std::string qmgrPoolPeakCapacity = qmgrConfig + ".pool.peakcapacity"; + if ( !config.has(qmgrPoolPeakCapacity) ) + { + qmgrPoolPeakCapacity = "mq.web.pool.peakcapacity"; + } + peakCapacity = config.getInt(qmgrPoolPeakCapacity, 20); + + std::string qmgrPoolIdle = qmgrConfig + ".pool.idle"; + if ( !config.has(qmgrPoolIdle) ) + { + qmgrPoolIdle = "mq.web.pool.idle"; + } + idle = config.getInt(qmgrPoolIdle, 60); + + pool = new QueueManagerPool(factory, capacity, peakCapacity, idle); - pool = new QueueManagerPool(factory, capacity, peakCapacity, idle); + _cache.add(qmgrName, pool); + } - _cache.add(qmgrName, pool); return pool; } From 4e76c8dd427c7ac26c1e96cfd8ad303e20ea0f95 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:08:29 +0200 Subject: [PATCH 50/60] Log the exception --- MQWeb/src/DictionaryCache.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/MQWeb/src/DictionaryCache.cpp b/MQWeb/src/DictionaryCache.cpp index 435b6c5..3a6c6a9 100644 --- a/MQWeb/src/DictionaryCache.cpp +++ b/MQWeb/src/DictionaryCache.cpp @@ -33,12 +33,12 @@ namespace Web { using namespace Poco::Data::Keywords; -DictionaryCache::DictionaryCache() +DictionaryCache::DictionaryCache() { } -DictionaryCache::~DictionaryCache() +DictionaryCache::~DictionaryCache() { } @@ -68,19 +68,20 @@ Poco::SharedPtr DictionaryCache::load(const std::string& name) Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); std::string databaseName = config.getString("mq.web.db", "mqweb.db"); + Poco::Logger& logger = Poco::Logger::get("mq.web"); + poco_trace_f2(logger, "Trying to open SQLite database %s to load dictionary %s", databaseName, name); try { Poco::Data::Session session(Poco::Data::SQLite::Connector::KEY, databaseName); int objectId = 0; - session << "SELECT id FROM objects WHERE name == :n", into(objectId), useRef(name), now; + session << "SELECT id FROM objects WHERE name = :n", into(objectId), useRef(name), now; session << "SELECT a.id, a.name, d.value, d.text FROM object_attributes oa INNER JOIN attributes a ON oa.attribute_id = a.id LEFT JOIN texts d ON oa.attribute_id = d.attribute_id WHERE oa.object_id = ?", use(objectId), into(attributes), now; } catch(Poco::Data::DataException& de) { - Poco::Logger& logger = Poco::Logger::get("mq.web"); logger.log(de); return dictionary; } From fdcd46ab6ea1584aac31419878b823f4982bb7af Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 7 Apr 2017 15:08:49 +0200 Subject: [PATCH 51/60] Add authrec_inq sample --- samples/ruby/authrec_inq.rb | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 samples/ruby/authrec_inq.rb diff --git a/samples/ruby/authrec_inq.rb b/samples/ruby/authrec_inq.rb new file mode 100644 index 0000000..c5bf07c --- /dev/null +++ b/samples/ruby/authrec_inq.rb @@ -0,0 +1,37 @@ +require 'net/http' +require 'json' + +uri = URI('http://localhost:8081/api/authrec/inquire/PIGEON') +http = Net::HTTP.new(uri.host, uri.port) + +begin + req = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'}) + req.body = { + Options: [ + 'Name All Matching', + 'Entity Explicit' + ] + }.to_json + response = http.request(req) +rescue Errno::ECONNREFUSED + puts "Can't connect to MQWeb is it running?" + abort +end + +if response.code == "200" + json = JSON.parse(response.body) + if json["error"] + puts "An MQException occurred: RC= #{json["error"]["reason"]["code"]} - #{json["error"]["reason"]["desc"]}" + else + json["data"].each do |authrec| + authorizations = [] + authrec['AuthorizationList']['value'].each do |authority| + authorizations << authority['text'] + end + output = authorizations.join(', ') + puts "#{authrec['ProfileName']['value']}(#{authrec['ObjectType']['text']}) - #{authrec['EntityName']['value']} : #{output}" + end + end +else + puts "A problem occurred with HTTP request: #{response.code}" +end From 5deec061115bfe8e9e405f44bb60b0281cd9c252 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 9 Jun 2017 12:43:09 +0200 Subject: [PATCH 52/60] Set expiry to PCF command message --- MQ/src/CommandServer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/MQ/src/CommandServer.cpp b/MQ/src/CommandServer.cpp index eb22f60..3416c32 100644 --- a/MQ/src/CommandServer.cpp +++ b/MQ/src/CommandServer.cpp @@ -57,6 +57,7 @@ void CommandServer::sendCommand(PCF::Ptr& command, PCF::Vector& response) response.clear(); command->setReplyToQueue(_replyQ.name()); + command->setExpiry(1200000); _commandQ.put(*command, MQPMO_NO_SYNCPOINT); long wait = 600000; From 3ce8a2e908e236965e2ece3a55992c1b747ec1a6 Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 12 Jun 2017 13:47:56 +0200 Subject: [PATCH 53/60] Remove some warnings --- MQ/src/Queue.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MQ/src/Queue.cpp b/MQ/src/Queue.cpp index 876ddc4..65a3114 100644 --- a/MQ/src/Queue.cpp +++ b/MQ/src/Queue.cpp @@ -77,12 +77,12 @@ void Queue::put(Message& msg, MQLONG options) MQPMO pmo = { MQPMO_DEFAULT }; pmo.Options = options; - int size = msg.buffer().size(); + size_t size = msg.buffer().size(); MQ::MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); try { - mqSystem.functions().put(_qmgr.handle(), _handle, msg.md(), &pmo, size, size > 0 ? msg.buffer().data() : NULL); + mqSystem.functions().put(_qmgr.handle(), _handle, msg.md(), &pmo, (MQLONG) size, size > 0 ? msg.buffer().data() : NULL); } catch(MQException& mqe) { @@ -118,11 +118,11 @@ void Queue::get(Message& msg, MQLONG options, long wait) } gmo.Options |= options; - int size = msg.buffer().size(); + size_t size = msg.buffer().size(); MQ::MQSubsystem& mqSystem = Poco::Util::Application::instance().getSubsystem(); try { - mqSystem.functions().get(_qmgr.handle(), _handle, msg.md(), &gmo, size, size > 0 ? msg.buffer().data() : NULL, &msg._dataLength); + mqSystem.functions().get(_qmgr.handle(), _handle, msg.md(), &gmo, (MQLONG) size, size > 0 ? msg.buffer().data() : NULL, &msg._dataLength); } catch(MQException& mqe) { From 4c67a4b15a61bee1a1105f5e73d2a312eb6d4ce7 Mon Sep 17 00:00:00 2001 From: fbraem Date: Mon, 12 Jun 2017 13:57:12 +0200 Subject: [PATCH 54/60] PCF class: remove inheritance of Message, use encapsulation. --- MQ/include/MQ/Message.h | 2 + MQ/include/MQ/PCF.h | 43 +++++----- MQ/src/CommandServer.cpp | 23 +++-- MQ/src/PCF.cpp | 145 ++++++++++++++++---------------- MQWeb/src/MessageController.cpp | 57 ++++++------- 5 files changed, 135 insertions(+), 135 deletions(-) diff --git a/MQ/include/MQ/Message.h b/MQ/include/MQ/Message.h index 161742b..f478786 100644 --- a/MQ/include/MQ/Message.h +++ b/MQ/include/MQ/Message.h @@ -258,6 +258,8 @@ class Message void setUser(const std::string& user); /// Sets the name of the user + typedef Poco::SharedPtr Ptr; + private: Buffer _buffer; diff --git a/MQ/include/MQ/PCF.h b/MQ/include/MQ/PCF.h index 92855f4..22c4728 100644 --- a/MQ/include/MQ/PCF.h +++ b/MQ/include/MQ/PCF.h @@ -29,21 +29,18 @@ #include #include "Poco/DateTime.h" - #include "MQ/Message.h" namespace MQ { -class PCF : public Message +class PCF /// Represents a Programmable Command Format (PCF) message. { public: + PCF(Message::Ptr message, bool zos = false); + /// Creates a PCF from a message - explicit PCF(bool zos = false); - /// Creates an empty PCF message - /// Use this constructor to get a PCF message from a queue. - - explicit PCF(int cmd, bool zos = false); + PCF(int cmd, bool zos = false); /// Creates an empty PCF message for a command /// Use this constructor to put a PFC on a queue. @@ -140,10 +137,7 @@ class PCF : public Message std::vector getParameters() const; /// Returns a vector with all parameter ids. - void init(); - /// Initializes the internal PCF structures. Call this when you retrieved - /// a PFC message from a queue and before you start retrieving information - /// from it. + Message::Ptr message() const; MQLONG optParameterNum(MQLONG parameter, MQLONG def = 0) const; /// Returns the numeric value of a parameter. @@ -159,9 +153,13 @@ class PCF : public Message typedef std::vector Vector; + static Ptr create(Message::Ptr message, bool zos = false); + private: - std::map _pointers; + Message::Ptr _message; + + std::map _pointers; bool _zos; @@ -179,24 +177,24 @@ class PCF : public Message inline void PCF::addParameterList(MQLONG parameter, const std::vector& values) { - addParameterList(parameter, (MQLONG*) &values[0], values.size()); + addParameterList(parameter, (MQLONG*) &values[0], (unsigned int) values.size()); } inline int PCF::getCommand() const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); return header->Command; } inline int PCF::getCompletionCode() const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); return header->CompCode; } inline int PCF::getReasonCode() const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); return header->Reason; } @@ -207,7 +205,7 @@ inline bool PCF::isByteString(MQLONG parameter) const inline bool PCF::isExtendedResponse() const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); return header->Type == MQCFT_XR_SUMMARY; } @@ -219,7 +217,7 @@ inline bool PCF::hasParameter(MQLONG parameter) const inline bool PCF::isLast() const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); return header->Control == MQCFC_LAST; } @@ -246,15 +244,20 @@ inline bool PCF::isStringList(MQLONG parameter) const inline bool PCF::isType(MQLONG parameter, MQLONG type) const { - std::map::const_iterator it = _pointers.find(parameter); + std::map::const_iterator it = _pointers.find(parameter); if ( it != _pointers.end() ) { - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); return *pcfType == type; } return false; } +inline Message::Ptr PCF::message() const +{ + return _message; +} + } // MQ namespace #endif //_MQ_PCF_h diff --git a/MQ/src/CommandServer.cpp b/MQ/src/CommandServer.cpp index 3416c32..04d37ca 100644 --- a/MQ/src/CommandServer.cpp +++ b/MQ/src/CommandServer.cpp @@ -56,19 +56,18 @@ void CommandServer::sendCommand(PCF::Ptr& command, PCF::Vector& response) { response.clear(); - command->setReplyToQueue(_replyQ.name()); - command->setExpiry(1200000); - _commandQ.put(*command, MQPMO_NO_SYNCPOINT); + command->message()->setReplyToQueue(_replyQ.name()); + command->message()->setExpiry(1200000); + _commandQ.put(*command->message(), MQPMO_NO_SYNCPOINT); long wait = 600000; - PCF::Ptr msgResponse; + Message::Ptr msgResponse; bool keepRunning = true; while(keepRunning) { - msgResponse = new PCF(_qmgr.zos()); - msgResponse->correlationId()->set(command->messageId()); - msgResponse->buffer().resize(REPLY_MESSAGE_LEN, false); + msgResponse = new Message(REPLY_MESSAGE_LEN); + msgResponse->correlationId()->set(command->message()->messageId()); try { @@ -86,7 +85,7 @@ void CommandServer::sendCommand(PCF::Ptr& command, PCF::Vector& response) msgResponse->buffer().resize(msgResponse->dataLength(), false); msgResponse->clear(); - msgResponse->correlationId()->set(command->messageId()); + msgResponse->correlationId()->set(command->message()->messageId()); _replyQ.get(*msgResponse.get(), MQGMO_CONVERT | MQGMO_NO_SYNCPOINT); } else @@ -104,12 +103,12 @@ void CommandServer::sendCommand(PCF::Ptr& command, PCF::Vector& response) } } wait = 100; - msgResponse->buffer().resize(msgResponse->dataLength()); - msgResponse->init(); - response.push_back(msgResponse); + msgResponse->buffer().resize(msgResponse->dataLength()); + PCF::Ptr pcf = new PCF(msgResponse, _qmgr.zos()); + response.push_back(pcf); - if ( ! _qmgr.zos() && msgResponse->isLast() ) + if ( ! _qmgr.zos() && pcf->isLast() ) { keepRunning = false; } diff --git a/MQ/src/PCF.cpp b/MQ/src/PCF.cpp index b8872c9..92847e9 100644 --- a/MQ/src/PCF.cpp +++ b/MQ/src/PCF.cpp @@ -27,22 +27,33 @@ namespace MQ { -PCF::PCF(bool zos) - : Message() - , _zos(zos) +PCF::Ptr PCF::create(Message::Ptr message, bool zos) { + return new PCF(message, zos); } +PCF::PCF(Message::Ptr message, bool zos) + : _message(message), _zos(zos) +{ + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); + int pos = MQCFH_STRUC_LENGTH; + for(int i = 0; i < header->ParameterCount; i++) + { + MQLONG *pcfType = (MQLONG*) _message->buffer().data(pos); + _pointers[pcfType[2]] = pos; + pos += pcfType[1]; + } +} PCF::PCF(int cmd, bool zos) - : Message() - , _zos(zos) + : _zos(zos) { - setFormat(MQFMT_ADMIN); - setType(MQMT_REQUEST); - setPersistence(MQPER_NOT_PERSISTENT); - buffer().resize(MQCFH_STRUC_LENGTH); - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); + _message = new Message(MQCFH_STRUC_LENGTH); + _message->setFormat(MQFMT_ADMIN); + _message->setType(MQMT_REQUEST); + _message->setPersistence(MQPER_NOT_PERSISTENT); + //buffer().resize(MQCFH_STRUC_LENGTH); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); header->StrucLength = MQCFH_STRUC_LENGTH; if ( _zos ) { @@ -60,43 +71,29 @@ PCF::PCF(int cmd, bool zos) header->ParameterCount = 0; } - PCF::~PCF() { } -void PCF::init() -{ - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); - int pos = MQCFH_STRUC_LENGTH; - for(int i = 0; i < header->ParameterCount; i++) - { - MQLONG *pcfType = (MQLONG*) buffer().data(pos); - _pointers[pcfType[2]] = pos; - pos += pcfType[1]; - } -} - - std::string PCF::getParameterString(MQLONG parameter) const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(); - std::map::const_iterator it = _pointers.find(parameter); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); + std::map::const_iterator it = _pointers.find(parameter); if ( it == _pointers.end() ) throw Poco::NotFoundException(parameter); - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); if ( *pcfType == MQCFT_STRING ) { - MQCFST* pcfParam = (MQCFST*) buffer().data(it->second); + MQCFST* pcfParam = (MQCFST*) _message->buffer().data(it->second); std::string result(pcfParam->String, pcfParam->StringLength); if ( result[0] == '\0' ) result.resize(0); return Poco::trimRightInPlace(result); } else if ( *pcfType == MQCFT_BYTE_STRING ) { - MQCFBS* pcfParam = (MQCFBS*) buffer().data(it->second); + MQCFBS* pcfParam = (MQCFBS*) _message->buffer().data(it->second); return Buffer((const MQBYTE*) pcfParam->String, pcfParam->StringLength).toHex(); } @@ -105,15 +102,15 @@ std::string PCF::getParameterString(MQLONG parameter) const Buffer::Ptr PCF::getParameterByteString(MQLONG parameter) const { - MQCFH* header = (MQCFH*)(MQBYTE*) buffer().data(0); - std::map::const_iterator it = _pointers.find(parameter); + MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(0); + std::map::const_iterator it = _pointers.find(parameter); if ( it == _pointers.end() ) throw Poco::NotFoundException(parameter); - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); if ( *pcfType == MQCFT_BYTE_STRING ) { - MQCFBS* pcfParam = (MQCFBS*) buffer().data(it->second); + MQCFBS* pcfParam = (MQCFBS*) _message->buffer().data(it->second); return new Buffer(pcfParam->String, pcfParam->StringLength); } @@ -155,14 +152,14 @@ Poco::DateTime PCF::getParameterDate(MQLONG dateParameter, MQLONG timeParameter) MQLONG PCF::getParameterNum(MQLONG parameter) const { - std::map::const_iterator it = _pointers.find(parameter); + std::map::const_iterator it = _pointers.find(parameter); if ( it == _pointers.end() ) throw Poco::NotFoundException(parameter); - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); if ( *pcfType == MQCFT_INTEGER ) { - MQCFIN* pcfParam = (MQCFIN*) buffer().data(it->second); + MQCFIN* pcfParam = (MQCFIN*) _message->buffer().data(it->second); return pcfParam->Value; } @@ -171,15 +168,15 @@ MQLONG PCF::getParameterNum(MQLONG parameter) const std::vector PCF::getParameterNumList(MQLONG parameter) const { - std::map::const_iterator it = _pointers.find(parameter); + std::map::const_iterator it = _pointers.find(parameter); if ( it == _pointers.end() ) throw Poco::NotFoundException(parameter); - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); if ( *pcfType == MQCFT_INTEGER_LIST ) { std::vector list; - MQCFIL* pcfParam = (MQCFIL*) buffer().data(it->second); + MQCFIL* pcfParam = (MQCFIL*) _message->buffer().data(it->second); for(int i = 0; i < pcfParam->Count; ++i) { list.push_back(pcfParam->Values[i]); @@ -192,15 +189,15 @@ std::vector PCF::getParameterNumList(MQLONG parameter) const std::vector PCF::getParameterStringList(MQLONG parameter) const { - std::map::const_iterator it = _pointers.find(parameter); + std::map::const_iterator it = _pointers.find(parameter); if ( it == _pointers.end() ) throw Poco::NotFoundException(parameter); - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); if ( *pcfType == MQCFT_STRING_LIST ) { std::vector list; - MQCFSL* pcfParam = (MQCFSL*) buffer().data(it->second); + MQCFSL* pcfParam = (MQCFSL*) _message->buffer().data(it->second); for(int i = 0; i < pcfParam->Count; ++i) { std::string result(pcfParam->Strings, i * pcfParam->StringLength, pcfParam->StringLength); @@ -229,94 +226,94 @@ MQLONG PCF::optParameterNum(MQLONG parameter, MQLONG def) const void PCF::addParameter(MQLONG parameter, const std::string& value) { - MQLONG structLength = ((MQCFST_STRUC_LENGTH_FIXED + value.length()) / 4 + 1) * 4; - _pointers[parameter] = buffer().size(); - buffer().resize(buffer().size() + structLength); - MQCFST* pcfParam = (MQCFST*) buffer().data(_pointers[parameter]); + MQLONG structLength = ((MQCFST_STRUC_LENGTH_FIXED + (MQLONG) value.length()) / 4 + 1) * 4; + _pointers[parameter] = _message->buffer().size(); + _message->buffer().resize(_message->buffer().size() + structLength); + MQCFST* pcfParam = (MQCFST*) _message->buffer().data(_pointers[parameter]); pcfParam->Type = MQCFT_STRING; pcfParam->StrucLength = structLength; pcfParam->Parameter = parameter; pcfParam->CodedCharSetId = MQCCSI_DEFAULT; - pcfParam->StringLength = value.length(); + pcfParam->StringLength = (MQLONG) value.length(); memcpy(pcfParam->String, value.c_str(), pcfParam->StringLength); - MQCFH* header = (MQCFH*) (MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*) (MQBYTE*) _message->buffer().data(); header->ParameterCount++; } void PCF::addParameter(MQLONG parameter, MQLONG value) { - _pointers[parameter] = buffer().size(); - buffer().resize(buffer().size() + MQCFIN_STRUC_LENGTH); - MQCFIN* pcfParam = (MQCFIN*) buffer().data(_pointers[parameter]); + _pointers[parameter] = _message->buffer().size(); + _message->buffer().resize(_message->buffer().size() + MQCFIN_STRUC_LENGTH); + MQCFIN* pcfParam = (MQCFIN*) _message->buffer().data(_pointers[parameter]); pcfParam->Type = MQCFT_INTEGER; pcfParam->StrucLength = MQCFIN_STRUC_LENGTH; pcfParam->Parameter = parameter; pcfParam->Value = value; - MQCFH* header = (MQCFH*) (MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*) (MQBYTE*) _message->buffer().data(); header->ParameterCount++; } void PCF::addParameter(MQLONG parameter, Buffer::Ptr value) { - MQLONG structLength = ((MQCFST_STRUC_LENGTH_FIXED + value->size()) / 4 + 1) * 4; - _pointers[parameter] = buffer().size(); - buffer().resize(buffer().size() + structLength); - MQCFBS* pcfParam = (MQCFBS*) buffer().data(_pointers[parameter]); + MQLONG structLength = ((MQCFST_STRUC_LENGTH_FIXED + (MQLONG) value->size()) / 4 + 1) * 4; + _pointers[parameter] = _message->buffer().size(); + _message->buffer().resize(_message->buffer().size() + structLength); + MQCFBS* pcfParam = (MQCFBS*) _message->buffer().data(_pointers[parameter]); pcfParam->Type = MQCFT_BYTE_STRING; pcfParam->StrucLength = structLength; pcfParam->Parameter = parameter; - pcfParam->StringLength = value->size(); + pcfParam->StringLength = (MQLONG) value->size(); memcpy(pcfParam->String, value->data(), pcfParam->StringLength); - MQCFH* header = (MQCFH*) (MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*) (MQBYTE*) _message->buffer().data(); header->ParameterCount++; } void PCF::addParameterList(MQLONG parameter, MQLONG *values, unsigned int count) { int strucLength = MQCFIL_STRUC_LENGTH_FIXED + count * sizeof(MQLONG); - _pointers[parameter] = buffer().size(); - buffer().resize(buffer().size() + strucLength); - MQCFIL *pcfIntegerList = (MQCFIL *) buffer().data(_pointers[parameter]); + _pointers[parameter] = _message->buffer().size(); + _message->buffer().resize(_message->buffer().size() + strucLength); + MQCFIL *pcfIntegerList = (MQCFIL *) _message->buffer().data(_pointers[parameter]); pcfIntegerList->Count = count; pcfIntegerList->Type = MQCFT_INTEGER_LIST; pcfIntegerList->StrucLength = strucLength; pcfIntegerList->Parameter = parameter; for(int i = 0; i < count; ++i) pcfIntegerList->Values[i] = values[i]; - MQCFH* header = (MQCFH*) (MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*) (MQBYTE*) _message->buffer().data(); header->ParameterCount++; } void PCF::addFilter(MQLONG parameter, MQLONG op, const std::string& value) { - MQLONG strucLength = ((MQCFSF_STRUC_LENGTH_FIXED + value.length()) / 4 + 1) * 4; - _pointers[parameter] = buffer().size(); - buffer().resize(buffer().size() + strucLength); - MQCFSF* pcfFilter = (MQCFSF*) buffer().data(_pointers[parameter]); + MQLONG strucLength = ((MQCFSF_STRUC_LENGTH_FIXED + (MQLONG) value.length()) / 4 + 1) * 4; + _pointers[parameter] = _message->buffer().size(); + _message->buffer().resize(_message->buffer().size() + strucLength); + MQCFSF* pcfFilter = (MQCFSF*) _message->buffer().data(_pointers[parameter]); pcfFilter->Type = MQCFT_STRING_FILTER; pcfFilter->StrucLength = strucLength; pcfFilter->Parameter = parameter; pcfFilter->Operator = op; pcfFilter->CodedCharSetId = MQCCSI_DEFAULT; - pcfFilter->FilterValueLength = value.length(); + pcfFilter->FilterValueLength = (MQLONG) value.length(); memcpy(pcfFilter->FilterValue, value.c_str(), pcfFilter->FilterValueLength); - MQCFH* header = (MQCFH*) (MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*) (MQBYTE*) _message->buffer().data(); header->ParameterCount++; } void PCF::addFilter(MQLONG parameter, MQLONG op, MQLONG value) { - _pointers[parameter] = buffer().size(); - buffer().resize(buffer().size() + MQCFIF_STRUC_LENGTH); - MQCFIF* pcfFilter = (MQCFIF*) buffer().data(_pointers[parameter]); + _pointers[parameter] = _message->buffer().size(); + _message->buffer().resize(_message->buffer().size() + MQCFIF_STRUC_LENGTH); + MQCFIF* pcfFilter = (MQCFIF*) _message->buffer().data(_pointers[parameter]); pcfFilter->Type = MQCFT_INTEGER_FILTER; pcfFilter->StrucLength = MQCFIF_STRUC_LENGTH; pcfFilter->Parameter = parameter; pcfFilter->Operator = op; pcfFilter->FilterValue = value; - MQCFH* header = (MQCFH*) (MQBYTE*) buffer().data(); + MQCFH* header = (MQCFH*) (MQBYTE*) _message->buffer().data(); header->ParameterCount++; } @@ -324,9 +321,9 @@ void PCF::addFilter(MQLONG parameter, MQLONG op, MQLONG value) std::vector PCF::getParameters() const { std::vector parameters; - for(std::map::const_iterator it = _pointers.begin(); it != _pointers.end(); it++) + for(std::map::const_iterator it = _pointers.begin(); it != _pointers.end(); it++) { - MQLONG *pcfType = (MQLONG*) buffer().data(it->second); + MQLONG *pcfType = (MQLONG*) _message->buffer().data(it->second); parameters.push_back(pcfType[2]); } return parameters; diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 739c70a..70bf2e9 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -29,6 +29,7 @@ #include "MQ/Web/MessageController.h" #include "MQ/Web/MQMapper.h" #include "MQ/MQException.h" +#include "MQ/PCF.h" #include "MQ/Message.h" #include "MQ/QueueManager.h" #include "MQ/Queue.h" @@ -228,15 +229,15 @@ void MessageController::browse() int count = 0; while(limit == -1 || count < limit) { - Message msg(maxMessageSize); + Message::Ptr msg = new Message(maxMessageSize); if ( ! messageId.empty() ) { - msg.messageId()->fromHex(messageId); + msg->messageId()->fromHex(messageId); } try { - q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2, 0); + q.get(*msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2, 0); } catch(MQException& mqe) { @@ -247,14 +248,14 @@ void MessageController::browse() } else if ( mqe.reason() == MQRC_TRUNCATED_MSG_FAILED ) { - if ( msg.getFormat().compare(MQFMT_EVENT ) == 0 ) { + if ( msg->getFormat().compare(MQFMT_EVENT ) == 0 ) { // ignore size limit for event messages and retry to get it with the // real length - msg.buffer().resize(msg.dataLength(), false); - msg.clear(); + msg->buffer().resize(msg->dataLength(), false); + msg->clear(); try { - q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); + q.get(*msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); } catch(MQException& mqe2) { @@ -264,15 +265,15 @@ void MessageController::browse() } } } - else if ( msg.getFormat().compare(MQFMT_XMIT_Q_HEADER) == 0 ) + else if ( msg->getFormat().compare(MQFMT_XMIT_Q_HEADER) == 0 ) { // ignore size limit for xmitq messages and retry to get it with at least the // length of the xmitq header - msg.buffer().resize(sizeof(MQXQH), false); - msg.clear(); + msg->buffer().resize(sizeof(MQXQH), false); + msg->clear(); try { - q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); + q.get(*msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); } catch(MQException& mqe2) { @@ -282,15 +283,15 @@ void MessageController::browse() } } } - else if ( msg.getFormat().compare(MQFMT_DEAD_LETTER_HEADER) == 0 ) + else if ( msg->getFormat().compare(MQFMT_DEAD_LETTER_HEADER) == 0 ) { // ignore size limit for dlh messages and retry to get it with at least the // length of the dlh header - msg.buffer().resize(sizeof(MQDLH), false); - msg.clear(); + msg->buffer().resize(sizeof(MQDLH), false); + msg->clear(); try { - q.get(msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); + q.get(*msg, MQGMO_BROWSE_NEXT | MQGMO_PROPERTIES_FORCE_MQRFH2 | MQGMO_ACCEPT_TRUNCATED_MSG); } catch(MQException& mqe2) { @@ -313,13 +314,13 @@ void MessageController::browse() count++; Poco::JSON::Object::Ptr jsonMessage = new Poco::JSON::Object(); - mapMessageToJSON(msg, *jsonMessage); + mapMessageToJSON(*msg, *jsonMessage); - if ( msg.getFormat().compare(MQFMT_DEAD_LETTER_HEADER) == 0 ) + if ( msg->getFormat().compare(MQFMT_DEAD_LETTER_HEADER) == 0 ) { - if ( msg.buffer().size() >= sizeof(MQDLH) ) + if ( msg->buffer().size() >= sizeof(MQDLH) ) { - MQDLH* dlh = (MQDLH*) msg.buffer().data(); + MQDLH* dlh = (MQDLH*) msg->buffer().data(); Poco::JSON::Object::Ptr jsonDLH = new Poco::JSON::Object(); jsonMessage->set("dlh", jsonDLH); jsonDLH->set("Version", dlh->Version); @@ -347,11 +348,9 @@ void MessageController::browse() jsonDLH->set("PutTime", putTime); } } - else if ( msg.getFormat().compare(MQFMT_EVENT) == 0 ) + else if ( msg->getFormat().compare(MQFMT_EVENT) == 0 ) { - PCF pcfEvent; - pcfEvent.buffer().set(msg.buffer()); - pcfEvent.init(); + PCF pcfEvent(msg); Poco::JSON::Object::Ptr jsonEvent = new Poco::JSON::Object(); jsonMessage->set("event", jsonEvent); @@ -385,17 +384,17 @@ void MessageController::browse() poco_assert_dbg(! dictionary.isNull()); dictionary->mapToJSON(pcfEvent, jsonEvent, false); } - else if ( msg.getFormat().compare(MQFMT_STRING) == 0 ) + else if ( msg->getFormat().compare(MQFMT_STRING) == 0 ) { - if ( msg.dataLength() < msg.buffer().size() ) + if ( msg->dataLength() < msg->buffer().size() ) { - msg.buffer().resize(msg.dataLength()); + msg->buffer().resize(msg->dataLength()); } - jsonMessage->set("data", msg.buffer().toString()); + jsonMessage->set("data", msg->buffer().toString()); } - else if ( msg.getFormat().compare(MQFMT_RF_HEADER_2) == 0 ) + else if ( msg->getFormat().compare(MQFMT_RF_HEADER_2) == 0 ) { - MQBYTE* begin = (MQBYTE*) msg.buffer().data(); + MQBYTE* begin = (MQBYTE*) msg->buffer().data(); MQRFH2* rfh2 = (MQRFH2*) begin; Poco::JSON::Object::Ptr jsonRfh2 = new Poco::JSON::Object(); jsonMessage->set("rfh2", jsonRfh2); From 40ef2ff773a6a96208eb700f45c0b37925359009 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 28 Jul 2017 10:31:28 +0200 Subject: [PATCH 55/60] =?UTF-8?q?Solve=20error:=20no=20matching=20function?= =?UTF-8?q?=20for=20call=20to=20=E2=80=98make=5Fpair'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MQWeb/src/Dictionary.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MQWeb/src/Dictionary.cpp b/MQWeb/src/Dictionary.cpp index 174f824..8ab1da2 100644 --- a/MQWeb/src/Dictionary.cpp +++ b/MQWeb/src/Dictionary.cpp @@ -35,8 +35,8 @@ Dictionary::~Dictionary() Dictionary& Dictionary::operator()(MQLONG id, const std::string& name) { - _idMap.insert(std::make_pair(id, name)); - _nameMap.insert(std::make_pair(name, id)); + _idMap.insert(std::make_pair(id, name)); + _nameMap.insert(std::make_pair(name, id)); return *this; } @@ -44,10 +44,10 @@ Dictionary& Dictionary::operator()(MQLONG id, const std::string& name) Dictionary& Dictionary::operator()(MQLONG id, const std::string& name, const TextMap& textMap) { - _idMap.insert(std::make_pair(id, name)); - _nameMap.insert(std::make_pair(name, id)); + _idMap.insert(std::make_pair(id, name)); + _nameMap.insert(std::make_pair(name, id)); - _textMaps.insert(std::make_pair(id, textMap)); + _textMaps.insert(std::make_pair(id, textMap)); return *this; } From 24c0aebe8a38425c8be010de0830d3db2f84f16d Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 28 Jul 2017 13:18:29 +0200 Subject: [PATCH 56/60] Update for IBM MQ 9.0 --- MQDictionary/src/Application.cpp | 53 ++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/MQDictionary/src/Application.cpp b/MQDictionary/src/Application.cpp index acfd997..996c8e9 100644 --- a/MQDictionary/src/Application.cpp +++ b/MQDictionary/src/Application.cpp @@ -45,6 +45,13 @@ Dictionary queueManagerDictionary = Dictionary() ) (MQCA_ALTERATION_DATE, "AlterationDate") (MQCA_ALTERATION_TIME, "AlterationTime") +#ifdef MQIA_AMQP_CAPABILITY + (MQIA_AMQP_CAPABILITY, "AMQPCapability", TextMapInitializer + (1, "Yes") + (0, "No") + ) +#endif + (MQIA_AUTHORITY_EVENT, "AuthorityEvent", TextMapInitializer (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") @@ -53,6 +60,9 @@ Dictionary queueManagerDictionary = Dictionary() (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) +#ifdef MQCA_CERT_LABEL + (MQCA_CERT_LABEL, "CertificcateLabel") +#endif #ifdef MQIA_CERT_VAL_POLICY (MQIA_CERT_VAL_POLICY, "CertificateValPolicy", TextMapInitializer (MQ_CERT_VAL_POLICY_ANY, "Policy Any") @@ -157,6 +167,15 @@ Dictionary queueManagerDictionary = Dictionary() (MQCMDL_LEVEL_700, "Level 700") (MQCMDL_LEVEL_701, "Level 701") (MQCMDL_LEVEL_710, "Level 710") +#ifdef MQCMDL_LEVEL_750 + (MQCMDL_LEVEL_750, "Level 750") +#endif +#ifdef MQCMDL_LEVEL_800 + (MQCMDL_LEVEL_800, "Level 800") +#endif +#ifdef MQCMDL_LEVEL_802 + (MQCMDL_LEVEL_802, "Level 802") +#endif ) (MQIA_CMD_SERVER_CONTROL, "CommandServerControl", TextMapInitializer (MQSVC_CONTROL_MANUAL, "Manual") @@ -166,6 +185,9 @@ Dictionary queueManagerDictionary = Dictionary() (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) +#ifdef MQCA_CONN_AUTH + (MQCA_CONN_AUTH, "ConnAuth") +#endif (MQCA_CREATION_DATE, "CreationDate") (MQCA_CREATION_TIME, "CreationTime") (MQCA_CUSTOM, "Custom") @@ -207,6 +229,22 @@ Dictionary queueManagerDictionary = Dictionary() (MQEVR_DISABLED, "Disabled") (MQEVR_ENABLED, "Enabled") ) +#ifdef MQIA_MEDIA_IMAGE_INTERVAL + (MQIA_MEDIA_IMAGE_INTERVAL, "ImageInterval") + (MQIA_MEDIA_IMAGE_LOG_LENGTH, "ImageLogLength") + (MQIA_MEDIA_IMAGE_RECOVER_OBJ, "ImageRecoverObject", TextMapInitializer + (MQIMGRCOV_NO, "No") + (MQIMGRCOV_YES, "Yes") + ) + (MQIA_MEDIA_IMAGE_RECOVER_Q, "ImageRecoverQueue", TextMapInitializer + (MQIMGRCOV_NO, "No") + (MQIMGRCOV_YES, "Yes") + ) + (MQIA_MEDIA_IMAGE_SCHEDULING, "ImageSchedule", TextMapInitializer + (MQMEDIMGSCHED_AUTO, "Auto") + (MQMEDIMGSCHED_MANUAL, "Manual") + ) +#endif (MQIA_INTRA_GROUP_QUEUING, "IntraGroupQueueing", TextMapInitializer (MQIGQ_DISABLED, "Disabled") (MQIGQ_ENABLED, "Enabled") @@ -253,6 +291,9 @@ Dictionary queueManagerDictionary = Dictionary() ) (MQIA_PLATFORM, "Platform", TextMapInitializer (MQPL_UNIX, "UNIX") +#ifdef MQPL_APPLIANCE + (MQPL_APPLIANCE, "IBM MQ Appliance") +#endif (MQPL_NSK, "Compaq NonStop Kernel") (MQPL_OS400, "i5/OS") (MQPL_VMS, "HP OpenVMS") @@ -330,6 +371,12 @@ Dictionary queueManagerDictionary = Dictionary() (MQSCYC_UPPER, "Upper") (MQSCYC_MIXED, "Mixed") ) +#ifdef MQIA_REVERSE_DNS_LOOKUP + (MQIA_REVERSE_DNS_LOOKUP, "RevDns", TextMapInitializer + (MQRDNS_DISABLED, "Disabled") + (MQRDNS_ENABLED, "Enabled") + ) +#endif (MQIA_SHARED_Q_Q_MGR_NAME, "SharedQQmgrName", TextMapInitializer (MQSQQM_USE, "Use") (MQSQQM_IGNORE, "Ignore") @@ -1428,7 +1475,7 @@ Dictionary topicStatusDictionary = Dictionary() (MQIA_PUB_SCOPE) #ifdef MQIA_USE_DEAD_LETTER_Q (MQIA_USE_DEAD_LETTER_Q) -#endif +#endif (MQBACF_SUB_ID) (MQCACF_SUB_USER_ID, "SubscriptionUserId") (MQIACF_DURABLE_SUBSCRIPTION, "Durable", TextMapInitializer @@ -2889,7 +2936,7 @@ void store(Poco::Data::Session& session, int oid, const std::string& name, const for(; it != dict.end(); ++it) { objectAttributes.push_back(ObjectAttribute(oid, it->first)); - + if ( it->second.empty() ) continue; // Empty attributes are ignored, we assume they are already defined ... @@ -2928,7 +2975,7 @@ void store(Poco::Data::Session& session, int oid, const std::string& name, const { std::cout << "No attributes attached to the objecttype " << name << ". Please check !!!" << std::endl; } - + std::cout << "Insert Attributes" << std::endl; if ( attributes.size() > 0 ) { From 86e51dfcdb27ef0c9fe4010bcf8e026bc9bb65d4 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 28 Jul 2017 15:13:19 +0200 Subject: [PATCH 57/60] More MQ 9.0.0 attributes --- MQDictionary/src/Application.cpp | 55 +++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/MQDictionary/src/Application.cpp b/MQDictionary/src/Application.cpp index 996c8e9..20097f2 100644 --- a/MQDictionary/src/Application.cpp +++ b/MQDictionary/src/Application.cpp @@ -61,7 +61,7 @@ Dictionary queueManagerDictionary = Dictionary() (MQEVR_ENABLED, "Enabled") ) #ifdef MQCA_CERT_LABEL - (MQCA_CERT_LABEL, "CertificcateLabel") + (MQCA_CERT_LABEL, "Certificatelabel") #endif #ifdef MQIA_CERT_VAL_POLICY (MQIA_CERT_VAL_POLICY, "CertificateValPolicy", TextMapInitializer @@ -431,6 +431,12 @@ Dictionary queueManagerDictionary = Dictionary() ; Dictionary queueManagerStatusDictionary = Dictionary() +#ifdef MQCACF_ARCHIVE_LOG_EXTENT_NAME + (MQCACF_ARCHIVE_LOG_EXTENT_NAME, "ArchiveLog") +#endif +#ifdef MQIACF_ARCHIVE_LOG_SIZE + (MQIACF_ARCHIVE_LOG_SIZE, "ArchiveLogSize") +#endif (MQIACF_CHINIT_STATUS, "ChannelInitiatorStatus", TextMapInitializer (MQSVC_STATUS_STOPPED, "Stopped") (MQSVC_STATUS_STARTING, "Starting") @@ -450,8 +456,24 @@ Dictionary queueManagerStatusDictionary = Dictionary() (MQCA_INSTALLATION_DESC, "InstallationDesc") (MQCA_INSTALLATION_NAME, "InstallationName") (MQCA_INSTALLATION_PATH, "InstallationPath") +#ifdef MQIACF_LDAP_CONNECTION_STATUS + (MQIACF_LDAP_CONNECTION_STATUS, "LDAPConnectionStatus", TextMapInitializer + (MQLDAPC_CONNECTED, "Connected") + (MQLDAPC_ERROR, "Error") + (MQLDAPC_INACTIVE, "Inactive") + ) +#endif +#ifdef MQIACF_LOG_IN_USE + (MQIACF_LOG_IN_USE, "LogInUse") +#endif (MQCACF_LOG_PATH, "LogPath") +#ifdef MQIACF_LOG_UTILIZATION + (MQIACF_LOG_UTILIZATION, "LogUtilization") +#endif (MQCACF_MEDIA_LOG_EXTENT_NAME, "MediaRecoveryLog") +#ifdef MQIACF_MEDIA_LOG_SIZE + (MQIACF_MEDIA_LOG_SIZE, "MediaRecoveryLogSize") +#endif (MQCA_Q_MGR_NAME) (MQIACF_Q_MGR_STATUS, "QMgrStatus", TextMapInitializer (MQQMSTA_STARTING, "Starting") @@ -459,6 +481,12 @@ Dictionary queueManagerStatusDictionary = Dictionary() (MQQMSTA_QUIESCING, "Quiescing") ) (MQCACF_RESTART_LOG_EXTENT_NAME, "RestartRecoveryLog") +#ifdef MQIACF_RESTART_LOG_SIZE + (MQIACF_RESTART_LOG_SIZE, "RestartRecoveryLogSize") +#endif +#ifdef MQIACF_REUSABLE_LOG_SIZE + (MQIACF_REUSABLE_LOG_SIZE, "ReuasableLogSize") +#endif (MQCACF_Q_MGR_START_DATE, "StartDate") (MQCACF_Q_MGR_START_TIME, "StartTime") (MQIACF_PERMIT_STANDBY, "PermitStandby", TextMapInitializer @@ -538,6 +566,13 @@ Dictionary queueDictionary = Dictionary() (MQQA_BACKOUT_HARDENED, "Hardened") (MQQA_BACKOUT_NOT_HARDENED, "Not Hardened") ) +#ifdef MQIA_MEDIA_IMAGE_RECOVER_Q + (MQIA_MEDIA_IMAGE_RECOVER_Q, "ImageRecoverQueue", TextMapInitializer + (MQIMGRCOV_YES, "Yes") + (MQIMGRCOV_NO, "No") + (MQIMGRCOV_AS_Q_MGR, "Qmgr") + ) +#endif (MQIA_INDEX_TYPE, "IndexType", TextMapInitializer (MQIT_NONE, "None") (MQIT_MSG_ID, "Message ID") @@ -705,6 +740,12 @@ Dictionary queueStatusDictionary = Dictionary() (MQAT_RRS_BATCH, "RRS-coordinated Batch Application") (MQAT_SIB, "SIB") (MQAT_SYSTEM_EXTENSION, "System Extension") +#ifdef MQAT_MCAST_PUBLISH + (MQAT_MCAST_PUBLISH, "MCastPublish") +#endif +#ifdef MQAT_AMQP + (MQAT_AMQP, "AMQP") +#endif ) (MQCACF_ASID, "ASId") (MQIACF_ASYNC_STATE, "AsynchronousState", TextMapInitializer @@ -782,6 +823,9 @@ Dictionary channelDictionary = Dictionary() (MQIACH_BATCH_DATA_LIMIT, "BatchDataLimit") #endif (MQIACH_BATCH_SIZE, "BatchSize") +#ifdef MQCA_CERT_LABEL + (MQCA_CERT_LABEL, "Certificatelabel") +#endif (MQCACH_DESC, "ChannelDesc") (MQIA_MONITORING_CHANNEL) (MQCACH_CHANNEL_NAME) @@ -1825,6 +1869,15 @@ Dictionary eventDictionary = Dictionary() (MQOT_CLNTCONN_CHANNEL, "Client-connection Channel") (MQOT_SHORT_CHANNEL, "Short Channel") (MQOT_PROT_POLICY, "Protection Policy") +#ifdef MQOT_TT_CHANNEL + (MQOT_TT_CHANNEL, "TT Channel") +#endif +#ifdef MQOT_AMPQ_CHANNEL + (MQOT_AMPQ_CHANNEL, "AMQP Channel") +#endif +#ifdef MQOT_AUTH_REC + (MQOT_AUTH_REC, "Auth Rec") +#endif ) (MQIACF_OPEN_OPTIONS) (MQCA_PROCESS_NAME, "ProcessName") From 5cdc04203bf6c922f4423d0285ece0c0d7390377 Mon Sep 17 00:00:00 2001 From: fbraem Date: Fri, 28 Jul 2017 23:03:31 +0200 Subject: [PATCH 58/60] Add mq.web.app.cors-origin property for setting the Access-Control-Allow-Origin header if needed. --- MQWeb/src/Controller.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index e4240b1..27642e2 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -116,7 +116,7 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H // It's possible that already an error occurred in beforeAction. // So check for it and don't do anything when there was already a problem. - if ( response.getStatus() == Poco::Net::HTTPResponse::HTTP_OK + if ( response.getStatus() == Poco::Net::HTTPResponse::HTTP_OK && !_data->has("error") ) { const ActionMap& actions = getActions(); @@ -129,7 +129,7 @@ void Controller::handle(const std::vector& parameters, Poco::Net::H ActionFn action = it->second; (this->*action)(); - + afterAction(); } } @@ -143,13 +143,20 @@ void Controller::render() response().set("Pragma", "no-cache"); // HTTP 1.0 response().set("Expires", "0"); // Proxies + Poco::Util::LayeredConfiguration& config = Poco::Util::Application::instance().config(); + std::string origin = config.getString("mq.web.app.cors-origin", ""); + if ( !origin.empty() ) + { + response().set("Access-Control-Allow-Origin", origin); + } + std::stringstream ss; if ( _form.has("callback") ) { ss << _form.get("callback") << '('; } - + data().stringify(ss); ss.flush(); From 2a7898f776aa0132132a12b2e2dbb7ae90760cce Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 20 Sep 2017 14:29:20 +0200 Subject: [PATCH 59/60] Change license to MIT --- MQ/include/MQ/Buffer.h | 45 +++++++------- MQ/include/MQ/CommandServer.h | 39 ++++++------ MQ/include/MQ/MQException.h | 49 ++++++++------- MQ/include/MQ/MQFunctions.h | 40 ++++++------- MQ/include/MQ/MQSubsystem.h | 38 ++++++------ MQ/include/MQ/Message.h | 39 ++++++------ MQ/include/MQ/MessageConsumer.h | 41 +++++++------ MQ/include/MQ/PCF.h | 59 +++++++++--------- MQ/include/MQ/Queue.h | 39 ++++++------ MQ/include/MQ/QueueManager.h | 38 ++++++------ MQ/include/MQ/QueueManagerPool.h | 38 ++++++------ MQ/include/MQ/Topic.h | 39 ++++++------ MQ/src/Buffer.cpp | 38 ++++++------ MQ/src/CommandServer.cpp | 43 +++++++------ MQ/src/MQException.cpp | 38 ++++++------ MQ/src/MQFunctions.cpp | 38 ++++++------ MQ/src/MQSubsystem.cpp | 38 ++++++------ MQ/src/Message.cpp | 40 ++++++------- MQ/src/MessageConsumer.cpp | 39 ++++++------ MQ/src/PCF.cpp | 38 ++++++------ MQ/src/Queue.cpp | 38 ++++++------ MQ/src/QueueManager.cpp | 42 ++++++------- MQ/src/QueueManagerPool.cpp | 39 ++++++------ MQ/src/Topic.cpp | 40 ++++++------- MQCheck/include/MQ/Check/Application.h | 41 +++++++------ MQCheck/src/Application.cpp | 50 ++++++++-------- MQDictionary/src/Application.cpp | 20 +++++++ MQWeb/include/MQ/Web/AppRequestHandler.h | 39 ++++++------ MQWeb/include/MQ/Web/Application.h | 39 ++++++------ .../Web/AuthenticationInformationController.h | 41 +++++++------ .../MQ/Web/AuthenticationInformationMapper.h | 38 ++++++------ .../MQ/Web/AuthorityRecordController.h | 41 +++++++------ MQWeb/include/MQ/Web/AuthorityRecordMapper.h | 38 ++++++------ .../MQ/Web/AuthorityServiceController.h | 41 +++++++------ MQWeb/include/MQ/Web/AuthorityServiceMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/ChannelController.h | 41 +++++++------ .../MQ/Web/ChannelInitiatorController.h | 39 ++++++------ MQWeb/include/MQ/Web/ChannelInitiatorMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/ChannelMapper.h | 38 ++++++------ .../include/MQ/Web/ChannelStatusController.h | 39 ++++++------ MQWeb/include/MQ/Web/ChannelStatusMapper.h | 38 ++++++------ .../MQ/Web/ClusterQueueManagerController.h | 39 ++++++------ .../MQ/Web/ClusterQueueManagerMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/ConnectionController.h | 39 ++++++------ MQWeb/include/MQ/Web/ConnectionMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/Controller.h | 41 +++++++------ .../include/MQ/Web/ControllerRequestHandler.h | 39 ++++++------ MQWeb/include/MQ/Web/DenyRequestHandler.h | 38 ++++++------ MQWeb/include/MQ/Web/Dictionary.h | 20 +++++++ MQWeb/include/MQ/Web/DictionaryCache.h | 40 ++++++------- MQWeb/include/MQ/Web/ListenerController.h | 41 +++++++------ MQWeb/include/MQ/Web/ListenerMapper.h | 38 ++++++------ .../include/MQ/Web/ListenerStatusController.h | 41 +++++++------ MQWeb/include/MQ/Web/ListenerStatusMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/MQController.h | 39 ++++++------ MQWeb/include/MQ/Web/MQMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/MQWebController.h | 41 +++++++------ MQWeb/include/MQ/Web/MapInitializer.h | 38 ++++++------ MQWeb/include/MQ/Web/Mapper.h | 38 ++++++------ MQWeb/include/MQ/Web/MessageController.h | 39 ++++++------ MQWeb/include/MQ/Web/NamelistController.h | 39 ++++++------ MQWeb/include/MQ/Web/NamelistMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/ProcessController.h | 39 ++++++------ MQWeb/include/MQ/Web/ProcessMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/QueueController.h | 41 +++++++------ MQWeb/include/MQ/Web/QueueManagerConfig.h | 38 ++++++------ MQWeb/include/MQ/Web/QueueManagerController.h | 39 ++++++------ .../MQ/Web/QueueManagerDatabaseConfig.h | 38 ++++++------ .../MQ/Web/QueueManagerDefaultConfig.h | 38 ++++++------ MQWeb/include/MQ/Web/QueueManagerMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/QueueManagerPoolCache.h | 38 ++++++------ .../MQ/Web/QueueManagerStatusController.h | 39 ++++++------ .../include/MQ/Web/QueueManagerStatusMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/QueueMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/QueueStatusController.h | 41 +++++++------ MQWeb/include/MQ/Web/QueueStatusMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/RequestHandlerFactory.h | 39 ++++++------ MQWeb/include/MQ/Web/ServiceController.h | 39 ++++++------ MQWeb/include/MQ/Web/ServiceMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/SubscriptionController.h | 39 ++++++------ MQWeb/include/MQ/Web/SubscriptionMapper.h | 38 ++++++------ .../MQ/Web/SubscriptionStatusController.h | 39 ++++++------ .../include/MQ/Web/SubscriptionStatusMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/TopicController.h | 39 ++++++------ MQWeb/include/MQ/Web/TopicMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/TopicStatusController.h | 39 ++++++------ MQWeb/include/MQ/Web/TopicStatusMapper.h | 38 ++++++------ MQWeb/include/MQ/Web/Version.h | 38 ++++++------ .../include/MQ/Web/WebSocketRequestHandler.h | 39 ++++++------ MQWeb/src/AppRequestHandler.cpp | 39 ++++++------ MQWeb/src/Application.cpp | 32 +++++----- .../AuthenticationInformationController.cpp | 38 ++++++------ MQWeb/src/AuthenticationInformationMapper.cpp | 40 ++++++------- MQWeb/src/AuthorityRecordController.cpp | 46 +++++++------- MQWeb/src/AuthorityRecordMapper.cpp | 40 ++++++------- MQWeb/src/AuthorityServiceController.cpp | 38 ++++++------ MQWeb/src/AuthorityServiceMapper.cpp | 42 ++++++------- MQWeb/src/ChannelController.cpp | 42 ++++++------- MQWeb/src/ChannelInitiatorController.cpp | 38 ++++++------ MQWeb/src/ChannelInitiatorMapper.cpp | 40 ++++++------- MQWeb/src/ChannelMapper.cpp | 60 +++++++++---------- MQWeb/src/ChannelStatusController.cpp | 38 ++++++------ MQWeb/src/ChannelStatusMapper.cpp | 40 ++++++------- MQWeb/src/ClusterQueueManagerController.cpp | 38 ++++++------ MQWeb/src/ClusterQueueManagerMapper.cpp | 38 ++++++------ MQWeb/src/ConnectionController.cpp | 38 ++++++------ MQWeb/src/ConnectionMapper.cpp | 40 ++++++------- MQWeb/src/Controller.cpp | 38 ++++++------ MQWeb/src/ControllerRequestHandler.cpp | 38 ++++++------ MQWeb/src/DenyRequestHandler.cpp | 41 +++++++------ MQWeb/src/Dictionary.cpp | 38 ++++++------ MQWeb/src/DictionaryCache.cpp | 40 ++++++------- MQWeb/src/ListenerController.cpp | 40 ++++++------- MQWeb/src/ListenerMapper.cpp | 40 ++++++------- MQWeb/src/ListenerStatusController.cpp | 40 ++++++------- MQWeb/src/ListenerStatusMapper.cpp | 42 ++++++------- MQWeb/src/MQController.cpp | 40 ++++++------- MQWeb/src/MQMapper.cpp | 52 ++++++++-------- MQWeb/src/MQWebController.cpp | 38 ++++++------ MQWeb/src/MessageController.cpp | 42 ++++++------- MQWeb/src/NamelistController.cpp | 40 ++++++------- MQWeb/src/NamelistMapper.cpp | 40 ++++++------- MQWeb/src/ProcessController.cpp | 38 ++++++------ MQWeb/src/ProcessMapper.cpp | 40 ++++++------- MQWeb/src/QueueController.cpp | 38 ++++++------ MQWeb/src/QueueManagerConfig.cpp | 39 ++++++------ MQWeb/src/QueueManagerController.cpp | 38 ++++++------ MQWeb/src/QueueManagerDatabaseConfig.cpp | 39 ++++++------ MQWeb/src/QueueManagerDefaultConfig.cpp | 39 ++++++------ MQWeb/src/QueueManagerMapper.cpp | 38 ++++++------ MQWeb/src/QueueManagerPoolCache.cpp | 42 ++++++------- MQWeb/src/QueueManagerStatusController.cpp | 38 ++++++------ MQWeb/src/QueueManagerStatusMapper.cpp | 38 ++++++------ MQWeb/src/QueueMapper.cpp | 38 ++++++------ MQWeb/src/QueueStatusController.cpp | 38 ++++++------ MQWeb/src/QueueStatusMapper.cpp | 38 ++++++------ MQWeb/src/RequestHandlerFactory.cpp | 38 ++++++------ MQWeb/src/ServiceController.cpp | 38 ++++++------ MQWeb/src/ServiceMapper.cpp | 38 ++++++------ MQWeb/src/SubscriptionController.cpp | 38 ++++++------ MQWeb/src/SubscriptionMapper.cpp | 40 ++++++------- MQWeb/src/SubscriptionStatusController.cpp | 38 ++++++------ MQWeb/src/SubscriptionStatusMapper.cpp | 40 ++++++------- MQWeb/src/TopicController.cpp | 38 ++++++------ MQWeb/src/TopicMapper.cpp | 40 ++++++------- MQWeb/src/TopicStatusController.cpp | 36 +++++------ MQWeb/src/TopicStatusMapper.cpp | 38 ++++++------ MQWeb/src/WebSocketRequestHandler.cpp | 40 ++++++------- license.txt | 36 +++++------ 149 files changed, 2921 insertions(+), 2930 deletions(-) diff --git a/MQ/include/MQ/Buffer.h b/MQ/include/MQ/Buffer.h index 544f076..bc716ea 100644 --- a/MQ/include/MQ/Buffer.h +++ b/MQ/include/MQ/Buffer.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_Buffer_h #define _MQ_Buffer_h @@ -74,7 +73,7 @@ class Buffer /// Constructs a string from the buffer void fromHex(const std::string& hex); - /// Decodes the hexadecimal string and fills the + /// Decodes the hexadecimal string and fills the /// buffer until the size of the buffer is reached. void set(const Buffer& buffer); @@ -111,8 +110,8 @@ inline void Buffer::clear() inline void Buffer::copyTo(MQBYTE* target, std::size_t size) const { std::memset(target, 0, size); - std::memcpy(target, - _buffer.begin(), + std::memcpy(target, + _buffer.begin(), _buffer.size() > size ? size : _buffer.size()); } diff --git a/MQ/include/MQ/CommandServer.h b/MQ/include/MQ/CommandServer.h index 58947ad..a0062de 100644 --- a/MQ/include/MQ/CommandServer.h +++ b/MQ/include/MQ/CommandServer.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_CommandServer_h #define _MQ_CommandServer_h diff --git a/MQ/include/MQ/MQException.h b/MQ/include/MQ/MQException.h index 7058d96..b9069b4 100644 --- a/MQ/include/MQ/MQException.h +++ b/MQ/include/MQ/MQException.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_MQException_h #define _MQ_MQException_h @@ -52,8 +51,8 @@ class MQException : public Poco::Exception long reason() const; /// Returns the reason code of the last executed Websphere MQ function. - - + + void log(Poco::Logger& logger) const; /// Log this exception to the given logger @@ -72,7 +71,7 @@ class MQException : public Poco::Exception long _reason; }; - + inline void MQException::object(const std::string& object) { @@ -89,12 +88,12 @@ inline std::string MQException::function() const { return _function; } - + inline long MQException::code() const { return _code; } - + inline long MQException::reason() const { return _reason; diff --git a/MQ/include/MQ/MQFunctions.h b/MQ/include/MQ/MQFunctions.h index 4092c29..4ea5db6 100644 --- a/MQ/include/MQ/MQFunctions.h +++ b/MQ/include/MQ/MQFunctions.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include @@ -210,7 +210,7 @@ class MQFunctions DltMpFn _dltMpFn; InqMpFn _inqMpFn; - + void trace(const std::string& subject, const std::string& function, MQLONG* cc, MQLONG* rc); }; diff --git a/MQ/include/MQ/MQSubsystem.h b/MQ/include/MQ/MQSubsystem.h index f3548bd..101c492 100644 --- a/MQ/include/MQ/MQSubsystem.h +++ b/MQ/include/MQ/MQSubsystem.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_MQSubsystem_h #define _MQ_MQSubsystem_h diff --git a/MQ/include/MQ/Message.h b/MQ/include/MQ/Message.h index f478786..7e304bf 100644 --- a/MQ/include/MQ/Message.h +++ b/MQ/include/MQ/Message.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_Message_h #define _MQ_Message_h diff --git a/MQ/include/MQ/MessageConsumer.h b/MQ/include/MQ/MessageConsumer.h index be204da..712ee3c 100644 --- a/MQ/include/MQ/MessageConsumer.h +++ b/MQ/include/MQ/MessageConsumer.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_MessageConsumer_H #define _MQ_MessageConsumer_H @@ -33,7 +32,7 @@ namespace MQ class MessageConsumer /// Implemenst a message consumer. /// Note: the message buffer is only valid (the Message class doesn't - /// own it) when used in the callback. If you need it after this + /// own it) when used in the callback. If you need it after this /// call, you need to copy it! { public: diff --git a/MQ/include/MQ/PCF.h b/MQ/include/MQ/PCF.h index 22c4728..d0d52a7 100644 --- a/MQ/include/MQ/PCF.h +++ b/MQ/include/MQ/PCF.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_PCF_h #define _MQ_PCF_h @@ -61,7 +60,7 @@ class PCF void addParameterList(MQLONG parameter, const std::vector& values); /// Add a numeric list parameter - + void addFilter(MQLONG parameter, MQLONG op, const std::string& value); /// Add a filter with a string value. @@ -180,22 +179,22 @@ inline void PCF::addParameterList(MQLONG parameter, const std::vector& v addParameterList(parameter, (MQLONG*) &values[0], (unsigned int) values.size()); } -inline int PCF::getCommand() const +inline int PCF::getCommand() const { MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); - return header->Command; + return header->Command; } -inline int PCF::getCompletionCode() const -{ +inline int PCF::getCompletionCode() const +{ MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); - return header->CompCode; + return header->CompCode; } -inline int PCF::getReasonCode() const -{ +inline int PCF::getReasonCode() const +{ MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); - return header->Reason; + return header->Reason; } inline bool PCF::isByteString(MQLONG parameter) const @@ -206,7 +205,7 @@ inline bool PCF::isByteString(MQLONG parameter) const inline bool PCF::isExtendedResponse() const { MQCFH* header = (MQCFH*)(MQBYTE*) _message->buffer().data(); - return header->Type == MQCFT_XR_SUMMARY; + return header->Type == MQCFT_XR_SUMMARY; } diff --git a/MQ/include/MQ/Queue.h b/MQ/include/MQ/Queue.h index 24bfc6c..79cb418 100644 --- a/MQ/include/MQ/Queue.h +++ b/MQ/include/MQ/Queue.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_Queue_H #define _MQ_Queue_H diff --git a/MQ/include/MQ/QueueManager.h b/MQ/include/MQ/QueueManager.h index 126416c..027b00e 100644 --- a/MQ/include/MQ/QueueManager.h +++ b/MQ/include/MQ/QueueManager.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_QueueManager_h #define _MQ_QueueManager_h diff --git a/MQ/include/MQ/QueueManagerPool.h b/MQ/include/MQ/QueueManagerPool.h index 7585069..0cc708e 100644 --- a/MQ/include/MQ/QueueManagerPool.h +++ b/MQ/include/MQ/QueueManagerPool.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_QueueManagerPool_h #define _MQ_QueueManagerPool_h diff --git a/MQ/include/MQ/Topic.h b/MQ/include/MQ/Topic.h index d984997..68fb845 100644 --- a/MQ/include/MQ/Topic.h +++ b/MQ/include/MQ/Topic.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_Topic_H #define _MQ_Topic_H diff --git a/MQ/src/Buffer.cpp b/MQ/src/Buffer.cpp index 13e473e..07485fb 100644 --- a/MQ/src/Buffer.cpp +++ b/MQ/src/Buffer.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include diff --git a/MQ/src/CommandServer.cpp b/MQ/src/CommandServer.cpp index 04d37ca..3444c91 100644 --- a/MQ/src/CommandServer.cpp +++ b/MQ/src/CommandServer.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "MQ/CommandServer.h" @@ -36,7 +35,7 @@ namespace MQ { -CommandServer::CommandServer(QueueManager& qmgr, const std::string& modelQueue) +CommandServer::CommandServer(QueueManager& qmgr, const std::string& modelQueue) : _qmgr(qmgr) , _commandQ(qmgr, qmgr.commandQueue()) , _replyQ(qmgr, modelQueue) @@ -82,7 +81,7 @@ void CommandServer::sendCommand(PCF::Ptr& command, PCF::Vector& response) { poco_trace_f2(logger, "Truncated message received. Actual size is %ld (> %d).", msgResponse->dataLength(), REPLY_MESSAGE_LEN); } - + msgResponse->buffer().resize(msgResponse->dataLength(), false); msgResponse->clear(); msgResponse->correlationId()->set(command->message()->messageId()); diff --git a/MQ/src/MQException.cpp b/MQ/src/MQException.cpp index 254da4b..45a96a9 100644 --- a/MQ/src/MQException.cpp +++ b/MQ/src/MQException.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "Poco/Logger.h" diff --git a/MQ/src/MQFunctions.cpp b/MQ/src/MQFunctions.cpp index 2008faa..d8dc061 100644 --- a/MQ/src/MQFunctions.cpp +++ b/MQ/src/MQFunctions.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/MQFunctions.h" #include "MQ/MQException.h" diff --git a/MQ/src/MQSubsystem.cpp b/MQ/src/MQSubsystem.cpp index 6cc88d1..5418102 100644 --- a/MQ/src/MQSubsystem.cpp +++ b/MQ/src/MQSubsystem.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "MQ/MQSubsystem.h" diff --git a/MQ/src/Message.cpp b/MQ/src/Message.cpp index dd13c06..02aadec 100644 --- a/MQ/src/Message.cpp +++ b/MQ/src/Message.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include @@ -35,7 +35,7 @@ namespace MQ MQMD Message::_initialMD = {MQMD_DEFAULT}; -Message::Message(int size) +Message::Message(int size) : _buffer(size) , _md(_initialMD) , _dataLength(0L) diff --git a/MQ/src/MessageConsumer.cpp b/MQ/src/MessageConsumer.cpp index 2e01236..27f9255 100644 --- a/MQ/src/MessageConsumer.cpp +++ b/MQ/src/MessageConsumer.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "Poco/Util/Application.h" #include "MQ/MQSubsystem.h" diff --git a/MQ/src/PCF.cpp b/MQ/src/PCF.cpp index 92847e9..1333b00 100644 --- a/MQ/src/PCF.cpp +++ b/MQ/src/PCF.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include // For memcpy #include diff --git a/MQ/src/Queue.cpp b/MQ/src/Queue.cpp index 65a3114..65d58d0 100644 --- a/MQ/src/Queue.cpp +++ b/MQ/src/Queue.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "Poco/Util/Application.h" diff --git a/MQ/src/QueueManager.cpp b/MQ/src/QueueManager.cpp index dc7b0f8..551d38e 100644 --- a/MQ/src/QueueManager.cpp +++ b/MQ/src/QueueManager.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "Poco/DateTimeParser.h" @@ -116,8 +116,8 @@ void QueueManager::connect(const std::string& channel, const std::string& server MQCNO cno = { MQCNO_DEFAULT }; /* - We must specify MQCNO version 4 to ensure that both the client - connection pointer and SSL configuration options are used + We must specify MQCNO version 4 to ensure that both the client + connection pointer and SSL configuration options are used */ cno.Version = MQCNO_VERSION_4; cno.Options = MQCNO_HANDLE_SHARE_BLOCK; diff --git a/MQ/src/QueueManagerPool.cpp b/MQ/src/QueueManagerPool.cpp index bffae86..89fa4bc 100644 --- a/MQ/src/QueueManagerPool.cpp +++ b/MQ/src/QueueManagerPool.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/QueueManagerPool.h" namespace MQ diff --git a/MQ/src/Topic.cpp b/MQ/src/Topic.cpp index 4c2a84c..ac3d672 100644 --- a/MQ/src/Topic.cpp +++ b/MQ/src/Topic.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "Poco/Util/Application.h" @@ -44,7 +44,7 @@ Topic::Topic(QueueManager& qmgr, const std::string& topic) _od.Version = MQOD_VERSION_4; } -Topic::Topic(QueueManager& qmgr, const std::string& topic, const std::string& topicStr) +Topic::Topic(QueueManager& qmgr, const std::string& topic, const std::string& topicStr) : _qmgr(qmgr) , _handle(0) , _od(_initialOD) diff --git a/MQCheck/include/MQ/Check/Application.h b/MQCheck/include/MQ/Check/Application.h index f7a0cf9..d0cbab2 100644 --- a/MQCheck/include/MQ/Check/Application.h +++ b/MQCheck/include/MQ/Check/Application.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQCheck - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQCheck_Application_H #define _MQCheck_Application_H @@ -41,7 +40,7 @@ class MQCheckApplication : public Poco::Util::Application protected: void initialize(Application& self); - + void uninitialize(); diff --git a/MQCheck/src/Application.cpp b/MQCheck/src/Application.cpp index c019217..ac2cb8c 100644 --- a/MQCheck/src/Application.cpp +++ b/MQCheck/src/Application.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQCheck - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include #include @@ -56,7 +56,7 @@ void MQCheckApplication::uninitialize() void MQCheckApplication::defineOptions(Poco::Util::OptionSet& options) { Application::defineOptions(options); - + options.addOption(Option("help", "h", "display help information on command line arguments").required(false).repeatable(false)); options.addOption(Option("channel", "c", "Server-connection channel").required(false) .repeatable(false) @@ -131,7 +131,7 @@ int MQCheckApplication::main(const std::vector& args) MQ::CommandServer* cmdServer = qmgr->createCommandServer("SYSTEM.DEFAULT.MODEL.QUEUE"); std::string type = config().getString("mqcheck.options.type"); - std::transform(type.begin(), type.end(), type.begin(), ::toupper); + std::transform(type.begin(), type.end(), type.begin(), ::toupper); if ( type.compare("QUEUE") == 0 ) { checkQueues(qmgr, *cmdServer); @@ -147,10 +147,10 @@ int MQCheckApplication::main(const std::vector& args) void MQCheckApplication::checkQueues(MQ::QueueManager::Ptr qmgr, MQ::CommandServer& cmdServer) { MQ::PCF::Ptr inquireQ = new MQ::PCF(MQCMD_INQUIRE_Q); - + std::string queueName = config().getString("mqcheck.options.object", "*"); inquireQ->addParameter(MQCA_Q_NAME, queueName); - + std::string queueDepthOption = config().getString("mqcheck.options.qdepth", ""); int queueDepth = -1; if ( ! queueDepthOption.empty() ) @@ -166,7 +166,7 @@ void MQCheckApplication::checkQueues(MQ::QueueManager::Ptr qmgr, MQ::CommandServ { inquireQ->addFilter(MQIA_CURRENT_Q_DEPTH, MQCFOP_NOT_LESS, queueDepth); } - + std::vector > commandResponse; cmdServer.sendCommand(inquireQ, commandResponse); @@ -193,7 +193,7 @@ void MQCheckApplication::checkQueues(MQ::QueueManager::Ptr qmgr, MQ::CommandServ std::cout << std::setw(MQ_Q_NAME_LENGTH + 1) << std::left << name; queueDepth = (*it)->getParameterNum(MQIA_CURRENT_Q_DEPTH); std::cout << " " << std::setw(6) << std::right; - if ( queueDepth == -1 ) + if ( queueDepth == -1 ) { std::cout << "-"; } diff --git a/MQDictionary/src/Application.cpp b/MQDictionary/src/Application.cpp index 20097f2..3b20e5e 100644 --- a/MQDictionary/src/Application.cpp +++ b/MQDictionary/src/Application.cpp @@ -1,3 +1,23 @@ +/* +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "Poco/Util/Application.h" #include "Poco/Data/SessionFactory.h" #include "Poco/Data/SQLite/Connector.h" diff --git a/MQWeb/include/MQ/Web/AppRequestHandler.h b/MQWeb/include/MQ/Web/AppRequestHandler.h index 2cee551..f6a298f 100644 --- a/MQWeb/include/MQ/Web/AppRequestHandler.h +++ b/MQWeb/include/MQ/Web/AppRequestHandler.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AppRequestHandler_H #define _MQWeb_AppRequestHandler_H diff --git a/MQWeb/include/MQ/Web/Application.h b/MQWeb/include/MQ/Web/Application.h index 6ec4676..0767c04 100644 --- a/MQWeb/include/MQ/Web/Application.h +++ b/MQWeb/include/MQ/Web/Application.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_Application_H #define _MQWeb_Application_H diff --git a/MQWeb/include/MQ/Web/AuthenticationInformationController.h b/MQWeb/include/MQ/Web/AuthenticationInformationController.h index 56ac277..2395955 100644 --- a/MQWeb/include/MQ/Web/AuthenticationInformationController.h +++ b/MQWeb/include/MQ/Web/AuthenticationInformationController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AuthenticationInformationController_h #define _MQWeb_AuthenticationInformationController_h @@ -66,7 +65,7 @@ class AuthenticationInformationController : public MQController inline const Controller::ActionMap& AuthenticationInformationController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&AuthenticationInformationController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/AuthenticationInformationMapper.h b/MQWeb/include/MQ/Web/AuthenticationInformationMapper.h index 310c238..4713f1f 100644 --- a/MQWeb/include/MQ/Web/AuthenticationInformationMapper.h +++ b/MQWeb/include/MQ/Web/AuthenticationInformationMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AuthenticationInformationMapper_H #define _MQWeb_AuthenticationInformationMapper_H diff --git a/MQWeb/include/MQ/Web/AuthorityRecordController.h b/MQWeb/include/MQ/Web/AuthorityRecordController.h index d082923..ab0ed55 100644 --- a/MQWeb/include/MQ/Web/AuthorityRecordController.h +++ b/MQWeb/include/MQ/Web/AuthorityRecordController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AuthorityRecordController_h #define _MQWeb_AuthorityRecordController_h @@ -66,7 +65,7 @@ class AuthorityRecordController : public MQController inline const Controller::ActionMap& AuthorityRecordController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&AuthorityRecordController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/AuthorityRecordMapper.h b/MQWeb/include/MQ/Web/AuthorityRecordMapper.h index b4aec17..d51aa2c 100644 --- a/MQWeb/include/MQ/Web/AuthorityRecordMapper.h +++ b/MQWeb/include/MQ/Web/AuthorityRecordMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AuthorityRecordMapper_H #define _MQWeb_AuthorityRecordMapper_H diff --git a/MQWeb/include/MQ/Web/AuthorityServiceController.h b/MQWeb/include/MQ/Web/AuthorityServiceController.h index 5397b69..6cc2c53 100644 --- a/MQWeb/include/MQ/Web/AuthorityServiceController.h +++ b/MQWeb/include/MQ/Web/AuthorityServiceController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AuthorityServiceController_h #define _MQWeb_AuthorityServiceController_h @@ -50,7 +49,7 @@ class AuthorityServiceController : public MQController inline const Controller::ActionMap& AuthorityServiceController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&AuthorityServiceController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/AuthorityServiceMapper.h b/MQWeb/include/MQ/Web/AuthorityServiceMapper.h index cad84b5..3c514ca 100644 --- a/MQWeb/include/MQ/Web/AuthorityServiceMapper.h +++ b/MQWeb/include/MQ/Web/AuthorityServiceMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_AuthorityServiceMapper_H #define _MQWeb_AuthorityServiceMapper_H diff --git a/MQWeb/include/MQ/Web/ChannelController.h b/MQWeb/include/MQ/Web/ChannelController.h index 426dcf3..39ae015 100644 --- a/MQWeb/include/MQ/Web/ChannelController.h +++ b/MQWeb/include/MQ/Web/ChannelController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ChannelController_h #define _MQWeb_ChannelController_h @@ -48,7 +47,7 @@ class ChannelController : public MQController /// Query Parameters: /// channelName: Name of the channel (* is default). /// channelType: Only return channels of the given type. - /// Possible values: + /// Possible values: /// excludeSystem: When 'true', don't return system channels /// /// Query parameters are ignored when a channelName is passed in the URI path. diff --git a/MQWeb/include/MQ/Web/ChannelInitiatorController.h b/MQWeb/include/MQ/Web/ChannelInitiatorController.h index f5497e0..542bfa1 100644 --- a/MQWeb/include/MQ/Web/ChannelInitiatorController.h +++ b/MQWeb/include/MQ/Web/ChannelInitiatorController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ChannelInitiatorController_h #define _MQWeb_ChannelInitiatorController_h diff --git a/MQWeb/include/MQ/Web/ChannelInitiatorMapper.h b/MQWeb/include/MQ/Web/ChannelInitiatorMapper.h index 9f7fa24..7087754 100644 --- a/MQWeb/include/MQ/Web/ChannelInitiatorMapper.h +++ b/MQWeb/include/MQ/Web/ChannelInitiatorMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ChannelInitiatorMapper_H #define _MQWeb_ChannelInitiatorMapper_H diff --git a/MQWeb/include/MQ/Web/ChannelMapper.h b/MQWeb/include/MQ/Web/ChannelMapper.h index 3f72b96..5bd4638 100644 --- a/MQWeb/include/MQ/Web/ChannelMapper.h +++ b/MQWeb/include/MQ/Web/ChannelMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ChannelMapper_H #define _MQWeb_ChannelMapper_H diff --git a/MQWeb/include/MQ/Web/ChannelStatusController.h b/MQWeb/include/MQ/Web/ChannelStatusController.h index 8846f45..0277ee9 100644 --- a/MQWeb/include/MQ/Web/ChannelStatusController.h +++ b/MQWeb/include/MQ/Web/ChannelStatusController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ChannelStatusController_h #define _MQWeb_ChannelStatusController_h diff --git a/MQWeb/include/MQ/Web/ChannelStatusMapper.h b/MQWeb/include/MQ/Web/ChannelStatusMapper.h index dfcb0da..7d35a63 100644 --- a/MQWeb/include/MQ/Web/ChannelStatusMapper.h +++ b/MQWeb/include/MQ/Web/ChannelStatusMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ChannelStatusMapper_H #define _MQWeb_ChannelStatusMapper_H diff --git a/MQWeb/include/MQ/Web/ClusterQueueManagerController.h b/MQWeb/include/MQ/Web/ClusterQueueManagerController.h index 8678b9d..8bc285d 100644 --- a/MQWeb/include/MQ/Web/ClusterQueueManagerController.h +++ b/MQWeb/include/MQ/Web/ClusterQueueManagerController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ClusterQueueManagerController_h #define _MQWeb_ClusterQueueManagerController_h diff --git a/MQWeb/include/MQ/Web/ClusterQueueManagerMapper.h b/MQWeb/include/MQ/Web/ClusterQueueManagerMapper.h index d86b1e7..8a2cf84 100644 --- a/MQWeb/include/MQ/Web/ClusterQueueManagerMapper.h +++ b/MQWeb/include/MQ/Web/ClusterQueueManagerMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ClusterQueueManagerMapper_H #define _MQWeb_ClusterQueueManagerMapper_H diff --git a/MQWeb/include/MQ/Web/ConnectionController.h b/MQWeb/include/MQ/Web/ConnectionController.h index a5bdb49..fdee247 100644 --- a/MQWeb/include/MQ/Web/ConnectionController.h +++ b/MQWeb/include/MQ/Web/ConnectionController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ConnectionController_h #define _MQWeb_ConnectionController_h diff --git a/MQWeb/include/MQ/Web/ConnectionMapper.h b/MQWeb/include/MQ/Web/ConnectionMapper.h index e2614d0..5b19d70 100644 --- a/MQWeb/include/MQ/Web/ConnectionMapper.h +++ b/MQWeb/include/MQ/Web/ConnectionMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ConnectionMapper_H #define _MQWeb_ConnectionMapper_H diff --git a/MQWeb/include/MQ/Web/Controller.h b/MQWeb/include/MQ/Web/Controller.h index 0cbbd33..ab463e1 100644 --- a/MQWeb/include/MQ/Web/Controller.h +++ b/MQWeb/include/MQ/Web/Controller.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_Controller_h #define _MQWeb_Controller_h @@ -68,7 +67,7 @@ class Controller : public Poco::Net::PartHandler virtual void afterAction(); /// Called after an action is executed. The default implementation renders - /// the associated view. When no view is set, a JSON view will be used + /// the associated view. When no view is set, a JSON view will be used void formElementToJSONArray(const std::string& name, Poco::JSON::Array::Ptr arr); /// Stores each element with the given name in a JSON array diff --git a/MQWeb/include/MQ/Web/ControllerRequestHandler.h b/MQWeb/include/MQ/Web/ControllerRequestHandler.h index c1d8e58..105b366 100644 --- a/MQWeb/include/MQ/Web/ControllerRequestHandler.h +++ b/MQWeb/include/MQ/Web/ControllerRequestHandler.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ControllerRequestHandler_INCLUDED #define _MQWeb_ControllerRequestHandler_INCLUDED diff --git a/MQWeb/include/MQ/Web/DenyRequestHandler.h b/MQWeb/include/MQ/Web/DenyRequestHandler.h index 1093006..872a3a4 100644 --- a/MQWeb/include/MQ/Web/DenyRequestHandler.h +++ b/MQWeb/include/MQ/Web/DenyRequestHandler.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_DenyRequestHandler_H #define _MQWeb_DenyRequestHandler_H diff --git a/MQWeb/include/MQ/Web/Dictionary.h b/MQWeb/include/MQ/Web/Dictionary.h index f79ffbe..01d219f 100644 --- a/MQWeb/include/MQ/Web/Dictionary.h +++ b/MQWeb/include/MQ/Web/Dictionary.h @@ -1,3 +1,23 @@ +/* +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_Dictionary #define _MQWeb_Dictionary diff --git a/MQWeb/include/MQ/Web/DictionaryCache.h b/MQWeb/include/MQ/Web/DictionaryCache.h index 7af49b3..c438447 100644 --- a/MQWeb/include/MQ/Web/DictionaryCache.h +++ b/MQWeb/include/MQ/Web/DictionaryCache.h @@ -1,23 +1,23 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +/* +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_DictionaryCache_H #define _MQWeb_DictionaryCache_H diff --git a/MQWeb/include/MQ/Web/ListenerController.h b/MQWeb/include/MQ/Web/ListenerController.h index 07302e1..c365871 100644 --- a/MQWeb/include/MQ/Web/ListenerController.h +++ b/MQWeb/include/MQ/Web/ListenerController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ListenerController_h #define _MQWeb_ListenerController_h @@ -66,7 +65,7 @@ class ListenerController : public MQController inline const Controller::ActionMap& ListenerController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&ListenerController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/ListenerMapper.h b/MQWeb/include/MQ/Web/ListenerMapper.h index 8273bdf..28b23cb 100644 --- a/MQWeb/include/MQ/Web/ListenerMapper.h +++ b/MQWeb/include/MQ/Web/ListenerMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ListenerMapper_H #define _MQWeb_ListenerMapper_H diff --git a/MQWeb/include/MQ/Web/ListenerStatusController.h b/MQWeb/include/MQ/Web/ListenerStatusController.h index 9aa32c1..0723274 100644 --- a/MQWeb/include/MQ/Web/ListenerStatusController.h +++ b/MQWeb/include/MQ/Web/ListenerStatusController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ListenerStatusController_h #define _MQWeb_ListenerStatusController_h @@ -66,7 +65,7 @@ class ListenerStatusController : public MQController inline const Controller::ActionMap& ListenerStatusController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&ListenerStatusController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/ListenerStatusMapper.h b/MQWeb/include/MQ/Web/ListenerStatusMapper.h index 9910d2a..293ae53 100644 --- a/MQWeb/include/MQ/Web/ListenerStatusMapper.h +++ b/MQWeb/include/MQ/Web/ListenerStatusMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ListenerStatusMapper_H #define _MQWeb_ListenerStatusMapper_H diff --git a/MQWeb/include/MQ/Web/MQController.h b/MQWeb/include/MQ/Web/MQController.h index 237db81..ecf61dd 100644 --- a/MQWeb/include/MQ/Web/MQController.h +++ b/MQWeb/include/MQ/Web/MQController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_MQController_h #define _MQWeb_MQController_h diff --git a/MQWeb/include/MQ/Web/MQMapper.h b/MQWeb/include/MQ/Web/MQMapper.h index 3bfbe07..11c0214 100644 --- a/MQWeb/include/MQ/Web/MQMapper.h +++ b/MQWeb/include/MQ/Web/MQMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_MQMapper_H #define _MQWeb_MQMapper_H diff --git a/MQWeb/include/MQ/Web/MQWebController.h b/MQWeb/include/MQ/Web/MQWebController.h index 466da9e..0e75cf6 100644 --- a/MQWeb/include/MQ/Web/MQWebController.h +++ b/MQWeb/include/MQ/Web/MQWebController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_MQWebController_h #define _MQWeb_MQWebController_h @@ -46,7 +45,7 @@ class MQWebController : public Controller void list(); /// Returns a list of available queuemanagers. In client mode, all queuemanagers - /// that are configured are returned, in binding mode MQWeb will try to + /// that are configured are returned, in binding mode MQWeb will try to /// execute the mq utility dspmq. private: diff --git a/MQWeb/include/MQ/Web/MapInitializer.h b/MQWeb/include/MQ/Web/MapInitializer.h index da3509f..515c406 100644 --- a/MQWeb/include/MQ/Web/MapInitializer.h +++ b/MQWeb/include/MQ/Web/MapInitializer.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_MapInitializer_H #define _MQWeb_MapInitializer_H diff --git a/MQWeb/include/MQ/Web/Mapper.h b/MQWeb/include/MQ/Web/Mapper.h index 4e764be..386bdd1 100644 --- a/MQWeb/include/MQ/Web/Mapper.h +++ b/MQWeb/include/MQ/Web/Mapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_Mapper_H #define _MQWeb_Mapper_H diff --git a/MQWeb/include/MQ/Web/MessageController.h b/MQWeb/include/MQ/Web/MessageController.h index e217b5f..a4419fa 100644 --- a/MQWeb/include/MQ/Web/MessageController.h +++ b/MQWeb/include/MQ/Web/MessageController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_MessageController_h #define _MQWeb_MessageController_h diff --git a/MQWeb/include/MQ/Web/NamelistController.h b/MQWeb/include/MQ/Web/NamelistController.h index 27e2f9e..5676faa 100644 --- a/MQWeb/include/MQ/Web/NamelistController.h +++ b/MQWeb/include/MQ/Web/NamelistController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_NamelistController_h #define _MQWeb_NamelistController_h diff --git a/MQWeb/include/MQ/Web/NamelistMapper.h b/MQWeb/include/MQ/Web/NamelistMapper.h index fd1a8c6..8e9d3ed 100644 --- a/MQWeb/include/MQ/Web/NamelistMapper.h +++ b/MQWeb/include/MQ/Web/NamelistMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_NamelistMapper_H #define _MQWeb_NamelistMapper_H diff --git a/MQWeb/include/MQ/Web/ProcessController.h b/MQWeb/include/MQ/Web/ProcessController.h index c1cd890..32e82ed 100644 --- a/MQWeb/include/MQ/Web/ProcessController.h +++ b/MQWeb/include/MQ/Web/ProcessController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ProcessController_h #define _MQWeb_ProcessController_h diff --git a/MQWeb/include/MQ/Web/ProcessMapper.h b/MQWeb/include/MQ/Web/ProcessMapper.h index 37fa3ff..9b09321 100644 --- a/MQWeb/include/MQ/Web/ProcessMapper.h +++ b/MQWeb/include/MQ/Web/ProcessMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ProcessMapper_H #define _MQWeb_ProcessMapper_H diff --git a/MQWeb/include/MQ/Web/QueueController.h b/MQWeb/include/MQ/Web/QueueController.h index f978f26..1722399 100644 --- a/MQWeb/include/MQ/Web/QueueController.h +++ b/MQWeb/include/MQ/Web/QueueController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueController_h #define _MQWeb_QueueController_h @@ -70,7 +69,7 @@ class QueueController : public MQController inline const Controller::ActionMap& QueueController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&QueueController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/QueueManagerConfig.h b/MQWeb/include/MQ/Web/QueueManagerConfig.h index c492ede..8a3a109 100644 --- a/MQWeb/include/MQ/Web/QueueManagerConfig.h +++ b/MQWeb/include/MQ/Web/QueueManagerConfig.h @@ -1,23 +1,23 @@ /* - * Copyright 2017 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_QueueManagerConfig_h #define _MQ_QueueManagerConfig_h diff --git a/MQWeb/include/MQ/Web/QueueManagerController.h b/MQWeb/include/MQ/Web/QueueManagerController.h index c0012ff..efbd589 100644 --- a/MQWeb/include/MQ/Web/QueueManagerController.h +++ b/MQWeb/include/MQ/Web/QueueManagerController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueManagerController_h #define _MQWeb_QueueManagerController_h diff --git a/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h b/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h index d09f9aa..61a2017 100644 --- a/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h +++ b/MQWeb/include/MQ/Web/QueueManagerDatabaseConfig.h @@ -1,23 +1,23 @@ /* - * Copyright 2017 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_QueueManagerDatabaseConfig_h #define _MQ_QueueManagerDatabaseConfig_h diff --git a/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h b/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h index 12ebf5f..2ce464c 100644 --- a/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h +++ b/MQWeb/include/MQ/Web/QueueManagerDefaultConfig.h @@ -1,23 +1,23 @@ /* - * Copyright 2017 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_QueueManagerDefaultConfig_h #define _MQ_QueueManagerDefaultConfig_h diff --git a/MQWeb/include/MQ/Web/QueueManagerMapper.h b/MQWeb/include/MQ/Web/QueueManagerMapper.h index 399aaef..e1d84c2 100644 --- a/MQWeb/include/MQ/Web/QueueManagerMapper.h +++ b/MQWeb/include/MQ/Web/QueueManagerMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueManagerMapper_H #define _MQWeb_QueueManagerMapper_H diff --git a/MQWeb/include/MQ/Web/QueueManagerPoolCache.h b/MQWeb/include/MQ/Web/QueueManagerPoolCache.h index cc27df0..d495a72 100644 --- a/MQWeb/include/MQ/Web/QueueManagerPoolCache.h +++ b/MQWeb/include/MQ/Web/QueueManagerPoolCache.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQ_QueueManagerPoolCache_h #define _MQ_QueueManagerPoolCache_h diff --git a/MQWeb/include/MQ/Web/QueueManagerStatusController.h b/MQWeb/include/MQ/Web/QueueManagerStatusController.h index ac87b6d..6cf4d6a 100644 --- a/MQWeb/include/MQ/Web/QueueManagerStatusController.h +++ b/MQWeb/include/MQ/Web/QueueManagerStatusController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueManagerStatusController_h #define _MQWeb_QueueManagerStatusController_h diff --git a/MQWeb/include/MQ/Web/QueueManagerStatusMapper.h b/MQWeb/include/MQ/Web/QueueManagerStatusMapper.h index 360142c..5c60114 100644 --- a/MQWeb/include/MQ/Web/QueueManagerStatusMapper.h +++ b/MQWeb/include/MQ/Web/QueueManagerStatusMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueManagerStatusMapper_H #define _MQWeb_QueueManagerStatusMapper_H diff --git a/MQWeb/include/MQ/Web/QueueMapper.h b/MQWeb/include/MQ/Web/QueueMapper.h index 35066a4..41c1fcf 100644 --- a/MQWeb/include/MQ/Web/QueueMapper.h +++ b/MQWeb/include/MQ/Web/QueueMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueMapper_H #define _MQWeb_QueueMapper_H diff --git a/MQWeb/include/MQ/Web/QueueStatusController.h b/MQWeb/include/MQ/Web/QueueStatusController.h index e6b1eb8..f203899 100644 --- a/MQWeb/include/MQ/Web/QueueStatusController.h +++ b/MQWeb/include/MQ/Web/QueueStatusController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueStatusController_h #define _MQWeb_QueueStatusController_h @@ -69,7 +68,7 @@ class QueueStatusController : public MQController inline const Controller::ActionMap& QueueStatusController::getActions() const { - static Controller::ActionMap actions + static Controller::ActionMap actions = MapInitializer ("inquire", static_cast(&QueueStatusController::inquire)) ; diff --git a/MQWeb/include/MQ/Web/QueueStatusMapper.h b/MQWeb/include/MQ/Web/QueueStatusMapper.h index 60f2779..f504e8c 100644 --- a/MQWeb/include/MQ/Web/QueueStatusMapper.h +++ b/MQWeb/include/MQ/Web/QueueStatusMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_QueueStatusMapper_H #define _MQWeb_QueueStatusMapper_H diff --git a/MQWeb/include/MQ/Web/RequestHandlerFactory.h b/MQWeb/include/MQ/Web/RequestHandlerFactory.h index a94b348..e0d5d3a 100644 --- a/MQWeb/include/MQ/Web/RequestHandlerFactory.h +++ b/MQWeb/include/MQ/Web/RequestHandlerFactory.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_RequestHandlerFactory_H #define _MQWeb_RequestHandlerFactory_H diff --git a/MQWeb/include/MQ/Web/ServiceController.h b/MQWeb/include/MQ/Web/ServiceController.h index 286a27a..0d15276 100644 --- a/MQWeb/include/MQ/Web/ServiceController.h +++ b/MQWeb/include/MQ/Web/ServiceController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ServiceController_h #define _MQWeb_ServiceController_h diff --git a/MQWeb/include/MQ/Web/ServiceMapper.h b/MQWeb/include/MQ/Web/ServiceMapper.h index 41bf0bf..b054ddd 100644 --- a/MQWeb/include/MQ/Web/ServiceMapper.h +++ b/MQWeb/include/MQ/Web/ServiceMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_ServiceMapper_H #define _MQWeb_ServiceMapper_H diff --git a/MQWeb/include/MQ/Web/SubscriptionController.h b/MQWeb/include/MQ/Web/SubscriptionController.h index f1db57a..6299ddd 100644 --- a/MQWeb/include/MQ/Web/SubscriptionController.h +++ b/MQWeb/include/MQ/Web/SubscriptionController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_SubscriptionController_h #define _MQWeb_SubscriptionController_h diff --git a/MQWeb/include/MQ/Web/SubscriptionMapper.h b/MQWeb/include/MQ/Web/SubscriptionMapper.h index 7dfd3e1..1d0e6a8 100644 --- a/MQWeb/include/MQ/Web/SubscriptionMapper.h +++ b/MQWeb/include/MQ/Web/SubscriptionMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_SubscriptionMapper_H #define _MQWeb_SubscriptionMapper_H diff --git a/MQWeb/include/MQ/Web/SubscriptionStatusController.h b/MQWeb/include/MQ/Web/SubscriptionStatusController.h index acbf1b8..dc323b6 100644 --- a/MQWeb/include/MQ/Web/SubscriptionStatusController.h +++ b/MQWeb/include/MQ/Web/SubscriptionStatusController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_SubscriptionStatusController_h #define _MQWeb_SubscriptionStatusController_h diff --git a/MQWeb/include/MQ/Web/SubscriptionStatusMapper.h b/MQWeb/include/MQ/Web/SubscriptionStatusMapper.h index 2a175fe..4a811e3 100644 --- a/MQWeb/include/MQ/Web/SubscriptionStatusMapper.h +++ b/MQWeb/include/MQ/Web/SubscriptionStatusMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_SubscriptionStatusMapper_H #define _MQWeb_SubscriptionStatusMapper_H diff --git a/MQWeb/include/MQ/Web/TopicController.h b/MQWeb/include/MQ/Web/TopicController.h index 797a9af..948fc11 100644 --- a/MQWeb/include/MQ/Web/TopicController.h +++ b/MQWeb/include/MQ/Web/TopicController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_TopicController_h #define _MQWeb_TopicController_h diff --git a/MQWeb/include/MQ/Web/TopicMapper.h b/MQWeb/include/MQ/Web/TopicMapper.h index b0cbdc6..9232b07 100644 --- a/MQWeb/include/MQ/Web/TopicMapper.h +++ b/MQWeb/include/MQ/Web/TopicMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_TopicMapper_H #define _MQWeb_TopicMapper_H diff --git a/MQWeb/include/MQ/Web/TopicStatusController.h b/MQWeb/include/MQ/Web/TopicStatusController.h index 3d67593..8448477 100644 --- a/MQWeb/include/MQ/Web/TopicStatusController.h +++ b/MQWeb/include/MQ/Web/TopicStatusController.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_TopicStatusController_h #define _MQWeb_TopicStatusController_h diff --git a/MQWeb/include/MQ/Web/TopicStatusMapper.h b/MQWeb/include/MQ/Web/TopicStatusMapper.h index 24e0587..166abff 100644 --- a/MQWeb/include/MQ/Web/TopicStatusMapper.h +++ b/MQWeb/include/MQ/Web/TopicStatusMapper.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_TopicStatusMapper_H #define _MQWeb_TopicStatusMapper_H diff --git a/MQWeb/include/MQ/Web/Version.h b/MQWeb/include/MQ/Web/Version.h index e389c3a..a797866 100644 --- a/MQWeb/include/MQ/Web/Version.h +++ b/MQWeb/include/MQ/Web/Version.h @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_Version_H #define _MQWeb_Version_H diff --git a/MQWeb/include/MQ/Web/WebSocketRequestHandler.h b/MQWeb/include/MQ/Web/WebSocketRequestHandler.h index 94743d2..473cf43 100644 --- a/MQWeb/include/MQ/Web/WebSocketRequestHandler.h +++ b/MQWeb/include/MQ/Web/WebSocketRequestHandler.h @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #ifndef _MQWeb_WebSocketRequestHandler_INCLUDED #define _MQWeb_WebSocketRequestHandler_INCLUDED diff --git a/MQWeb/src/AppRequestHandler.cpp b/MQWeb/src/AppRequestHandler.cpp index 81512e2..f85b73f 100644 --- a/MQWeb/src/AppRequestHandler.cpp +++ b/MQWeb/src/AppRequestHandler.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AppRequestHandler.h" #include "Poco/Net/HTTPRequestHandlerFactory.h" diff --git a/MQWeb/src/Application.cpp b/MQWeb/src/Application.cpp index d3a315a..b269a07 100644 --- a/MQWeb/src/Application.cpp +++ b/MQWeb/src/Application.cpp @@ -1,22 +1,22 @@ /* -* Copyright 2010 MQWeb - Franky Braem +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: * -* Licensed under the EUPL, Version 1.1 or – as soon they -* will be approved by the European Commission - subsequent -* versions of the EUPL (the "Licence"); -* You may not use this work except in compliance with the -* Licence. -* You may obtain a copy of the Licence at: +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. * -* http://joinup.ec.europa.eu/software/page/eupl -* -* Unless required by applicable law or agreed to in -* writing, software distributed under the Licence is -* distributed on an "AS IS" basis, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -* express or implied. -* See the Licence for the specific language governing -* permissions and limitations under the Licence. +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. */ #include "MQ/MQSubsystem.h" #include "MQ/Web/Version.h" diff --git a/MQWeb/src/AuthenticationInformationController.cpp b/MQWeb/src/AuthenticationInformationController.cpp index 0a4a5bf..b20c0a3 100644 --- a/MQWeb/src/AuthenticationInformationController.cpp +++ b/MQWeb/src/AuthenticationInformationController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AuthenticationInformationController.h" #include "MQ/Web/AuthenticationInformationMapper.h" diff --git a/MQWeb/src/AuthenticationInformationMapper.cpp b/MQWeb/src/AuthenticationInformationMapper.cpp index cde093a..816981d 100644 --- a/MQWeb/src/AuthenticationInformationMapper.cpp +++ b/MQWeb/src/AuthenticationInformationMapper.cpp @@ -1,29 +1,29 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AuthenticationInformationMapper.h" namespace MQ { namespace Web { -AuthenticationInformationMapper::AuthenticationInformationMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +AuthenticationInformationMapper::AuthenticationInformationMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "AuthenticationInformation", input) { } diff --git a/MQWeb/src/AuthorityRecordController.cpp b/MQWeb/src/AuthorityRecordController.cpp index 1b1893d..6091a9d 100644 --- a/MQWeb/src/AuthorityRecordController.cpp +++ b/MQWeb/src/AuthorityRecordController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AuthorityRecordController.h" #include "MQ/Web/AuthorityRecordMapper.h" @@ -59,7 +59,7 @@ void AuthorityRecordController::inquire() std::vector parameters = getParameters(); // First parameter is queuemanager - // Second parameter can be a authentication information name and will result in inquiring + // Second parameter can be a authentication information name and will result in inquiring // only that queue and ignores all query parameters. if ( parameters.size() > 1 ) { @@ -68,10 +68,10 @@ void AuthorityRecordController::inquire() else { // Handle query parameters - if ( form().has("ProfileName") ) + if ( form().has("ProfileName") ) { pcfParameters->set("ProfileName", form().get("ProfileName")); - } + } else if ( form().has("Name") ) { pcfParameters->set("ProfileName", form().get("Name")); @@ -91,7 +91,7 @@ void AuthorityRecordController::inquire() Poco::JSON::Array::Ptr jsonOptions = new Poco::JSON::Array(); pcfParameters->set("Options", jsonOptions); - for(Poco::Net::NameValueCollection::ConstIterator itOptions = form().find("Options"); + for(Poco::Net::NameValueCollection::ConstIterator itOptions = form().find("Options"); itOptions != form().end() && Poco::icompare(itOptions->first, "Options") == 0; ++itOptions) { diff --git a/MQWeb/src/AuthorityRecordMapper.cpp b/MQWeb/src/AuthorityRecordMapper.cpp index 82cf129..d975990 100644 --- a/MQWeb/src/AuthorityRecordMapper.cpp +++ b/MQWeb/src/AuthorityRecordMapper.cpp @@ -1,29 +1,29 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AuthorityRecordMapper.h" namespace MQ { namespace Web { -AuthorityRecordMapper::AuthorityRecordMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +AuthorityRecordMapper::AuthorityRecordMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "AuthorityRecord", input) { } diff --git a/MQWeb/src/AuthorityServiceController.cpp b/MQWeb/src/AuthorityServiceController.cpp index 273aaa2..9fa048b 100644 --- a/MQWeb/src/AuthorityServiceController.cpp +++ b/MQWeb/src/AuthorityServiceController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AuthorityServiceController.h" #include "MQ/Web/AuthorityServiceMapper.h" diff --git a/MQWeb/src/AuthorityServiceMapper.cpp b/MQWeb/src/AuthorityServiceMapper.cpp index 5851591..290347c 100644 --- a/MQWeb/src/AuthorityServiceMapper.cpp +++ b/MQWeb/src/AuthorityServiceMapper.cpp @@ -1,29 +1,29 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/AuthorityServiceMapper.h" namespace MQ { namespace Web { -AuthorityServiceMapper::AuthorityServiceMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +AuthorityServiceMapper::AuthorityServiceMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "AuthorityService", input) { } @@ -57,7 +57,7 @@ Poco::JSON::Array::Ptr AuthorityServiceMapper::inquire() // Required parameters addAttributeList(MQIACF_AUTH_SERVICE_ATTRS, "AuthServiceAttrs"); - + // Optional parameters addParameter(MQCACF_SERVICE_COMPONENT, "ServiceComponent"); diff --git a/MQWeb/src/ChannelController.cpp b/MQWeb/src/ChannelController.cpp index 3c9b1cf..6f89a5e 100644 --- a/MQWeb/src/ChannelController.cpp +++ b/MQWeb/src/ChannelController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ChannelController.h" #include "MQ/Web/ChannelMapper.h" @@ -53,7 +53,7 @@ void ChannelController::inquire() std::vector parameters = getParameters(); // First parameter is queuemanager // Second parameter can be a channelname. If this is passed - // the query parameter ChannelName is ignored. A third parameter + // the query parameter ChannelName is ignored. A third parameter // can be used for setting the channel type. This parameter can also // be set using the query parameter ChannelType. if ( parameters.size() > 1 ) @@ -147,7 +147,7 @@ void ChannelController::start() { if ( form().has("ChannelName") ) pcfParameters->set("ChannelName", form().get("ChannelName")); } - + if ( form().has("CommandScope") ) pcfParameters->set("CommandScope", form().get("CommandScope")); if ( form().has("ChannelDisposition") ) pcfParameters->set("ChannelDisposition", form().get("ChannelDisposition")); } diff --git a/MQWeb/src/ChannelInitiatorController.cpp b/MQWeb/src/ChannelInitiatorController.cpp index 5b2c895..7ff61c1 100644 --- a/MQWeb/src/ChannelInitiatorController.cpp +++ b/MQWeb/src/ChannelInitiatorController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ChannelInitiatorController.h" #include "MQ/Web/ChannelInitiatorMapper.h" diff --git a/MQWeb/src/ChannelInitiatorMapper.cpp b/MQWeb/src/ChannelInitiatorMapper.cpp index 5a70cdd..e31c66c 100644 --- a/MQWeb/src/ChannelInitiatorMapper.cpp +++ b/MQWeb/src/ChannelInitiatorMapper.cpp @@ -1,30 +1,30 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ChannelInitiatorMapper.h" namespace MQ { namespace Web { -ChannelInitiatorMapper::ChannelInitiatorMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +ChannelInitiatorMapper::ChannelInitiatorMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "ChannelInitiator", input) { } diff --git a/MQWeb/src/ChannelMapper.cpp b/MQWeb/src/ChannelMapper.cpp index c495a10..e67c6be 100644 --- a/MQWeb/src/ChannelMapper.cpp +++ b/MQWeb/src/ChannelMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ChannelMapper.h" namespace MQ { @@ -99,17 +99,17 @@ Poco::JSON::Array::Ptr ChannelMapper::inquire() Poco::JSON::Object::Ptr ChannelMapper::start() { createCommand(MQCMD_START_CHANNEL); - + // Required Parameters addParameter(MQCACH_CHANNEL_NAME, "ChannelName"); - + // Optional Parameters addParameter(MQCACF_COMMAND_SCOPE, "CommandScope"); addParameterNumFromString(MQIACH_CHANNEL_DISP, "ChannelDisposition"); - + PCF::Vector commandResponse; execute(commandResponse); - + if ( commandResponse.size() > 0 ) { PCF::Vector::iterator it = commandResponse.begin(); @@ -118,27 +118,27 @@ Poco::JSON::Object::Ptr ChannelMapper::start() return createError(**it); } } - + return new Poco::JSON::Object(); } - + Poco::JSON::Object::Ptr ChannelMapper::stop() { createCommand(MQCMD_STOP_CHANNEL); - + // Required Parameters addParameter(MQCACH_CHANNEL_NAME, "ChannelName"); - + // Optional Parameters addParameterNumFromString(MQIACH_CHANNEL_DISP, "ChannelDisposition"); addParameterNumFromString(MQIACH_CHANNEL_STATUS, "ChannelStatus"); addParameter(MQCACH_CONNECTION_NAME, "ConnectionName"); addParameterNumFromString(MQIACF_MODE, "Mode"); addParameter(MQCA_Q_MGR_NAME, "QMgrName"); - + PCF::Vector commandResponse; execute(commandResponse); - + if ( commandResponse.size() > 0 ) { PCF::Vector::iterator it = commandResponse.begin(); @@ -147,7 +147,7 @@ Poco::JSON::Object::Ptr ChannelMapper::stop() return createError(**it); } } - + return new Poco::JSON::Object(); } diff --git a/MQWeb/src/ChannelStatusController.cpp b/MQWeb/src/ChannelStatusController.cpp index a43bc5c..2f01b18 100644 --- a/MQWeb/src/ChannelStatusController.cpp +++ b/MQWeb/src/ChannelStatusController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ChannelStatusController.h" #include "MQ/Web/ChannelStatusMapper.h" diff --git a/MQWeb/src/ChannelStatusMapper.cpp b/MQWeb/src/ChannelStatusMapper.cpp index c1fa572..fa56ab5 100644 --- a/MQWeb/src/ChannelStatusMapper.cpp +++ b/MQWeb/src/ChannelStatusMapper.cpp @@ -1,30 +1,30 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ChannelStatusMapper.h" namespace MQ { namespace Web { -ChannelStatusMapper::ChannelStatusMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +ChannelStatusMapper::ChannelStatusMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "ChannelStatus", input) { } diff --git a/MQWeb/src/ClusterQueueManagerController.cpp b/MQWeb/src/ClusterQueueManagerController.cpp index f42348b..8ee3864 100644 --- a/MQWeb/src/ClusterQueueManagerController.cpp +++ b/MQWeb/src/ClusterQueueManagerController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ClusterQueueManagerController.h" #include "MQ/Web/ClusterQueueManagerMapper.h" diff --git a/MQWeb/src/ClusterQueueManagerMapper.cpp b/MQWeb/src/ClusterQueueManagerMapper.cpp index 2206994..894437b 100644 --- a/MQWeb/src/ClusterQueueManagerMapper.cpp +++ b/MQWeb/src/ClusterQueueManagerMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ClusterQueueManagerMapper.h" namespace MQ { diff --git a/MQWeb/src/ConnectionController.cpp b/MQWeb/src/ConnectionController.cpp index c554c0a..e8502fc 100644 --- a/MQWeb/src/ConnectionController.cpp +++ b/MQWeb/src/ConnectionController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ConnectionController.h" #include "MQ/Web/ConnectionMapper.h" diff --git a/MQWeb/src/ConnectionMapper.cpp b/MQWeb/src/ConnectionMapper.cpp index ba21940..3a89970 100644 --- a/MQWeb/src/ConnectionMapper.cpp +++ b/MQWeb/src/ConnectionMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ConnectionMapper.h" #include "Poco/HexBinaryDecoder.h" @@ -26,7 +26,7 @@ namespace MQ { namespace Web { -ConnectionMapper::ConnectionMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +ConnectionMapper::ConnectionMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "Connection", input) { } diff --git a/MQWeb/src/Controller.cpp b/MQWeb/src/Controller.cpp index 27642e2..6c91f51 100644 --- a/MQWeb/src/Controller.cpp +++ b/MQWeb/src/Controller.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "MQ/Web/Controller.h" diff --git a/MQWeb/src/ControllerRequestHandler.cpp b/MQWeb/src/ControllerRequestHandler.cpp index 714d6c4..61f095e 100644 --- a/MQWeb/src/ControllerRequestHandler.cpp +++ b/MQWeb/src/ControllerRequestHandler.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ControllerRequestHandler.h" #include "MQ/Web/AuthenticationInformationController.h" #include "MQ/Web/AuthorityRecordController.h" diff --git a/MQWeb/src/DenyRequestHandler.cpp b/MQWeb/src/DenyRequestHandler.cpp index 79da1ca..dc75db7 100644 --- a/MQWeb/src/DenyRequestHandler.cpp +++ b/MQWeb/src/DenyRequestHandler.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/DenyRequestHandler.h" #include "Poco/Net/HTTPServerRequest.h" @@ -35,7 +34,7 @@ namespace MQ namespace Web { -DenyRequestHandler::DenyRequestHandler() +DenyRequestHandler::DenyRequestHandler() { } diff --git a/MQWeb/src/Dictionary.cpp b/MQWeb/src/Dictionary.cpp index 8ab1da2..5d2a44d 100644 --- a/MQWeb/src/Dictionary.cpp +++ b/MQWeb/src/Dictionary.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/Dictionary.h" namespace MQ { diff --git a/MQWeb/src/DictionaryCache.cpp b/MQWeb/src/DictionaryCache.cpp index 3a6c6a9..d2f78bf 100644 --- a/MQWeb/src/DictionaryCache.cpp +++ b/MQWeb/src/DictionaryCache.cpp @@ -1,23 +1,23 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +/* +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "Poco/Logger.h" #include "Poco/Util/Application.h" diff --git a/MQWeb/src/ListenerController.cpp b/MQWeb/src/ListenerController.cpp index ebc0a95..b3b2728 100644 --- a/MQWeb/src/ListenerController.cpp +++ b/MQWeb/src/ListenerController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ListenerController.h" #include "MQ/Web/ListenerMapper.h" @@ -52,7 +52,7 @@ void ListenerController::inquire() std::vector parameters = getParameters(); // First parameter is queuemanager - // Second parameter can be a listenername and will result in inquiring + // Second parameter can be a listenername and will result in inquiring // only that listener. if ( parameters.size() > 1 ) { diff --git a/MQWeb/src/ListenerMapper.cpp b/MQWeb/src/ListenerMapper.cpp index baf2027..d94aa6a 100644 --- a/MQWeb/src/ListenerMapper.cpp +++ b/MQWeb/src/ListenerMapper.cpp @@ -1,29 +1,29 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ListenerMapper.h" namespace MQ { namespace Web { -ListenerMapper::ListenerMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +ListenerMapper::ListenerMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "Listener", input) { } diff --git a/MQWeb/src/ListenerStatusController.cpp b/MQWeb/src/ListenerStatusController.cpp index 1e9a2ea..2c675d9 100644 --- a/MQWeb/src/ListenerStatusController.cpp +++ b/MQWeb/src/ListenerStatusController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ListenerStatusController.h" #include "MQ/Web/ListenerStatusMapper.h" @@ -52,7 +52,7 @@ void ListenerStatusController::inquire() std::vector parameters = getParameters(); // First parameter is queuemanager - // Second parameter can be a listenername and will result in inquiring + // Second parameter can be a listenername and will result in inquiring // only that listener. if ( parameters.size() > 1 ) { diff --git a/MQWeb/src/ListenerStatusMapper.cpp b/MQWeb/src/ListenerStatusMapper.cpp index cf3d650..a086324 100644 --- a/MQWeb/src/ListenerStatusMapper.cpp +++ b/MQWeb/src/ListenerStatusMapper.cpp @@ -1,29 +1,29 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ListenerStatusMapper.h" namespace MQ { namespace Web { -ListenerStatusMapper::ListenerStatusMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +ListenerStatusMapper::ListenerStatusMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "ListenerStatus", input) { } @@ -54,7 +54,7 @@ void ListenerStatusMapper::copy(bool replace) Poco::JSON::Array::Ptr ListenerStatusMapper::inquire() { createCommand(MQCMD_INQUIRE_LISTENER_STATUS); - + // Required parameters addParameter(MQCACH_LISTENER_NAME, "ListenerName"); diff --git a/MQWeb/src/MQController.cpp b/MQWeb/src/MQController.cpp index 50cc507..c7262b9 100644 --- a/MQWeb/src/MQController.cpp +++ b/MQWeb/src/MQController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "Poco/Util/Application.h" #include "Poco/Dynamic/Struct.h" #include "Poco/JSON/Object.h" @@ -149,7 +149,7 @@ void MQController::afterAction() { date->set("end", Poco::DateTimeFormatter::format(Poco::Timestamp(), Poco::DateTimeFormat::HTTP_FORMAT)); } - + _stopwatch.stop(); _meta->set("elapsed", (double) _stopwatch.elapsed() / 1000000 ); diff --git a/MQWeb/src/MQMapper.cpp b/MQWeb/src/MQMapper.cpp index 88fba46..c17009c 100644 --- a/MQWeb/src/MQMapper.cpp +++ b/MQWeb/src/MQMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/MQMapper.h" #include "MQ/MQException.h" @@ -47,7 +47,7 @@ Dictionary MQMapper::_operators = Dictionary() (MQCFOP_EXCLUDES_GEN, "EXG") ; -MQMapper::MQMapper(CommandServer& commandServer, const std::string& objectType, Poco::JSON::Object::Ptr input) +MQMapper::MQMapper(CommandServer& commandServer, const std::string& objectType, Poco::JSON::Object::Ptr input) : _commandServer(commandServer) , _input(input) { @@ -117,7 +117,7 @@ void MQMapper::addIntegerFilter() std::string opString = integerFilter->optValue("Operator", "EQ"); MQLONG op = getOperator(Poco::toUpper(opString)); if ( op == -1 ) op = MQCFOP_EQUAL; - + Poco::Dynamic::Var value = integerFilter->get("FilterValue"); MQLONG filterValue; if ( value.isString() ) @@ -148,7 +148,7 @@ void MQMapper::addStringFilter() std::string opString = stringFilter->optValue("Operator", "EQ"); MQLONG op = getOperator(Poco::toUpper(opString)); if ( op == -1 ) op = MQCFOP_EQUAL; - + std::string filterValue = stringFilter->optValue("FilterValue", ""); _pcf->addFilter(parameter, op, filterValue); } @@ -163,7 +163,7 @@ void MQMapper::addAttributeList(MQLONG attrId, const std::string& attr) if ( !attrs.isNull() && attrs->size() > 0 ) { std::vector numList; - + for(Poco::JSON::Array::ValueVec::const_iterator it = attrs->begin(); it != attrs->end(); ++it) { if ( Poco::icompare(it->toString(), "All") == 0 ) @@ -210,9 +210,9 @@ void MQMapper::execute(PCF::Vector& response) if ( response.size() > 0 ) { PCF::Vector::const_iterator it = response.begin(); - if ( (*it)->getCompletionCode() == MQCC_FAILED - && (*it)->getReasonCode() > 3000 - && (*it)->getReasonCode() < 4000 + if ( (*it)->getCompletionCode() == MQCC_FAILED + && (*it)->getReasonCode() > 3000 + && (*it)->getReasonCode() < 4000 && (*it)->getReasonCode() != MQRCCF_NONE_FOUND && (*it)->getReasonCode() != MQRCCF_CHL_STATUS_NOT_FOUND && (*it)->getReasonCode() != MQRCCF_TOPIC_STRING_NOT_FOUND ) diff --git a/MQWeb/src/MQWebController.cpp b/MQWeb/src/MQWebController.cpp index b2c62ed..4eccbfd 100644 --- a/MQWeb/src/MQWebController.cpp +++ b/MQWeb/src/MQWebController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "Poco/JSON/Object.h" #include "Poco/Util/Application.h" #include "Poco/Process.h" diff --git a/MQWeb/src/MessageController.cpp b/MQWeb/src/MessageController.cpp index 70bf2e9..5452a27 100644 --- a/MQWeb/src/MessageController.cpp +++ b/MQWeb/src/MessageController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include #include @@ -687,7 +687,7 @@ void MessageController::mapJSONToMessage(const Poco::JSON::Object& obj, Message& if ( obj.has("PutDatetime") ) { int tzd; - try + try { Poco::DateTime dateTime = Poco::DateTimeParser::parse("%Y-%m-%d %H:%M:%S.%i", obj.optValue("PutDatetime", ""), tzd); message.setPutDatetime(dateTime, tzd); @@ -730,7 +730,7 @@ void MessageController::publish() } std::string topicName = parameters[1]; - + Poco::SharedPtr topic; std::string topicStr; if ( parameters.size() > 2 ) diff --git a/MQWeb/src/NamelistController.cpp b/MQWeb/src/NamelistController.cpp index 4fe249e..67a5f37 100644 --- a/MQWeb/src/NamelistController.cpp +++ b/MQWeb/src/NamelistController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/NamelistController.h" #include "MQ/Web/NamelistMapper.h" @@ -52,7 +52,7 @@ void NamelistController::inquire() std::vector parameters = getParameters(); // First parameter is queuemanager - // Second parameter can be a namelistname and will result in inquiring + // Second parameter can be a namelistname and will result in inquiring // only that namelist. if ( parameters.size() > 1 ) { diff --git a/MQWeb/src/NamelistMapper.cpp b/MQWeb/src/NamelistMapper.cpp index c9e2318..5d7ebd9 100644 --- a/MQWeb/src/NamelistMapper.cpp +++ b/MQWeb/src/NamelistMapper.cpp @@ -1,30 +1,30 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/NamelistMapper.h" namespace MQ { namespace Web { -NamelistMapper::NamelistMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +NamelistMapper::NamelistMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "Namelist", input) { } diff --git a/MQWeb/src/ProcessController.cpp b/MQWeb/src/ProcessController.cpp index c15257d..eed0ebc 100644 --- a/MQWeb/src/ProcessController.cpp +++ b/MQWeb/src/ProcessController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ProcessController.h" #include "MQ/Web/ProcessMapper.h" diff --git a/MQWeb/src/ProcessMapper.cpp b/MQWeb/src/ProcessMapper.cpp index e0d27ed..30f389f 100644 --- a/MQWeb/src/ProcessMapper.cpp +++ b/MQWeb/src/ProcessMapper.cpp @@ -1,30 +1,30 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ProcessMapper.h" namespace MQ { namespace Web { -ProcessMapper::ProcessMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +ProcessMapper::ProcessMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "Process", input) { } diff --git a/MQWeb/src/QueueController.cpp b/MQWeb/src/QueueController.cpp index a75ab4c..9151646 100644 --- a/MQWeb/src/QueueController.cpp +++ b/MQWeb/src/QueueController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueController.h" #include "MQ/Web/QueueMapper.h" diff --git a/MQWeb/src/QueueManagerConfig.cpp b/MQWeb/src/QueueManagerConfig.cpp index b0ec60a..84e831a 100644 --- a/MQWeb/src/QueueManagerConfig.cpp +++ b/MQWeb/src/QueueManagerConfig.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2017 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerConfig.h" namespace MQ { diff --git a/MQWeb/src/QueueManagerController.cpp b/MQWeb/src/QueueManagerController.cpp index cbe69f6..946fe8d 100644 --- a/MQWeb/src/QueueManagerController.cpp +++ b/MQWeb/src/QueueManagerController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerController.h" #include "MQ/Web/QueueManagerMapper.h" diff --git a/MQWeb/src/QueueManagerDatabaseConfig.cpp b/MQWeb/src/QueueManagerDatabaseConfig.cpp index 98a9348..39311cb 100644 --- a/MQWeb/src/QueueManagerDatabaseConfig.cpp +++ b/MQWeb/src/QueueManagerDatabaseConfig.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2017 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerDatabaseConfig.h" namespace MQ { diff --git a/MQWeb/src/QueueManagerDefaultConfig.cpp b/MQWeb/src/QueueManagerDefaultConfig.cpp index d9b727b..2f9d119 100644 --- a/MQWeb/src/QueueManagerDefaultConfig.cpp +++ b/MQWeb/src/QueueManagerDefaultConfig.cpp @@ -1,24 +1,23 @@ /* - * Copyright 2017 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ - +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerDefaultConfig.h" namespace MQ { diff --git a/MQWeb/src/QueueManagerMapper.cpp b/MQWeb/src/QueueManagerMapper.cpp index eb30a3a..5b72c3a 100644 --- a/MQWeb/src/QueueManagerMapper.cpp +++ b/MQWeb/src/QueueManagerMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerMapper.h" namespace MQ { diff --git a/MQWeb/src/QueueManagerPoolCache.cpp b/MQWeb/src/QueueManagerPoolCache.cpp index 4d53b30..594acbe 100644 --- a/MQWeb/src/QueueManagerPoolCache.cpp +++ b/MQWeb/src/QueueManagerPoolCache.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "Poco/Util/Application.h" #include "Poco/Data/SessionFactory.h" #include "Poco/Data/SQLite/Connector.h" @@ -92,7 +92,7 @@ QueueManagerPool::Ptr QueueManagerPoolCache::createPool(const std::string& qmgrN Poco::Logger& logger = Poco::Logger::get("mq.web"); poco_information_f3(logger, "Using connector %s with connection %s to get information for queuemanager %s", dbConnector, dbConnection, qmgrName); - try + try { qmgrConfig = new QueueManagerDatabaseConfig(qmgrName, dbConnector, dbConnection); } @@ -130,7 +130,7 @@ QueueManagerPool::Ptr QueueManagerPoolCache::createPool(const std::string& qmgrN factory = new QueueManagerFactory(qmgrName); } - if (!factory.isNull()) + if (!factory.isNull()) { std::size_t capacity; std::size_t peakCapacity; diff --git a/MQWeb/src/QueueManagerStatusController.cpp b/MQWeb/src/QueueManagerStatusController.cpp index 53697ef..0495a91 100644 --- a/MQWeb/src/QueueManagerStatusController.cpp +++ b/MQWeb/src/QueueManagerStatusController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerStatusController.h" #include "MQ/Web/QueueManagerStatusMapper.h" diff --git a/MQWeb/src/QueueManagerStatusMapper.cpp b/MQWeb/src/QueueManagerStatusMapper.cpp index 97a4859..09c8051 100644 --- a/MQWeb/src/QueueManagerStatusMapper.cpp +++ b/MQWeb/src/QueueManagerStatusMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueManagerStatusMapper.h" namespace MQ { diff --git a/MQWeb/src/QueueMapper.cpp b/MQWeb/src/QueueMapper.cpp index 0f634f0..61a3928 100644 --- a/MQWeb/src/QueueMapper.cpp +++ b/MQWeb/src/QueueMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueMapper.h" namespace MQ { diff --git a/MQWeb/src/QueueStatusController.cpp b/MQWeb/src/QueueStatusController.cpp index c1a3b7e..5f24158 100644 --- a/MQWeb/src/QueueStatusController.cpp +++ b/MQWeb/src/QueueStatusController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueStatusController.h" #include "MQ/Web/QueueStatusMapper.h" diff --git a/MQWeb/src/QueueStatusMapper.cpp b/MQWeb/src/QueueStatusMapper.cpp index 2df0b33..8d0bc01 100644 --- a/MQWeb/src/QueueStatusMapper.cpp +++ b/MQWeb/src/QueueStatusMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or ? as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/QueueStatusMapper.h" namespace MQ { diff --git a/MQWeb/src/RequestHandlerFactory.cpp b/MQWeb/src/RequestHandlerFactory.cpp index 39182d2..1308ddb 100644 --- a/MQWeb/src/RequestHandlerFactory.cpp +++ b/MQWeb/src/RequestHandlerFactory.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/RequestHandlerFactory.h" #include "MQ/Web/AppRequestHandler.h" #include "MQ/Web/DenyRequestHandler.h" diff --git a/MQWeb/src/ServiceController.cpp b/MQWeb/src/ServiceController.cpp index 6a119a9..184bb9c 100644 --- a/MQWeb/src/ServiceController.cpp +++ b/MQWeb/src/ServiceController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ServiceController.h" #include "MQ/Web/ServiceMapper.h" diff --git a/MQWeb/src/ServiceMapper.cpp b/MQWeb/src/ServiceMapper.cpp index ba090f8..34a36cb 100644 --- a/MQWeb/src/ServiceMapper.cpp +++ b/MQWeb/src/ServiceMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/ServiceMapper.h" namespace MQ { diff --git a/MQWeb/src/SubscriptionController.cpp b/MQWeb/src/SubscriptionController.cpp index 48d7f3a..30c868c 100644 --- a/MQWeb/src/SubscriptionController.cpp +++ b/MQWeb/src/SubscriptionController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/SubscriptionController.h" #include "MQ/Web/SubscriptionMapper.h" diff --git a/MQWeb/src/SubscriptionMapper.cpp b/MQWeb/src/SubscriptionMapper.cpp index db820d1..5c1a148 100644 --- a/MQWeb/src/SubscriptionMapper.cpp +++ b/MQWeb/src/SubscriptionMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/SubscriptionMapper.h" #include "Poco/HexBinaryDecoder.h" @@ -26,7 +26,7 @@ namespace MQ { namespace Web { -SubscriptionMapper::SubscriptionMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +SubscriptionMapper::SubscriptionMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "Sub", input) { } diff --git a/MQWeb/src/SubscriptionStatusController.cpp b/MQWeb/src/SubscriptionStatusController.cpp index 8fe1de7..7764e62 100644 --- a/MQWeb/src/SubscriptionStatusController.cpp +++ b/MQWeb/src/SubscriptionStatusController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/SubscriptionStatusController.h" #include "MQ/Web/SubscriptionStatusMapper.h" diff --git a/MQWeb/src/SubscriptionStatusMapper.cpp b/MQWeb/src/SubscriptionStatusMapper.cpp index e7995ba..357ccf1 100644 --- a/MQWeb/src/SubscriptionStatusMapper.cpp +++ b/MQWeb/src/SubscriptionStatusMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/SubscriptionStatusMapper.h" #include "Poco/HexBinaryDecoder.h" @@ -26,7 +26,7 @@ namespace MQ { namespace Web { -SubscriptionStatusMapper::SubscriptionStatusMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +SubscriptionStatusMapper::SubscriptionStatusMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "SubStatus", input) { } diff --git a/MQWeb/src/TopicController.cpp b/MQWeb/src/TopicController.cpp index bc7759d..f7a002b 100644 --- a/MQWeb/src/TopicController.cpp +++ b/MQWeb/src/TopicController.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/TopicController.h" #include "MQ/Web/TopicMapper.h" diff --git a/MQWeb/src/TopicMapper.cpp b/MQWeb/src/TopicMapper.cpp index 413b78e..8386b8e 100644 --- a/MQWeb/src/TopicMapper.cpp +++ b/MQWeb/src/TopicMapper.cpp @@ -1,30 +1,30 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/TopicMapper.h" namespace MQ { namespace Web { -TopicMapper::TopicMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) +TopicMapper::TopicMapper(CommandServer& commandServer, Poco::JSON::Object::Ptr input) : MQMapper(commandServer, "Topic", input) { } diff --git a/MQWeb/src/TopicStatusController.cpp b/MQWeb/src/TopicStatusController.cpp index 50fc764..ddd93cd 100644 --- a/MQWeb/src/TopicStatusController.cpp +++ b/MQWeb/src/TopicStatusController.cpp @@ -1,21 +1,23 @@ /* - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/TopicStatusController.h" #include "MQ/Web/TopicStatusMapper.h" diff --git a/MQWeb/src/TopicStatusMapper.cpp b/MQWeb/src/TopicStatusMapper.cpp index a34edfa..ac036fb 100644 --- a/MQWeb/src/TopicStatusMapper.cpp +++ b/MQWeb/src/TopicStatusMapper.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or - as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include "MQ/Web/TopicStatusMapper.h" namespace MQ { diff --git a/MQWeb/src/WebSocketRequestHandler.cpp b/MQWeb/src/WebSocketRequestHandler.cpp index 353024d..5a4ac4f 100644 --- a/MQWeb/src/WebSocketRequestHandler.cpp +++ b/MQWeb/src/WebSocketRequestHandler.cpp @@ -1,23 +1,23 @@ /* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +* Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ #include #include "MQ/Web/Application.h" @@ -40,7 +40,7 @@ namespace Web { class MessageConsumerTask : public Poco::Task { public: - MessageConsumerTask(Poco::SharedPtr ws, QueueManagerPoolGuard::Ptr queueManagerPoolGuard, const std::string& queueName) + MessageConsumerTask(Poco::SharedPtr ws, QueueManagerPoolGuard::Ptr queueManagerPoolGuard, const std::string& queueName) : Poco::Task("MessageConsumer"), _ws(ws), _qmgrPoolGuard(queueManagerPoolGuard), _count(0) { poco_assert_dbg(! queueManagerPoolGuard.isNull()); diff --git a/license.txt b/license.txt index 0f94274..3a25169 100644 --- a/license.txt +++ b/license.txt @@ -1,21 +1,17 @@ -/* - * Copyright 2010 MQWeb - Franky Braem - * - * Licensed under the EUPL, Version 1.1 or – as soon they - * will be approved by the European Commission - subsequent - * versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the - * Licence. - * You may obtain a copy of the Licence at: - * - * http://ec.europa.eu/idabc/eupl 5 - * - * Unless required by applicable law or agreed to in - * writing, software distributed under the Licence is - * distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. - * See the Licence for the specific language governing - * permissions and limitations under the Licence. - */ +Copyright 2017 - KBC Group NV - Franky Braem - The MIT license +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 90610d11296219e1a658ddec4412edf18adbb5c0 Mon Sep 17 00:00:00 2001 From: fbraem Date: Wed, 20 Sep 2017 14:32:47 +0200 Subject: [PATCH 60/60] Update changelog --- ChangeLog.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ChangeLog.txt b/ChangeLog.txt index 286b34c..8ff0208 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -6,6 +6,12 @@ - Browse DLQ messages - Integrate event messages in browse action. Message event action removed. - Dictionary tables changed: 'display' renamed into 'text' + - Changed license from EUPL to MIT + - Add new MQ 9.0.0 attributes + - Add expiry to PCF messages to avoid orphaned messages when the Command + server answers too late + - Queuemanager configuration can be stored in SQLite + - Add mq.web.app.cors-origin property 0.0.13 - Upgrade documents to use latest Jekyll release