From 9fbb2c4ed57dbdf9137bbd62f9925e177f940dd3 Mon Sep 17 00:00:00 2001 From: Herbert Eiselt Date: Mon, 18 Feb 2019 18:49:32 +0100 Subject: Increase Test coverage Increase Test coverage over 50 for SDN-R devicemanager Change-Id: I03eb5887d955abdfd4bdefa58c79c7f5356c9401 Issue-ID: SDNC-650 Signed-off-by: Herbert Eiselt --- sdnr/wt/devicemanager/provider/pom.xml | 25 +- .../base/database/HtDatabaseClientAbstract.java | 264 - .../base/database/HtDatabaseNode.java | 9 +- .../base/database/HtDatabaseUpdateFile.java | 135 +- .../wt/devicemanager/base/database/HtMapper.java | 65 +- .../base/internalTypes/IniConfigurationFile.java | 37 - .../base/internalTypes/InternalDateAndTime.java | 9 +- .../base/internalTypes/Resources.java | 32 +- .../base/internalTypes/TemplateFile.java | 84 - .../devicemanager/base/internalTypes/TimeSpan.java | 650 - .../base/netconf/ONFCoreInterfacePac.java | 37 - .../base/netconf/ONFCoreNetworkElement12.java | 20 +- .../base/netconf/ONFCoreNetworkElementFactory.java | 4 +- .../base/netconf/container/Capabilities.java | 116 +- .../netconf/container/ONFLayerProtocolName.java | 8 +- .../base/netconf/util/GenericTransactionUtils.java | 28 - .../wrapperc/WrapperEquipmentPacRev170402.java | 23 - .../wrapperc/WrapperMicrowaveModelRev170324.java | 142 +- .../wrapperc/WrapperMicrowaveModelRev180907.java | 16 +- .../wrapperc/WrapperMicrowaveModelRev181010.java | 17 +- .../config/HtDevicemanagerConfiguration.java | 15 +- .../wt/devicemanager/config/impl/AaiConfig.java | 9 + .../wt/devicemanager/config/impl/AkkaConfig.java | 9 +- .../impl/database/types/EsEventBase.java | 8 +- .../impl/database/types/EsFaultCurrent.java | 11 +- .../impl/database/types/EsFaultLog.java | 8 +- .../impl/database/types/EsVersionInfo.java | 75 - .../devicemanager/index/impl/IndexMwtnService.java | 4 +- .../index/impl/IndexUpdateService.java | 2 +- .../wt/devicemanager/ptp/impl/GeoLocation.java | 48 - .../ptp/impl/LogicalTerminationPoint.java | 55 - .../sdnr/wt/devicemanager/ptp/impl/Path.java | 54 - .../wt/devicemanager/ptp/impl/PtpManagerImpl.java | 29 - ...rowave-model@2018-10-10.schema-information.json | 2840 ++-- ...otonic-media@2018-09-24.schema-information.json | 136 +- .../tapi-common@2018-08-31.schema-information.json | 592 +- ...connectivity@2018-08-31.schema-information.json | 556 +- .../tapi-dsr@2018-08-31.schema-information.json | 164 +- .../tapi-eth@2018-08-31.schema-information.json | 1424 +- ...notification@2018-08-31.schema-information.json | 520 +- .../tapi-oam@2018-08-31.schema-information.json | 624 +- .../tapi-odu@2018-08-31.schema-information.json | 588 +- ...-computation@2018-08-31.schema-information.json | 324 +- ...otonic-media@2018-08-31.schema-information.json | 632 +- ...api-topology@2018-08-31.schema-information.json | 520 +- ...tual-network@2018-08-31.schema-information.json | 160 +- .../provider/src/main/test/AaiTest.java | 59 - .../provider/src/main/test/AkkaConfigTest.java | 194 - .../provider/src/main/test/ClusterConfigTest.java | 48 - .../provider/src/main/test/ConfigTest.java | 82 - .../provider/src/main/test/ESWebAPITest.java | 37 - .../provider/src/main/test/GeoConfigTest.java | 100 - .../provider/src/main/test/ResTest.java | 76 - .../src/main/test/TestFileChangeNotification.java | 147 - .../provider/src/main/test/UntilTest.java | 38 - .../src/main/test/ZonedDateTimeTimesTest.java | 54 - .../base/database/DBPluginExtractTest.java | 28 - .../provider/src/test/java/ExampleHttpClient.java | 81 - .../provider/src/test/java/TestMappEquipment.java | 39 - .../dcaeConnector/test/DcaePrivateTester.java | 110 - .../dcaeConnector/test/DcaeTestClient.java | 71 - .../dcaeConnector/test/HttpsClient.java | 304 - .../sdnr/wt/devicemanager/test/Test1dm.java | 175 - .../sdnr/wt/devicemanager/test/TestAai.java | 232 + .../sdnr/wt/devicemanager/test/TestAkkaConfig.java | 138 + .../sdnr/wt/devicemanager/test/TestDcae.java | 203 + .../test/TestDevMgrPropertiesFile.java | 245 + .../test/TestDeviceManagerWithDatabase.java | 315 + .../sdnr/wt/devicemanager/test/TestGeoConfig.java | 63 + .../test/TestMaintenanceTimeFilter.java | 85 + .../sdnr/wt/devicemanager/test/TestMapper.java | 25 +- .../wt/devicemanager/test/TestNotification.java | 27 + .../devicemanager/test/TestPerformanceData12.java | 91 + .../test/TestPerformanceData1211.java | 91 + .../test/TestPerformanceData1211p.java | 91 + .../wt/devicemanager/test/TestsCapability.java | 58 + .../test/mock/DataBrokerMountpointMock.java | 9 +- .../test/mock/DataBrokerNetconfMock.java | 14 +- .../wt/devicemanager/test/mock/MountPointMock.java | 35 +- .../test/mock/NotificationPublishServiceMock.java | 17 +- .../test/mock/ReadOnlyTransactionMock.java | 143 - .../test/util/Model1211ObjectMock.java | 151 + .../test/util/Model1211pObjectMock.java | 138 + .../devicemanager/test/util/Model12ObjectMock.java | 160 + .../wt/devicemanager/test/util/ObjectBuilder.java | 85 + .../ReadOnlyTransactionMountpoint1211Mock.java | 208 + .../ReadOnlyTransactionMountpoint1211pMock.java | 209 + .../util/ReadOnlyTransactionMountpoint12Mock.java | 199 + .../provider/src/test/resources/captured-akka.conf | 72 + .../test/resources/elasticsearch/elasticsearch.yml | 103 + .../elasticsearch/index/config/opendaylight.json | 21 + .../modelDescription/CoreModel-ForMicrowave.json | 751 + .../modelDescription/G.874.1-ForMicrowave.json | 546 + ...rowaveModel-ObjectClasses-AirInterface.yin.json | 45 + ...eModel-ObjectClasses-EthernetContainer.yin.json | 41 + ...el-ObjectClasses-PureEthernetStructure.yin.json | 41 + .../mwtn/modelDescription/MicrowaveModel.json | 2940 ++++ .../core-model.schema-information.json | 2296 +++ .../g.874.1-model.schema-information.json | 602 + .../mwtn/modelDescription/maintenancemode.json | 22 + .../microwave-model.schema-information.json | 3161 ++++ .../mwtn/modelDescription/microwave-model.yin.json | 257 + ...rowave-model@2018-10-10.schema-information.json | 3548 +++++ ...el-conditional-packages.schema-information.json | 337 + .../onf-core-model-conditional-packages.yin.json | 79 + ...et-conditional-packages.schema-information.json | 76 + .../onf-ethernet-conditional-packages.yin.json | 41 + .../onf-ptp-dataset.schema-information.json | 435 + .../otn-odu-conditional-packages.yin.json | 75 + ...otonic-media@2018-09-24.schema-information.json | 168 + .../photonic-media@2018-0924.yin.json | 41 + .../modelDescription/plannedNetworkElements.json | 46 + .../index/mwtn/modelDescription/site-link.json | 73 + .../index/mwtn/modelDescription/site.json | 55 + .../tapi-common@2018-08-31.schema-information.json | 738 + ...connectivity@2018-08-31.schema-information.json | 693 + .../tapi-dsr@2018-08-31.schema-information.json | 203 + .../tapi-eth@2018-08-31.schema-information.json | 1778 +++ ...notification@2018-08-31.schema-information.json | 648 + .../tapi-oam@2018-08-31.schema-information.json | 778 + .../tapi-odu@2018-08-31.schema-information.json | 733 + ...-computation@2018-08-31.schema-information.json | 403 + ...otonic-media@2018-08-31.schema-information.json | 798 + ...api-topology@2018-08-31.schema-information.json | 648 + ...tual-network@2018-08-31.schema-information.json | 198 + .../elasticsearch/index/mwtn/mwtnMapping.json | 54 + .../elasticsearch/index/mwtn/mwtnV1Alias.json | 8 + .../index/sdnevents/sdneventsMapping.json | 157 + .../sdnperformance/sdnperformanceMapping.json | 92 + .../delete-by-query/plugin-descriptor.properties | 80 + .../resources/elasticsearch/plugins/head/.jshintrc | 40 + .../elasticsearch/plugins/head/Gruntfile.js | 115 + .../resources/elasticsearch/plugins/head/LICENCE | 13 + .../elasticsearch/plugins/head/README.textile | 98 + .../elasticsearch/plugins/head/_site/app.css | 704 + .../elasticsearch/plugins/head/_site/app.js | 4389 ++++++ .../plugins/head/_site/base/favicon.png | Bin 0 -> 952 bytes .../plugins/head/_site/base/loading.gif | Bin 0 -> 1849 bytes .../plugins/head/_site/base/reset.css | 44 + .../plugins/head/_site/fonts/FontAwesome.otf | Bin 0 -> 62856 bytes .../head/_site/fonts/fontawesome-webfont.eot | Bin 0 -> 38205 bytes .../head/_site/fonts/fontawesome-webfont.svg | 414 + .../head/_site/fonts/fontawesome-webfont.ttf | Bin 0 -> 80652 bytes .../head/_site/fonts/fontawesome-webfont.woff | Bin 0 -> 44432 bytes .../elasticsearch/plugins/head/_site/i18n.js | 93 + .../elasticsearch/plugins/head/_site/index.html | 33 + .../plugins/head/_site/lang/en_strings.js | 177 + .../plugins/head/_site/lang/fr_strings.js | 164 + .../plugins/head/_site/lang/pt_strings.js | 174 + .../plugins/head/_site/lang/tr_strings.js | 177 + .../plugins/head/_site/lang/zh_strings.js | 172 + .../elasticsearch/plugins/head/_site/vendor.css | 1338 ++ .../elasticsearch/plugins/head/_site/vendor.js | 14500 +++++++++++++++++++ .../head/elasticsearch-head.sublime-project | 9 + .../elasticsearch/plugins/head/grunt_fileSets.js | 102 + .../elasticsearch/plugins/head/index.html | 33 + .../elasticsearch/plugins/head/package.json | 31 + .../plugins/head/plugin-descriptor.properties | 4 + .../elasticsearch/plugins/head/src/app/app.css | 39 + .../elasticsearch/plugins/head/src/app/app.js | 132 + .../plugins/head/src/app/base/boot.js | 241 + .../plugins/head/src/app/base/favicon.png | Bin 0 -> 952 bytes .../plugins/head/src/app/base/loading.gif | Bin 0 -> 1849 bytes .../plugins/head/src/app/base/reset.css | 44 + .../plugins/head/src/app/data/boolQuery.js | 75 + .../head/src/app/data/dataSourceInterface.js | 24 + .../plugins/head/src/app/data/metaData.js | 172 + .../plugins/head/src/app/data/metaDataFactory.js | 19 + .../plugins/head/src/app/data/model/model.js | 35 + .../plugins/head/src/app/data/model/modelSpec.js | 74 + .../plugins/head/src/app/data/query.js | 203 + .../head/src/app/data/queryDataSourceInterface.js | 87 + .../head/src/app/data/resultDataSourceInterface.js | 40 + .../plugins/head/src/app/lang/en_strings.js | 177 + .../plugins/head/src/app/lang/fr_strings.js | 164 + .../plugins/head/src/app/lang/pt_strings.js | 174 + .../plugins/head/src/app/lang/tr_strings.js | 177 + .../plugins/head/src/app/lang/zh_strings.js | 172 + .../head/src/app/services/cluster/cluster.js | 47 + .../head/src/app/services/cluster/clusterSpec.js | 65 + .../src/app/services/clusterState/clusterState.js | 73 + .../app/services/clusterState/clusterStateSpec.js | 64 + .../src/app/services/preferences/preferenceSpec.js | 23 + .../src/app/services/preferences/preferences.js | 35 + .../src/app/ui/abstractField/abstractField.css | 1 + .../head/src/app/ui/abstractField/abstractField.js | 49 + .../src/app/ui/abstractPanel/abstractPanel.css | 43 + .../head/src/app/ui/abstractPanel/abstractPanel.js | 83 + .../src/app/ui/abstractWidget/abstractWidget.js | 49 + .../head/src/app/ui/anyRequest/anyRequest.css | 38 + .../head/src/app/ui/anyRequest/anyRequest.js | 235 + .../plugins/head/src/app/ui/browser/browser.css | 7 + .../plugins/head/src/app/ui/browser/browser.js | 58 + .../plugins/head/src/app/ui/button/button.css | 50 + .../plugins/head/src/app/ui/button/button.js | 53 + .../plugins/head/src/app/ui/button/buttonDemo.js | 9 + .../head/src/app/ui/checkField/checkField.js | 25 + .../head/src/app/ui/checkField/checkFieldDemo.js | 45 + .../head/src/app/ui/checkField/checkFieldSpec.js | 34 + .../src/app/ui/clusterConnect/clusterConnect.css | 3 + .../src/app/ui/clusterConnect/clusterConnect.js | 43 + .../app/ui/clusterConnect/clusterConnectSpec.js | 38 + .../src/app/ui/clusterOverview/clusterOverview.css | 0 .../src/app/ui/clusterOverview/clusterOverview.js | 302 + .../plugins/head/src/app/ui/csvTable/csvTable.js | 84 + .../head/src/app/ui/dateHistogram/dateHistogram.js | 104 + .../head/src/app/ui/dialogPanel/dialogPanel.js | 22 + .../src/app/ui/draggablePanel/draggablePanel.js | 42 + .../src/app/ui/filterBrowser/filterBrowser.css | 9 + .../head/src/app/ui/filterBrowser/filterBrowser.js | 205 + .../plugins/head/src/app/ui/header/header.css | 10 + .../plugins/head/src/app/ui/header/header.js | 73 + .../plugins/head/src/app/ui/helpPanel/helpPanel.js | 21 + .../head/src/app/ui/indexOverview/indexOverview.js | 115 + .../head/src/app/ui/indexSelector/indexSelector.js | 45 + .../head/src/app/ui/infoPanel/infoPanel.css | 38 + .../plugins/head/src/app/ui/infoPanel/infoPanel.js | 9 + .../head/src/app/ui/jsonPanel/jsonPanel.css | 4 + .../plugins/head/src/app/ui/jsonPanel/jsonPanel.js | 24 + .../head/src/app/ui/jsonPretty/jsonPretty.css | 22 + .../head/src/app/ui/jsonPretty/jsonPretty.js | 89 + .../head/src/app/ui/menuButton/menuButton.css | 11 + .../head/src/app/ui/menuButton/menuButton.js | 22 + .../head/src/app/ui/menuPanel/menuPanel.css | 30 + .../plugins/head/src/app/ui/menuPanel/menuPanel.js | 43 + .../head/src/app/ui/nodesView/nodesView.css | 88 + .../plugins/head/src/app/ui/nodesView/nodesView.js | 277 + .../head/src/app/ui/nodesView/nodesViewDemo.js | 17 + .../plugins/head/src/app/ui/page/page.js | 14 + .../head/src/app/ui/panelForm/panelForm.css | 12 + .../plugins/head/src/app/ui/panelForm/panelForm.js | 26 + .../head/src/app/ui/queryFilter/queryFilter.css | 62 + .../head/src/app/ui/queryFilter/queryFilter.js | 277 + .../head/src/app/ui/refreshButton/refreshButton.js | 41 + .../src/app/ui/refreshButton/refreshButtonDemo.js | 12 + .../src/app/ui/refreshButton/refreshButtonSpec.js | 92 + .../head/src/app/ui/resultTable/resultTable.js | 55 + .../src/app/ui/selectMenuPanel/selectMenuPanel.css | 11 + .../src/app/ui/selectMenuPanel/selectMenuPanel.js | 33 + .../src/app/ui/sidebarSection/sidebarSection.css | 28 + .../src/app/ui/sidebarSection/sidebarSection.js | 41 + .../head/src/app/ui/splitButton/splitButton.css | 33 + .../head/src/app/ui/splitButton/splitButton.js | 54 + .../head/src/app/ui/splitButton/splitButtonDemo.js | 16 + .../src/app/ui/structuredQuery/structuredQuery.css | 7 + .../src/app/ui/structuredQuery/structuredQuery.js | 95 + .../plugins/head/src/app/ui/table/table.css | 92 + .../plugins/head/src/app/ui/table/table.js | 102 + .../plugins/head/src/app/ui/textField/textField.js | 24 + .../head/src/app/ui/textField/textFieldDemo.js | 13 + .../plugins/head/src/app/ui/toolbar/toolbar.css | 24 + .../plugins/head/src/app/ui/toolbar/toolbar.js | 25 + .../elasticsearch/plugins/head/src/app/ux/class.js | 50 + .../plugins/head/src/app/ux/dragdrop.js | 124 + .../plugins/head/src/app/ux/fieldCollection.js | 25 + .../plugins/head/src/app/ux/observable.js | 46 + .../plugins/head/src/app/ux/singleton.js | 21 + .../plugins/head/src/app/ux/singletonSpec.js | 41 + .../plugins/head/src/app/ux/table.css | 20 + .../head/src/app/ux/templates/templateSpec.js | 81 + .../plugins/head/src/app/ux/templates/templates.js | 32 + .../vendor/dateRangeParser/date-range-parser.js | 203 + .../src/vendor/font-awesome/css/font-awesome.css | 1338 ++ .../vendor/font-awesome/css/font-awesome.min.css | 4 + .../src/vendor/font-awesome/fonts/FontAwesome.otf | Bin 0 -> 62856 bytes .../font-awesome/fonts/fontawesome-webfont.eot | Bin 0 -> 38205 bytes .../font-awesome/fonts/fontawesome-webfont.svg | 414 + .../font-awesome/fonts/fontawesome-webfont.ttf | Bin 0 -> 80652 bytes .../font-awesome/fonts/fontawesome-webfont.woff | Bin 0 -> 44432 bytes .../src/vendor/graphael/g.raphael.standalone.js | 5205 +++++++ .../plugins/head/src/vendor/i18n/i18n.js | 93 + .../plugins/head/src/vendor/joey/joey.js | 57 + .../plugins/head/src/vendor/jquery/jquery.js | 8936 ++++++++++++ .../head/src/vendor/nohtml/jquery-nohtml.js | 96 + .../elasticsearch/plugins/head/test/demo.html | 34 + .../head/test/generators/conflictingField.sh | 50 + .../head/test/generators/delete_all_indices.sh | 6 + .../plugins/head/test/generators/multi_type.sh | 75 + .../plugins/head/test/generators/twitter_feed.sh | 45 + .../plugins/head/test/generators/twitter_river.sh | 28 + .../elasticsearch/plugins/head/test/perf.html | 54 + .../plugins/head/test/spec/specHelper.js | 81 + .../src/test/resources/elasticsearch_update.zip | Bin 0 -> 372 bytes .../src/test/resources/simplelogger.properties | 37 + sdnr/wt/devicemanager/provider/test2.properties | 47 + 285 files changed, 77756 insertions(+), 8109 deletions(-) delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/ResTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211p.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsCapability.java delete mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211ObjectMock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211pObjectMock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model12ObjectMock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ObjectBuilder.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211Mock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211pMock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint12Mock.java create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/index.html create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/grunt_fileSets.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/index.html create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/demo.html create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh create mode 100755 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip create mode 100644 sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties create mode 100644 sdnr/wt/devicemanager/provider/test2.properties (limited to 'sdnr/wt/devicemanager/provider') diff --git a/sdnr/wt/devicemanager/provider/pom.xml b/sdnr/wt/devicemanager/provider/pom.xml index d401ee0d4..e43e51c0d 100644 --- a/sdnr/wt/devicemanager/provider/pom.xml +++ b/sdnr/wt/devicemanager/provider/pom.xml @@ -1,15 +1,20 @@ - + language governing permissions and limitations under the License. + ============LICENSE_END========================================================= +--> @@ -104,12 +109,6 @@ elasticsearch 2.2.0 - com.spatial4j spatial4j @@ -290,6 +289,12 @@ commons-lang3 3.4 + + org.elasticsearch.plugin + delete-by-query + 2.2.0 + test + diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java index 9b7d1159e..5a6554398 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseClientAbstract.java @@ -18,38 +18,27 @@ package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database; import java.io.IOException; -import java.net.InetAddress; -import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashSet; import java.util.Iterator; -import java.util.List; import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.elasticsearch.ElasticsearchException; -import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; -import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; import org.elasticsearch.action.admin.indices.alias.IndicesAliasesResponse; import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; -import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder; import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse; -import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; -import org.elasticsearch.client.transport.TransportClient; -import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.transport.InetSocketTransportAddress; -import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; @@ -65,65 +54,9 @@ public class HtDatabaseClientAbstract implements HtDataBase, AutoCloseable { private final Logger log = LoggerFactory.getLogger(HtDatabaseClientAbstract.class); - private static int DELAYSECONDS = 10; private final Client client; private String esIndexAlias; - /** - * Full database initialization. - * - * @param esIndex Database index - * @param esNodeserverName Servername or Server-IP that hosts the node. - * @param esClusterName Name of the cluster - * @param esNodeName Name of the node within the cluster to connect to. - * @throws UnknownHostException Servername not known. - */ - public HtDatabaseClientAbstract(String esIndex, String esNodeserverName, String esClusterName, String esNodeName) - throws UnknownHostException { - - this.esIndexAlias = esIndex; - - Settings settings = - Settings.settingsBuilder().put("cluster.name", esClusterName).put("node.name", esNodeName).build(); - this.client = getClient(esNodeserverName, settings); - - } - - /** - * Do not use the hostname, but use the IP for getting the client - * - * @param esIndex index to be used by the client - * @param esClusterName name of the ES cluster - * @param esNodeName name of the node - * @throws UnknownHostException if hostname not known - */ - public HtDatabaseClientAbstract(String esIndex, String esClusterName, String esNodeName) - throws UnknownHostException { - - this.esIndexAlias = esIndex; - Settings settings = - Settings.settingsBuilder().put("cluster.name", esClusterName).put("node.name", esNodeName).build(); - this.client = getClient(null, settings); - } - - - /** - * Simple database initialization. Query all ES configuration information from cluster node. - * - * @param esIndex Database index - * @param esNodeserverHostName Servername or Server-IP that hosts the node. - * @throws UnknownHostException Servername not known. - */ - - public HtDatabaseClientAbstract(String esIndex, String esNodeserverHostName) throws UnknownHostException { - - this.esIndexAlias = esIndex; - - Settings settings = Settings.settingsBuilder().put("client.transport.ignore_cluster_name", true) - .put("client.transport.sniff", true).build(); - this.client = getClient(esNodeserverHostName, settings); - } - /** * Simple database initialization. Query all ES configuration information from cluster node. * @@ -140,75 +73,6 @@ public class HtDatabaseClientAbstract implements HtDataBase, AutoCloseable { /*---------------------------------- * some constructing functions, used by public constructors */ - /** - * - * @param esNodeserverName - * @param settings - * @return - * @throws UnknownHostException - */ - private final TransportClient getClient(@Nullable String esNodeserverName, Settings settings) - throws UnknownHostException { - - TransportClient newClient = TransportClient.builder().settings(settings).build(); - - if (esNodeserverName != null) { - InetAddress nodeIp = InetAddress.getByName(esNodeserverName); - newClient.addTransportAddress(new InetSocketTransportAddress(nodeIp, 9300)); - } - - setup(newClient); - return newClient; - } - - private void setup(TransportClient newClient) { - NodesInfoResponse nodeInfos = newClient.admin().cluster().prepareNodesInfo().get(); - String clusterName = nodeInfos.getClusterName().value(); - - // ------ Debug/ Info - StringBuffer logInfo = new StringBuffer(); - logInfo.append("Create ES Client an localhost for Cluster '"); - logInfo.append(clusterName); - logInfo.append("' for index '"); - logInfo.append(esIndexAlias); - logInfo.append("' Nodelist: "); - for (DiscoveryNode node : newClient.connectedNodes()) { - logInfo.append("("); - logInfo.append(node.toString()); - logInfo.append(") "); - } - log.info(logInfo.toString()); - // ------ Debug/ Info - - log.info("Starting Database service. Short wait."); - - ClusterHealthResponse nodeStatus = newClient.admin().cluster().prepareHealth().setWaitForGreenStatus() - // .setWaitForYellowStatus() - .setTimeout(TimeValue.timeValueSeconds(DELAYSECONDS)).get(); - log.debug("Elasticsearch client started with status {}", nodeStatus.toString()); - - - List nodeList = newClient.connectedNodes(); - - if (nodeList.isEmpty()) { - log.info("ES Client created for nodes: "); - } else { - int t = 0; - for (DiscoveryNode dn : nodeList) { - log.info("ES Client created for node#{}: {}", t, dn.getName()); - } - } - - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - log.info("Shutdown node " + HtDatabaseClientAbstract.class.getSimpleName()); - } - }); - - log.info("Database service started."); - - } /*---------------------------------- @@ -242,33 +106,6 @@ public class HtDatabaseClientAbstract implements HtDataBase, AutoCloseable { client.close(); } - /** - * Create an ES index. Delete an existing index. - */ - public void doDeleteIndex() { - log.info("Remove index {}", esIndexAlias); - - if (esIndexAlias == null) { - throw new IllegalArgumentException("Missing Index"); - } - - try { - - // Delete index - IndicesExistsResponse res = client.admin().indices().prepareExists(esIndexAlias).execute().actionGet(); - - if (res.isExists()) { - log.info("Delete Index start: {}", esIndexAlias); - DeleteIndexRequestBuilder delIdx = client.admin().indices().prepareDelete(esIndexAlias); - delIdx.execute().actionGet(); - log.info("Delete Index done."); - } - - } catch (ElasticsearchException e) { - log.warn(e.getDetailedMessage()); - } - } - /** * Verify if index already created * @@ -411,107 +248,6 @@ public class HtDatabaseClientAbstract implements HtDataBase, AutoCloseable { doCreateIndexWithMapping(null); } - /** - * Write a JSON mapping definition for a document from a file to ES Hint: A later change of the - * mapping is not possible. - * - * @param jsonString String with mapping definition in JSON Format - */ - - public void doWriteMappingJson(String jsonString) { - - if (esIndexAlias == null) { - throw new IllegalArgumentException("Missing Index"); - } - if (jsonString == null) { - String s = "Mapping string parameter is null"; - log.warn(s); - throw new IllegalArgumentException(s); - } - - try { - // MAPPING GOES HERE - log.debug("Check status of ES index: {}", esIndexAlias); - - final IndicesExistsResponse indexStatus = - client.admin().indices().prepareExists(esIndexAlias).execute().actionGet(); - - if (indexStatus.isExists()) { - log.debug("ES index exists: {}", esIndexAlias); - // A change of mapping is not working. This here works only for new datatypes - - PutMappingResponse res = client.admin().indices().preparePutMapping(esIndexAlias).setSource(jsonString) - .execute().actionGet(); - if (log.isDebugEnabled()) { - log.debug("Result: {}", res); - } - - } else { - log.debug("Create not existing ES index: {}", esIndexAlias); - - CreateIndexRequestBuilder createIndexRequestBuilder = - client.admin().indices().prepareCreate(esIndexAlias); - createIndexRequestBuilder.addMapping(jsonString).execute().actionGet(); - } - - } catch (ElasticsearchException e) { - log.warn(e.getDetailedMessage()); - } - } - - /** - * Write a Json mapping definition for a document from a file to ES - * - * @param fileName Filename with json definition. - */ - public void doWriteMappingFromFile(String fileName) { - - - log.info("Write mapping from File: {}", fileName); - - if (esIndexAlias == null) { - throw new IllegalArgumentException("Missing Index"); - } - - if (fileName == null) { - log.warn("No mapping for {} specified in parameter file.", esIndexAlias); - return; - } - - String content = null; - - try { - content = new String(Files.readAllBytes(Paths.get(fileName)), StandardCharsets.UTF_8); - } catch (IOException e1) { - log.warn("Problem with file {}: {}", fileName, e1.getMessage()); - } - - doWriteMappingJson(content); - - } - - /** - * Write list with json objects from json files - * - * @param docTypeAndFileName List with 2 String Array. String[0] Contains the dataType name - * String[1] Contains the filename - */ - public void doWriteJsonFiles(List docTypeAndFileName) { - - if (docTypeAndFileName != null) { - log.debug("Write number of JSONFiles: {}", docTypeAndFileName.size()); - int t = 1; - for (String[] s : docTypeAndFileName) { - if (s.length == 2) { - writeJsonObjectsFromFile(s[0], s[1]); - } else { - log.warn("Wrong parameters number. Entry: {}", t); - } - t++; - } - } - } - /** * Write one object into Database * diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java index 47d7570e8..6a23a3460 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java @@ -27,7 +27,6 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import javax.annotation.Nullable; import org.apache.lucene.util.Version; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; import org.elasticsearch.client.Client; @@ -233,13 +232,11 @@ public class HtDatabaseNode implements AutoCloseable { /** * Start as singleton - * + * @param config data + * @param akkaConfig data + * @param geoConfig data * @return the node or null if external node used */ - public static @Nullable HtDatabaseNode start(EsConfig config) throws IllegalStateException { - return start(config, null, null); - } - public static HtDatabaseNode start(EsConfig config, AkkaConfig akkaConfig, GeoConfig geoConfig) { if (isPortAvailable(ES_PORT)) { LOGGER.info("ES Port not in use. Start internal ES."); diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java index f846000b7..186b89c6c 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseUpdateFile.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -34,81 +34,76 @@ import org.json.JSONTokener; public class HtDatabaseUpdateFile extends ZipFile { - public static final String FILENAME_DEFAULT = "elasticsearch_update.zip"; + public static final String FILENAME_DEFAULT = "elasticsearch_update.zip"; - public class EsUpdateObject { - public final String Uri; - public final String Method; - public final JSONObject Body; + public class EsUpdateObject { + public final String Uri; + public final String Method; + public final JSONObject Body; - public EsUpdateObject(JSONObject o) { - this.Uri = o.getString("uri"); - this.Method = o.getString("method"); - this.Body = o.getJSONObject("body"); - } - } + public EsUpdateObject(JSONObject o) { + this.Uri = o.getString("uri"); + this.Method = o.getString("method"); + this.Body = o.getJSONObject("body"); + } + } - public interface FileReadCallback { - void read(EsUpdateObject obj,String filename); + public interface FileReadCallback { + void read(EsUpdateObject obj,String filename); - void onerror(String filename,IOException e); - } + void onerror(String filename,IOException e); + } - private static final Comparator byfilenameComparator = new Comparator() { + private static final Comparator byfilenameComparator = (o1, o2) -> o1.getName().compareTo(o2.getName()); - @Override - public int compare(ZipEntry o1, ZipEntry o2) { - return o1.getName().compareTo(o2.getName()); - } - }; + public HtDatabaseUpdateFile(String filename) throws IOException { + super(filename); + } - public HtDatabaseUpdateFile(String filename) throws IOException { - super(filename); - } + private static String readFile(final InputStream s) throws IOException { + // read file + BufferedReader in = new BufferedReader(new InputStreamReader(s)); + StringBuilder sb = new StringBuilder(); + String inputLine; + while ((inputLine = in.readLine()) != null) { + sb.append(inputLine); + } + in.close(); + s.close(); + return sb.toString(); + } - private static String readFile(final InputStream s) throws IOException { - // read file - BufferedReader in = new BufferedReader(new InputStreamReader(s)); - StringBuilder sb = new StringBuilder(); - String inputLine; - while ((inputLine = in.readLine()) != null) { - sb.append(inputLine); - } - in.close(); - s.close(); - return sb.toString(); - } - - public boolean readFiles(FileReadCallback cb) { - boolean r=true; - Enumeration entries = this.entries(); - ArrayList list = Collections.list(entries); - Collections.sort(list, byfilenameComparator); - for (ZipEntry entry : list) { - if (entry.isDirectory()) - continue; - try { - InputStream stream = this.getInputStream(entry); - Object data = new JSONTokener(readFile(stream)).nextValue(); - stream.close(); - if(data instanceof JSONArray) - { - JSONArray a=(JSONArray)data; - for(int i=0;i entries = this.entries(); + ArrayList list = Collections.list(entries); + Collections.sort(list, byfilenameComparator); + for (ZipEntry entry : list) { + if (entry.isDirectory()) { + continue; + } + try { + InputStream stream = this.getInputStream(entry); + Object data = new JSONTokener(readFile(stream)).nextValue(); + stream.close(); + if(data instanceof JSONArray) + { + JSONArray a=(JSONArray)data; + for(int i=0;i { return objectMapperWrite.objectToJson(object); } - public String objectListToJson( List objectList ) { - return objectMapperWrite.objectListToJson( objectList ); - } - - public T readValue( JsonNode node ) { - - try { - T object = objectMapperRead.readValue(node.traverse(), clazz); - return object; - } catch (JsonParseException e) { - mappingFailures++; - log.warn(e.toString()); - } catch (JsonMappingException e) { - mappingFailures++; - log.warn(e.toString()); - } catch (IOException e) { - mappingFailures++; - log.warn(e.toString()); - } catch (Exception e) { - mappingFailures++; - log.warn(e.toString()); - } - log.warn("Can not parse: {} {} ", clazz, node); - return null; - - } - /** * Do the mapping from Json to class * Block further mapping if there is are to many failures @@ -104,9 +72,9 @@ public class HtMapper { */ public @Nullable T getObjectFromJson(byte[] json) { - if (json == null) - return null; - else if (mappingFailures < 10) { + if (json == null) { + return null; + } else if (mappingFailures < 10) { try { T object = objectMapperRead.readValue(json, clazz); return object; @@ -140,27 +108,4 @@ public class HtMapper { } - /** - * Read json from File. - * @param fileName File with JSON text - * @return Object Object - */ - public T readJsonObjectFromFile( String fileName ) { - byte[] content = null; - log.debug("Filename readJsonObjectFromFile: {}",fileName); - - try { - content = Files.readAllBytes(Paths.get(fileName)); - } catch (IOException e1) { - log.warn("IO Problem: {}", e1.getMessage()); - } - - if (content != null) { - return getObjectFromJson(content); - } else { - return null; - } - } - - } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java index 8fe64b5ca..ebb46547e 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/IniConfigurationFile.java @@ -108,21 +108,6 @@ public class IniConfigurationFile { this.load(); } - public String getProperty(String key, String defValue) { - Section s; - if (key.contains(".")) { - s = this.getSection(key.substring(0, key.indexOf("."))); - key = key.substring(key.indexOf(".") + 1); - } else { - s = this.getSection(SECTIONNAME_ROOT); - } - - String v = s.getProperty(key); - if (v == null || v.isEmpty()) { - return defValue; - } - return v; - } public void setProperty(String key, String value) { Section s; @@ -135,17 +120,6 @@ public class IniConfigurationFile { s.setProperty(key, value); } - public int getProperty(String key, int defValue) throws ConversionException { - Section s; - if (key.contains(".")) { - s = this.getSection(key.substring(0, key.indexOf("."))); - key = key.substring(key.indexOf(".") + 1); - } else { - s = this.getSection(SECTIONNAME_ROOT); - } - - return s.getInt(key, defValue); - } public void setProperty(String key, int value) { Section s; @@ -158,17 +132,6 @@ public class IniConfigurationFile { s.setProperty(key, String.format("%d", value)); } - public boolean getProperty(String key, boolean defValue) throws ConversionException { - Section s; - if (key.contains(".")) { - s = this.getSection(key.substring(0, key.indexOf("."))); - key = key.substring(key.indexOf(".") + 1); - } else { - s = this.getSection(SECTIONNAME_ROOT); - } - - return s.getBoolean(key, defValue); - } public void setProperty(String key, boolean value) { Section s; diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java index cc5b8316d..cc47362c0 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/InternalDateAndTime.java @@ -33,8 +33,9 @@ public class InternalDateAndTime { private static final NetconfTimeStamp NETCONFTIME_CONVERTER = NetconfTimeStamp.getConverter(); private static final InternalDateAndTime TESTPATTERN = new InternalDateAndTime("2017-01-01T00:00:00.0Z"); + private static final String INITIALPATTERN = "0000-00-00T00:00:00.0Z"; - String internalDateAndTime; + String internalDateAndTime = INITIALPATTERN; /** * Static builder ONF1.2 @@ -79,7 +80,11 @@ public class InternalDateAndTime { * @param time as input */ private InternalDateAndTime(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime time) { - internalDateAndTime = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(time.getValue()); + if (time != null) { + internalDateAndTime = NETCONFTIME_CONVERTER.getTimeStampFromNetconf(time.getValue()); + } else { + internalDateAndTime = INITIALPATTERN; + } } /** diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java index b4fec083a..edd9d4968 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/Resources.java @@ -69,10 +69,9 @@ public class Resources { f = new File(RESSOURCEROOT + resFile); } else { try { - f = new File(b.getEntry(resFile).toURI()); } catch (URISyntaxException e) { - + LOG.warn("Con not load file: {}",e.getMessage()); } } return f; @@ -203,10 +202,9 @@ public class Resources { } /** - * Used for reading plugins from resource files - * /elasticsearch/plugins/head - * /etc/elasticsearch-plugins - * /elasticsearch/plugins + * Used for reading plugins from resource files /elasticsearch/plugins/head + * /etc/elasticsearch-plugins /elasticsearch/plugins + * * @param resFolder resource folder pointing to the related files * @param dstFolder destination * @param rootDirToRemove part from full path to remove @@ -232,14 +230,14 @@ public class Resources { srcFilename = srcUrl.getFile(); if (srcFilename.endsWith("/")) { - LOG.warn("Skip directory: {}", srcFilename); - continue; + LOG.warn("Skip directory: {}", srcFilename); + continue; } LOG.debug("try to copy res {} to {}", srcFilename, dstFolder); if (rootDirToRemove != null) { - srcFilename = srcFilename - .substring(srcFilename.indexOf(rootDirToRemove) + rootDirToRemove.length() + 1); + srcFilename = + srcFilename.substring(srcFilename.indexOf(rootDirToRemove) + rootDirToRemove.length() + 1); LOG.debug("dstfilename trimmed to {}", srcFilename); } dstFilename = dstFolder + "/" + srcFilename; @@ -255,7 +253,8 @@ public class Resources { return success; } - private static Enumeration getResourceFolderFiles (String folder) { + + private static Enumeration getResourceFolderFiles(String folder) { LOG.info("Get ressource: {}", folder); URL url = getUrlForRessource(folder); String path = url.getPath(); @@ -266,7 +265,7 @@ public class Resources { for (File f : files) { try { if (f.isDirectory()) { - urlCollection.addAll(Collections.list(getResourceFolderFiles(folder+"/"+f.getName()))); + urlCollection.addAll(Collections.list(getResourceFolderFiles(folder + "/" + f.getName()))); } else { urlCollection.add(f.toURI().toURL()); } @@ -279,13 +278,14 @@ public class Resources { Enumeration urls = Collections.enumeration(urlCollection); return urls; - } + } - private static URL getUrlForRessource (String fileOrDirectory) { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); + private static URL getUrlForRessource(String fileOrDirectory) { + //ClassLoader loader = Thread.currentThread().getContextClassLoader(); + ClassLoader loader = Resources.class.getClassLoader(); URL url = loader.getResource(fileOrDirectory); return url; - } + } public static boolean extractFileTo(String resFile, File oFile) { if (oFile == null) { diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java deleted file mode 100644 index 3703e18a6..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TemplateFile.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -public class TemplateFile { - - protected final HashMap mKeyValuePairs; - private final String mContent; - - public TemplateFile(String content) { - this.mKeyValuePairs = new HashMap<>(); - this.mContent = content; - - } - - public TemplateFile(File f) throws IOException { - this(initialize(f)); - } - - public void addValue(String key, Object value) { - this.mKeyValuePairs.put(key, value); - } - - public void removeValue(String key) { - this.mKeyValuePairs.remove(key); - } - - private String replace() { - String s = this.mContent; - String key; - Object value; - for (Map.Entry entry : this.mKeyValuePairs.entrySet()) { - key = entry.getKey(); - value = entry.getValue(); - if (value != null) { - s = s.replace(key, value.toString()); - } - } - return s; - } - - @Override - public String toString() { - return this.replace(); - } - - private static String initialize(File f) throws FileNotFoundException, IOException { - StringBuilder sb = new StringBuilder(); - try (BufferedReader br = new BufferedReader(new FileReader(f));) { - String line = br.readLine(); - - while (line != null) { - sb.append(line); - line = br.readLine(); - } - br.close(); - } - return sb.toString(); - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java deleted file mode 100644 index 551955d45..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/internalTypes/TimeSpan.java +++ /dev/null @@ -1,650 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -/* - * SoSy-Lab Common is a library of useful utilities. - * This file is part of SoSy-Lab Common. - * - * Copyright (C) 2007-2015 Dirk Beyer - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static java.util.concurrent.TimeUnit.DAYS; -import static java.util.concurrent.TimeUnit.HOURS; -import static java.util.concurrent.TimeUnit.MICROSECONDS; -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static java.util.concurrent.TimeUnit.MINUTES; -import static java.util.concurrent.TimeUnit.NANOSECONDS; -import static java.util.concurrent.TimeUnit.SECONDS; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Ascii; -import com.google.common.collect.EnumHashBiMap; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.Lists; -import com.google.common.collect.Ordering; -import com.google.common.math.LongMath; -import com.google.common.primitives.Longs; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.EnumSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.concurrent.TimeUnit; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.annotation.CheckReturnValue; -import javax.annotation.Nullable; - -/** - * This is an immutable representation of some time span, using a {@link TimeUnit} and a value. - * - *

The value may be positive or negative. All operations check for overflows and underflows, the - * behavior on overflow and underflow differs and is documented for each method. - * - *

Two instances are considered equal if they represent the exact same time span regardless of - * their unit, for example, 60s and 1min are considered equal. - */ - -public final class TimeSpan implements Comparable, Serializable { - - private static final long serialVersionUID = -4013592312989551009L; - - private static final ImmutableSortedSet ALL_UNITS = - ImmutableSortedSet.copyOf(EnumSet.allOf(TimeUnit.class)); - - static { - assert ALL_UNITS.higher(SECONDS).equals(MINUTES); // assert expected order of set - } - - private static final EnumHashBiMap TIME_UNITS = - EnumHashBiMap.create(TimeUnit.class); - - static { - TIME_UNITS.put(NANOSECONDS, "ns"); - TIME_UNITS.put(MICROSECONDS, "µs"); - TIME_UNITS.put(MILLISECONDS, "ms"); - TIME_UNITS.put(SECONDS, "s"); - TIME_UNITS.put(MINUTES, "min"); - TIME_UNITS.put(HOURS, "h"); - TIME_UNITS.put(DAYS, "d"); - } - - private static final Pattern ONLY_DIGITS = Pattern.compile(" *([0-9]+) *"); - - private enum CharType { - BEGIN, - END, - LETTER, - DIGIT, - WHITESPACE - } - - private final long span; - private final TimeUnit unit; - - private TimeSpan(long pSpan, TimeUnit pUnit) { - span = pSpan; - unit = checkNotNull(pUnit); - } - - public static TimeSpan of(long pSpan, TimeUnit pUnit) { - return new TimeSpan(pSpan, pUnit); - } - - public static TimeSpan ofSeconds(long pSeconds) { - return new TimeSpan(pSeconds, SECONDS); - } - - public static TimeSpan ofMillis(long pMillis) { - return new TimeSpan(pMillis, MILLISECONDS); - } - - public static TimeSpan ofNanos(long pNanos) { - return new TimeSpan(pNanos, NANOSECONDS); - } - - public static TimeSpan empty() { - return new TimeSpan(0, DAYS); - } - - /** - * Converts the given {@link String} into a {@link TimeSpan} object. Supported units are day, - * hour, minute and second. - * - * @param input the {@link String} to convert - * @return a {@link TimeSpan} represented by the given {@link String} - * @throws IllegalArgumentException if the input is not a valid string representation of a {@link - * TimeSpan}. - */ - public static TimeSpan valueOf(String input) { - - // only seconds: use simple regex - Matcher secondMatcher = ONLY_DIGITS.matcher(input); - if (secondMatcher.matches()) { - return ofSeconds(Long.parseLong(secondMatcher.group(1))); - } - - // values with units: more elaborate parsing necessary - List tokens = splitIntoTokens(input); - - long days = 0; - long hours = 0; - long minutes = 0; - long seconds = 0; - - Iterator it = tokens.iterator(); - - while (it.hasNext()) { - // first: value - String nextString = it.next(); - long value = Long.parseLong(nextString); - - // second: unit - if (!it.hasNext()) { - throw new IllegalArgumentException("Value " + nextString + " has no unit."); - } - - String unit = it.next(); - switch (unit) { - case "day": - case "days": - case "d": - if (days != 0) { - throw new IllegalArgumentException("Days set twice: " + unit); - } - days = value; - break; - - case "h": - case "hour": - case "hours": - if (hours != 0) { - throw new IllegalArgumentException("Hours set twice: " + unit); - } - hours = value; - break; - - case "min": - case "m": - if (minutes != 0) { - throw new IllegalArgumentException("Minutes set twice: " + unit); - } - minutes = value; - break; - - case "s": - if (seconds != 0) { - throw new IllegalArgumentException("Seconds set twice: " + unit); - } - seconds = value; - break; - - default: - throw new IllegalArgumentException("Unknown unit: " + unit); - } - } - - return sum(of(seconds, SECONDS), of(minutes, MINUTES), of(hours, HOURS), of(days, DAYS)); - } - - private static List splitIntoTokens(String input) { - List tokens = Lists.newArrayList(); - CharType previous = CharType.BEGIN; - int pos = 0; - - for (int i = 0; i <= input.length(); ++i) { - - CharType current; - if (i == input.length()) { - current = CharType.END; - } else { - char currentChar = input.charAt(i); - if (Character.isLetter(currentChar)) { - current = CharType.LETTER; - } else if (Character.isDigit(currentChar)) { - current = CharType.DIGIT; - } else if (Character.isWhitespace(currentChar)) { - current = CharType.WHITESPACE; - } else { - throw new IllegalArgumentException( - "Unreconized character '" + currentChar + "' when parsing " + input); - } - } - - if (current != previous) { - // we want to use the previous token - if (previous == CharType.LETTER || previous == CharType.DIGIT) { - tokens.add(input.substring(pos, i)); - } - - if (current == CharType.LETTER || current == CharType.DIGIT) { - pos = i; - } - - previous = current; - } - } - - return tokens; - } - - /** - * Get the value of this TimeSpan represented in the given unit. If the given unit is larger than - * the current unit, precision may be lost. - * - * @throws ArithmeticException If the value cannot be represented in the given unit due to - * overflow. - */ - public long getChecked(TimeUnit dest) { - if (dest.compareTo(unit) < 0) { - // Example case: we have seconds, but we want milliseconds (can overflow) - long factor = dest.convert(1, unit); - assert factor > 1; - return LongMath.checkedMultiply(span, factor); - } - - // Example case: we have nanoseconds, but we want seconds (cannot overflow) - return dest.convert(span, unit); - } - - /** - * Get the value of this TimeSpan represented in the given unit. If the given unit is larger than - * the current unit, precision may be lost. If the value cannot be represented in the given unit - * due to overflow, Long.MAX_VALUE/Long.MIN_VALUE is returned. - */ - public long getSaturated(TimeUnit dest) { - return dest.convert(span, unit); - } - - /** - * Return a TimeSpan that represents (approximately) the same time span, but whose unit is the - * given unit. If the given unit is larger than the current unit, precision may be lost. - * - * @throws ArithmeticException If the value cannot be represented in the given unit - */ - public TimeSpan toChecked(TimeUnit dest) { - if (dest.equals(unit)) { - return this; - } - return new TimeSpan(getChecked(dest), dest); - } - - /** - * Return a TimeSpan that represents (approximately) the same time span, but whose unit is the - * given unit. If the given unit is larger than the current unit, precision may be lost. If the - * value cannot be represented in the given unit due to overflow, Long.MAX_VALUE/Long.MIN_VALUE is - * returned. - */ - public TimeSpan toSaturated(TimeUnit dest) { - if (dest.equals(unit)) { - return this; - } - return new TimeSpan(getSaturated(dest), dest); - } - - /** - * Return a TimeSpan that represents (approximately) the same time span, but whose unit is the - * given unit, if possible. If the given unit is larger than the current unit, precision may be - * lost. If the value cannot be represented in the given unit due to overflow, the resulting - * TimeSpan does not use the given unit, but the closest unit one that still allows to hold the - * exact value. - */ - @VisibleForTesting - TimeSpan toIfPossible(TimeUnit dest) { - if (dest.equals(unit)) { - return this; - } - if (dest.compareTo(unit) < 0) { - // Example case: we have seconds, but we want milliseconds (can overflow). - // Overflow is expected to be very rare. - // Loop will terminate because at one time "dest" becomes equal to "this.unit" - // and then toChecked succeeds for sure. - while (true) { - try { - return toChecked(dest); - } catch (ArithmeticException e) { - dest = checkNotNull(ALL_UNITS.higher(dest)); - } - } - - } else { - // Example case: we have nanoseconds, but we want seconds (cannot overflow). - return new TimeSpan(getSaturated(dest), dest); - } - } - - /** - * Get the value of this TimeSpan as seconds. If the current unit is smaller than seconds, - * precision may be lost. - * - * @throws ArithmeticException If the value cannot be represented as seconds due to overflow. - */ - public long asSeconds() { - return getChecked(SECONDS); - } - - /** - * Get the value of this TimeSpan as milliseconds. If the current unit is smaller than - * milliseconds, precision may be lost. - * - * @throws ArithmeticException If the value cannot be represented as milliseconds due to overflow. - */ - public long asMillis() { - return getChecked(MILLISECONDS); - } - - /** - * Get the value of this TimeSpan as nanoseconds. - * - * @throws ArithmeticException If the value cannot be represented as milliseconds due to overflow. - */ - public long asNanos() { - return getChecked(NANOSECONDS); - } - - public TimeUnit getUnit() { - return unit; - } - - /** - * Return a strings that represents (approximately) this time span, in the given unit if possible. - * If the given unit is larger than the current unit, precision may be lost. If the value cannot - * be represented in the given unit due to overflow, the result does not use the given unit, but - * the closest unit one that still allows to hold the exact value. - */ - public String formatAs(TimeUnit dest) { - if (dest.compareTo(unit) <= 0) { - // Example case: we have seconds, but we want milliseconds - return toIfPossible(dest).toString(); - } - - // Example case: we have nanoseconds, but we want seconds - long scaleFactor = unit.convert(1L, dest); - assert scaleFactor > 0; - return String.format(Locale.US, "%9.3f%s", (double) span / scaleFactor, TIME_UNITS.get(dest)); - } - - /** Check whether this time span is empty, i.e., represents 0ns (or 0ms or 0s or ...). */ - public boolean isEmpty() { - return span == 0; - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof TimeSpan)) { - return false; - } - TimeSpan other = (TimeSpan) obj; - if (this.unit == other.unit) { - return this.span == other.span; - } - TimeUnit leastCommonUnit = leastCommonUnit(this, other); - try { - return this.getChecked(leastCommonUnit) == other.getChecked(leastCommonUnit); - } catch (ArithmeticException e) { - // In case of overflow, both values cannot be the same. - return false; - } - } - - @Override - public int hashCode() { - // Need to use a fixed unit here to be consistent with equals: - // 60s and 1min need to have the same hashCode. - // Saturation is ok, all really large values just have the same hash code. - return Longs.hashCode(getSaturated(NANOSECONDS)); - } - - @Override - public int compareTo(TimeSpan other) { - if (this.unit == other.unit) { - return Long.compare(this.span, other.span); - } - TimeUnit leastCommonUnit = leastCommonUnit(this, other); - try { - return Long.compare(this.getChecked(leastCommonUnit), other.getChecked(leastCommonUnit)); - } catch (ArithmeticException e) { - // Only one of the two calls can overflow, - // and it has to be the one with the larger unit. - // Thus in case of overflow the TimeSpan with the larger unit also has the larger value. - return this.unit.compareTo(other.unit); - } - } - - private static TimeUnit leastCommonUnit(TimeSpan a, TimeSpan b) { - return Ordering.natural().min(a.unit, b.unit); - } - - @Override - public String toString() { - return DEFAULT_FORMAT.apply(this); - } - - /** - * Create a new time span that is the sum of two time spans. The unit of the returned time span is - * the more precise one if possible, otherwise the closest unit that still allows to hold both - * input values and the result. Note that this can loose precision when adding a very large and a - * very small value. - * - * @throws ArithmeticException If no unit is large enough to represent the result value. - */ - public static TimeSpan sum(TimeSpan a, TimeSpan b) { - TimeUnit leastCommonUnit = leastCommonUnit(a, b); - while (true) { - try { - return new TimeSpan( - LongMath.checkedAdd(a.getChecked(leastCommonUnit), b.getChecked(leastCommonUnit)), - leastCommonUnit); - } catch (ArithmeticException e) { - // Overflow is expected to be very rare, thus handle exception case instead of checking. - // Try again with next unit. - leastCommonUnit = ALL_UNITS.higher(leastCommonUnit); - if (leastCommonUnit == null) { - // overflow from addition - throw e; - } - } - } - } - - /** - * Create a new time span that is the sum of several time spans. The unit of the returned time - * span is the most precise one if possible, otherwise the closest unit that still allows to hold - * input values and the result. Note that this can loose precision when adding very large and very - * small values. - * - * @throws ArithmeticException If no unit is large enough to represent the result value. - */ - public static TimeSpan sum(Iterable timeSpans) { - Iterator it = timeSpans.iterator(); - checkArgument(it.hasNext()); - - TimeSpan result = it.next(); - // TODO Summing in loop looses more precision than necessary. - while (it.hasNext()) { - result = sum(result, it.next()); - } - return result; - } - - /** - * Create a new time span that is the sum of several time spans. The unit of the returned time - * span is the most precise one. - */ - public static TimeSpan sum(TimeSpan... t) { - return sum(Arrays.asList(t)); - } - - /** - * Create a new time span that is the difference of two time spans. The unit of the returned time - * span is the more precise one if possible, otherwise the closest unit that still allows to hold - * both input values and the result. Note that this can loose precision when subtracting a very - * large and a very small value. - */ - public static TimeSpan difference(TimeSpan a, TimeSpan b) { - TimeUnit leastCommonUnit = leastCommonUnit(a, b); - while (true) { - try { - return new TimeSpan( - LongMath.checkedSubtract(a.getChecked(leastCommonUnit), b.getChecked(leastCommonUnit)), - leastCommonUnit); - } catch (ArithmeticException e) { - // Overflow is expected to be very rare, thus handle exception case instead of checking. - // Try again with next unit. - leastCommonUnit = ALL_UNITS.higher(leastCommonUnit); - if (leastCommonUnit == null) { - // overflow from subtraction - throw e; - } - } - } - } - - /** - * Create a new time span that is the current one multiplied by a non-negative integral factor. - * The unit of the returned time span is the same as the current one if possible, otherwise the - * closest unit that still allows to the result. Note that this can loose precision. - */ - @CheckReturnValue - public TimeSpan multiply(int factor) { - checkArgument(factor >= 0, "Cannot multiply TimeSpan with negative value %s", factor); - TimeUnit dest = unit; - while (true) { - try { - return new TimeSpan(LongMath.checkedMultiply(getChecked(dest), factor), dest); - } catch (ArithmeticException e) { - // Overflow is expected to be very rare, thus handle exception case instead of checking. - // Try again with next unit. - dest = ALL_UNITS.higher(dest); - if (dest == null) { - // overflow from multiplication - throw e; - } - } - } - } - - /** - * Create a new time span that is the current one divided by a non-negative integral value. The - * result of the division is rounded down (integer division). The unit of the returned time span - * is the same as the current one. - */ - @CheckReturnValue - public TimeSpan divide(int divisor) { - checkArgument(divisor >= 0, "Cannot divide TimeSpan by negative value %s", divisor); - return new TimeSpan(span / divisor, unit); - } - - // Code for formatting as string - - private static final Function FORMAT_SIMPLE = - pInput -> pInput.span + TIME_UNITS.get(pInput.unit); - - @VisibleForTesting - static final Function FORMAT_HUMAN_READABLE_LARGE = - pInput -> { - TimeUnit unit = pInput.getUnit(); - StringBuilder result = new StringBuilder(); - boolean started = false; - - long years = pInput.getChecked(DAYS) / 365; - if (years > 0) { - started = true; - result.append(years).append("a "); - } - - long days = pInput.getChecked(DAYS) - years * 365; - if (started || days > 0) { - started = true; - result.append(days).append("d "); - } - if (unit.equals(DAYS)) { - return result.toString().trim(); - } - - long hours = pInput.getChecked(HOURS) - years * 365 * 24 - days * 24; - if (started || hours > 0) { - started = true; - result.append(String.format("%02dh ", hours)); - } - if (unit.equals(HOURS)) { - return result.toString().trim(); - } - - long minutes = - pInput.getChecked(MINUTES) - years * 365 * 24 * 60 - days * 24 * 60 - hours * 60; - if (started || minutes > 0) { - result.append(String.format("%02dmin ", minutes)); - } - if (unit.equals(MINUTES)) { - started = true; - return result.toString().trim(); - } - - long seconds = - pInput.getChecked(SECONDS) - - years * 365 * 24 * 60 * 60 - - days * 24 * 60 * 60 - - hours * 60 * 60 - - minutes * 60; - result.append(String.format("%02ds", seconds)); - - return result.toString(); - }; - - private static final String DEFAULT_FORMAT_PROPERTY_NAME = - TimeSpan.class.getCanonicalName() + ".defaultFormat"; - - private static final Function DEFAULT_FORMAT; - - static { - String format = - Ascii.toUpperCase(System.getProperty(DEFAULT_FORMAT_PROPERTY_NAME, "SIMPLE").trim()); - switch (format) { - case "HUMAN_READABLE_LARGE": - DEFAULT_FORMAT = FORMAT_HUMAN_READABLE_LARGE; - break; - case "SIMPLE": - DEFAULT_FORMAT = FORMAT_SIMPLE; - break; - default: - DEFAULT_FORMAT = FORMAT_SIMPLE; - } - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java deleted file mode 100644 index 1c9c8e073..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreInterfacePac.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -/** - * - */ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf; - -/** - * @author herbert - * - */ -public class ONFCoreInterfacePac { - - - Class myClass; - - ONFCoreInterfacePac( Class myClass ) { - this.myClass = myClass; - } - - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java index de43e5760..b57e8c906 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java @@ -336,7 +336,7 @@ public class ONFCoreNetworkElement12 extends ONFCoreNetworkElement12Base } } else { - LOG.debug("Mountpoint '{}' NE-Name '{}'", getMountPointNodeName(), optionalNe.getName().toString()); + LOG.debug("Mountpoint '{}' NE-Name '{}'", getMountPointNodeName(), optionalNe.getName()); List actualInterfaceList = getLtpList(optionalNe); if (!interfaceList.equals(actualInterfaceList)) { LOG.debug("Mountpoint '{}' Update LTP List. Elements {}", getMountPointNodeName(), @@ -364,13 +364,13 @@ public class ONFCoreNetworkElement12 extends ONFCoreNetworkElement12Base UniversalId uuid; synchronized (pmLock) { - for (Lp ltp : interfaceList) { + for (Lp lp : interfaceList) { idxStart = resultList.size(); - uuid = ltp.getUuid(); - Class lpClass = getLpExtension(ltp); + uuid = lp.getUuid(); + Class lpClass = getLpExtension(lp); - ONFLayerProtocolName lpName = ONFLayerProtocolName.valueOf(ltp.getLayerProtocolName()); + ONFLayerProtocolName lpName = ONFLayerProtocolName.valueOf(lp.getLayerProtocolName()); microwaveModel.readTheFaultsOfMicrowaveModel(lpName, lpClass, uuid, resultList); @@ -422,21 +422,21 @@ public class ONFCoreNetworkElement12 extends ONFCoreNetworkElement12Base } /** - * Get from LayProtocolExtensions the related generated ONF Interface PAC class which represents it. + * Get from LayerProtocolExtensions the related generated ONF Interface PAC class which represents it. * - * @param ltp logical termination point + * @param lp logical termination point * @return Class of InterfacePac */ @Nullable - private Class getLpExtension(@Nullable Lp ltp) { + private Class getLpExtension(@Nullable Lp lp) { String capability = EMPTY; String revision = EMPTY; String conditionalPackage = EMPTY; Class res = null; - if (ltp != null) { - for (Extension e : getExtensionList(ltp)) { + if (lp != null) { + for (Extension e : getExtensionList(lp)) { if (e.getValueName().contentEquals("capability")) { capability = e.getValue(); int idx = capability.indexOf("?"); diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java index 3fc8b133f..a314fd99f 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java @@ -18,6 +18,7 @@ package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf; import com.google.common.base.Optional; +import com.google.common.util.concurrent.CheckedFuture; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities; @@ -57,6 +58,7 @@ public class ONFCoreNetworkElementFactory { ONFCoreNetworkElementRepresentation res = null; try (ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction();){ + CheckedFuture, ReadFailedException> checkedFuture = tx.read(LogicalDatastoreType.OPERATIONAL, instanceIdentifier); Optional nodeOption = tx.read(LogicalDatastoreType.OPERATIONAL, instanceIdentifier).checkedGet(); if (nodeOption.isPresent()) { Node node = nodeOption.get(); @@ -64,7 +66,7 @@ public class ONFCoreNetworkElementFactory { if (nnode != null) { ConnectionStatus csts = nnode.getConnectionStatus(); if (csts == ConnectionStatus.Connected) { - Capabilities capabilities = new Capabilities(nnode); + Capabilities capabilities = Capabilities.getAvailableCapabilities(nnode); LOG.info("Mountpoint {} capabilities {}", mountPointNodeName, capabilities); res = ONFCoreNetworkElement12.build(mountPointNodeName, capabilities, mountpointDataBroker, webSocketService, databaseService, dcaeProvider, aotsmClient, maintenanceService, diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java index 008a8fae7..d64996c65 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/Capabilities.java @@ -23,7 +23,6 @@ package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.lang.reflect.Proxy; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -32,29 +31,40 @@ import java.util.Date; import java.util.List; import java.util.Optional; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities; import org.opendaylight.yangtools.yang.common.QName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Wrapper class for capabilites for Boron and later releases. Uses generics because yang model was + * changed from Boron to later version. Interface class: + * org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability + */ public class Capabilities { private static final Logger LOG = LoggerFactory.getLogger(Capabilities.class); - private static final String INTERFACE_AVAILABLECAPABILITY = - "org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability"; + private static final String METHODNAME = "getCapability"; private final List capabilities = new ArrayList<>(); private final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); - public Capabilities() { - - } - - public Capabilities(NetconfNode nnode) { - LOG.info("Create Capabilities constructor"); + private Capabilities() {} + public static Capabilities getAvailableCapabilities(NetconfNode nnode) { + LOG.info("GetAvailableCapabilities for node"); + Capabilities capabilities = new Capabilities(); if (nnode != null) { - constructor(nnode.getAvailableCapabilities().getAvailableCapability()); + AvailableCapabilities availableCapabilites = nnode.getAvailableCapabilities(); + if (availableCapabilites != null) { + capabilities.constructor(availableCapabilites.getAvailableCapability()); + } else { + LOG.debug("empty capabilites"); + } + } else { + LOG.debug("No node provided"); } + return capabilities; } /** @@ -66,45 +76,27 @@ public class Capabilities { * - Carbon: List */ private void constructor(List pcapabilities) { - for (Object capability : pcapabilities) { - if (LOG.isTraceEnabled()) { - LOG.trace("capability class: {} Interfaces: {}", capability.getClass().getName(), - Arrays.toString(capability.getClass().getInterfaces())); - } - if (capability instanceof String) { // ODL Boron specific - this.capabilities.add((String) capability); - } else if (hasInterface(capability, INTERFACE_AVAILABLECAPABILITY)) { // Carbon specific part .. handled via - // generic - try { - Method method = capability.getClass().getDeclaredMethod("getCapability"); - this.capabilities.add(method.invoke(capability).toString()); - } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException - | InvocationTargetException e) { - LOG.warn("Unknown capability class leads to a problem", e); + if (pcapabilities != null) { + Method methodGetCapability; + + for (Object capability : pcapabilities) { + + if (capability instanceof String) { // ODL Boron specific + this.capabilities.add((String) capability); + } else { // Carbon specific part .. handled via generics + try { + methodGetCapability = capability.getClass().getDeclaredMethod(METHODNAME); + methodGetCapability.setAccessible(true); + this.capabilities.add(methodGetCapability.invoke(capability).toString()); + } catch (NoSuchMethodException | SecurityException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException e) { + LOG.warn("Capability class with missing interface method {}: {} {} {}", METHODNAME, + e.getMessage(), capability.getClass(), + Arrays.toString(capability.getClass().getInterfaces())); + } } - } else { - LOG.warn("Unknown capability class: {}", capability.getClass(), - Arrays.toString(capability.getClass().getInterfaces())); - } - } - } - - /** - * check if namespace is supported by given capabilites - * - * @param theCapability Capability to search - * @return true if available - */ - @Deprecated - public boolean isSupportingNamespace(QName theCapability) { - String theNameSpace = theCapability.getNamespace().toString(); - for (String capability : capabilities) { - if (capability.contains(theNameSpace)) { - LOG.trace("Check {} against {}", capability, theNameSpace); - return true; } } - return false; } /** @@ -129,45 +121,25 @@ public class Capabilities { revision = formatter.format((Date) revisionObject); } else { revision = revisionObject.toString(); - LOG.warn("Revision number type not supported. Class:{} String:{}", revisionObject.getClass().getName(), - revisionObject); + LOG.debug("Revision number type not supported. Use toString().String:{} Class:{} ", revisionObject, + revisionObject.getClass().getName()); } + LOG.trace("isSupportingNamespaceAndRevision: Model namespace {}?[revision {}]", namespace, revision); for (String capability : capabilities) { if (capability.contains(namespace) && capability.contains(revision)) { - LOG.trace("Model namespace {}?[revision {}]", namespace, revision); + LOG.trace("Verify true with: {}", capability); return true; + } else { + LOG.trace("Verify false with: {}", capability); } } return false; } - public void add(String qname) { - capabilities.add(qname); - } - @Override public String toString() { return "Capabilities [capabilities=" + capabilities + "]"; } - /** - * Check if object is proxy and has specific interface - * - * @param object Name of the object to verify - * @param interfaceName is the name of the interface - * @return boolean accordingly - */ - static boolean hasInterface(Object object, String interfaceName) { - if (object instanceof Proxy) { - Class[] interfaces = object.getClass().getInterfaces(); - for (Class i : interfaces) { - if (i.getName().equals(interfaceName)) { - return true; - } - } - } - return false; - } - } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java index ece7e7aa1..68627a862 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/container/ONFLayerProtocolName.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -53,5 +53,9 @@ public enum ONFLayerProtocolName { return Unknown; } + public String getValue() { + return myLayerProtocolName; + } + } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java index 83063a05a..403ba0ad4 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/util/GenericTransactionUtils.java @@ -26,10 +26,8 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.exception.ExceptionUtils; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; @@ -42,32 +40,6 @@ import com.google.common.util.concurrent.CheckedFuture; public final class GenericTransactionUtils { static final Logger LOG = LoggerFactory.getLogger(GenericTransactionUtils.class); - public static boolean writeData(DataBroker dataBroker, - LogicalDatastoreType logicalDatastoreType, InstanceIdentifier iid, T dataObject, boolean isAdd) { - Preconditions.checkNotNull(dataBroker); - WriteTransaction modification = dataBroker.newWriteOnlyTransaction(); - if (isAdd) { - if (dataObject == null) { - LOG.warn("Invalid attempt to add a non-existent object to path {}", iid); - return false; - } - modification.merge(logicalDatastoreType, iid, dataObject, true /* createMissingParents */); - } else { - modification.delete(LogicalDatastoreType.CONFIGURATION, iid); - } - CheckedFuture commitFuture = modification.submit(); - try { - commitFuture.checkedGet(); - LOG.debug("Transaction success for {} of object {}", isAdd ? "add" : "delete", dataObject); - return true; - } catch (Exception e) { - LOG.warn("Transaction failed with error {} for {} of object {}", e.getMessage(), isAdd ? "add" : "delete", - dataObject); - modification.cancel(); - return false; - } - } - /** * Deliver the data back or null. Warning * diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java index 03e830e5a..aeda48ea7 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperEquipmentPacRev170402.java @@ -21,7 +21,6 @@ import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; -import javax.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; @@ -102,26 +101,4 @@ public class WrapperEquipmentPacRev170402 implements OnfInterfacePac { return resultList; } - /** - * Read problems of specific interfaces - * - * @param interfacePacUuid Universal index of Equipmentpac - * @return EquipmentPac or null - */ - public @Nullable EquipmentPac readEquipmentPac(UniversalId interfacePacUuid) { - - final Class clazzPac = EquipmentPac.class; - - LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(), - coreData.getMountpoint(), interfacePacUuid.getValue()); - - InstanceIdentifier equipmentIID = - InstanceIdentifier.builder(EquipmentPac.class, new EquipmentPacKey(interfacePacUuid)).build(); - - EquipmentPac res = GenericTransactionUtils.readData(coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, - equipmentIID); - - return res; - } - } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java index b62940109..5c7e8d261 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev170324.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -26,7 +26,6 @@ import java.util.List; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType12; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils; @@ -79,7 +78,7 @@ import org.slf4j.LoggerFactory; public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, MicrowaveModelListener { - private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class); + private static final Logger LOG = LoggerFactory.getLogger(WrapperMicrowaveModelRev170324.class); public static final QName QNAME = MwAirInterfacePac.QNAME; @@ -91,89 +90,93 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw * Setter/Getter */ + @Override public void setCoreData(ONFCOreNetworkElementCoreData coreData) { - this.coreData = coreData; - } + this.coreData = coreData; + } - public ONFCOreNetworkElementCoreData getCoreData() { - return coreData; - } + public ONFCOreNetworkElementCoreData getCoreData() { + return coreData; + } - @Override - public void setOnfMicrowaveModelListener(OnfMicrowaveModelNotification microwaveModelListener) { - this.microwaveModelListener = microwaveModelListener; - } + @Override + public void setOnfMicrowaveModelListener(OnfMicrowaveModelNotification microwaveModelListener) { + this.microwaveModelListener = microwaveModelListener; + } - @SuppressWarnings("unchecked") - @Override - public T getNotificationListener() { - return (T)this; - } + @SuppressWarnings("unchecked") + @Override + public T getNotificationListener() { + return (T)this; + } /*----------------------------------------------------------------------------- * Interfacefunctions */ + @Override public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class lpClass, UniversalId uuid, - List resultList) { + List resultList) { - switch (lpName) { - case MWAirInterface: - readTheFaultsOfMwAirInterfacePac(uuid, resultList); - break; + switch (lpName) { + case MWAirInterface: + readTheFaultsOfMwAirInterfacePac(uuid, resultList); + break; - case EthernetContainer12: - readTheFaultsOfMwEthernetContainerPac(uuid, resultList); - break; + case EthernetContainer12: + readTheFaultsOfMwEthernetContainerPac(uuid, resultList); + break; - case TDMContainer: - readTheFaultsOfMwTdmContainerPac(uuid, resultList); - break; + case TDMContainer: + readTheFaultsOfMwTdmContainerPac(uuid, resultList); + break; - case Structure: - if (lpClass == MwHybridMwStructurePac.class) { - readTheFaultsOfMwHybridMwStructurePac(uuid, resultList); + case Structure: + if (lpClass == MwHybridMwStructurePac.class) { + readTheFaultsOfMwHybridMwStructurePac(uuid, resultList); - } else if (lpClass == MwAirInterfaceDiversityPac.class) { - readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList); + } else if (lpClass == MwAirInterfaceDiversityPac.class) { + readTheFaultsOfMwAirInterfaceDiversityPac(uuid, resultList); - } else if (lpClass == MwPureEthernetStructurePac.class) { - readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList); + } else if (lpClass == MwPureEthernetStructurePac.class) { + readTheFaultsOfMwPureEthernetStructurePac(uuid, resultList); - } else { - LOG.warn("Unassigned lp model {} class {}", lpName, lpClass); - } - break; + } else { + LOG.warn("Unassigned lp model {} class {}", lpName, lpClass); + } + break; case Ethernet: // No alarms supported break; case EthernetContainer10: default: LOG.warn("Unassigned or not expected lp in model {}", lpName); - } + } } - public List readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) { - switch (lpName) { - case MWAirInterface: - return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp); - - case EthernetContainer12: - return readTheHistoricalPerformanceDataOfEthernetContainer(lp); - - case EthernetContainer10: - case EthernetPhysical: - case Ethernet: - case TDMContainer: - case Structure: - case Unknown: - LOG.debug("Do not read HistoricalPM data for {} {}", lpName, lp.getUuid().getValue()); - break; - } - return new ArrayList<>(); + @Override + public List readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) { + switch (lpName) { + case MWAirInterface: + return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp); + + case EthernetContainer12: + return readTheHistoricalPerformanceDataOfEthernetContainer(lp); + + case EthernetContainer10: + case EthernetPhysical: + case Ethernet: + case TDMContainer: + case Structure: + case Unknown: + LOG.debug("Do not read HistoricalPM data for {} {}", lpName, lp.getUuid().getValue()); + break; + } + return new ArrayList<>(); } - public Class getClassForLtpExtension(QName qName) { + @Override + public Class getClassForLtpExtension(QName qName) { Class res = null; if (qName.equals(MwAirInterfacePac.QNAME)) { res = MwAirInterfacePac.class; @@ -189,8 +192,8 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw res = MwTdmContainerPac.class; } LOG.info("Found QName {} mapped to {}", String.valueOf(qName), String.valueOf(res)); - return res; - } + return res; + } /*----------------------------------------------------------------------------- * Reading problems for specific interface pacs @@ -213,7 +216,7 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw // AirInterfaceCurrentProblemTypeG.class; LOG.info("DBRead Get problems for class {} from mountpoint {} for uuid {}", clazzPac.getSimpleName(), - coreData.getMountpoint(), interfacePacUuid.getValue()); + coreData.getMountpoint(), interfacePacUuid.getValue()); // Step 2.2: construct data and the relative iid InstanceIdentifier mwAirInterfaceIID = InstanceIdentifier @@ -484,7 +487,7 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw // Step 2.3: read to the config data store AirInterfaceHistoricalPerformances airHistoricalPerformanceData = GenericTransactionUtils.readData( - coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID); + coreData.getDataBroker(), LogicalDatastoreType.OPERATIONAL, mwAirInterfaceHistoricalPerformanceIID); if (airHistoricalPerformanceData == null) { LOG.debug("DBRead MWAirInterfacePac Id {} no AirInterfaceHistoricalPerformances", @@ -530,7 +533,7 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw } else { // import // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170320.ethernet.container.historical.performances.g.HistoricalPerformanceDataList - // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList + // org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataList List airHistPMList = ethContainerHistoricalPerformanceData .getHistoricalPerformanceDataList(); LOG.debug("DBRead {} Id {} Records intermediate: {}", myName, ethContainerPacuuId, airHistPMList.size()); @@ -553,7 +556,7 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw InternalDateAndTime.valueOf(notification.getTimeStamp()), notification.getObjectIdRef().getValue()); microwaveModelListener.onObjectCreationNotification(notificationXml); - } + } @Override public void onObjectDeletionNotification(ObjectDeletionNotification notification) { @@ -565,8 +568,9 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw notification.getObjectIdRef().getValue() ); microwaveModelListener.onObjectDeletionNotification(notificationXml); - } + } + @Override public void onProblemNotification(ProblemNotification notification) { LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName()); @@ -576,7 +580,7 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw notification.getCounter().toString(), InternalDateAndTime.valueOf(notification.getTimeStamp())); microwaveModelListener.onProblemNotification(notificationXml); - } + } @Override public void onAttributeValueChangedNotification(AttributeValueChangedNotification notification) { @@ -587,7 +591,7 @@ public class WrapperMicrowaveModelRev170324 implements OnfMicrowaveModel, Microw notification.getObjectIdRef().getValue(), notification.getAttributeName(), notification.getNewValue()); microwaveModelListener.onAttributeValueChangedNotification(notificationXml); - } + } } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java index d35115fd9..0328d79de 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev180907.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -33,7 +33,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType1211; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils; @@ -82,7 +81,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.r public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, MicrowaveModelListener { - private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class); + private static final Logger LOG = LoggerFactory.getLogger(WrapperMicrowaveModelRev180907.class); public static final QName QNAME = MwAirInterfacePac.QNAME; @@ -96,6 +95,7 @@ public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, Microw * Setter/Getter */ + @Override public void setCoreData(ONFCOreNetworkElementCoreData coreData) { this.coreData = coreData; } @@ -119,6 +119,7 @@ public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, Microw * Interfacefunctions */ + @Override public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class lpClass, UniversalId uuid, List resultList) { @@ -158,7 +159,8 @@ public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, Microw } } - public List readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) { + @Override + public List readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) { switch (lpName) { case MWAirInterface: return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp); @@ -178,7 +180,8 @@ public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, Microw return new ArrayList<>(); } - public Class getClassForLtpExtension(QName qName) { + @Override + public Class getClassForLtpExtension(QName qName) { Class res = null; if (qName.equals(MwAirInterfacePac.QNAME)) { res = MwAirInterfacePac.class; @@ -571,6 +574,7 @@ public class WrapperMicrowaveModelRev180907 implements OnfMicrowaveModel, Microw microwaveModelListener.onObjectDeletionNotification(notificationXml); } + @Override public void onProblemNotification(ProblemNotification notification) { LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName()); diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java index c3970a8d4..9a6b42589 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/wrapperc/WrapperMicrowaveModelRev181010.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -33,7 +33,6 @@ import org.opendaylight.yangtools.yang.common.QName; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCOreNetworkElementCoreData; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.ONFCoreNetworkElement12; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ExtendedAirInterfaceHistoricalPerformanceType1211p; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.GenericTransactionUtils; @@ -82,7 +81,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.r public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, MicrowaveModelListener { - private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12.class); + private static final Logger LOG = LoggerFactory.getLogger(WrapperMicrowaveModelRev181010.class); public static final QName QNAME = MwAirInterfacePac.QNAME; @@ -95,6 +94,7 @@ public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, Microw * Setter/Getter */ + @Override public void setCoreData(ONFCOreNetworkElementCoreData coreData) { this.coreData = coreData; } @@ -118,6 +118,7 @@ public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, Microw * Interfacefunctions */ + @Override public void readTheFaultsOfMicrowaveModel(ONFLayerProtocolName lpName, Class lpClass, UniversalId uuid, List resultList) { @@ -157,7 +158,8 @@ public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, Microw } } - public List readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) { + @Override + public List readTheHistoricalPerformanceData(ONFLayerProtocolName lpName, Lp lp) { switch (lpName) { case MWAirInterface: return readTheHistoricalPerformanceDataOfMwAirInterfacePac(lp); @@ -177,7 +179,8 @@ public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, Microw return new ArrayList<>(); } - public Class getClassForLtpExtension(QName qName) { + @Override + public Class getClassForLtpExtension(QName qName) { Class res = null; if (qName.equals(MwAirInterfacePac.QNAME)) { res = MwAirInterfacePac.class; @@ -547,6 +550,7 @@ public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, Microw return resultList; } + @Override public void onObjectCreationNotification(ObjectCreationNotification notification) { LOG.debug("Got event of type :: {}", ObjectCreationNotification.class.getSimpleName()); @@ -569,6 +573,7 @@ public class WrapperMicrowaveModelRev181010 implements OnfMicrowaveModel, Microw microwaveModelListener.onObjectDeletionNotification(notificationXml); } + @Override public void onProblemNotification(ProblemNotification notification) { LOG.debug("Got event of type :: {}", ProblemNotification.class.getSimpleName()); diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java index 6167248f0..c07bf4620 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/HtDevicemanagerConfiguration.java @@ -79,13 +79,18 @@ public class HtDevicemanagerConfiguration { } return mObj; } - public static HtDevicemanagerConfiguration getTestConfiguration() { - return getTestConfiguration(CONFIGURATIONTESTFILE); + return getTestConfiguration(CONFIGURATIONTESTFILE,false); } - - public static HtDevicemanagerConfiguration getTestConfiguration(final String filename) { - if (mObjTest == null) { + + public static HtDevicemanagerConfiguration getTestConfiguration(boolean newInstance) { + return getTestConfiguration(CONFIGURATIONTESTFILE,newInstance); + } + public static HtDevicemanagerConfiguration getTestConfiguration(String filename) { + return getTestConfiguration(filename,false); + } + public static HtDevicemanagerConfiguration getTestConfiguration(final String filename,boolean newInstance) { + if (mObjTest == null || newInstance) { mObjTest = new HtDevicemanagerConfiguration(filename); } return mObjTest; diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java index b30b3271d..fd5d04e6a 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AaiConfig.java @@ -345,6 +345,15 @@ public class AaiConfig extends BaseSubConfig { return true; } + public String getBaseUri() { + String s; + if(!this.apiVersion.startsWith("/")) { + s="/"+this.apiVersion; + } + else + s=this.apiVersion; + return s; + } public String getBaseUrl() { String url=this.baseUrl; if(!url.endsWith("/")) { diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java index 6c416a257..55d5b9a11 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/config/impl/AkkaConfig.java @@ -72,14 +72,7 @@ public class AkkaConfig { public boolean isSingleNode() { return !this.isCluster(); } - public static AkkaConfig defaultSingleNodeConfig() - { - AkkaConfig cfg=new AkkaConfig(); - cfg.cluserConfig=new ClusterConfig(); - return cfg; - } - - public static AkkaConfig parse(String content) throws Exception { + public static AkkaConfig parse(String content) throws Exception { Config cfg = ConfigFactory.parseString(content); AkkaConfig c = new AkkaConfig(); c.cluserConfig=new ClusterConfig(cfg.getConfig("odl-cluster-data").getConfig("akka").getConfig("cluster")); diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java index d1731459e..bcd2849d2 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsEventBase.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -40,8 +40,4 @@ public class EsEventBase extends EsObject { this.event = event; } - public static String getEsdatatypename() { - return ESDATATYPENAME; - } - } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java index b39b2e296..97c48f1ff 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultCurrent.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -56,9 +56,6 @@ public class EsFaultCurrent extends EsObject { public static QueryBuilder getQueryForOneNode( String nodeName) { return QueryBuilders.termQuery("faultCurrent.nodeName", nodeName); } - public static QueryBuilder getQueryForAll() { - return QueryBuilders.matchAllQuery(); - } public static QueryBuilder getQueryForOneNodeAndObjectId( String nodeName, String objectId) { BoolQueryBuilder bq = QueryBuilders.boolQuery(); @@ -68,8 +65,4 @@ public class EsFaultCurrent extends EsObject { //return QueryBuilders.termQuery("faultCurrent.objectId", objectId); } - - public static String getEsdatatypename() { - return ESDATATYPENAME; - } } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java index 87c77ea99..06a893ad7 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsFaultLog.java @@ -6,9 +6,9 @@ * ================================================================================================= * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under @@ -40,8 +40,4 @@ public class EsFaultLog extends EsObject { this.fault = fault; } - public static String getEsdatatypename() { - return ESDATATYPENAME; - } - } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java deleted file mode 100644 index ca5b36717..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/EsVersionInfo.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types; - -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.EsObject; -import org.osgi.framework.Version; - -/** - * - * Create a VersionInfo Object Network to be recorded in the database - * - */ - -public class EsVersionInfo extends EsObject { - - public static final String ESDATATYPENAME = "versioninfo"; - private static final String EMPTY = ""; - - private Version bundleVersion; - private String build = EMPTY; - private String version = EMPTY; - - public EsVersionInfo() { - } - - public Version getBundleVersion() { - return bundleVersion; - } - - public void setBundleVersion(Version bundleVersion) { - this.bundleVersion = bundleVersion; - } - - public String getBuild() { - return build; - } - - public void setBuild(String build) { - this.build = build; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public static String getEsdatatypename() { - return ESDATATYPENAME; - } - - @Override - public String toString() { - return "EsVersionInfo [bundleVersion=" + bundleVersion + ", build=" + build + ", version=" + version + "]"; - } - - - } diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java index 4a9ac9881..e175515ae 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexMwtnService.java @@ -35,9 +35,9 @@ public class IndexMwtnService implements AutoCloseable { /** Index name to be used */ public static final String INDEX = "mwtn"; /** Location of mapping data **/ - private static final String MAPPING = "/elasticsearch/index/mwtn/mwtnMapping.json"; + private static final String MAPPING = "elasticsearch/index/mwtn/mwtnMapping.json"; /** Location of configuration data **/ - private static final String MODELDATA = "/elasticsearch/index/mwtn/modelDescription"; + private static final String MODELDATA = "elasticsearch/index/mwtn/modelDescription"; private final HtDatabaseClientAbstract client; diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java index db567f28c..4af48922e 100644 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java +++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/index/impl/IndexUpdateService.java @@ -98,7 +98,7 @@ public class IndexUpdateService implements AutoCloseable { } public void start() { - this.taskHandle = this.scheduler.scheduleAtFixedRate(checkForUpdateTask, 0, 120, TimeUnit.SECONDS); + this.taskHandle = this.scheduler.scheduleAtFixedRate(checkForUpdateTask, 0, 30, TimeUnit.SECONDS); } public void stop() { diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java deleted file mode 100644 index 1838c33c7..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/GeoLocation.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -/** - * - */ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl; - -/** - * Path list with logical-termination-point list - "path" : [{ - "path-id": "4d778388-41c8-11e7-a919-92ebcb67fe33", - "path-name": "NE-10-ClockIdentity", - "layer-protocol-name": "PTP", - "directionality": "unidirectional", - "logical-termination-point": [{ - "ltp-reference":"yep", - "physical-port-reference": "shelf:1-slot:1-Card-port:5", - "node-reference":"NE-10", - "site-reference": "site-a", - "site-name": "GUI-Label", - "geo-location": { - "longitude": "54.123456", - "latitude": "13.123456" - }] - }] - - * @author herbert - */ - -public class GeoLocation { - String longitude; - String latitude; -} diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java deleted file mode 100644 index 6efd3f90c..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/LogicalTerminationPoint.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -/** - * - */ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl; - -/** - * Path list with logical-termination-point list - "path" : [{ - "path-id": "4d778388-41c8-11e7-a919-92ebcb67fe33", - "path-name": "NE-10-ClockIdentity", - "layer-protocol-name": "PTP", - "directionality": "unidirectional", - "logical-termination-point": [{ - "ltp-reference":"yep", - "physical-port-reference": "shelf:1-slot:1-Card-port:5", - "node-reference":"NE-10", - "site-reference": "site-a", - "site-name": "GUI-Label", - "geo-location": { - "longitude": "54.123456", - "latitude": "13.123456" - }] - }] - - - * @author herbert - * - */ -public class LogicalTerminationPoint { - - String ltpReference; - String physicalPortReference; - String nodeReference; - String siteReference; - String siteName; - GeoLocation geoLocation; - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java deleted file mode 100644 index 60a236d14..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/Path.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -/** - * - */ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl; - -import java.util.List; - -/** - * Path list with logical-termination-point list - "path" : [{ - "path-id": "4d778388-41c8-11e7-a919-92ebcb67fe33", - "path-name": "NE-10-ClockIdentity", - "layer-protocol-name": "PTP", - "directionality": "unidirectional", - "logical-termination-point": [{ - "ltp-reference":"yep", - "physical-port-reference": "shelf:1-slot:1-Card-port:5", - "node-reference":"NE-10", - "site-reference": "site-a", - "site-name": "GUI-Label", - "geo-location": { - "longitude": "54.123456", - "latitude": "13.123456" - }] - }] - * @author herbert - * - */ -public class Path { - - String pathId; - String pathName; - String layperProtocolName; - String directionality; - List logicalTerminationPoints; - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java deleted file mode 100644 index 3bb16938e..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/ptp/impl/PtpManagerImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -/** - * - */ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.ptp.impl; - -/** - * @author herbert - * - */ -public class PtpManagerImpl { - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json index 16f966e3d..9b6be2915 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json @@ -1,3548 +1,3548 @@ -{ "schama-information": { +{ "schema-information": { "microwave-model": { -"id": "microwave-model", -"is-read-only": false, +"id": "microwave-model", +"is-read-only": false, "description": ["This module contains a collection of YANG definitions for managing wireless networks. This model is for vendor agnostic management of wireless network elements."] }, "rf-to-remote": { -"id": "rf-to-remote", -"is-read-only": false, +"id": "rf-to-remote", +"is-read-only": false, "description": ["Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units."] }, "rf-to-local": { -"id": "rf-to-local", -"is-read-only": false, +"id": "rf-to-local", +"is-read-only": false, "description": ["Returning the header information of the local site back to the local site on the radio interface between both outdoor units."] }, "if-to-remote": { -"id": "if-to-remote", -"is-read-only": false, +"id": "if-to-remote", +"is-read-only": false, "description": ["Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit."] }, "if-to-local": { -"id": "if-to-local", -"is-read-only": false, +"id": "if-to-local", +"is-read-only": false, "description": ["Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit."] }, "none": { -"id": "none", -"is-read-only": false, +"id": "none", +"is-read-only": false, "description": ["none"] }, "if": { -"id": "if", -"is-read-only": false, +"id": "if", +"is-read-only": false, "description": ["Intermediate Frequency on the interface between indoor and outdoor unit."] }, "rf": { -"id": "rf", -"is-read-only": false, +"id": "rf", +"is-read-only": false, "description": ["Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site."] }, "loop-back-type": { -"id": "loop-back-type", -"is-read-only": false, +"id": "loop-back-type", +"is-read-only": false, "description": ["none"] }, "non-alarmed": { -"id": "non-alarmed", -"is-read-only": false, +"id": "non-alarmed", +"is-read-only": false, "description": ["none"] }, "warning": { -"id": "warning", -"is-read-only": false, +"id": "warning", +"is-read-only": false, "description": ["none"] }, "minor": { -"id": "minor", -"is-read-only": false, +"id": "minor", +"is-read-only": false, "description": ["none"] }, "major": { -"id": "major", -"is-read-only": false, +"id": "major", +"is-read-only": false, "description": ["none"] }, "critical": { -"id": "critical", -"is-read-only": false, +"id": "critical", +"is-read-only": false, "description": ["none"] }, "severity-type": { -"id": "severity-type", -"is-read-only": false, +"id": "severity-type", +"is-read-only": false, "description": ["According to ITU-T M.3160"] }, "supported-channel-plan": { -"id": "supported-channel-plan", -"is-read-only": false, +"id": "supported-channel-plan", +"is-read-only": false, "description": ["Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database."] }, "duplex-distance-is-variable": { -"id": "duplex-distance-is-variable", -"is-read-only": false, +"id": "duplex-distance-is-variable", +"is-read-only": false, "description": ["To be set on 'true', if the distance between transmitted and received frequency is variable."] }, "duplex-distance-list": { -"id": "duplex-distance-list", -"is-read-only": false, +"id": "duplex-distance-list", +"is-read-only": false, "description": ["Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable."] }, "duplex-distance": { -"id": "duplex-distance", -"is-read-only": false, +"id": "duplex-distance", +"is-read-only": false, "description": ["Distance between transmitted and received frequency."] }, "auto-freq-select-is-avail": { -"id": "auto-freq-select-is-avail", -"is-read-only": false, +"id": "auto-freq-select-is-avail", +"is-read-only": false, "description": ["In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."] }, "transmission-mode-list": { -"id": "transmission-mode-list", -"is-read-only": false, +"id": "transmission-mode-list", +"is-read-only": false, "description": ["none"] }, "channel-plan-type-g": { -"id": "channel-plan-type-g", -"is-read-only": false, +"id": "channel-plan-type-g", +"is-read-only": false, "description": ["none"] }, "transmission-mode-id": { -"id": "transmission-mode-id", -"is-read-only": false, +"id": "transmission-mode-id", +"is-read-only": false, "description": ["Indentifies the transmissionMode for internal reference."] }, "transmission-mode-name": { -"id": "transmission-mode-name", -"is-read-only": false, +"id": "transmission-mode-name", +"is-read-only": false, "description": ["Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 028-4QAM-188/204-1"] }, "channel-bandwidth": { -"id": "channel-bandwidth", -"is-read-only": false, +"id": "channel-bandwidth", +"is-read-only": false, "description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"] }, "modulation-scheme": { -"id": "modulation-scheme", -"is-read-only": false, +"id": "modulation-scheme", +"is-read-only": false, "description": ["Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')."] }, "code-rate": { -"id": "code-rate", -"is-read-only": false, +"id": "code-rate", +"is-read-only": false, "description": ["Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)."] }, "symbol-rate-reduction-factor": { -"id": "symbol-rate-reduction-factor", -"is-read-only": false, +"id": "symbol-rate-reduction-factor", +"is-read-only": false, "description": ["Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK."] }, "tx-power-min": { -"id": "tx-power-min", -"is-read-only": false, +"id": "tx-power-min", +"is-read-only": false, "description": ["Value of the minimum transmit power the modem can operate in dBm."] }, "tx-power-max": { -"id": "tx-power-max", -"is-read-only": false, +"id": "tx-power-max", +"is-read-only": false, "description": ["Value of the maximum transmit power the modem can operate in dBm."] }, "rx-threshold": { -"id": "rx-threshold", -"is-read-only": false, +"id": "rx-threshold", +"is-read-only": false, "description": ["Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."] }, "am-upshift-level": { -"id": "am-upshift-level", -"is-read-only": false, +"id": "am-upshift-level", +"is-read-only": false, "description": ["Value of the receive level that has to be exceeded to shift into a higher modulation scheme."] }, "am-downshift-level": { -"id": "am-downshift-level", -"is-read-only": false, +"id": "am-downshift-level", +"is-read-only": false, "description": ["Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."] }, "xpic-is-avail": { -"id": "xpic-is-avail", -"is-read-only": false, +"id": "xpic-is-avail", +"is-read-only": false, "description": ["In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case."] }, "transmission-mode-type-g": { -"id": "transmission-mode-type-g", -"is-read-only": false, +"id": "transmission-mode-type-g", +"is-read-only": false, "description": ["none"] }, "not-specified": { -"id": "not-specified", -"is-read-only": false, +"id": "not-specified", +"is-read-only": false, "description": ["none"] }, "horizontal": { -"id": "horizontal", -"is-read-only": false, +"id": "horizontal", +"is-read-only": false, "description": ["none"] }, "vertical": { -"id": "vertical", -"is-read-only": false, +"id": "vertical", +"is-read-only": false, "description": ["none"] }, "polarization-type": { -"id": "polarization-type", -"is-read-only": false, +"id": "polarization-type", +"is-read-only": false, "description": ["none"] }, "es": { -"id": "es", -"is-read-only": false, +"id": "es", +"is-read-only": false, "description": ["Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es ."] }, "ses": { -"id": "ses", -"is-read-only": false, +"id": "ses", +"is-read-only": false, "description": ["Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses ."] }, "cses": { -"id": "cses", -"is-read-only": false, +"id": "cses", +"is-read-only": false, "description": ["Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses ."] }, "not-specified": { -"id": "not-specified", -"is-read-only": false, +"id": "not-specified", +"is-read-only": false, "description": ["none"] }, "g826-type": { -"id": "g826-type", -"is-read-only": false, +"id": "g826-type", +"is-read-only": false, "description": ["none"] }, "g826-value-kind": { -"id": "g826-value-kind", -"is-read-only": false, +"id": "g826-value-kind", +"is-read-only": false, "description": ["Kind of performance value that shall be equipped with a threshold alarm."] }, "granularity-period": { -"id": "granularity-period", -"is-read-only": false, +"id": "granularity-period", +"is-read-only": false, "description": ["Period of the performance data collection."] }, "alarm-raising-threshold": { -"id": "alarm-raising-threshold", -"is-read-only": false, +"id": "alarm-raising-threshold", +"is-read-only": false, "description": ["Number of events required for raising the threshold cross alarm."] }, "alarm-clearing-threshold": { -"id": "alarm-clearing-threshold", -"is-read-only": false, +"id": "alarm-clearing-threshold", +"is-read-only": false, "description": ["Number of events required for clearing the threshold cross alarm."] }, "threshold-cross-alarm-type-g": { -"id": "threshold-cross-alarm-type-g", -"is-read-only": false, +"id": "threshold-cross-alarm-type-g", +"is-read-only": false, "description": ["Allows defining a threshold cross alarm."] }, "problem-kind-name": { -"id": "problem-kind-name", -"is-read-only": false, +"id": "problem-kind-name", +"is-read-only": false, "description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"] }, "problem-kind-severity": { -"id": "problem-kind-severity", -"is-read-only": false, +"id": "problem-kind-severity", +"is-read-only": false, "description": ["Severity of this type of alarm."] }, "air-interface-problem-severity-type-g": { -"id": "air-interface-problem-severity-type-g", -"is-read-only": false, +"id": "air-interface-problem-severity-type-g", +"is-read-only": false, "description": ["none"] }, "problem-name": { -"id": "problem-name", -"is-read-only": false, +"id": "problem-name", +"is-read-only": false, "description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"] }, "air-interface-current-problem-type-g": { -"id": "air-interface-current-problem-type-g", -"is-read-only": false, +"id": "air-interface-current-problem-type-g", +"is-read-only": false, "description": ["none"] }, "transmission-mode": { -"id": "transmission-mode", -"is-read-only": false, +"id": "transmission-mode", +"is-read-only": false, "description": ["Operated transmission mode."] }, "time": { -"id": "time", -"is-read-only": false, +"id": "time", +"is-read-only": false, "description": ["Sum of all seconds the transmitter operated the transmission mode."] }, "time-x-states-type-g": { -"id": "time-x-states-type-g", -"is-read-only": false, +"id": "time-x-states-type-g", +"is-read-only": false, "description": ["none"] }, "es": { -"id": "es", -"is-read-only": false, +"id": "es", +"is-read-only": false, "description": ["Number of errored seconds."] }, "ses": { -"id": "ses", -"is-read-only": false, +"id": "ses", +"is-read-only": false, "description": ["Number of severely errored seconds."] }, "cses": { -"id": "cses", -"is-read-only": false, +"id": "cses", +"is-read-only": false, "description": ["Number of consecutive severely errored seconds."] }, "unavailability": { -"id": "unavailability", -"is-read-only": false, +"id": "unavailability", +"is-read-only": false, "description": ["Total time of unavailability in seconds."] }, "tx-level-min": { -"id": "tx-level-min", -"is-read-only": false, +"id": "tx-level-min", +"is-read-only": false, "description": ["Minimum transmit power. Signed integers are required."] }, "tx-level-max": { -"id": "tx-level-max", -"is-read-only": false, +"id": "tx-level-max", +"is-read-only": false, "description": ["Maximum transmit power. Signed integers are required."] }, "tx-level-avg": { -"id": "tx-level-avg", -"is-read-only": false, +"id": "tx-level-avg", +"is-read-only": false, "description": ["Averaged transmit power. Signed integers are required."] }, "rx-level-min": { -"id": "rx-level-min", -"is-read-only": false, +"id": "rx-level-min", +"is-read-only": false, "description": ["Minimum receive level. Signed integers are required."] }, "rx-level-max": { -"id": "rx-level-max", -"is-read-only": false, +"id": "rx-level-max", +"is-read-only": false, "description": ["Maximum receive level. Signed integers are required."] }, "rx-level-avg": { -"id": "rx-level-avg", -"is-read-only": false, +"id": "rx-level-avg", +"is-read-only": false, "description": ["Averaged receive level. Signed integers are required."] }, "time-x-states-list": { -"id": "time-x-states-list", -"is-read-only": false, +"id": "time-x-states-list", +"is-read-only": false, "description": ["Time period the transmitter operated in the respective transmission mode."] }, "time2-states": { -"id": "time2-states", -"is-read-only": false, +"id": "time2-states", +"is-read-only": false, "description": ["Sum of all seconds the transmitter operated in e.g. BPSK."] }, "time4-states-s": { -"id": "time4-states-s", -"is-read-only": false, +"id": "time4-states-s", +"is-read-only": false, "description": ["none"] }, "time4-states": { -"id": "time4-states", -"is-read-only": false, +"id": "time4-states", +"is-read-only": false, "description": ["none"] }, "time8-states": { -"id": "time8-states", -"is-read-only": false, +"id": "time8-states", +"is-read-only": false, "description": ["none"] }, "time16-states-s": { -"id": "time16-states-s", -"is-read-only": false, +"id": "time16-states-s", +"is-read-only": false, "description": ["none"] }, "time16-states": { -"id": "time16-states", -"is-read-only": false, +"id": "time16-states", +"is-read-only": false, "description": ["none"] }, "time32-states": { -"id": "time32-states", -"is-read-only": false, +"id": "time32-states", +"is-read-only": false, "description": ["none"] }, "time64-states": { -"id": "time64-states", -"is-read-only": false, +"id": "time64-states", +"is-read-only": false, "description": ["none"] }, "time128-states": { -"id": "time128-states", -"is-read-only": false, +"id": "time128-states", +"is-read-only": false, "description": ["none"] }, "time256-states": { -"id": "time256-states", -"is-read-only": false, +"id": "time256-states", +"is-read-only": false, "description": ["none"] }, "time512-states": { -"id": "time512-states", -"is-read-only": false, +"id": "time512-states", +"is-read-only": false, "description": ["none"] }, "time512-states-l": { -"id": "time512-states-l", -"is-read-only": false, +"id": "time512-states-l", +"is-read-only": false, "description": ["none"] }, "time1024-states": { -"id": "time1024-states", -"is-read-only": false, +"id": "time1024-states", +"is-read-only": false, "description": ["none"] }, "time1024-states-l": { -"id": "time1024-states-l", -"is-read-only": false, +"id": "time1024-states-l", +"is-read-only": false, "description": ["none"] }, "time2048-states": { -"id": "time2048-states", -"is-read-only": false, +"id": "time2048-states", +"is-read-only": false, "description": ["none"] }, "time2048-states-l": { -"id": "time2048-states-l", -"is-read-only": false, +"id": "time2048-states-l", +"is-read-only": false, "description": ["none"] }, "time4096-states": { -"id": "time4096-states", -"is-read-only": false, +"id": "time4096-states", +"is-read-only": false, "description": ["none"] }, "time4096-states-l": { -"id": "time4096-states-l", -"is-read-only": false, +"id": "time4096-states-l", +"is-read-only": false, "description": ["none"] }, "time8192-states": { -"id": "time8192-states", -"is-read-only": false, +"id": "time8192-states", +"is-read-only": false, "description": ["none"] }, "time8192-states-l": { -"id": "time8192-states-l", -"is-read-only": false, +"id": "time8192-states-l", +"is-read-only": false, "description": ["none"] }, "snir-min": { -"id": "snir-min", -"is-read-only": false, +"id": "snir-min", +"is-read-only": false, "description": ["Minimum signal to (noise+interference) ratio."] }, "snir-max": { -"id": "snir-max", -"is-read-only": false, +"id": "snir-max", +"is-read-only": false, "description": ["Maximum signal to (noise+interference) ratio."] }, "snir-avg": { -"id": "snir-avg", -"is-read-only": false, +"id": "snir-avg", +"is-read-only": false, "description": ["Averaged signal to (noise+interference) ratio."] }, "xpd-min": { -"id": "xpd-min", -"is-read-only": false, +"id": "xpd-min", +"is-read-only": false, "description": ["Minimum cross polarization discrimination."] }, "xpd-max": { -"id": "xpd-max", -"is-read-only": false, +"id": "xpd-max", +"is-read-only": false, "description": ["Maximum cross polarization discrimination."] }, "xpd-avg": { -"id": "xpd-avg", -"is-read-only": false, +"id": "xpd-avg", +"is-read-only": false, "description": ["Averaged cross polarization discrimination."] }, "rf-temp-min": { -"id": "rf-temp-min", -"is-read-only": false, +"id": "rf-temp-min", +"is-read-only": false, "description": ["Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."] }, "rf-temp-max": { -"id": "rf-temp-max", -"is-read-only": false, +"id": "rf-temp-max", +"is-read-only": false, "description": ["Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."] }, "rf-temp-avg": { -"id": "rf-temp-avg", -"is-read-only": false, +"id": "rf-temp-avg", +"is-read-only": false, "description": ["Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."] }, "defect-blocks-sum": { -"id": "defect-blocks-sum", -"is-read-only": false, +"id": "defect-blocks-sum", +"is-read-only": false, "description": ["Total number of blocks that were defect after receiving and could not be corrected by the FEC."] }, "time-period": { -"id": "time-period", -"is-read-only": false, +"id": "time-period", +"is-read-only": false, "description": ["Total length of the measurement period."] }, "air-interface-performance-type-g": { -"id": "air-interface-performance-type-g", -"is-read-only": false, +"id": "air-interface-performance-type-g", +"is-read-only": false, "description": ["Consolidated performance information of the air interface."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "air-interface-current-performance-type-g": { -"id": "air-interface-current-performance-type-g", -"is-read-only": false, +"id": "air-interface-current-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "air-interface-historical-performance-type-g": { -"id": "air-interface-historical-performance-type-g", -"is-read-only": false, +"id": "air-interface-historical-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] }, "hsb": { -"id": "hsb", -"is-read-only": false, +"id": "hsb", +"is-read-only": false, "description": ["none"] }, "protection-type": { -"id": "protection-type", -"is-read-only": false, +"id": "protection-type", +"is-read-only": false, "description": ["none"] }, "working": { -"id": "working", -"is-read-only": false, +"id": "working", +"is-read-only": false, "description": ["none"] }, "protection": { -"id": "protection", -"is-read-only": false, +"id": "protection", +"is-read-only": false, "description": ["none"] }, "protected": { -"id": "protected", -"is-read-only": false, +"id": "protected", +"is-read-only": false, "description": ["none"] }, "role-type": { -"id": "role-type", -"is-read-only": false, +"id": "role-type", +"is-read-only": false, "description": ["none"] }, "diversity-name": { -"id": "diversity-name", -"is-read-only": false, +"id": "diversity-name", +"is-read-only": false, "description": ["Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"] }, "number-of-air-interfaces-max": { -"id": "number-of-air-interfaces-max", -"is-read-only": false, +"id": "number-of-air-interfaces-max", +"is-read-only": false, "description": ["Maximum number of air interfaces that could be part of this kind of diversity."] }, "diversity-type-g": { -"id": "diversity-type-g", -"is-read-only": false, +"id": "diversity-type-g", +"is-read-only": false, "description": ["none"] }, "group-down": { -"id": "group-down", -"is-read-only": false, +"id": "group-down", +"is-read-only": false, "description": ["All air interfaces that are members of the diversity configuration are down."] }, "not-all-ai-active": { -"id": "not-all-ai-active", -"is-read-only": false, +"id": "not-all-ai-active", +"is-read-only": false, "description": ["At least one, but not all of the air interfaces that are part of the diversity configuration is not working."] }, "all-ai-active": { -"id": "all-ai-active", -"is-read-only": false, +"id": "all-ai-active", +"is-read-only": false, "description": ["All air interfaces that are part of the diversity configuration are working."] }, "air-interface-diversity-status-type": { -"id": "air-interface-diversity-status-type", -"is-read-only": false, +"id": "air-interface-diversity-status-type", +"is-read-only": false, "description": ["none"] }, "problem-kind-name": { -"id": "problem-kind-name", -"is-read-only": false, +"id": "problem-kind-name", +"is-read-only": false, "description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"] }, "problem-kind-severity": { -"id": "problem-kind-severity", -"is-read-only": false, +"id": "problem-kind-severity", +"is-read-only": false, "description": ["Severity of this type of alarm."] }, "air-interface-diversity-problem-severity-type-g": { -"id": "air-interface-diversity-problem-severity-type-g", -"is-read-only": false, +"id": "air-interface-diversity-problem-severity-type-g", +"is-read-only": false, "description": ["none"] }, "problem-name": { -"id": "problem-name", -"is-read-only": false, +"id": "problem-name", +"is-read-only": false, "description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"] }, "air-interface-diversity-current-problem-type-g": { -"id": "air-interface-diversity-current-problem-type-g", -"is-read-only": false, +"id": "air-interface-diversity-current-problem-type-g", +"is-read-only": false, "description": ["none"] }, "snir-min": { -"id": "snir-min", -"is-read-only": false, +"id": "snir-min", +"is-read-only": false, "description": ["Minimum signal to (noise+interference) ratio of the combined signals."] }, "snir-max": { -"id": "snir-max", -"is-read-only": false, +"id": "snir-max", +"is-read-only": false, "description": ["Maximum signal to (noise+interference) ratio of the combined signals."] }, "snir-avg": { -"id": "snir-avg", -"is-read-only": false, +"id": "snir-avg", +"is-read-only": false, "description": ["Average signal to (noise+interference) ratio of the combined signals."] }, "air-interface-diversity-performance-type-g": { -"id": "air-interface-diversity-performance-type-g", -"is-read-only": false, +"id": "air-interface-diversity-performance-type-g", +"is-read-only": false, "description": ["Consolidated performance information of the air interface diversity group."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-current-performance-type-g": { -"id": "air-interface-diversity-current-performance-type-g", -"is-read-only": false, +"id": "air-interface-diversity-current-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-historical-performance-type-g": { -"id": "air-interface-diversity-historical-performance-type-g", -"is-read-only": false, +"id": "air-interface-diversity-historical-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] }, "tdm-structure-name": { -"id": "tdm-structure-name", -"is-read-only": false, +"id": "tdm-structure-name", +"is-read-only": false, "description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"] }, "tdm-segment-size": { -"id": "tdm-segment-size", -"is-read-only": false, +"id": "tdm-segment-size", +"is-read-only": false, "description": ["Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"] }, "max-number-of-segments-reservable": { -"id": "max-number-of-segments-reservable", -"is-read-only": false, +"id": "max-number-of-segments-reservable", +"is-read-only": false, "description": ["Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."] }, "tdm-structure-type-g": { -"id": "tdm-structure-type-g", -"is-read-only": false, +"id": "tdm-structure-type-g", +"is-read-only": false, "description": ["none"] }, "problem-kind-name": { -"id": "problem-kind-name", -"is-read-only": false, +"id": "problem-kind-name", +"is-read-only": false, "description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"] }, "problem-kind-severity": { -"id": "problem-kind-severity", -"is-read-only": false, +"id": "problem-kind-severity", +"is-read-only": false, "description": ["Severity of this type of alarm."] }, "structure-problem-severity-type-g": { -"id": "structure-problem-severity-type-g", -"is-read-only": false, +"id": "structure-problem-severity-type-g", +"is-read-only": false, "description": ["none"] }, "problem-name": { -"id": "problem-name", -"is-read-only": false, +"id": "problem-name", +"is-read-only": false, "description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"] }, "structure-current-problem-type-g": { -"id": "structure-current-problem-type-g", -"is-read-only": false, +"id": "structure-current-problem-type-g", +"is-read-only": false, "description": ["none"] }, "time-period": { -"id": "time-period", -"is-read-only": false, +"id": "time-period", +"is-read-only": false, "description": ["Total length of the measurement period in seconds."] }, "es": { -"id": "es", -"is-read-only": false, +"id": "es", +"is-read-only": false, "description": ["Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] }, "ses": { -"id": "ses", -"is-read-only": false, +"id": "ses", +"is-read-only": false, "description": ["Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] }, "cses": { -"id": "cses", -"is-read-only": false, +"id": "cses", +"is-read-only": false, "description": ["Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] }, "unavailability": { -"id": "unavailability", -"is-read-only": false, +"id": "unavailability", +"is-read-only": false, "description": ["Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] }, "rx-level-min": { -"id": "rx-level-min", -"is-read-only": false, +"id": "rx-level-min", +"is-read-only": false, "description": ["Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."] }, "rx-level-max": { -"id": "rx-level-max", -"is-read-only": false, +"id": "rx-level-max", +"is-read-only": false, "description": ["Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."] }, "rx-level-avg": { -"id": "rx-level-avg", -"is-read-only": false, +"id": "rx-level-avg", +"is-read-only": false, "description": ["Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."] }, "structure-performance-type-g": { -"id": "structure-performance-type-g", -"is-read-only": false, +"id": "structure-performance-type-g", +"is-read-only": false, "description": ["Consolidated performance information of the Structure."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "structure-current-performance-type-g": { -"id": "structure-current-performance-type-g", -"is-read-only": false, +"id": "structure-current-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "structure-historical-performance-type-g": { -"id": "structure-historical-performance-type-g", -"is-read-only": false, +"id": "structure-historical-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] }, "container-name": { -"id": "container-name", -"is-read-only": false, +"id": "container-name", +"is-read-only": false, "description": ["Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"] }, "number-of-time-slots-required": { -"id": "number-of-time-slots-required", -"is-read-only": false, +"id": "number-of-time-slots-required", +"is-read-only": false, "description": ["Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated."] }, "tdm-time-slots-is-required": { -"id": "tdm-time-slots-is-required", -"is-read-only": false, +"id": "tdm-time-slots-is-required", +"is-read-only": false, "description": ["Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport."] }, "bundling-is-avail": { -"id": "bundling-is-avail", -"is-read-only": false, +"id": "bundling-is-avail", +"is-read-only": false, "description": ["If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'."] }, "container-type-g": { -"id": "container-type-g", -"is-read-only": false, +"id": "container-type-g", +"is-read-only": false, "description": ["none"] }, "tdm-container-name": { -"id": "tdm-container-name", -"is-read-only": false, +"id": "tdm-container-name", +"is-read-only": false, "description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"] }, "tdm-container-size": { -"id": "tdm-container-size", -"is-read-only": false, +"id": "tdm-container-size", +"is-read-only": false, "description": ["Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"] }, "tdm-container-type-g": { -"id": "tdm-container-type-g", -"is-read-only": false, +"id": "tdm-container-type-g", +"is-read-only": false, "description": ["none"] }, "structure-id-ref": { -"id": "structure-id-ref", -"is-read-only": false, +"id": "structure-id-ref", +"is-read-only": false, "description": ["none"] }, "segment-id-ref": { -"id": "segment-id-ref", -"is-read-only": false, +"id": "segment-id-ref", +"is-read-only": false, "description": ["Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."] }, "segment-id-type-g": { -"id": "segment-id-type-g", -"is-read-only": false, +"id": "segment-id-type-g", +"is-read-only": false, "description": ["Identifies the segments, which are used to transport the container."] }, "segment-status-type-id": { -"id": "segment-status-type-id", -"is-read-only": false, +"id": "segment-status-type-id", +"is-read-only": false, "description": ["none"] }, "segment-is-reserved-for-tdm": { -"id": "segment-is-reserved-for-tdm", -"is-read-only": false, +"id": "segment-is-reserved-for-tdm", +"is-read-only": false, "description": ["The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."] }, "operational-status": { -"id": "operational-status", -"is-read-only": false, +"id": "operational-status", +"is-read-only": false, "description": ["Current operational status of each segment."] }, "obsolete-priority-class": { -"id": "obsolete-priority-class", -"is-read-only": false, +"id": "obsolete-priority-class", +"is-read-only": false, "description": ["PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank."] }, "obsolete-drop-order-rank": { -"id": "obsolete-drop-order-rank", -"is-read-only": false, +"id": "obsolete-drop-order-rank", +"is-read-only": false, "description": ["In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList"] }, "segment-status-type-g": { -"id": "segment-status-type-g", -"is-read-only": false, +"id": "segment-status-type-g", +"is-read-only": false, "description": ["none"] }, "problem-kind-name": { -"id": "problem-kind-name", -"is-read-only": false, +"id": "problem-kind-name", +"is-read-only": false, "description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"] }, "problem-kind-severity": { -"id": "problem-kind-severity", -"is-read-only": false, +"id": "problem-kind-severity", +"is-read-only": false, "description": ["Severity of this type of alarm."] }, "container-problem-severity-type-g": { -"id": "container-problem-severity-type-g", -"is-read-only": false, +"id": "container-problem-severity-type-g", +"is-read-only": false, "description": ["none"] }, "problem-name": { -"id": "problem-name", -"is-read-only": false, +"id": "problem-name", +"is-read-only": false, "description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"] }, "container-current-problem-type-g": { -"id": "container-current-problem-type-g", -"is-read-only": false, +"id": "container-current-problem-type-g", +"is-read-only": false, "description": ["none"] }, "tx-ethernet-bytes-max-s": { -"id": "tx-ethernet-bytes-max-s", -"is-read-only": false, +"id": "tx-ethernet-bytes-max-s", +"is-read-only": false, "description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."] }, "tx-ethernet-bytes-max-m": { -"id": "tx-ethernet-bytes-max-m", -"is-read-only": false, +"id": "tx-ethernet-bytes-max-m", +"is-read-only": false, "description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."] }, "tx-ethernet-bytes-sum": { -"id": "tx-ethernet-bytes-sum", -"is-read-only": false, +"id": "tx-ethernet-bytes-sum", +"is-read-only": false, "description": ["Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."] }, "time-period": { -"id": "time-period", -"is-read-only": false, +"id": "time-period", +"is-read-only": false, "description": ["Total length of the measurement period in seconds."] }, "container-performance-type-g": { -"id": "container-performance-type-g", -"is-read-only": false, +"id": "container-performance-type-g", +"is-read-only": false, "description": ["Consolidated performance information of the Container."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "container-current-performance-type-g": { -"id": "container-current-performance-type-g", -"is-read-only": false, +"id": "container-current-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "container-historical-performance-type-g": { -"id": "container-historical-performance-type-g", -"is-read-only": false, +"id": "container-historical-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] }, "gbic": { -"id": "gbic", -"is-read-only": false, +"id": "gbic", +"is-read-only": false, "description": ["none"] }, "soldered-connector": { -"id": "soldered-connector", -"is-read-only": false, +"id": "soldered-connector", +"is-read-only": false, "description": ["none"] }, "sfp-sfp-plus-sfp28": { -"id": "sfp-sfp-plus-sfp28", -"is-read-only": false, +"id": "sfp-sfp-plus-sfp28", +"is-read-only": false, "description": ["none"] }, "xbi-300-pin": { -"id": "xbi-300-pin", -"is-read-only": false, +"id": "xbi-300-pin", +"is-read-only": false, "description": ["none"] }, "xenpak": { -"id": "xenpak", -"is-read-only": false, +"id": "xenpak", +"is-read-only": false, "description": ["none"] }, "xfp": { -"id": "xfp", -"is-read-only": false, +"id": "xfp", +"is-read-only": false, "description": ["none"] }, "xfp-e": { -"id": "xfp-e", -"is-read-only": false, +"id": "xfp-e", +"is-read-only": false, "description": ["none"] }, "xpak": { -"id": "xpak", -"is-read-only": false, +"id": "xpak", +"is-read-only": false, "description": ["none"] }, "x2": { -"id": "x2", -"is-read-only": false, +"id": "x2", +"is-read-only": false, "description": ["none"] }, "dwdm-sfp-sfp-plus": { -"id": "dwdm-sfp-sfp-plus", -"is-read-only": false, +"id": "dwdm-sfp-sfp-plus", +"is-read-only": false, "description": ["none"] }, "qsfp": { -"id": "qsfp", -"is-read-only": false, +"id": "qsfp", +"is-read-only": false, "description": ["none"] }, "qsfp-plus": { -"id": "qsfp-plus", -"is-read-only": false, +"id": "qsfp-plus", +"is-read-only": false, "description": ["none"] }, "cxp": { -"id": "cxp", -"is-read-only": false, +"id": "cxp", +"is-read-only": false, "description": ["none"] }, "shielded-mini-multilane-hd-4-x": { -"id": "shielded-mini-multilane-hd-4-x", -"is-read-only": false, +"id": "shielded-mini-multilane-hd-4-x", +"is-read-only": false, "description": ["none"] }, "shielded-mini-multilane-hd-8-x": { -"id": "shielded-mini-multilane-hd-8-x", -"is-read-only": false, +"id": "shielded-mini-multilane-hd-8-x", +"is-read-only": false, "description": ["none"] }, "qsfp28": { -"id": "qsfp28", -"is-read-only": false, +"id": "qsfp28", +"is-read-only": false, "description": ["none"] }, "cxp2": { -"id": "cxp2", -"is-read-only": false, +"id": "cxp2", +"is-read-only": false, "description": ["none"] }, "cdfp-style1-style2": { -"id": "cdfp-style1-style2", -"is-read-only": false, +"id": "cdfp-style1-style2", +"is-read-only": false, "description": ["none"] }, "shielded-mini-multilane-hd-4-x-fan-out": { -"id": "shielded-mini-multilane-hd-4-x-fan-out", -"is-read-only": false, +"id": "shielded-mini-multilane-hd-4-x-fan-out", +"is-read-only": false, "description": ["none"] }, "shielded-mini-multilane-hd-8-x-fan-out": { -"id": "shielded-mini-multilane-hd-8-x-fan-out", -"is-read-only": false, +"id": "shielded-mini-multilane-hd-8-x-fan-out", +"is-read-only": false, "description": ["none"] }, "cdfp-style3": { -"id": "cdfp-style3", -"is-read-only": false, +"id": "cdfp-style3", +"is-read-only": false, "description": ["none"] }, "qsfp-micro": { -"id": "qsfp-micro", -"is-read-only": false, +"id": "qsfp-micro", +"is-read-only": false, "description": ["none"] }, "qsfp-dd": { -"id": "qsfp-dd", -"is-read-only": false, +"id": "qsfp-dd", +"is-read-only": false, "description": ["none"] }, "qsfp-plus-rate-select-v1": { -"id": "qsfp-plus-rate-select-v1", -"is-read-only": false, +"id": "qsfp-plus-rate-select-v1", +"is-read-only": false, "description": ["none"] }, "qsfp-plus-rate-select-v2": { -"id": "qsfp-plus-rate-select-v2", -"is-read-only": false, +"id": "qsfp-plus-rate-select-v2", +"is-read-only": false, "description": ["none"] }, "not-yet-defined": { -"id": "not-yet-defined", -"is-read-only": false, +"id": "not-yet-defined", +"is-read-only": false, "description": ["none"] }, "mii-kind-type": { -"id": "mii-kind-type", -"is-read-only": false, +"id": "mii-kind-type", +"is-read-only": false, "description": ["none"] }, "sc": { -"id": "sc", -"is-read-only": false, +"id": "sc", +"is-read-only": false, "description": ["Subscriber Connector"] }, "fibre-channel-style-1": { -"id": "fibre-channel-style-1", -"is-read-only": false, +"id": "fibre-channel-style-1", +"is-read-only": false, "description": ["Copper connector"] }, "fibre-channel-style-2": { -"id": "fibre-channel-style-2", -"is-read-only": false, +"id": "fibre-channel-style-2", +"is-read-only": false, "description": ["Copper connector"] }, "bnc-tnc": { -"id": "bnc-tnc", -"is-read-only": false, +"id": "bnc-tnc", +"is-read-only": false, "description": ["Bayonet/Threaded Neill-Concelman"] }, "fc": { -"id": "fc", -"is-read-only": false, +"id": "fc", +"is-read-only": false, "description": ["Fibre Channel coax headers"] }, "fiber-jack": { -"id": "fiber-jack", -"is-read-only": false, +"id": "fiber-jack", +"is-read-only": false, "description": ["none"] }, "lc": { -"id": "lc", -"is-read-only": false, +"id": "lc", +"is-read-only": false, "description": ["Lucent Connector"] }, "mt-rj": { -"id": "mt-rj", -"is-read-only": false, +"id": "mt-rj", +"is-read-only": false, "description": ["Mechanical Transfer - Registered Jack"] }, "mu": { -"id": "mu", -"is-read-only": false, +"id": "mu", +"is-read-only": false, "description": ["Multiple Optical"] }, "sg": { -"id": "sg", -"is-read-only": false, +"id": "sg", +"is-read-only": false, "description": ["none"] }, "optical-pigtail": { -"id": "optical-pigtail", -"is-read-only": false, +"id": "optical-pigtail", +"is-read-only": false, "description": ["none"] }, "mpo1-x12": { -"id": "mpo1-x12", -"is-read-only": false, +"id": "mpo1-x12", +"is-read-only": false, "description": ["Multifiber Parallel Optic"] }, "mpo2-x16": { -"id": "mpo2-x16", -"is-read-only": false, +"id": "mpo2-x16", +"is-read-only": false, "description": ["Multifiber Parallel Optic"] }, "hssdc-ii": { -"id": "hssdc-ii", -"is-read-only": false, +"id": "hssdc-ii", +"is-read-only": false, "description": ["High Speed Serial Data Connector"] }, "copper-pigtail": { -"id": "copper-pigtail", -"is-read-only": false, +"id": "copper-pigtail", +"is-read-only": false, "description": ["none"] }, "rj45": { -"id": "rj45", -"is-read-only": false, +"id": "rj45", +"is-read-only": false, "description": ["8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7"] }, "no-seperable-connector": { -"id": "no-seperable-connector", -"is-read-only": false, +"id": "no-seperable-connector", +"is-read-only": false, "description": ["none"] }, "mxc2-x16": { -"id": "mxc2-x16", -"is-read-only": false, +"id": "mxc2-x16", +"is-read-only": false, "description": ["none"] }, "st": { -"id": "st", -"is-read-only": false, +"id": "st", +"is-read-only": false, "description": ["according to IEC 60874-10:1992, also often called BFOC/2.5"] }, "not-yet-defined": { -"id": "not-yet-defined", -"is-read-only": false, +"id": "not-yet-defined", +"is-read-only": false, "description": ["none"] }, "mdi-kind-type": { -"id": "mdi-kind-type", -"is-read-only": false, +"id": "mdi-kind-type", +"is-read-only": false, "description": ["none"] }, "tp-cat3": { -"id": "tp-cat3", -"is-read-only": false, +"id": "tp-cat3", +"is-read-only": false, "description": ["none"] }, "tp-cat5": { -"id": "tp-cat5", -"is-read-only": false, +"id": "tp-cat5", +"is-read-only": false, "description": ["none"] }, "tp-cat6": { -"id": "tp-cat6", -"is-read-only": false, +"id": "tp-cat6", +"is-read-only": false, "description": ["none"] }, "tp-cat8": { -"id": "tp-cat8", -"is-read-only": false, +"id": "tp-cat8", +"is-read-only": false, "description": ["none"] }, "single-mode": { -"id": "single-mode", -"is-read-only": false, +"id": "single-mode", +"is-read-only": false, "description": ["none"] }, "multi-mode": { -"id": "multi-mode", -"is-read-only": false, +"id": "multi-mode", +"is-read-only": false, "description": ["none"] }, "not-yet-defined": { -"id": "not-yet-defined", -"is-read-only": false, +"id": "not-yet-defined", +"is-read-only": false, "description": ["none"] }, "medium-kind-type": { -"id": "medium-kind-type", -"is-read-only": false, +"id": "medium-kind-type", +"is-read-only": false, "description": ["none"] }, "10-base5": { -"id": "10-base5", -"is-read-only": false, +"id": "10-base5", +"is-read-only": false, "description": ["Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8"] }, "foirl": { -"id": "foirl", -"is-read-only": false, +"id": "foirl", +"is-read-only": false, "description": ["FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9"] }, "10-base2": { -"id": "10-base2", -"is-read-only": false, +"id": "10-base2", +"is-read-only": false, "description": ["Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10"] }, "10-broad36": { -"id": "10-broad36", -"is-read-only": false, +"id": "10-broad36", +"is-read-only": false, "description": ["Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11"] }, "10-base-t": { -"id": "10-base-t", -"is-read-only": false, +"id": "10-base-t", +"is-read-only": false, "description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown"] }, "10-base-thd": { -"id": "10-base-thd", -"is-read-only": false, +"id": "10-base-thd", +"is-read-only": false, "description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode"] }, "10-base-tfd": { -"id": "10-base-tfd", -"is-read-only": false, +"id": "10-base-tfd", +"is-read-only": false, "description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode"] }, "10-base-fp": { -"id": "10-base-fp", -"is-read-only": false, +"id": "10-base-fp", +"is-read-only": false, "description": ["Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16"] }, "10-base-fb": { -"id": "10-base-fb", -"is-read-only": false, +"id": "10-base-fb", +"is-read-only": false, "description": ["Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17"] }, "10-base-fl": { -"id": "10-base-fl", -"is-read-only": false, +"id": "10-base-fl", +"is-read-only": false, "description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown"] }, "10-base-flhd": { -"id": "10-base-flhd", -"is-read-only": false, +"id": "10-base-flhd", +"is-read-only": false, "description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode"] }, "10-base-flfd": { -"id": "10-base-flfd", -"is-read-only": false, +"id": "10-base-flfd", +"is-read-only": false, "description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode"] }, "100-base-t4": { -"id": "100-base-t4", -"is-read-only": false, +"id": "100-base-t4", +"is-read-only": false, "description": ["Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23"] }, "100-base-tx": { -"id": "100-base-tx", -"is-read-only": false, +"id": "100-base-tx", +"is-read-only": false, "description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown"] }, "100-base-txhd": { -"id": "100-base-txhd", -"is-read-only": false, +"id": "100-base-txhd", +"is-read-only": false, "description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode"] }, "100-base-txfd": { -"id": "100-base-txfd", -"is-read-only": false, +"id": "100-base-txfd", +"is-read-only": false, "description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode"] }, "100-base-bx10-d": { -"id": "100-base-bx10-d", -"is-read-only": false, +"id": "100-base-bx10-d", +"is-read-only": false, "description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58"] }, "100-base-bx10-u": { -"id": "100-base-bx10-u", -"is-read-only": false, +"id": "100-base-bx10-u", +"is-read-only": false, "description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58"] }, "100-base-fx": { -"id": "100-base-fx", -"is-read-only": false, +"id": "100-base-fx", +"is-read-only": false, "description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown"] }, "100-base-fxhd": { -"id": "100-base-fxhd", -"is-read-only": false, +"id": "100-base-fxhd", +"is-read-only": false, "description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode"] }, "100-base-fxfd": { -"id": "100-base-fxfd", -"is-read-only": false, +"id": "100-base-fxfd", +"is-read-only": false, "description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode"] }, "100-base-lx10": { -"id": "100-base-lx10", -"is-read-only": false, +"id": "100-base-lx10", +"is-read-only": false, "description": ["Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58"] }, "100-base-t2": { -"id": "100-base-t2", -"is-read-only": false, +"id": "100-base-t2", +"is-read-only": false, "description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown"] }, "100-base-t2-hd": { -"id": "100-base-t2-hd", -"is-read-only": false, +"id": "100-base-t2-hd", +"is-read-only": false, "description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode"] }, "100-base-t2-fd": { -"id": "100-base-t2-fd", -"is-read-only": false, +"id": "100-base-t2-fd", +"is-read-only": false, "description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode"] }, "1000-base-x": { -"id": "1000-base-x", -"is-read-only": false, +"id": "1000-base-x", +"is-read-only": false, "description": ["X as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown"] }, "1000-base-bx10-d": { -"id": "1000-base-bx10-d", -"is-read-only": false, +"id": "1000-base-bx10-d", +"is-read-only": false, "description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59"] }, "1000-base-bx10-u": { -"id": "1000-base-bx10-u", -"is-read-only": false, +"id": "1000-base-bx10-u", +"is-read-only": false, "description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59"] }, "1000-base-xhd": { -"id": "1000-base-xhd", -"is-read-only": false, +"id": "1000-base-xhd", +"is-read-only": false, "description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown"] }, "1000-base-xfd": { -"id": "1000-base-xfd", -"is-read-only": false, +"id": "1000-base-xfd", +"is-read-only": false, "description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown"] }, "1000-base-lx": { -"id": "1000-base-lx", -"is-read-only": false, +"id": "1000-base-lx", +"is-read-only": false, "description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"] }, "1000-base-lxhd": { -"id": "1000-base-lxhd", -"is-read-only": false, +"id": "1000-base-lxhd", +"is-read-only": false, "description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"] }, "1000-base-lxfd": { -"id": "1000-base-lxfd", -"is-read-only": false, +"id": "1000-base-lxfd", +"is-read-only": false, "description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"] }, "1000-base-lx10": { -"id": "1000-base-lx10", -"is-read-only": false, +"id": "1000-base-lx10", +"is-read-only": false, "description": ["Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59"] }, "1000-base-sx": { -"id": "1000-base-sx", -"is-read-only": false, +"id": "1000-base-sx", +"is-read-only": false, "description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"] }, "1000-base-sxhd": { -"id": "1000-base-sxhd", -"is-read-only": false, +"id": "1000-base-sxhd", +"is-read-only": false, "description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"] }, "1000-base-sxfd": { -"id": "1000-base-sxfd", -"is-read-only": false, +"id": "1000-base-sxfd", +"is-read-only": false, "description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"] }, "1000-base-cx": { -"id": "1000-base-cx", -"is-read-only": false, +"id": "1000-base-cx", +"is-read-only": false, "description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown"] }, "1000-base-cxhd": { -"id": "1000-base-cxhd", -"is-read-only": false, +"id": "1000-base-cxhd", +"is-read-only": false, "description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode"] }, "1000-base-cxfd": { -"id": "1000-base-cxfd", -"is-read-only": false, +"id": "1000-base-cxfd", +"is-read-only": false, "description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode"] }, "1000-base-kx": { -"id": "1000-base-kx", -"is-read-only": false, +"id": "1000-base-kx", +"is-read-only": false, "description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70"] }, "1000-base-t": { -"id": "1000-base-t", -"is-read-only": false, +"id": "1000-base-t", +"is-read-only": false, "description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown"] }, "1000-base-thd": { -"id": "1000-base-thd", -"is-read-only": false, +"id": "1000-base-thd", +"is-read-only": false, "description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode"] }, "1000-base-tfd": { -"id": "1000-base-tfd", -"is-read-only": false, +"id": "1000-base-tfd", +"is-read-only": false, "description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode"] }, "10-gbase-x": { -"id": "10-gbase-x", -"is-read-only": false, +"id": "10-gbase-x", +"is-read-only": false, "description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] }, "10-gbase-lx4": { -"id": "10-gbase-lx4", -"is-read-only": false, +"id": "10-gbase-lx4", +"is-read-only": false, "description": ["X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53"] }, "10-gbase-cx4": { -"id": "10-gbase-cx4", -"is-read-only": false, +"id": "10-gbase-cx4", +"is-read-only": false, "description": ["X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54"] }, "10-gbase-kx4": { -"id": "10-gbase-kx4", -"is-read-only": false, +"id": "10-gbase-kx4", +"is-read-only": false, "description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71"] }, "10-gbase-r": { -"id": "10-gbase-r", -"is-read-only": false, +"id": "10-gbase-r", +"is-read-only": false, "description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] }, "10-gbase-er": { -"id": "10-gbase-er", -"is-read-only": false, +"id": "10-gbase-er", +"is-read-only": false, "description": ["R fiber over 1550nm optics as specified in 802.3 Clause 52"] }, "10-gbase-lr": { -"id": "10-gbase-lr", -"is-read-only": false, +"id": "10-gbase-lr", +"is-read-only": false, "description": ["R fiber over 1310nm optics as specified in 802.3 Clause 52"] }, "10-gbase-sr": { -"id": "10-gbase-sr", -"is-read-only": false, +"id": "10-gbase-sr", +"is-read-only": false, "description": ["R fiber over 850nm optics as specified in 802.3 Clause 52"] }, "10-gbase-lrm": { -"id": "10-gbase-lrm", -"is-read-only": false, +"id": "10-gbase-lrm", +"is-read-only": false, "description": ["R fiber over 1310 nm optics as specified in 802.3 Clause 68"] }, "10-gbase-kr": { -"id": "10-gbase-kr", -"is-read-only": false, +"id": "10-gbase-kr", +"is-read-only": false, "description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72"] }, "10-gbase-t": { -"id": "10-gbase-t", -"is-read-only": false, +"id": "10-gbase-t", +"is-read-only": false, "description": ["Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55"] }, "10-gbase-pr-d1": { -"id": "10-gbase-pr-d1", -"is-read-only": false, +"id": "10-gbase-pr-d1", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-d2": { -"id": "10-gbase-pr-d2", -"is-read-only": false, +"id": "10-gbase-pr-d2", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-d3": { -"id": "10-gbase-pr-d3", -"is-read-only": false, +"id": "10-gbase-pr-d3", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-d4": { -"id": "10-gbase-pr-d4", -"is-read-only": false, +"id": "10-gbase-pr-d4", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-u1": { -"id": "10-gbase-pr-u1", -"is-read-only": false, +"id": "10-gbase-pr-u1", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-u2": { -"id": "10-gbase-pr-u2", -"is-read-only": false, +"id": "10-gbase-pr-u2", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-u3": { -"id": "10-gbase-pr-u3", -"is-read-only": false, +"id": "10-gbase-pr-u3", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "10-gbase-pr-u4": { -"id": "10-gbase-pr-u4", -"is-read-only": false, +"id": "10-gbase-pr-u4", +"is-read-only": false, "description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] }, "40-gbase-r": { -"id": "40-gbase-r", -"is-read-only": false, +"id": "40-gbase-r", +"is-read-only": false, "description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] }, "40-gbase-kr4": { -"id": "40-gbase-kr4", -"is-read-only": false, +"id": "40-gbase-kr4", +"is-read-only": false, "description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84"] }, "40-gbase-cr4": { -"id": "40-gbase-cr4", -"is-read-only": false, +"id": "40-gbase-cr4", +"is-read-only": false, "description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"] }, "40-gbase-sr4": { -"id": "40-gbase-sr4", -"is-read-only": false, +"id": "40-gbase-sr4", +"is-read-only": false, "description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"] }, "4-x10-gbase-sr": { -"id": "4-x10-gbase-sr", -"is-read-only": false, +"id": "4-x10-gbase-sr", +"is-read-only": false, "description": ["4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber"] }, "40-gbase-lr4": { -"id": "40-gbase-lr4", -"is-read-only": false, +"id": "40-gbase-lr4", +"is-read-only": false, "description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87"] }, "40-gbase-er4": { -"id": "40-gbase-er4", -"is-read-only": false, +"id": "40-gbase-er4", +"is-read-only": false, "description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87"] }, "40-gbase-fr": { -"id": "40-gbase-fr", -"is-read-only": false, +"id": "40-gbase-fr", +"is-read-only": false, "description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89"] }, "100-gbase-r": { -"id": "100-gbase-r", -"is-read-only": false, +"id": "100-gbase-r", +"is-read-only": false, "description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] }, "100-gbase-cr4": { -"id": "100-gbase-cr4", -"is-read-only": false, +"id": "100-gbase-cr4", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92"] }, "100-gbase-kr4": { -"id": "100-gbase-kr4", -"is-read-only": false, +"id": "100-gbase-kr4", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93"] }, "100-gbase-kp4": { -"id": "100-gbase-kp4", -"is-read-only": false, +"id": "100-gbase-kp4", +"is-read-only": false, "description": ["100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94"] }, "100-gbase-cr10": { -"id": "100-gbase-cr10", -"is-read-only": false, +"id": "100-gbase-cr10", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"] }, "100-gbase-sr4": { -"id": "100-gbase-sr4", -"is-read-only": false, +"id": "100-gbase-sr4", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95"] }, "100-gbase-sr10": { -"id": "100-gbase-sr10", -"is-read-only": false, +"id": "100-gbase-sr10", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"] }, "2-x40-gbase-sr": { -"id": "2-x40-gbase-sr", -"is-read-only": false, +"id": "2-x40-gbase-sr", +"is-read-only": false, "description": ["2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber"] }, "10-x10-gbase-sr": { -"id": "10-x10-gbase-sr", -"is-read-only": false, +"id": "10-x10-gbase-sr", +"is-read-only": false, "description": ["10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber"] }, "12-x10-gbase-sr": { -"id": "12-x10-gbase-sr", -"is-read-only": false, +"id": "12-x10-gbase-sr", +"is-read-only": false, "description": ["12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber"] }, "100-gbase-lr4": { -"id": "100-gbase-lr4", -"is-read-only": false, +"id": "100-gbase-lr4", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88"] }, "100-gbase-er4": { -"id": "100-gbase-er4", -"is-read-only": false, +"id": "100-gbase-er4", +"is-read-only": false, "description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88"] }, "not-yet-defined": { -"id": "not-yet-defined", -"is-read-only": false, +"id": "not-yet-defined", +"is-read-only": false, "description": ["none"] }, "pmd-name-type": { -"id": "pmd-name-type", -"is-read-only": false, +"id": "pmd-name-type", +"is-read-only": false, "description": ["none"] }, "signal-ordering-kind-name": { -"id": "signal-ordering-kind-name", -"is-read-only": false, +"id": "signal-ordering-kind-name", +"is-read-only": false, "description": ["To be filled according to TR-541. Must be unique for referencing during configuration of the interface."] }, "signal-list": { -"id": "signal-list", -"is-read-only": false, +"id": "signal-list", +"is-read-only": false, "description": ["Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4"] }, "signal-ordering-type-g": { -"id": "signal-ordering-type-g", -"is-read-only": false, +"id": "signal-ordering-type-g", +"is-read-only": false, "description": ["none"] }, "mau-id": { -"id": "mau-id", -"is-read-only": false, +"id": "mau-id", +"is-read-only": false, "description": ["802.3 according to 30.5.1.1.1 aMAUID Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device"] }, "mii-kind": { -"id": "mii-kind", -"is-read-only": false, +"id": "mii-kind", +"is-read-only": false, "description": ["SFF8472_SFF8636 Kind of Medium Independent Interface (MII) provided by this Medium Attachment Unit (MAU) (e.g. SFP, moldered port)"] }, "mdi-kind": { -"id": "mdi-kind", -"is-read-only": false, +"id": "mdi-kind", +"is-read-only": false, "description": ["Kind of Medium Dependent Interface (MDI) provided by this Medium Attachment Unit (MAU)"] }, "required-medium-kind": { -"id": "required-medium-kind", -"is-read-only": false, +"id": "required-medium-kind", +"is-read-only": false, "description": ["Kind of medium required for operating this Medium Attachment Unit (MAU), more like an information field"] }, "wavelength-min": { -"id": "wavelength-min", -"is-read-only": false, +"id": "wavelength-min", +"is-read-only": false, "description": ["SFF-8690 Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5"] }, "wavelength-max": { -"id": "wavelength-max", -"is-read-only": false, +"id": "wavelength-max", +"is-read-only": false, "description": ["Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"] }, "wavelength-grid-min": { -"id": "wavelength-grid-min", -"is-read-only": false, +"id": "wavelength-grid-min", +"is-read-only": false, "description": ["Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known SFF-8690"] }, "link-length-max": { -"id": "link-length-max", -"is-read-only": false, +"id": "link-length-max", +"is-read-only": false, "description": ["Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind."] }, "vendor-name": { -"id": "vendor-name", -"is-read-only": false, +"id": "vendor-name", +"is-read-only": false, "description": ["Name of the vendor of the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName"] }, "vendor-oui": { -"id": "vendor-oui", -"is-read-only": false, +"id": "vendor-oui", +"is-read-only": false, "description": ["Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier"] }, "part-number": { -"id": "part-number", -"is-read-only": false, +"id": "part-number", +"is-read-only": false, "description": ["802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number Uniquely identifies the transceiver in the vendor's product lists Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier"] }, "revision-number": { -"id": "revision-number", -"is-read-only": false, +"id": "revision-number", +"is-read-only": false, "description": ["Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version"] }, "serial-number": { -"id": "serial-number", -"is-read-only": false, +"id": "serial-number", +"is-read-only": false, "description": ["Vendor's serial number for the transceiver. 0 = not applicable Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber"] }, "date-code": { -"id": "date-code", -"is-read-only": false, +"id": "date-code", +"is-read-only": false, "description": ["Vendor's date code for the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate"] }, "pmd-list": { -"id": "pmd-list", -"is-read-only": false, +"id": "pmd-list", +"is-read-only": false, "description": ["List of Physical Medium Dependent (PMD) that can be operated *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***"] }, "signal-ordering-list": { -"id": "signal-ordering-list", -"is-read-only": false, +"id": "signal-ordering-list", +"is-read-only": false, "description": ["Describes the different (e.g. MDI, MDI-X) ways of ordering the signals on the physical medium"] }, "auto-signal-ordering-is-avail": { -"id": "auto-signal-ordering-is-avail", -"is-read-only": false, +"id": "auto-signal-ordering-is-avail", +"is-read-only": false, "description": ["1 = there is a mechanism for automatically crossing over tx and rx implemented"] }, "short-reach-mode-is-avail": { -"id": "short-reach-mode-is-avail", -"is-read-only": false, +"id": "short-reach-mode-is-avail", +"is-read-only": false, "description": ["1 = Indicates that Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64 is available"] }, "eee-is-avail": { -"id": "eee-is-avail", -"is-read-only": false, +"id": "eee-is-avail", +"is-read-only": false, "description": ["1 = Indicates that Energy-Efficient Ethernet (EEE) is available at the device."] }, "unidirectional-operation-is-avail": { -"id": "unidirectional-operation-is-avail", -"is-read-only": false, +"id": "unidirectional-operation-is-avail", +"is-read-only": false, "description": ["1 = Medium Attachment Unit (MAU) able to transmit from Media Independent Interface (MII) regardless of whether the MAU has determined that a valid link has been established, 0 = MAU able to transmit from MII only when the MAU has determined that a valid link has been established 802.3"] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["MW IM Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."] }, "mau-type-g": { -"id": "mau-type-g", -"is-read-only": false, +"id": "mau-type-g", +"is-read-only": false, "description": ["none"] }, "problem-kind-name": { -"id": "problem-kind-name", -"is-read-only": false, +"id": "problem-kind-name", +"is-read-only": false, "description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"] }, "problem-kind-severity": { -"id": "problem-kind-severity", -"is-read-only": false, +"id": "problem-kind-severity", +"is-read-only": false, "description": ["Severity of this type of alarm."] }, "wire-interface-problem-severity-type-g": { -"id": "wire-interface-problem-severity-type-g", -"is-read-only": false, +"id": "wire-interface-problem-severity-type-g", +"is-read-only": false, "description": ["none"] }, "problem-name": { -"id": "problem-name", -"is-read-only": false, +"id": "problem-name", +"is-read-only": false, "description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"] }, "wire-interface-current-problem-type-g": { -"id": "wire-interface-current-problem-type-g", -"is-read-only": false, +"id": "wire-interface-current-problem-type-g", +"is-read-only": false, "description": ["none"] }, "es": { -"id": "es", -"is-read-only": false, +"id": "es", +"is-read-only": false, "description": ["802.3 30.8.1.1.13 aLineESs Number of errored seconds"] }, "ses": { -"id": "ses", -"is-read-only": false, +"id": "ses", +"is-read-only": false, "description": ["802.3 30.8.1.1.12 aLineSESs Number of severely errored seconds"] }, "symbol-error-during-carrier": { -"id": "symbol-error-during-carrier", -"is-read-only": false, +"id": "symbol-error-during-carrier", +"is-read-only": false, "description": ["802.3 according to 30.3.2.1.5 aSymbolErrorDuringCarrier Number of times when valid carrier was present and an invalid data symbol occured."] }, "low-power-idle-transmitter-ms": { -"id": "low-power-idle-transmitter-ms", -"is-read-only": false, +"id": "low-power-idle-transmitter-ms", +"is-read-only": false, "description": ["802.3 similar to 30.3.2.1.8 aTransmitLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the transmitter was in power save mode"] }, "low-power-idle-receiver-ms": { -"id": "low-power-idle-receiver-ms", -"is-read-only": false, +"id": "low-power-idle-receiver-ms", +"is-read-only": false, "description": ["802.3 similar to 30.3.2.1.9 aReceiveLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the receiver was in power save mode"] }, "wire-interface-performance-type-g": { -"id": "wire-interface-performance-type-g", -"is-read-only": false, +"id": "wire-interface-performance-type-g", +"is-read-only": false, "description": ["none"] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "wire-interface-current-performance-type-g": { -"id": "wire-interface-current-performance-type-g", -"is-read-only": false, +"id": "wire-interface-current-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "wire-interface-historical-performance-type-g": { -"id": "wire-interface-historical-performance-type-g", -"is-read-only": false, +"id": "wire-interface-historical-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "air-interface-capability": { -"id": "air-interface-capability", -"is-read-only": false, +"id": "air-interface-capability", +"is-read-only": false, "description": ["none"] }, "air-interface-configuration": { -"id": "air-interface-configuration", -"is-read-only": false, +"id": "air-interface-configuration", +"is-read-only": false, "description": ["none"] }, "air-interface-status": { -"id": "air-interface-status", -"is-read-only": false, +"id": "air-interface-status", +"is-read-only": false, "description": ["none"] }, "air-interface-current-problems": { -"id": "air-interface-current-problems", -"is-read-only": false, +"id": "air-interface-current-problems", +"is-read-only": false, "description": ["none"] }, "air-interface-current-performance": { -"id": "air-interface-current-performance", -"is-read-only": false, +"id": "air-interface-current-performance", +"is-read-only": false, "description": ["none"] }, "air-interface-historical-performances": { -"id": "air-interface-historical-performances", -"is-read-only": false, +"id": "air-interface-historical-performances", +"is-read-only": false, "description": ["none"] }, "mw-air-interface-pac": { -"id": "mw-air-interface-pac", -"is-read-only": false, +"id": "mw-air-interface-pac", +"is-read-only": false, "description": ["none"] }, "type-of-equipment": { -"id": "type-of-equipment", -"is-read-only": false, +"id": "type-of-equipment", +"is-read-only": false, "description": ["This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."] }, "tx-frequency-min": { -"id": "tx-frequency-min", -"is-read-only": false, +"id": "tx-frequency-min", +"is-read-only": false, "description": ["Value of the minimum transmit frequency tunable at the air interface."] }, "tx-frequency-max": { -"id": "tx-frequency-max", -"is-read-only": false, +"id": "tx-frequency-max", +"is-read-only": false, "description": ["Value of the maximum transmit frequency tunable at the air interface."] }, "rx-frequency-min": { -"id": "rx-frequency-min", -"is-read-only": false, +"id": "rx-frequency-min", +"is-read-only": false, "description": ["Value of the minimum receive frequency tunable at the air interface."] }, "rx-frequency-max": { -"id": "rx-frequency-max", -"is-read-only": false, +"id": "rx-frequency-max", +"is-read-only": false, "description": ["Value of the maximum receive frequency tunable at the air interface."] }, "adaptive-modulation-is-avail": { -"id": "adaptive-modulation-is-avail", -"is-read-only": false, +"id": "adaptive-modulation-is-avail", +"is-read-only": false, "description": ["In case the device is capable of adaptive modulation, this field shall contain a 'true'."] }, "mimo-is-avail": { -"id": "mimo-is-avail", -"is-read-only": false, +"id": "mimo-is-avail", +"is-read-only": false, "description": ["In case the device is capable of MIMO, this field shall contain a 'true'."] }, "mimo-channels": { -"id": "mimo-channels", -"is-read-only": false, +"id": "mimo-channels", +"is-read-only": false, "description": ["Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."] }, "alic-is-avail": { -"id": "alic-is-avail", -"is-read-only": false, +"id": "alic-is-avail", +"is-read-only": false, "description": ["In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."] }, "atpc-is-avail": { -"id": "atpc-is-avail", -"is-read-only": false, +"id": "atpc-is-avail", +"is-read-only": false, "description": ["In case the microwave radio is capable of ATPC, this field shall contain a 'true'."] }, "atpc-range": { -"id": "atpc-range", -"is-read-only": false, +"id": "atpc-range", +"is-read-only": false, "description": ["Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin)."] }, "encryption-is-avail": { -"id": "encryption-is-avail", -"is-read-only": false, +"id": "encryption-is-avail", +"is-read-only": false, "description": ["Shall be marked 'true', if payload encryption is available."] }, "supported-loop-back-kind-list": { -"id": "supported-loop-back-kind-list", -"is-read-only": false, +"id": "supported-loop-back-kind-list", +"is-read-only": false, "description": ["List of supported kinds of looping back of header information to the remote site."] }, "maintenance-timer-range": { -"id": "maintenance-timer-range", -"is-read-only": false, +"id": "maintenance-timer-range", +"is-read-only": false, "description": ["Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor."] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas."] }, "supported-channel-plan-list": { -"id": "supported-channel-plan-list", -"is-read-only": false, +"id": "supported-channel-plan-list", +"is-read-only": false, "description": ["List of channel spacing that are supported by the device."] }, "air-interface-capability-g": { -"id": "air-interface-capability-g", -"is-read-only": false, +"id": "air-interface-capability-g", +"is-read-only": false, "description": ["Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."] }, "air-interface-name": { -"id": "air-interface-name", -"is-read-only": false, +"id": "air-interface-name", +"is-read-only": false, "description": ["Operator specific microwave link ID (often used for coding area, type of element and sequential number)."] }, "remote-air-interface-name": { -"id": "remote-air-interface-name", -"is-read-only": false, +"id": "remote-air-interface-name", +"is-read-only": false, "description": ["Name of the air interface, which belongs to the same link, at the remote site."] }, "expected-signal-id": { -"id": "expected-signal-id", -"is-read-only": false, +"id": "expected-signal-id", +"is-read-only": false, "description": ["If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID."] }, "transmitted-signal-id": { -"id": "transmitted-signal-id", -"is-read-only": false, +"id": "transmitted-signal-id", +"is-read-only": false, "description": ["Transmitted radio signal ID for synchronizing the receiver."] }, "radio-signal-id": { -"id": "radio-signal-id", -"is-read-only": false, +"id": "radio-signal-id", +"is-read-only": false, "description": ["The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check."] }, "tx-frequency": { -"id": "tx-frequency", -"is-read-only": false, +"id": "tx-frequency", +"is-read-only": false, "description": ["Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."] }, "rx-frequency": { -"id": "rx-frequency", -"is-read-only": false, +"id": "rx-frequency", +"is-read-only": false, "description": ["Center frequency of the receive channel."] }, "transmission-mode-min": { -"id": "transmission-mode-min", -"is-read-only": false, +"id": "transmission-mode-min", +"is-read-only": false, "description": ["Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode)."] }, "transmission-mode-max": { -"id": "transmission-mode-max", -"is-read-only": false, +"id": "transmission-mode-max", +"is-read-only": false, "description": ["Maximum transmission mode to be configured."] }, "tx-channel-bandwidth": { -"id": "tx-channel-bandwidth", -"is-read-only": false, +"id": "tx-channel-bandwidth", +"is-read-only": false, "description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"] }, "rx-channel-bandwidth": { -"id": "rx-channel-bandwidth", -"is-read-only": false, +"id": "rx-channel-bandwidth", +"is-read-only": false, "description": ["Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"] }, "polarization": { -"id": "polarization", -"is-read-only": false, +"id": "polarization", +"is-read-only": false, "description": ["Allows documenting the polarization of the air interface."] }, "power-is-on": { -"id": "power-is-on", -"is-read-only": false, +"id": "power-is-on", +"is-read-only": false, "description": ["Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."] }, "transmitter-is-on": { -"id": "transmitter-is-on", -"is-read-only": false, +"id": "transmitter-is-on", +"is-read-only": false, "description": ["Activation of the transmitter inside the radio shall be expressed as a 'true'."] }, "receiver-is-on": { -"id": "receiver-is-on", -"is-read-only": false, +"id": "receiver-is-on", +"is-read-only": false, "description": ["Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations."] }, "tx-power": { -"id": "tx-power", -"is-read-only": false, +"id": "tx-power", +"is-read-only": false, "description": ["Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."] }, "adaptive-modulation-is-on": { -"id": "adaptive-modulation-is-on", -"is-read-only": false, +"id": "adaptive-modulation-is-on", +"is-read-only": false, "description": ["Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."] }, "modulation-min": { -"id": "modulation-min", -"is-read-only": false, +"id": "modulation-min", +"is-read-only": false, "description": ["Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."] }, "modulation-max": { -"id": "modulation-max", -"is-read-only": false, +"id": "modulation-max", +"is-read-only": false, "description": ["Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."] }, "xpic-is-on": { -"id": "xpic-is-on", -"is-read-only": false, +"id": "xpic-is-on", +"is-read-only": false, "description": ["Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."] }, "mimo-is-on": { -"id": "mimo-is-on", -"is-read-only": false, +"id": "mimo-is-on", +"is-read-only": false, "description": ["Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."] }, "alic-is-on": { -"id": "alic-is-on", -"is-read-only": false, +"id": "alic-is-on", +"is-read-only": false, "description": ["Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."] }, "atpc-is-on": { -"id": "atpc-is-on", -"is-read-only": false, +"id": "atpc-is-on", +"is-read-only": false, "description": ["ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."] }, "atpc-thresh-upper": { -"id": "atpc-thresh-upper", -"is-read-only": false, +"id": "atpc-thresh-upper", +"is-read-only": false, "description": ["If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."] }, "atpc-thresh-lower": { -"id": "atpc-thresh-lower", -"is-read-only": false, +"id": "atpc-thresh-lower", +"is-read-only": false, "description": ["If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."] }, "atpc-tx-power-min": { -"id": "atpc-tx-power-min", -"is-read-only": false, +"id": "atpc-tx-power-min", +"is-read-only": false, "description": ["Transmit power, which is not to be undercut, while operating ATPC."] }, "auto-freq-select-is-on": { -"id": "auto-freq-select-is-on", -"is-read-only": false, +"id": "auto-freq-select-is-on", +"is-read-only": false, "description": ["Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."] }, "auto-freq-select-range": { -"id": "auto-freq-select-range", -"is-read-only": false, +"id": "auto-freq-select-range", +"is-read-only": false, "description": ["Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."] }, "modulation-is-on": { -"id": "modulation-is-on", -"is-read-only": false, +"id": "modulation-is-on", +"is-read-only": false, "description": ["Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'."] }, "encryption-is-on": { -"id": "encryption-is-on", -"is-read-only": false, +"id": "encryption-is-on", +"is-read-only": false, "description": ["Activates encryption of the payload."] }, "cryptographic-key": { -"id": "cryptographic-key", -"is-read-only": false, +"id": "cryptographic-key", +"is-read-only": false, "description": ["Key for transforming plaintext into ciphertext data."] }, "performance-monitoring-collection-is-on": { -"id": "performance-monitoring-collection-is-on", -"is-read-only": false, +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, "description": ["Enables measurement, collection, storage and access to performance data."] }, "threshold-cross-alarm-list": { -"id": "threshold-cross-alarm-list", -"is-read-only": false, +"id": "threshold-cross-alarm-list", +"is-read-only": false, "description": ["List of threshold cross alarms to be configured."] }, "loop-back-kind-on": { -"id": "loop-back-kind-on", -"is-read-only": false, +"id": "loop-back-kind-on", +"is-read-only": false, "description": ["Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."] }, "maintenance-timer": { -"id": "maintenance-timer", -"is-read-only": false, +"id": "maintenance-timer", +"is-read-only": false, "description": ["Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the problem to be configured."] }, "air-interface-configuration-g": { -"id": "air-interface-configuration-g", -"is-read-only": false, +"id": "air-interface-configuration-g", +"is-read-only": false, "description": ["Configuration of the radio link."] }, "tx-frequency-cur": { -"id": "tx-frequency-cur", -"is-read-only": false, +"id": "tx-frequency-cur", +"is-read-only": false, "description": ["Center frequency of the currently operated transmit channel."] }, "rx-frequency-cur": { -"id": "rx-frequency-cur", -"is-read-only": false, +"id": "rx-frequency-cur", +"is-read-only": false, "description": ["Center frequency of the currently operated receive channel."] }, "tx-level-cur": { -"id": "tx-level-cur", -"is-read-only": false, +"id": "tx-level-cur", +"is-read-only": false, "description": ["Current transmit level."] }, "rx-level-cur": { -"id": "rx-level-cur", -"is-read-only": false, +"id": "rx-level-cur", +"is-read-only": false, "description": ["Current receive level."] }, "transmission-mode-cur": { -"id": "transmission-mode-cur", -"is-read-only": false, +"id": "transmission-mode-cur", +"is-read-only": false, "description": ["Currently operated transmission mode according to definitions in Capabilities."] }, "modulation-cur": { -"id": "modulation-cur", -"is-read-only": false, +"id": "modulation-cur", +"is-read-only": false, "description": ["Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."] }, "code-rate-cur": { -"id": "code-rate-cur", -"is-read-only": false, +"id": "code-rate-cur", +"is-read-only": false, "description": ["Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate)."] }, "received-signal-id": { -"id": "received-signal-id", -"is-read-only": false, +"id": "received-signal-id", +"is-read-only": false, "description": ["ID of the signal, which the receiver is currently synchronized on."] }, "snir-cur": { -"id": "snir-cur", -"is-read-only": false, +"id": "snir-cur", +"is-read-only": false, "description": ["Currently measured signal to (noise+interference) ratio."] }, "xpd-cur": { -"id": "xpd-cur", -"is-read-only": false, +"id": "xpd-cur", +"is-read-only": false, "description": ["Currently measured cross polarization discrimination."] }, "rf-temp-cur": { -"id": "rf-temp-cur", -"is-read-only": false, +"id": "rf-temp-cur", +"is-read-only": false, "description": ["Current temperature (in degree Celsius) of the radio module inside the outdoor unit."] }, "last-status-change": { -"id": "last-status-change", -"is-read-only": false, +"id": "last-status-change", +"is-read-only": false, "description": ["Time the Air Interface entered its current operational status."] }, "radio-power-is-up": { -"id": "radio-power-is-up", -"is-read-only": false, +"id": "radio-power-is-up", +"is-read-only": false, "description": ["If the radio unit has power and is switched on, this shall be expressed as a 'true'."] }, "link-is-up": { -"id": "link-is-up", -"is-read-only": false, +"id": "link-is-up", +"is-read-only": false, "description": ["If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."] }, "xpic-is-up": { -"id": "xpic-is-up", -"is-read-only": false, +"id": "xpic-is-up", +"is-read-only": false, "description": ["If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."] }, "mimo-is-up": { -"id": "mimo-is-up", -"is-read-only": false, +"id": "mimo-is-up", +"is-read-only": false, "description": ["If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."] }, "alic-is-up": { -"id": "alic-is-up", -"is-read-only": false, +"id": "alic-is-up", +"is-read-only": false, "description": ["If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."] }, "atpc-is-up": { -"id": "atpc-is-up", -"is-read-only": false, +"id": "atpc-is-up", +"is-read-only": false, "description": ["If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."] }, "auto-freq-select-is-up": { -"id": "auto-freq-select-is-up", -"is-read-only": false, +"id": "auto-freq-select-is-up", +"is-read-only": false, "description": ["If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."] }, "loop-back-kind-up": { -"id": "loop-back-kind-up", -"is-read-only": false, +"id": "loop-back-kind-up", +"is-read-only": false, "description": ["The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."] }, "local-end-point-id": { -"id": "local-end-point-id", -"is-read-only": false, +"id": "local-end-point-id", +"is-read-only": false, "description": ["The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."] }, "remote-end-point-id": { -"id": "remote-end-point-id", -"is-read-only": false, +"id": "remote-end-point-id", +"is-read-only": false, "description": ["The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."] }, "air-interface-status-g": { -"id": "air-interface-status-g", -"is-read-only": false, +"id": "air-interface-status-g", +"is-read-only": false, "description": ["Measurements of current values on the air interface and operational status of the device."] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "air-interface-current-problems-g": { -"id": "air-interface-current-problems-g", -"is-read-only": false, +"id": "air-interface-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "air-interface-current-performance-g": { -"id": "air-interface-current-performance-g", -"is-read-only": false, +"id": "air-interface-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "air-interface-historical-performances-g": { -"id": "air-interface-historical-performances-g", -"is-read-only": false, +"id": "air-interface-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."] }, "co-channel-group": { -"id": "co-channel-group", -"is-read-only": false, +"id": "co-channel-group", +"is-read-only": false, "description": ["none"] }, "co-channel-group-id": { -"id": "co-channel-group-id", -"is-read-only": false, +"id": "co-channel-group-id", +"is-read-only": false, "description": ["none"] }, "air-interface-list": { -"id": "air-interface-list", -"is-read-only": false, +"id": "air-interface-list", +"is-read-only": false, "description": ["List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."] }, "sort-of-co-channel-group": { -"id": "sort-of-co-channel-group", -"is-read-only": false, +"id": "sort-of-co-channel-group", +"is-read-only": false, "description": ["Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"] }, "logical-termination-point": { -"id": "logical-termination-point", -"is-read-only": false, +"id": "logical-termination-point", +"is-read-only": false, "description": ["none"] }, "co-channel-group-g": { -"id": "co-channel-group-g", -"is-read-only": false, +"id": "co-channel-group-g", +"is-read-only": false, "description": ["Required for configuring XPIC, MIMO and ALIC."] }, "role": { -"id": "role", -"is-read-only": false, +"id": "role", +"is-read-only": false, "description": ["none"] }, "endpoint": { -"id": "endpoint", -"is-read-only": false, +"id": "endpoint", +"is-read-only": false, "description": ["none"] }, "mw-air-interface-hsb-end-point-pac": { -"id": "mw-air-interface-hsb-end-point-pac", -"is-read-only": false, +"id": "mw-air-interface-hsb-end-point-pac", +"is-read-only": false, "description": ["The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."] }, "prot-type": { -"id": "prot-type", -"is-read-only": false, +"id": "prot-type", +"is-read-only": false, "description": ["Indicates the protection scheme that is used for the ProtectionGroup."] }, "air-interface-hsb-configuration-is-faulty-severity": { -"id": "air-interface-hsb-configuration-is-faulty-severity", -"is-read-only": false, +"id": "air-interface-hsb-configuration-is-faulty-severity", +"is-read-only": false, "description": ["The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."] }, "air-interface-hsb-is-partly-down-severity": { -"id": "air-interface-hsb-is-partly-down-severity", -"is-read-only": false, +"id": "air-interface-hsb-is-partly-down-severity", +"is-read-only": false, "description": ["The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."] }, "air-interface-hsb-is-down-severity": { -"id": "air-interface-hsb-is-down-severity", -"is-read-only": false, +"id": "air-interface-hsb-is-down-severity", +"is-read-only": false, "description": ["The level of severity of the total HSB configuration being down shall be chosen from an enumeration."] }, "fcswitch": { -"id": "fcswitch", -"is-read-only": false, +"id": "fcswitch", +"is-read-only": false, "description": ["none"] }, "mw-air-interface-hsb-fc-switch-pac": { -"id": "mw-air-interface-hsb-fc-switch-pac", -"is-read-only": false, +"id": "mw-air-interface-hsb-fc-switch-pac", +"is-read-only": false, "description": ["Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "air-interface-diversity-capability": { -"id": "air-interface-diversity-capability", -"is-read-only": false, +"id": "air-interface-diversity-capability", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-configuration": { -"id": "air-interface-diversity-configuration", -"is-read-only": false, +"id": "air-interface-diversity-configuration", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-status": { -"id": "air-interface-diversity-status", -"is-read-only": false, +"id": "air-interface-diversity-status", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-current-problems": { -"id": "air-interface-diversity-current-problems", -"is-read-only": false, +"id": "air-interface-diversity-current-problems", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-current-performance": { -"id": "air-interface-diversity-current-performance", -"is-read-only": false, +"id": "air-interface-diversity-current-performance", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-historical-performances": { -"id": "air-interface-diversity-historical-performances", -"is-read-only": false, +"id": "air-interface-diversity-historical-performances", +"is-read-only": false, "description": ["none"] }, "mw-air-interface-diversity-pac": { -"id": "mw-air-interface-diversity-pac", -"is-read-only": false, +"id": "mw-air-interface-diversity-pac", +"is-read-only": false, "description": ["none"] }, "available-kinds-of-diversity": { -"id": "available-kinds-of-diversity", -"is-read-only": false, +"id": "available-kinds-of-diversity", +"is-read-only": false, "description": ["Available types of diversity to be listed."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor."] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas."] }, "air-interface-diversity-capability-g": { -"id": "air-interface-diversity-capability-g", -"is-read-only": false, +"id": "air-interface-diversity-capability-g", +"is-read-only": false, "description": ["Describes the capabilities in implementing different types of air interface diversity."] }, "air-interface-diversity": { -"id": "air-interface-diversity", -"is-read-only": false, +"id": "air-interface-diversity", +"is-read-only": false, "description": ["Type of air interface diversity configured at the link."] }, "air-interface-ltp-list": { -"id": "air-interface-ltp-list", -"is-read-only": false, +"id": "air-interface-ltp-list", +"is-read-only": false, "description": ["_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"] }, "performance-monitoring-collection-is-on": { -"id": "performance-monitoring-collection-is-on", -"is-read-only": false, +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, "description": ["Enables measurement, collection, storage and access to performance data."] }, "threshold-cross-alarm-list": { -"id": "threshold-cross-alarm-list", -"is-read-only": false, +"id": "threshold-cross-alarm-list", +"is-read-only": false, "description": ["List of threshold cross alarms to be configured."] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the problem to be configured."] }, "air-interface-diversity-configuration-g": { -"id": "air-interface-diversity-configuration-g", -"is-read-only": false, +"id": "air-interface-diversity-configuration-g", +"is-read-only": false, "description": ["none"] }, "snir-cur": { -"id": "snir-cur", -"is-read-only": false, +"id": "snir-cur", +"is-read-only": false, "description": ["Currently measured signal to (noise+interference) ratio of the combined signals."] }, "air-interface-diversity-status": { -"id": "air-interface-diversity-status", -"is-read-only": false, +"id": "air-interface-diversity-status", +"is-read-only": false, "description": ["Status of the air interface bundle."] }, "last-status-change": { -"id": "last-status-change", -"is-read-only": false, +"id": "last-status-change", +"is-read-only": false, "description": ["Time the Diversity Group entered its current operational status."] }, "air-interface-diversity-status-g": { -"id": "air-interface-diversity-status-g", -"is-read-only": false, +"id": "air-interface-diversity-status-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-current-problems-g": { -"id": "air-interface-diversity-current-problems-g", -"is-read-only": false, +"id": "air-interface-diversity-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "air-interface-diversity-current-performance-g": { -"id": "air-interface-diversity-current-performance-g", -"is-read-only": false, +"id": "air-interface-diversity-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface diversity configuration at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "air-interface-diversity-historical-performances-g": { -"id": "air-interface-diversity-historical-performances-g", -"is-read-only": false, +"id": "air-interface-diversity-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "pure-ethernet-structure-capability": { -"id": "pure-ethernet-structure-capability", -"is-read-only": false, +"id": "pure-ethernet-structure-capability", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-configuration": { -"id": "pure-ethernet-structure-configuration", -"is-read-only": false, +"id": "pure-ethernet-structure-configuration", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-status": { -"id": "pure-ethernet-structure-status", -"is-read-only": false, +"id": "pure-ethernet-structure-status", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-current-problems": { -"id": "pure-ethernet-structure-current-problems", -"is-read-only": false, +"id": "pure-ethernet-structure-current-problems", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-current-performance": { -"id": "pure-ethernet-structure-current-performance", -"is-read-only": false, +"id": "pure-ethernet-structure-current-performance", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-historical-performances": { -"id": "pure-ethernet-structure-historical-performances", -"is-read-only": false, +"id": "pure-ethernet-structure-historical-performances", +"is-read-only": false, "description": ["none"] }, "mw-pure-ethernet-structure-pac": { -"id": "mw-pure-ethernet-structure-pac", -"is-read-only": false, +"id": "mw-pure-ethernet-structure-pac", +"is-read-only": false, "description": ["The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."] }, "structure-id": { -"id": "structure-id", -"is-read-only": false, +"id": "structure-id", +"is-read-only": false, "description": ["Identifies the Structure for bundling and container."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."] }, "pure-ethernet-structure-capability-g": { -"id": "pure-ethernet-structure-capability-g", -"is-read-only": false, +"id": "pure-ethernet-structure-capability-g", +"is-read-only": false, "description": ["Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport."] }, "performance-monitoring-collection-is-on": { -"id": "performance-monitoring-collection-is-on", -"is-read-only": false, +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, "description": ["Enables measurement, collection, storage and access to performance data."] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the type of problem to be configured."] }, "pure-ethernet-structure-configuration-g": { -"id": "pure-ethernet-structure-configuration-g", -"is-read-only": false, +"id": "pure-ethernet-structure-configuration-g", +"is-read-only": false, "description": ["none"] }, "segment-status-list": { -"id": "segment-status-list", -"is-read-only": false, +"id": "segment-status-list", +"is-read-only": false, "description": ["Status of the Ethernet transport segment. Always just one segment."] }, "last-status-change": { -"id": "last-status-change", -"is-read-only": false, +"id": "last-status-change", +"is-read-only": false, "description": ["Time and date of the last update of the status information."] }, "pure-ethernet-structure-status-g": { -"id": "pure-ethernet-structure-status-g", -"is-read-only": false, +"id": "pure-ethernet-structure-status-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-current-problems-g": { -"id": "pure-ethernet-structure-current-problems-g", -"is-read-only": false, +"id": "pure-ethernet-structure-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "pure-ethernet-structure-current-performance-g": { -"id": "pure-ethernet-structure-current-performance-g", -"is-read-only": false, +"id": "pure-ethernet-structure-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "pure-ethernet-structure-historical-performances-g": { -"id": "pure-ethernet-structure-historical-performances-g", -"is-read-only": false, +"id": "pure-ethernet-structure-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."] }, "pure-ethernet": { -"id": "pure-ethernet", -"is-read-only": false, +"id": "pure-ethernet", +"is-read-only": false, "description": ["Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "hybrid-mw-structure-capability": { -"id": "hybrid-mw-structure-capability", -"is-read-only": false, +"id": "hybrid-mw-structure-capability", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-configuration": { -"id": "hybrid-mw-structure-configuration", -"is-read-only": false, +"id": "hybrid-mw-structure-configuration", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-status": { -"id": "hybrid-mw-structure-status", -"is-read-only": false, +"id": "hybrid-mw-structure-status", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-current-problems": { -"id": "hybrid-mw-structure-current-problems", -"is-read-only": false, +"id": "hybrid-mw-structure-current-problems", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-current-performance": { -"id": "hybrid-mw-structure-current-performance", -"is-read-only": false, +"id": "hybrid-mw-structure-current-performance", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-historical-performances": { -"id": "hybrid-mw-structure-historical-performances", -"is-read-only": false, +"id": "hybrid-mw-structure-historical-performances", +"is-read-only": false, "description": ["none"] }, "mw-hybrid-mw-structure-pac": { -"id": "mw-hybrid-mw-structure-pac", -"is-read-only": false, +"id": "mw-hybrid-mw-structure-pac", +"is-read-only": false, "description": ["The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."] }, "structure-id": { -"id": "structure-id", -"is-read-only": false, +"id": "structure-id", +"is-read-only": false, "description": ["Identifies the Structure for bundling and container."] }, "supported-tdm-structure-types-list": { -"id": "supported-tdm-structure-types-list", -"is-read-only": false, +"id": "supported-tdm-structure-types-list", +"is-read-only": false, "description": ["Lists the TDM frame types that are supported."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."] }, "hybrid-mw-structure-capability-g": { -"id": "hybrid-mw-structure-capability-g", -"is-read-only": false, +"id": "hybrid-mw-structure-capability-g", +"is-read-only": false, "description": ["Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available."] }, "structure-kind": { -"id": "structure-kind", -"is-read-only": false, +"id": "structure-kind", +"is-read-only": false, "description": ["TDM frame to be applied."] }, "structure-type": { -"id": "structure-type", -"is-read-only": false, +"id": "structure-type", +"is-read-only": false, "description": ["TDM frame to be applied."] }, "number-of-tdm-segments-to-be-reserved": { -"id": "number-of-tdm-segments-to-be-reserved", -"is-read-only": false, +"id": "number-of-tdm-segments-to-be-reserved", +"is-read-only": false, "description": ["Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"] }, "performance-monitoring-collection-is-on": { -"id": "performance-monitoring-collection-is-on", -"is-read-only": false, +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, "description": ["Enables measurement, collection, storage and access to performance data."] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the type of problem to be configured."] }, "hybrid-mw-structure-configuration-g": { -"id": "hybrid-mw-structure-configuration-g", -"is-read-only": false, +"id": "hybrid-mw-structure-configuration-g", +"is-read-only": false, "description": ["none"] }, "segment-status-list": { -"id": "segment-status-list", -"is-read-only": false, +"id": "segment-status-list", +"is-read-only": false, "description": ["Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"] }, "last-status-change": { -"id": "last-status-change", -"is-read-only": false, +"id": "last-status-change", +"is-read-only": false, "description": ["Time and date of the last update of the status information."] }, "hybrid-mw-structure-status-g": { -"id": "hybrid-mw-structure-status-g", -"is-read-only": false, +"id": "hybrid-mw-structure-status-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-current-problems-g": { -"id": "hybrid-mw-structure-current-problems-g", -"is-read-only": false, +"id": "hybrid-mw-structure-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "hybrid-mw-structure-current-performance-g": { -"id": "hybrid-mw-structure-current-performance-g", -"is-read-only": false, +"id": "hybrid-mw-structure-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the structure of a hybrid microwave at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "hybrid-mw-structure-historical-performances-g": { -"id": "hybrid-mw-structure-historical-performances-g", -"is-read-only": false, +"id": "hybrid-mw-structure-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."] }, "hybrid-microwave": { -"id": "hybrid-microwave", -"is-read-only": false, +"id": "hybrid-microwave", +"is-read-only": false, "description": ["Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "ethernet-container-capability": { -"id": "ethernet-container-capability", -"is-read-only": false, +"id": "ethernet-container-capability", +"is-read-only": false, "description": ["none"] }, "ethernet-container-configuration": { -"id": "ethernet-container-configuration", -"is-read-only": false, +"id": "ethernet-container-configuration", +"is-read-only": false, "description": ["none"] }, "ethernet-container-status": { -"id": "ethernet-container-status", -"is-read-only": false, +"id": "ethernet-container-status", +"is-read-only": false, "description": ["none"] }, "ethernet-container-current-problems": { -"id": "ethernet-container-current-problems", -"is-read-only": false, +"id": "ethernet-container-current-problems", +"is-read-only": false, "description": ["none"] }, "ethernet-container-current-performance": { -"id": "ethernet-container-current-performance", -"is-read-only": false, +"id": "ethernet-container-current-performance", +"is-read-only": false, "description": ["none"] }, "ethernet-container-historical-performances": { -"id": "ethernet-container-historical-performances", -"is-read-only": false, +"id": "ethernet-container-historical-performances", +"is-read-only": false, "description": ["none"] }, "mw-ethernet-container-pac": { -"id": "mw-ethernet-container-pac", -"is-read-only": false, +"id": "mw-ethernet-container-pac", +"is-read-only": false, "description": ["none"] }, "bundling-is-avail": { -"id": "bundling-is-avail", -"is-read-only": false, +"id": "bundling-is-avail", +"is-read-only": false, "description": ["This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container."] }, "packet-compression-is-avail": { -"id": "packet-compression-is-avail", -"is-read-only": false, +"id": "packet-compression-is-avail", +"is-read-only": false, "description": ["In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."] }, "layer2-compression-is-avail": { -"id": "layer2-compression-is-avail", -"is-read-only": false, +"id": "layer2-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on layer 2 available at the device."] }, "vlan-compression-is-avail": { -"id": "vlan-compression-is-avail", -"is-read-only": false, +"id": "vlan-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on VLAN layer available at the device."] }, "q-in-q-compression-is-avail": { -"id": "q-in-q-compression-is-avail", -"is-read-only": false, +"id": "q-in-q-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on layer of a second VLAN available at the device."] }, "mpls-compression-is-avail": { -"id": "mpls-compression-is-avail", -"is-read-only": false, +"id": "mpls-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on mpls layer available at the device."] }, "ipv4-compression-is-avail": { -"id": "ipv4-compression-is-avail", -"is-read-only": false, +"id": "ipv4-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on layer 3 for IPv4 available at the device."] }, "ipv6-compression-is-avail": { -"id": "ipv6-compression-is-avail", -"is-read-only": false, +"id": "ipv6-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on layer 3 for IPv6 available at the device."] }, "layer4-compression-is-avail": { -"id": "layer4-compression-is-avail", -"is-read-only": false, +"id": "layer4-compression-is-avail", +"is-read-only": false, "description": ["Packet compression on layer 4 (TCP and UDP header) available at the device."] }, "encryption-is-avail": { -"id": "encryption-is-avail", -"is-read-only": false, +"id": "encryption-is-avail", +"is-read-only": false, "description": ["Shall be marked 'true', if Ethernet payload encryption is available."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."] }, "ethernet-container-capability-g": { -"id": "ethernet-container-capability-g", -"is-read-only": false, +"id": "ethernet-container-capability-g", +"is-read-only": false, "description": ["none"] }, "container-id": { -"id": "container-id", -"is-read-only": false, +"id": "container-id", +"is-read-only": false, "description": ["ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller."] }, "segments-id-list": { -"id": "segments-id-list", -"is-read-only": false, +"id": "segments-id-list", +"is-read-only": false, "description": ["Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."] }, "packet-compression-is-on": { -"id": "packet-compression-is-on", -"is-read-only": false, +"id": "packet-compression-is-on", +"is-read-only": false, "description": ["In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."] }, "layer2-compression-is-on": { -"id": "layer2-compression-is-on", -"is-read-only": false, +"id": "layer2-compression-is-on", +"is-read-only": false, "description": ["Packet compression on layer 2 configured at the device."] }, "vlan-compression-is-on": { -"id": "vlan-compression-is-on", -"is-read-only": false, +"id": "vlan-compression-is-on", +"is-read-only": false, "description": ["Packet compression on VLAN layer configured at the device."] }, "q-in-q-compression-is-on": { -"id": "q-in-q-compression-is-on", -"is-read-only": false, +"id": "q-in-q-compression-is-on", +"is-read-only": false, "description": ["Packet compression on layer of a second VLAN configured at the device."] }, "mpls-compression-is-on": { -"id": "mpls-compression-is-on", -"is-read-only": false, +"id": "mpls-compression-is-on", +"is-read-only": false, "description": ["Packet compression on MPLS layer configured at the device."] }, "ipv4-compression-is-on": { -"id": "ipv4-compression-is-on", -"is-read-only": false, +"id": "ipv4-compression-is-on", +"is-read-only": false, "description": ["Packet compression on layer 3 for IPv4 configured at the device."] }, "ipv6-compression-is-on": { -"id": "ipv6-compression-is-on", -"is-read-only": false, +"id": "ipv6-compression-is-on", +"is-read-only": false, "description": ["Packet compression on layer 3 for IPv6 configured at the device."] }, "layer4-compression-is-on": { -"id": "layer4-compression-is-on", -"is-read-only": false, +"id": "layer4-compression-is-on", +"is-read-only": false, "description": ["Packet compression on layer 4 (TCP and UDP header) configured at the device."] }, "encryption-is-on": { -"id": "encryption-is-on", -"is-read-only": false, +"id": "encryption-is-on", +"is-read-only": false, "description": ["Activates encryption of the Ethernet payload."] }, "cryptographic-key": { -"id": "cryptographic-key", -"is-read-only": false, +"id": "cryptographic-key", +"is-read-only": false, "description": ["Key for transforming plaintext into cipher text data."] }, "performance-monitoring-collection-is-on": { -"id": "performance-monitoring-collection-is-on", -"is-read-only": false, +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, "description": ["Enables measurement, collection, storage and access to performance data."] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the problem to be configured."] }, "ethernet-container-configuration-g": { -"id": "ethernet-container-configuration-g", -"is-read-only": false, +"id": "ethernet-container-configuration-g", +"is-read-only": false, "description": ["none"] }, "last-status-change": { -"id": "last-status-change", -"is-read-only": false, +"id": "last-status-change", +"is-read-only": false, "description": ["Time the Container entered its current operational status."] }, "ethernet-container-status-g": { -"id": "ethernet-container-status-g", -"is-read-only": false, +"id": "ethernet-container-status-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "ethernet-container-current-problems-g": { -"id": "ethernet-container-current-problems-g", -"is-read-only": false, +"id": "ethernet-container-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["none"] }, "ethernet-container-current-performance-g": { -"id": "ethernet-container-current-performance-g", -"is-read-only": false, +"id": "ethernet-container-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the Ethernet container at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "ethernet-container-historical-performances-g": { -"id": "ethernet-container-historical-performances-g", -"is-read-only": false, +"id": "ethernet-container-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the Ethernet container for a pre-defined measurement interval."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "tdm-container-capability": { -"id": "tdm-container-capability", -"is-read-only": false, +"id": "tdm-container-capability", +"is-read-only": false, "description": ["none"] }, "tdm-container-configuration": { -"id": "tdm-container-configuration", -"is-read-only": false, +"id": "tdm-container-configuration", +"is-read-only": false, "description": ["none"] }, "tdm-container-status": { -"id": "tdm-container-status", -"is-read-only": false, +"id": "tdm-container-status", +"is-read-only": false, "description": ["none"] }, "tdm-container-current-problems": { -"id": "tdm-container-current-problems", -"is-read-only": false, +"id": "tdm-container-current-problems", +"is-read-only": false, "description": ["none"] }, "tdm-container-current-performance": { -"id": "tdm-container-current-performance", -"is-read-only": false, +"id": "tdm-container-current-performance", +"is-read-only": false, "description": ["none"] }, "tdm-container-historical-performances": { -"id": "tdm-container-historical-performances", -"is-read-only": false, +"id": "tdm-container-historical-performances", +"is-read-only": false, "description": ["none"] }, "mw-tdm-container-pac": { -"id": "mw-tdm-container-pac", -"is-read-only": false, +"id": "mw-tdm-container-pac", +"is-read-only": false, "description": ["The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic."] }, "supported-tdm-container-types-list": { -"id": "supported-tdm-container-types-list", -"is-read-only": false, +"id": "supported-tdm-container-types-list", +"is-read-only": false, "description": ["Lists the TDM containers that are supported."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."] }, "supported-alarms": { -"id": "supported-alarms", -"is-read-only": false, +"id": "supported-alarms", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."] }, "tdm-container-capability-g": { -"id": "tdm-container-capability-g", -"is-read-only": false, +"id": "tdm-container-capability-g", +"is-read-only": false, "description": ["Bundling is not available."] }, "container-id": { -"id": "container-id", -"is-read-only": false, +"id": "container-id", +"is-read-only": false, "description": ["ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller."] }, "container-type": { -"id": "container-type", -"is-read-only": false, +"id": "container-type", +"is-read-only": false, "description": ["Type of TDM container."] }, "segment-id": { -"id": "segment-id", -"is-read-only": false, +"id": "segment-id", +"is-read-only": false, "description": ["Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"] }, "performance-monitoring-collection-is-on": { -"id": "performance-monitoring-collection-is-on", -"is-read-only": false, +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, "description": ["Enables measurement, collection, storage and access to performance data."] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the problem to be configured."] }, "tdm-container-configuration-g": { -"id": "tdm-container-configuration-g", -"is-read-only": false, +"id": "tdm-container-configuration-g", +"is-read-only": false, "description": ["none"] }, "last-status-change": { -"id": "last-status-change", -"is-read-only": false, +"id": "last-status-change", +"is-read-only": false, "description": ["Time the Container entered its current operational status."] }, "tdm-container-status-g": { -"id": "tdm-container-status-g", -"is-read-only": false, +"id": "tdm-container-status-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "tdm-container-current-problems-g": { -"id": "tdm-container-current-problems-g", -"is-read-only": false, +"id": "tdm-container-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "tdm-container-current-performance-g": { -"id": "tdm-container-current-performance-g", -"is-read-only": false, +"id": "tdm-container-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the TDM container at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "tdm-container-historical-performances-g": { -"id": "tdm-container-historical-performances-g", -"is-read-only": false, +"id": "tdm-container-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the TDM container for a pre-defined measurement interval."] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "wirebased-interface-capability": { -"id": "wirebased-interface-capability", -"is-read-only": false, +"id": "wirebased-interface-capability", +"is-read-only": false, "description": ["none"] }, "wirebased-interface-configuration": { -"id": "wirebased-interface-configuration", -"is-read-only": false, +"id": "wirebased-interface-configuration", +"is-read-only": false, "description": ["none"] }, "wirebased-interface-status": { -"id": "wirebased-interface-status", -"is-read-only": false, +"id": "wirebased-interface-status", +"is-read-only": false, "description": ["none"] }, "wirebased-interface-current-problems": { -"id": "wirebased-interface-current-problems", -"is-read-only": false, +"id": "wirebased-interface-current-problems", +"is-read-only": false, "description": ["none"] }, "wirebased-interface-current-performance": { -"id": "wirebased-interface-current-performance", -"is-read-only": false, +"id": "wirebased-interface-current-performance", +"is-read-only": false, "description": ["none"] }, "wirebased-interface-historical-performances": { -"id": "wirebased-interface-historical-performances", -"is-read-only": false, +"id": "wirebased-interface-historical-performances", +"is-read-only": false, "description": ["none"] }, "wire-interface-pac": { -"id": "wire-interface-pac", -"is-read-only": false, +"id": "wire-interface-pac", +"is-read-only": false, "description": ["none"] }, "available-mau-list": { -"id": "available-mau-list", -"is-read-only": false, +"id": "available-mau-list", +"is-read-only": false, "description": ["List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described."] }, "auto-pmd-negotiation-is-avail": { -"id": "auto-pmd-negotiation-is-avail", -"is-read-only": false, +"id": "auto-pmd-negotiation-is-avail", +"is-read-only": false, "description": ["Parameter 1 = Indicates that device is supporting Auto-negotiation"] }, "auto-pmd-negotiation-max-is-avail": { -"id": "auto-pmd-negotiation-max-is-avail", -"is-read-only": false, +"id": "auto-pmd-negotiation-max-is-avail", +"is-read-only": false, "description": ["1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)"] }, "supported-loop-back-kind-list": { -"id": "supported-loop-back-kind-list", -"is-read-only": false, +"id": "supported-loop-back-kind-list", +"is-read-only": false, "description": ["List of supported kinds of looping back of header information to the remote site. 802.3 45.2.1.12.1 PMA remote loopback ability"] }, "maintenance-timer-range": { -"id": "maintenance-timer-range", -"is-read-only": false, +"id": "maintenance-timer-range", +"is-read-only": false, "description": ["MW IM Available time periods for maintenance configurations (e.g. the loop back) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."] }, "supported-alarm-list": { -"id": "supported-alarm-list", -"is-read-only": false, +"id": "supported-alarm-list", +"is-read-only": false, "description": ["Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."] }, "wire-interface-capability-g": { -"id": "wire-interface-capability-g", -"is-read-only": false, +"id": "wire-interface-capability-g", +"is-read-only": false, "description": ["none"] }, "wire-interface-name": { -"id": "wire-interface-name", -"is-read-only": false, +"id": "wire-interface-name", +"is-read-only": false, "description": ["Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network Parameter"] }, "remote-wire-interface-name": { -"id": "remote-wire-interface-name", -"is-read-only": false, +"id": "remote-wire-interface-name", +"is-read-only": false, "description": ["Learning from MW IM Text field for defining the wire interface this one is connected with. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network"] }, "interface-is-on": { -"id": "interface-is-on", -"is-read-only": false, +"id": "interface-is-on", +"is-read-only": false, "description": ["1 = Activation of the interface (it gets powered and can be managed even if the transceiver is not yet transmitting or receiving). In case there is no Medium Attachment Unit (MAU) (e.g. no SFP in the cage) SETting (interfaceIsOn=1) must be ignored and GETing must return (interfaceIsOn=0) 802.3 according 30.3.2.2.1 acPhyAdminControl"] }, "transceiver-is-on-list": { -"id": "transceiver-is-on-list", -"is-read-only": false, +"id": "transceiver-is-on-list", +"is-read-only": false, "description": ["802.3 22.?.? and additionally 802.3 45.2.1.8 PMD transmit disable register (Register 1.9) 1 = Activation of the transmitter and receiver (e.g. laser) of the PHY; transceiverIsOnList[0]:total interface; transceiverIsOnList[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"] }, "auto-pmd-negotiation-is-on": { -"id": "auto-pmd-negotiation-is-on", -"is-read-only": false, +"id": "auto-pmd-negotiation-is-on", +"is-read-only": false, "description": ["Parameter 1 = Auto-negotiation is switched on"] }, "fixed-pmd": { -"id": "fixed-pmd", -"is-read-only": false, +"id": "fixed-pmd", +"is-read-only": false, "description": ["If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant"] }, "auto-pmd-negotiation-max": { -"id": "auto-pmd-negotiation-max", -"is-read-only": false, +"id": "auto-pmd-negotiation-max", +"is-read-only": false, "description": ["Parameter If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation"] }, "auto-signal-ordering-is-on": { -"id": "auto-signal-ordering-is-on", -"is-read-only": false, +"id": "auto-signal-ordering-is-on", +"is-read-only": false, "description": ["1 = e.g. auto-MDI-X is switched on"] }, "fixed-signal-ordering": { -"id": "fixed-signal-ordering", -"is-read-only": false, +"id": "fixed-signal-ordering", +"is-read-only": false, "description": ["If (autoSignalOrderingIsOn=0) configuration of the concrete kind of signal ordering on the media (e.g. MDI, or MDI-X). If (autoSignalOrderingIsOn=1) value of this field becomes irrelevant"] }, "short-reach-mode-is-on": { -"id": "short-reach-mode-is-on", -"is-read-only": false, +"id": "short-reach-mode-is-on", +"is-read-only": false, "description": ["Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64"] }, "unidirectional-operation-is-on": { -"id": "unidirectional-operation-is-on", -"is-read-only": false, +"id": "unidirectional-operation-is-on", +"is-read-only": false, "description": ["If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex): 1 = Enable transmit from media independent interface regardless of whether the PHY has determined that a valid link has been established, 0 = Enable transmit from media independent interface only when the PHY has determined that a valid link has been established 802.3 Parameter"] }, "wavelength-list": { -"id": "wavelength-list", -"is-read-only": false, +"id": "wavelength-list", +"is-read-only": false, "description": ["Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"] }, "temperature-high-threshold": { -"id": "temperature-high-threshold", -"is-read-only": false, +"id": "temperature-high-threshold", +"is-read-only": false, "description": ["Threshold for alarming high temperature values. Will move to somewhere in the Physical Segment of the Core IM"] }, "temperature-low-threshold": { -"id": "temperature-low-threshold", -"is-read-only": false, +"id": "temperature-low-threshold", +"is-read-only": false, "description": ["Threshold for alarming low temperature values. Will move to somewhere in the Physical Segment of the Core IM"] }, "rxlevel-high-threshold": { -"id": "rxlevel-high-threshold", -"is-read-only": false, +"id": "rxlevel-high-threshold", +"is-read-only": false, "description": ["Threshold for alarming high RX levels."] }, "rxlevel-low-threshold": { -"id": "rxlevel-low-threshold", -"is-read-only": false, +"id": "rxlevel-low-threshold", +"is-read-only": false, "description": ["Threshold for alarming low RX levels."] }, "loop-back-kind-on": { -"id": "loop-back-kind-on", -"is-read-only": false, +"id": "loop-back-kind-on", +"is-read-only": false, "description": ["Parameter 802.3 according 22.2.4.1.2 Loopback Maintenance Feature. The currently configured type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site. Activation of local loopback mode on physical layer"] }, "isolation-is-on": { -"id": "isolation-is-on", -"is-read-only": false, +"id": "isolation-is-on", +"is-read-only": false, "description": ["1 = Activation of the separation of the PHY from higher network layers 802.3"] }, "restart-pmd-negotiation-is-on": { -"id": "restart-pmd-negotiation-is-on", -"is-read-only": false, +"id": "restart-pmd-negotiation-is-on", +"is-read-only": false, "description": ["Restarts the auto negotiation process 802.3"] }, "reset-mau-is-on": { -"id": "reset-mau-is-on", -"is-read-only": false, +"id": "reset-mau-is-on", +"is-read-only": false, "description": ["802.3 Resets the entire Medium Access Unit (MAU)"] }, "maintenance-timer": { -"id": "maintenance-timer", -"is-read-only": false, +"id": "maintenance-timer", +"is-read-only": false, "description": ["Parameter and MW IM Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange"] }, "problem-kind-severity-list": { -"id": "problem-kind-severity-list", -"is-read-only": false, +"id": "problem-kind-severity-list", +"is-read-only": false, "description": ["Severity of the problem to be configured."] }, "wire-interface-configuration-g": { -"id": "wire-interface-configuration-g", -"is-read-only": false, +"id": "wire-interface-configuration-g", +"is-read-only": false, "description": ["none"] }, "interface-is-up": { -"id": "interface-is-up", -"is-read-only": false, +"id": "interface-is-up", +"is-read-only": false, "description": ["802.3 according 30.3.2.1.7 aPhyAdminState 1 = A Physical layer entity (PHY) exists (including Medium Attachment Unit (e.g. SFP) ) and it is powered and can be managed"] }, "receive-signal-is-detected": { -"id": "receive-signal-is-detected", -"is-read-only": false, +"id": "receive-signal-is-detected", +"is-read-only": false, "description": ["802.3 45.2.1.9 PMD receive signal detect 1 = Receiver (e.g. laser) detects signal; receiveSignalIsDetected[0]:total interface; receiveSignalIsDetected[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"] }, "pmd-is-up": { -"id": "pmd-is-up", -"is-read-only": false, +"id": "pmd-is-up", +"is-read-only": false, "description": ["Inverse of 802.3 45.2.1.2.3 Fault (1.1.7) If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path"] }, "pmd-cur": { -"id": "pmd-cur", -"is-read-only": false, +"id": "pmd-cur", +"is-read-only": false, "description": ["Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface"] }, "signal-ordering-kind-cur": { -"id": "signal-ordering-kind-cur", -"is-read-only": false, +"id": "signal-ordering-kind-cur", +"is-read-only": false, "description": ["Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName"] }, "eee-is-up": { -"id": "eee-is-up", -"is-read-only": false, +"id": "eee-is-up", +"is-read-only": false, "description": ["1 = Energy Efficient Ethernet is supported at both ends of the link and it is activated"] }, "link-is-up": { -"id": "link-is-up", -"is-read-only": false, +"id": "link-is-up", +"is-read-only": false, "description": ["Parameter 1 = (transceiverIsUp=1) AND communication is established to the remote site"] }, "link-is-idle": { -"id": "link-is-idle", -"is-read-only": false, +"id": "link-is-idle", +"is-read-only": false, "description": ["1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0."] }, "tx-level-cur": { -"id": "tx-level-cur", -"is-read-only": false, +"id": "tx-level-cur", +"is-read-only": false, "description": ["Current transmit power"] }, "rx-level-cur": { -"id": "rx-level-cur", -"is-read-only": false, +"id": "rx-level-cur", +"is-read-only": false, "description": ["Current receive power; Also used for receive signal power measured at the Medium Dependent Interface (MDI) of 10GBASE-T during training as described in 802.3 55.4.3.1"] }, "temp-cur": { -"id": "temp-cur", -"is-read-only": false, +"id": "temp-cur", +"is-read-only": false, "description": ["Current temperature (in degree Celsius) inside the transceiver To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties"] }, "loop-back-kind-up": { -"id": "loop-back-kind-up", -"is-read-only": false, +"id": "loop-back-kind-up", +"is-read-only": false, "description": ["Paramter and MW IM The currently active (not just configured) type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site."] }, "wire-interface-status-g": { -"id": "wire-interface-status-g", -"is-read-only": false, +"id": "wire-interface-status-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "wire-interface-current-problems-g": { -"id": "wire-interface-current-problems-g", -"is-read-only": false, +"id": "wire-interface-current-problems-g", +"is-read-only": false, "description": ["none"] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "wire-interface-current-performance-g": { -"id": "wire-interface-current-performance-g", -"is-read-only": false, +"id": "wire-interface-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "wire-interface-historical-performances-g": { -"id": "wire-interface-historical-performances-g", -"is-read-only": false, +"id": "wire-interface-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."] }, "sequence-number": { -"id": "sequence-number", -"is-read-only": false, +"id": "sequence-number", +"is-read-only": false, "description": ["Unique sequence number of the current problem object."] }, "time-stamp": { -"id": "time-stamp", -"is-read-only": false, +"id": "time-stamp", +"is-read-only": false, "description": ["Time and date of the problem."] }, "problem-severity": { -"id": "problem-severity", -"is-read-only": false, +"id": "problem-severity", +"is-read-only": false, "description": ["Severity of the alarm."] }, "mw-current-problem-g": { -"id": "mw-current-problem-g", -"is-read-only": false, +"id": "mw-current-problem-g", +"is-read-only": false, "description": ["none"] }, "object-creation-notification": { -"id": "object-creation-notification", -"is-read-only": false, +"id": "object-creation-notification", +"is-read-only": false, "description": ["none"] }, "counter": { -"id": "counter", -"is-read-only": false, +"id": "counter", +"is-read-only": false, "description": ["Counts object creation notifications."] }, "time-stamp": { -"id": "time-stamp", -"is-read-only": false, +"id": "time-stamp", +"is-read-only": false, "description": ["none"] }, "object-id-ref": { -"id": "object-id-ref", -"is-read-only": false, +"id": "object-id-ref", +"is-read-only": false, "description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] }, "object-type": { -"id": "object-type", -"is-read-only": false, +"id": "object-type", +"is-read-only": false, "description": ["Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'."] }, "object-creation-notification-g": { -"id": "object-creation-notification-g", -"is-read-only": false, +"id": "object-creation-notification-g", +"is-read-only": false, "description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller."] }, "object-deletion-notification": { -"id": "object-deletion-notification", -"is-read-only": false, +"id": "object-deletion-notification", +"is-read-only": false, "description": ["none"] }, "counter": { -"id": "counter", -"is-read-only": false, +"id": "counter", +"is-read-only": false, "description": ["Counts object deletion notifications."] }, "time-stamp": { -"id": "time-stamp", -"is-read-only": false, +"id": "time-stamp", +"is-read-only": false, "description": ["none"] }, "object-id-ref": { -"id": "object-id-ref", -"is-read-only": false, +"id": "object-id-ref", +"is-read-only": false, "description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] }, "object-deletion-notification-g": { -"id": "object-deletion-notification-g", -"is-read-only": false, +"id": "object-deletion-notification-g", +"is-read-only": false, "description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller."] }, "attribute-value-changed-notification": { -"id": "attribute-value-changed-notification", -"is-read-only": false, +"id": "attribute-value-changed-notification", +"is-read-only": false, "description": ["none"] }, "counter": { -"id": "counter", -"is-read-only": false, +"id": "counter", +"is-read-only": false, "description": ["Counts attribute value changed notifications."] }, "time-stamp": { -"id": "time-stamp", -"is-read-only": false, +"id": "time-stamp", +"is-read-only": false, "description": ["none"] }, "object-id-ref": { -"id": "object-id-ref", -"is-read-only": false, +"id": "object-id-ref", +"is-read-only": false, "description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] }, "attribute-name": { -"id": "attribute-name", -"is-read-only": false, +"id": "attribute-name", +"is-read-only": false, "description": ["Name of the attribute that has been changed."] }, "new-value": { -"id": "new-value", -"is-read-only": false, +"id": "new-value", +"is-read-only": false, "description": ["Attribute value converted to a string (xml, json, ...)"] }, "attribute-value-changed-notification-g": { -"id": "attribute-value-changed-notification-g", -"is-read-only": false, +"id": "attribute-value-changed-notification-g", +"is-read-only": false, "description": ["To be sent when an attribute has changed and one or more controllers have to update their data."] }, "problem-notification": { -"id": "problem-notification", -"is-read-only": false, +"id": "problem-notification", +"is-read-only": false, "description": ["none"] }, "counter": { -"id": "counter", -"is-read-only": false, +"id": "counter", +"is-read-only": false, "description": ["Counts problem notifications"] }, "time-stamp": { -"id": "time-stamp", -"is-read-only": false, +"id": "time-stamp", +"is-read-only": false, "description": ["none"] }, "object-id-ref": { -"id": "object-id-ref", -"is-read-only": false, +"id": "object-id-ref", +"is-read-only": false, "description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] }, "problem": { -"id": "problem", -"is-read-only": false, +"id": "problem", +"is-read-only": false, "description": ["Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms."] }, "severity": { -"id": "severity", -"is-read-only": false, +"id": "severity", +"is-read-only": false, "description": ["Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList"] }, "problem-notification-g": { -"id": "problem-notification-g", -"is-read-only": false, +"id": "problem-notification-g", +"is-read-only": false, "description": ["To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json index 381dd77dd..6ccdcca7d 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json @@ -1,168 +1,168 @@ -{ "schama-information": { +{ "schema-information": { "photonic-media": { -"id": "photonic-media", -"is-read-only": false, +"id": "photonic-media", +"is-read-only": false, "description": ["This module contains a collection of YANG definitions for managing Optical networks. This model is for vendor agnostic management of Optical Transport."] }, "non-alarmed": { -"id": "non-alarmed", -"is-read-only": false, +"id": "non-alarmed", +"is-read-only": false, "description": ["none"] }, "warning": { -"id": "warning", -"is-read-only": false, +"id": "warning", +"is-read-only": false, "description": ["none"] }, "minor": { -"id": "minor", -"is-read-only": false, +"id": "minor", +"is-read-only": false, "description": ["none"] }, "major": { -"id": "major", -"is-read-only": false, +"id": "major", +"is-read-only": false, "description": ["none"] }, "critical": { -"id": "critical", -"is-read-only": false, +"id": "critical", +"is-read-only": false, "description": ["none"] }, "severity-type": { -"id": "severity-type", -"is-read-only": false, +"id": "severity-type", +"is-read-only": false, "description": ["According to ITU-T M.3160"] }, "fec-properties-pac": { -"id": "fec-properties-pac", -"is-read-only": false, +"id": "fec-properties-pac", +"is-read-only": false, "description": ["none"] }, "otsi-interface-performance-type-g": { -"id": "otsi-interface-performance-type-g", -"is-read-only": false, +"id": "otsi-interface-performance-type-g", +"is-read-only": false, "description": ["none"] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "otsi-interface-current-performance-type-g": { -"id": "otsi-interface-current-performance-type-g", -"is-read-only": false, +"id": "otsi-interface-current-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into current performance information by inheriting from TAPI OAM current data."] }, "performance-data": { -"id": "performance-data", -"is-read-only": false, +"id": "performance-data", +"is-read-only": false, "description": ["none"] }, "otsi-interface-historical-performance-type-g": { -"id": "otsi-interface-historical-performance-type-g", -"is-read-only": false, +"id": "otsi-interface-historical-performance-type-g", +"is-read-only": false, "description": ["Turns performance information into historical performance information by inheriting from TAPI OAM History data."] }, "current-performance-data-list": { -"id": "current-performance-data-list", -"is-read-only": false, +"id": "current-performance-data-list", +"is-read-only": false, "description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] }, "otsi-interface-current-performance-g": { -"id": "otsi-interface-current-performance-g", -"is-read-only": false, +"id": "otsi-interface-current-performance-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface at a particular moment."] }, "historical-performance-data-list": { -"id": "historical-performance-data-list", -"is-read-only": false, +"id": "historical-performance-data-list", +"is-read-only": false, "description": ["none"] }, "otsi-interface-historical-performances-g": { -"id": "otsi-interface-historical-performances-g", -"is-read-only": false, +"id": "otsi-interface-historical-performances-g", +"is-read-only": false, "description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."] }, "problem-name": { -"id": "problem-name", -"is-read-only": false, +"id": "problem-name", +"is-read-only": false, "description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"] }, "otsi-interface-current-problem-type-g": { -"id": "otsi-interface-current-problem-type-g", -"is-read-only": false, +"id": "otsi-interface-current-problem-type-g", +"is-read-only": false, "description": ["none"] }, "current-problem-list": { -"id": "current-problem-list", -"is-read-only": false, +"id": "current-problem-list", +"is-read-only": false, "description": ["none"] }, "otsi-interface-current-problems-g": { -"id": "otsi-interface-current-problems-g", -"is-read-only": false, +"id": "otsi-interface-current-problems-g", +"is-read-only": false, "description": ["none"] }, "layer-protocol": { -"id": "layer-protocol", -"is-read-only": false, +"id": "layer-protocol", +"is-read-only": false, "description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] }, "otsi-interface-capability": { -"id": "otsi-interface-capability", -"is-read-only": false, +"id": "otsi-interface-capability", +"is-read-only": false, "description": ["none"] }, "otsi-interface-configuration": { -"id": "otsi-interface-configuration", -"is-read-only": false, +"id": "otsi-interface-configuration", +"is-read-only": false, "description": ["none"] }, "otsi-interface-status": { -"id": "otsi-interface-status", -"is-read-only": false, +"id": "otsi-interface-status", +"is-read-only": false, "description": ["none"] }, "otsi-interface-current-problems": { -"id": "otsi-interface-current-problems", -"is-read-only": false, +"id": "otsi-interface-current-problems", +"is-read-only": false, "description": ["none"] }, "otsi-interface-current-performance": { -"id": "otsi-interface-current-performance", -"is-read-only": false, +"id": "otsi-interface-current-performance", +"is-read-only": false, "description": ["none"] }, "otsi-interface-historical-performances": { -"id": "otsi-interface-historical-performances", -"is-read-only": false, +"id": "otsi-interface-historical-performances", +"is-read-only": false, "description": ["none"] }, "otsi-interface-pac": { -"id": "otsi-interface-pac", -"is-read-only": false, +"id": "otsi-interface-pac", +"is-read-only": false, "description": ["none"] }, "sequence-number": { -"id": "sequence-number", -"is-read-only": false, +"id": "sequence-number", +"is-read-only": false, "description": ["Unique sequence number of the current problem object."] }, "time-stamp": { -"id": "time-stamp", -"is-read-only": false, +"id": "time-stamp", +"is-read-only": false, "description": ["Time and date of the problem."] }, "problem-severity": { -"id": "problem-severity", -"is-read-only": false, +"id": "problem-severity", +"is-read-only": false, "description": ["Severity of the alarm."] }, "otsi-current-problem-g": { -"id": "otsi-current-problem-g", -"is-read-only": false, +"id": "otsi-current-problem-g", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json index 759437a4f..c22624599 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json @@ -1,738 +1,738 @@ -{ "schama-information": { +{ "schema-information": { "tapi-common": { -"id": "tapi-common", -"is-read-only": false, +"id": "tapi-common", +"is-read-only": false, "description": ["This module contains TAPI Common Model definitions. Source: TapiCommon.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "service-interface-point-uuid": { -"id": "service-interface-point-uuid", -"is-read-only": false, +"id": "service-interface-point-uuid", +"is-read-only": false, "description": ["none"] }, "service-interface-point-ref-g": { -"id": "service-interface-point-ref-g", -"is-read-only": false, +"id": "service-interface-point-ref-g", +"is-read-only": false, "description": ["none"] }, "administrative-state": { -"id": "administrative-state", -"is-read-only": false, +"id": "administrative-state", +"is-read-only": false, "description": ["none"] }, "operational-state": { -"id": "operational-state", -"is-read-only": false, +"id": "operational-state", +"is-read-only": false, "description": ["none"] }, "lifecycle-state": { -"id": "lifecycle-state", -"is-read-only": false, +"id": "lifecycle-state", +"is-read-only": false, "description": ["none"] }, "admin-state-pac-g": { -"id": "admin-state-pac-g", -"is-read-only": false, +"id": "admin-state-pac-g", +"is-read-only": false, "description": ["Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects."] }, "uuid": { -"id": "uuid", -"is-read-only": false, +"id": "uuid", +"is-read-only": false, "description": ["UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"] }, "name": { -"id": "name", -"is-read-only": false, +"id": "name", +"is-read-only": false, "description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."] }, "global-class-g": { -"id": "global-class-g", -"is-read-only": false, +"id": "global-class-g", +"is-read-only": false, "description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."] }, "lifecycle-state": { -"id": "lifecycle-state", -"is-read-only": false, +"id": "lifecycle-state", +"is-read-only": false, "description": ["none"] }, "lifecycle-state-pac-g": { -"id": "lifecycle-state-pac-g", -"is-read-only": false, +"id": "lifecycle-state-pac-g", +"is-read-only": false, "description": ["Provides state attributes for an entity that has lifeccycle aspects only."] }, "local-id": { -"id": "local-id", -"is-read-only": false, +"id": "local-id", +"is-read-only": false, "description": ["none"] }, "name": { -"id": "name", -"is-read-only": false, +"id": "name", +"is-read-only": false, "description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."] }, "local-class-g": { -"id": "local-class-g", -"is-read-only": false, +"id": "local-class-g", +"is-read-only": false, "description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."] }, "operational-state": { -"id": "operational-state", -"is-read-only": false, +"id": "operational-state", +"is-read-only": false, "description": ["none"] }, "lifecycle-state": { -"id": "lifecycle-state", -"is-read-only": false, +"id": "lifecycle-state", +"is-read-only": false, "description": ["none"] }, "operational-state-pac-g": { -"id": "operational-state-pac-g", -"is-read-only": false, +"id": "operational-state-pac-g", +"is-read-only": false, "description": ["Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects."] }, "context": { -"id": "context", -"is-read-only": false, +"id": "context", +"is-read-only": false, "description": ["none"] }, "service-interface-point": { -"id": "service-interface-point", -"is-read-only": false, +"id": "service-interface-point", +"is-read-only": false, "description": ["none"] }, "tapi-context-g": { -"id": "tapi-context-g", -"is-read-only": false, +"id": "tapi-context-g", +"is-read-only": false, "description": ["The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements)."] }, "resource-spec-g": { -"id": "resource-spec-g", -"is-read-only": false, +"id": "resource-spec-g", +"is-read-only": false, "description": ["none"] }, "service-spec-g": { -"id": "service-spec-g", -"is-read-only": false, +"id": "service-spec-g", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["Usage of layerProtocolName [>1] in the ServiceInterfacePoint should be considered experimental"] }, "supported-layer-protocol-qualifier": { -"id": "supported-layer-protocol-qualifier", -"is-read-only": false, +"id": "supported-layer-protocol-qualifier", +"is-read-only": false, "description": ["none"] }, "service-interface-point-g": { -"id": "service-interface-point-g", -"is-read-only": false, +"id": "service-interface-point-g", +"is-read-only": false, "description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."] }, "total-potential-capacity": { -"id": "total-potential-capacity", -"is-read-only": false, +"id": "total-potential-capacity", +"is-read-only": false, "description": ["An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken."] }, "available-capacity": { -"id": "available-capacity", -"is-read-only": false, +"id": "available-capacity", +"is-read-only": false, "description": ["Capacity available to be assigned."] }, "capacity-pac-g": { -"id": "capacity-pac-g", -"is-read-only": false, +"id": "capacity-pac-g", +"is-read-only": false, "description": ["The TopologicalEntity derives capacity from the underlying realization. A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization. A TopologicalEntity may be directly used in the view or may be assigned to another view for use. The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details. Represents the capacity available to user (client) along with client interaction and usage. A TopologicalEntity may reflect one or more client protocols and one or more members for each profile."] }, "termination-direction": { -"id": "termination-direction", -"is-read-only": false, +"id": "termination-direction", +"is-read-only": false, "description": ["The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"] }, "termination-state": { -"id": "termination-state", -"is-read-only": false, +"id": "termination-state", +"is-read-only": false, "description": ["Indicates whether the layer is terminated and if so how."] }, "termination-pac-g": { -"id": "termination-pac-g", -"is-read-only": false, +"id": "termination-pac-g", +"is-read-only": false, "description": ["Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."] }, "LAYER_PROTOCOL_QUALIFIER": { -"id": "LAYER_PROTOCOL_QUALIFIER", -"is-read-only": false, +"id": "LAYER_PROTOCOL_QUALIFIER", +"is-read-only": false, "description": ["none"] }, "LOCKED": { -"id": "LOCKED", -"is-read-only": false, +"id": "LOCKED", +"is-read-only": false, "description": ["Users are administratively prohibited from making use of the resource."] }, "UNLOCKED": { -"id": "UNLOCKED", -"is-read-only": false, +"id": "UNLOCKED", +"is-read-only": false, "description": ["Users are allowed to use the resource"] }, "administrative-state": { -"id": "administrative-state", -"is-read-only": false, +"id": "administrative-state", +"is-read-only": false, "description": ["The possible values of the administrativeState."] }, "date-and-time": { -"id": "date-and-time", -"is-read-only": false, +"id": "date-and-time", +"is-read-only": false, "description": ["This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000..9999 year MM 01..12 month dd 01..31 day hh 00..23 hour mm 00..59 minute ss 00..59 second s .0...9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00..23 time zone difference in hours Mm 00..59 time zone difference in minutes."] }, "MINIMIZE": { -"id": "MINIMIZE", -"is-read-only": false, +"id": "MINIMIZE", +"is-read-only": false, "description": ["none"] }, "MAXIMIZE": { -"id": "MAXIMIZE", -"is-read-only": false, +"id": "MAXIMIZE", +"is-read-only": false, "description": ["none"] }, "ALLOW": { -"id": "ALLOW", -"is-read-only": false, +"id": "ALLOW", +"is-read-only": false, "description": ["none"] }, "DISALLOW": { -"id": "DISALLOW", -"is-read-only": false, +"id": "DISALLOW", +"is-read-only": false, "description": ["none"] }, "DONT_CARE": { -"id": "DONT_CARE", -"is-read-only": false, +"id": "DONT_CARE", +"is-read-only": false, "description": ["none"] }, "directive-value": { -"id": "directive-value", -"is-read-only": false, +"id": "directive-value", +"is-read-only": false, "description": ["none"] }, "BIDIRECTIONAL": { -"id": "BIDIRECTIONAL", -"is-read-only": false, +"id": "BIDIRECTIONAL", +"is-read-only": false, "description": ["The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)"] }, "UNIDIRECTIONAL": { -"id": "UNIDIRECTIONAL", -"is-read-only": false, +"id": "UNIDIRECTIONAL", +"is-read-only": false, "description": ["The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports."] }, "UNDEFINED_OR_UNKNOWN": { -"id": "UNDEFINED_OR_UNKNOWN", -"is-read-only": false, +"id": "UNDEFINED_OR_UNKNOWN", +"is-read-only": false, "description": ["Not a normal state. The system is unable to determine the correct value."] }, "forwarding-direction": { -"id": "forwarding-direction", -"is-read-only": false, +"id": "forwarding-direction", +"is-read-only": false, "description": ["The directionality of a Forwarding entity."] }, "ODU": { -"id": "ODU", -"is-read-only": false, +"id": "ODU", +"is-read-only": false, "description": ["Models the ODU layer as per ITU-T G.872"] }, "ETH": { -"id": "ETH", -"is-read-only": false, +"id": "ETH", +"is-read-only": false, "description": ["Models the ETH layer as per ITU-T G.8010"] }, "DSR": { -"id": "DSR", -"is-read-only": false, +"id": "DSR", +"is-read-only": false, "description": ["Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities."] }, "PHOTONIC_MEDIA": { -"id": "PHOTONIC_MEDIA", -"is-read-only": false, +"id": "PHOTONIC_MEDIA", +"is-read-only": false, "description": ["Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"] }, "PLANNED": { -"id": "PLANNED", -"is-read-only": false, +"id": "PLANNED", +"is-read-only": false, "description": ["The resource is planned but is not present in the network."] }, "POTENTIAL_AVAILABLE": { -"id": "POTENTIAL_AVAILABLE", -"is-read-only": false, +"id": "POTENTIAL_AVAILABLE", +"is-read-only": false, "description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."] }, "POTENTIAL_BUSY": { -"id": "POTENTIAL_BUSY", -"is-read-only": false, +"id": "POTENTIAL_BUSY", +"is-read-only": false, "description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."] }, "INSTALLED": { -"id": "INSTALLED", -"is-read-only": false, +"id": "INSTALLED", +"is-read-only": false, "description": ["The resource is present in the network and is capable of providing the service expected."] }, "PENDING_REMOVAL": { -"id": "PENDING_REMOVAL", -"is-read-only": false, +"id": "PENDING_REMOVAL", +"is-read-only": false, "description": ["The resource has been marked for removal"] }, "lifecycle-state": { -"id": "lifecycle-state", -"is-read-only": false, +"id": "lifecycle-state", +"is-read-only": false, "description": ["The possible values of the lifecycleState."] }, "value-name": { -"id": "value-name", -"is-read-only": false, +"id": "value-name", +"is-read-only": false, "description": ["The name of the value. The value need not have a name."] }, "value": { -"id": "value", -"is-read-only": false, +"id": "value", +"is-read-only": false, "description": ["The value"] }, "name-and-value-g": { -"id": "name-and-value-g", -"is-read-only": false, +"id": "name-and-value-g", +"is-read-only": false, "description": ["A scoped name-value pair"] }, "DISABLED": { -"id": "DISABLED", -"is-read-only": false, +"id": "DISABLED", +"is-read-only": false, "description": ["The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user."] }, "ENABLED": { -"id": "ENABLED", -"is-read-only": false, +"id": "ENABLED", +"is-read-only": false, "description": ["The resource is partially or fully operable and available for use"] }, "operational-state": { -"id": "operational-state", -"is-read-only": false, +"id": "operational-state", +"is-read-only": false, "description": ["The possible values of the operationalState."] }, "BIDIRECTIONAL": { -"id": "BIDIRECTIONAL", -"is-read-only": false, +"id": "BIDIRECTIONAL", +"is-read-only": false, "description": ["The Port has both an INPUT flow and an OUTPUT flow defined."] }, "INPUT": { -"id": "INPUT", -"is-read-only": false, +"id": "INPUT", +"is-read-only": false, "description": ["The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow)."] }, "OUTPUT": { -"id": "OUTPUT", -"is-read-only": false, +"id": "OUTPUT", +"is-read-only": false, "description": ["The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow)."] }, "UNIDENTIFIED_OR_UNKNOWN": { -"id": "UNIDENTIFIED_OR_UNKNOWN", -"is-read-only": false, +"id": "UNIDENTIFIED_OR_UNKNOWN", +"is-read-only": false, "description": ["Not a normal state. The system is unable to determine the correct value."] }, "port-direction": { -"id": "port-direction", -"is-read-only": false, +"id": "port-direction", +"is-read-only": false, "description": ["The orientation of flow at the Port of a Forwarding entity"] }, "SYMMETRIC": { -"id": "SYMMETRIC", -"is-read-only": false, +"id": "SYMMETRIC", +"is-read-only": false, "description": ["none"] }, "ROOT": { -"id": "ROOT", -"is-read-only": false, +"id": "ROOT", +"is-read-only": false, "description": ["none"] }, "LEAF": { -"id": "LEAF", -"is-read-only": false, +"id": "LEAF", +"is-read-only": false, "description": ["none"] }, "TRUNK": { -"id": "TRUNK", -"is-read-only": false, +"id": "TRUNK", +"is-read-only": false, "description": ["none"] }, "UNKNOWN": { -"id": "UNKNOWN", -"is-read-only": false, +"id": "UNKNOWN", +"is-read-only": false, "description": ["none"] }, "port-role": { -"id": "port-role", -"is-read-only": false, +"id": "port-role", +"is-read-only": false, "description": ["The role of an end in the context of the function of the forwarding entity that it bounds"] }, "BIDIRECTIONAL": { -"id": "BIDIRECTIONAL", -"is-read-only": false, +"id": "BIDIRECTIONAL", +"is-read-only": false, "description": ["A Termination with both SINK and SOURCE flows."] }, "SINK": { -"id": "SINK", -"is-read-only": false, +"id": "SINK", +"is-read-only": false, "description": ["The flow is up the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SINK flow: - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component - then will be decoded and deconstructed - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component A SINK termination is one that only supports a SINK flow. A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity"] }, "SOURCE": { -"id": "SOURCE", -"is-read-only": false, +"id": "SOURCE", +"is-read-only": false, "description": ["The flow is down the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SOURCE flow: - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component - then will be assembled with various overheads etc and will be coded - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component A SOURCE termination is one that only supports a SOURCE flow. A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity"] }, "UNDEFINED_OR_UNKNOWN": { -"id": "UNDEFINED_OR_UNKNOWN", -"is-read-only": false, +"id": "UNDEFINED_OR_UNKNOWN", +"is-read-only": false, "description": ["Not a normal state. The system is unable to determine the correct value."] }, "termination-direction": { -"id": "termination-direction", -"is-read-only": false, +"id": "termination-direction", +"is-read-only": false, "description": ["The directionality of a termination entity"] }, "LP_CAN_NEVER_TERMINATE": { -"id": "LP_CAN_NEVER_TERMINATE", -"is-read-only": false, +"id": "LP_CAN_NEVER_TERMINATE", +"is-read-only": false, "description": ["A non-flexible case that can never be terminated."] }, "LT_NOT_TERMINATED": { -"id": "LT_NOT_TERMINATED", -"is-read-only": false, +"id": "LT_NOT_TERMINATED", +"is-read-only": false, "description": ["A flexible termination that can terminate but is currently not terminated."] }, "TERMINATED_SERVER_TO_CLIENT_FLOW": { -"id": "TERMINATED_SERVER_TO_CLIENT_FLOW", -"is-read-only": false, +"id": "TERMINATED_SERVER_TO_CLIENT_FLOW", +"is-read-only": false, "description": ["A flexible termination that is currently terminated for server to client flow only."] }, "TERMINATED_CLIENT_TO_SERVER_FLOW": { -"id": "TERMINATED_CLIENT_TO_SERVER_FLOW", -"is-read-only": false, +"id": "TERMINATED_CLIENT_TO_SERVER_FLOW", +"is-read-only": false, "description": ["A flexible termination that is currently terminated for client to server flow only."] }, "TERMINATED_BIDIRECTIONAL": { -"id": "TERMINATED_BIDIRECTIONAL", -"is-read-only": false, +"id": "TERMINATED_BIDIRECTIONAL", +"is-read-only": false, "description": ["A flexible termination that is currently terminated in both directions of flow."] }, "LT_PERMENANTLY_TERMINATED": { -"id": "LT_PERMENANTLY_TERMINATED", -"is-read-only": false, +"id": "LT_PERMENANTLY_TERMINATED", +"is-read-only": false, "description": ["A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases)."] }, "TERMINATION_STATE_UNKNOWN": { -"id": "TERMINATION_STATE_UNKNOWN", -"is-read-only": false, +"id": "TERMINATION_STATE_UNKNOWN", +"is-read-only": false, "description": ["There TerminationState cannot be determined."] }, "termination-state": { -"id": "termination-state", -"is-read-only": false, +"id": "termination-state", +"is-read-only": false, "description": ["Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."] }, "uuid": { -"id": "uuid", -"is-read-only": false, +"id": "uuid", +"is-read-only": false, "description": ["The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"] }, "total-size": { -"id": "total-size", -"is-read-only": false, +"id": "total-size", +"is-read-only": false, "description": ["Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate."] }, "bandwidth-profile": { -"id": "bandwidth-profile", -"is-read-only": false, +"id": "bandwidth-profile", +"is-read-only": false, "description": ["none"] }, "capacity-g": { -"id": "capacity-g", -"is-read-only": false, +"id": "capacity-g", +"is-read-only": false, "description": ["Information on capacity of a particular TopologicalEntity."] }, "bw-profile-type": { -"id": "bw-profile-type", -"is-read-only": false, +"id": "bw-profile-type", +"is-read-only": false, "description": ["none"] }, "committed-information-rate": { -"id": "committed-information-rate", -"is-read-only": false, +"id": "committed-information-rate", +"is-read-only": false, "description": ["none"] }, "committed-burst-size": { -"id": "committed-burst-size", -"is-read-only": false, +"id": "committed-burst-size", +"is-read-only": false, "description": ["none"] }, "peak-information-rate": { -"id": "peak-information-rate", -"is-read-only": false, +"id": "peak-information-rate", +"is-read-only": false, "description": ["none"] }, "peak-burst-size": { -"id": "peak-burst-size", -"is-read-only": false, +"id": "peak-burst-size", +"is-read-only": false, "description": ["none"] }, "color-aware": { -"id": "color-aware", -"is-read-only": false, +"id": "color-aware", +"is-read-only": false, "description": ["none"] }, "coupling-flag": { -"id": "coupling-flag", -"is-read-only": false, +"id": "coupling-flag", +"is-read-only": false, "description": ["none"] }, "bandwidth-profile-g": { -"id": "bandwidth-profile-g", -"is-read-only": false, +"id": "bandwidth-profile-g", +"is-read-only": false, "description": ["none"] }, "value": { -"id": "value", -"is-read-only": false, +"id": "value", +"is-read-only": false, "description": ["none"] }, "unit": { -"id": "unit", -"is-read-only": false, +"id": "unit", +"is-read-only": false, "description": ["none"] }, "capacity-value-g": { -"id": "capacity-value-g", -"is-read-only": false, +"id": "capacity-value-g", +"is-read-only": false, "description": ["The Capacity (Bandwidth) values that are applicable for digital layers."] }, "TB": { -"id": "TB", -"is-read-only": false, +"id": "TB", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in TeraBytes"] }, "TBPS": { -"id": "TBPS", -"is-read-only": false, +"id": "TBPS", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in Terabit-per-second"] }, "GB": { -"id": "GB", -"is-read-only": false, +"id": "GB", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in GigaBytes"] }, "GBPS": { -"id": "GBPS", -"is-read-only": false, +"id": "GBPS", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in Gigabit-per-second"] }, "MB": { -"id": "MB", -"is-read-only": false, +"id": "MB", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in MegaBytes"] }, "MBPS": { -"id": "MBPS", -"is-read-only": false, +"id": "MBPS", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in Megabit-per-second"] }, "KB": { -"id": "KB", -"is-read-only": false, +"id": "KB", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in KiloBytes"] }, "KBPS": { -"id": "KBPS", -"is-read-only": false, +"id": "KBPS", +"is-read-only": false, "description": ["Indicates that the integer CapacityValue is in Kilobit-per-second"] }, "GHz": { -"id": "GHz", -"is-read-only": false, +"id": "GHz", +"is-read-only": false, "description": ["none"] }, "MHz": { -"id": "MHz", -"is-read-only": false, +"id": "MHz", +"is-read-only": false, "description": ["none"] }, "capacity-unit": { -"id": "capacity-unit", -"is-read-only": false, +"id": "capacity-unit", +"is-read-only": false, "description": ["none"] }, "MEF_10.x": { -"id": "MEF_10.x", -"is-read-only": false, +"id": "MEF_10.x", +"is-read-only": false, "description": ["none"] }, "RFC_2697": { -"id": "RFC_2697", -"is-read-only": false, +"id": "RFC_2697", +"is-read-only": false, "description": ["none"] }, "RFC_2698": { -"id": "RFC_2698", -"is-read-only": false, +"id": "RFC_2698", +"is-read-only": false, "description": ["none"] }, "RFC_4115": { -"id": "RFC_4115", -"is-read-only": false, +"id": "RFC_4115", +"is-read-only": false, "description": ["none"] }, "bandwidth-profile-type": { -"id": "bandwidth-profile-type", -"is-read-only": false, +"id": "bandwidth-profile-type", +"is-read-only": false, "description": ["none"] }, "end-time": { -"id": "end-time", -"is-read-only": false, +"id": "end-time", +"is-read-only": false, "description": ["none"] }, "start-time": { -"id": "start-time", -"is-read-only": false, +"id": "start-time", +"is-read-only": false, "description": ["none"] }, "time-range-g": { -"id": "time-range-g", -"is-read-only": false, +"id": "time-range-g", +"is-read-only": false, "description": ["none"] }, "value": { -"id": "value", -"is-read-only": false, +"id": "value", +"is-read-only": false, "description": ["none"] }, "unit": { -"id": "unit", -"is-read-only": false, +"id": "unit", +"is-read-only": false, "description": ["none"] }, "time-period-g": { -"id": "time-period-g", -"is-read-only": false, +"id": "time-period-g", +"is-read-only": false, "description": ["none"] }, "YEARS": { -"id": "YEARS", -"is-read-only": false, +"id": "YEARS", +"is-read-only": false, "description": ["none"] }, "MONTHS": { -"id": "MONTHS", -"is-read-only": false, +"id": "MONTHS", +"is-read-only": false, "description": ["none"] }, "DAYS": { -"id": "DAYS", -"is-read-only": false, +"id": "DAYS", +"is-read-only": false, "description": ["none"] }, "HOURS": { -"id": "HOURS", -"is-read-only": false, +"id": "HOURS", +"is-read-only": false, "description": ["none"] }, "MINUTES": { -"id": "MINUTES", -"is-read-only": false, +"id": "MINUTES", +"is-read-only": false, "description": ["none"] }, "SECONDS": { -"id": "SECONDS", -"is-read-only": false, +"id": "SECONDS", +"is-read-only": false, "description": ["none"] }, "MILLISECONDS": { -"id": "MILLISECONDS", -"is-read-only": false, +"id": "MILLISECONDS", +"is-read-only": false, "description": ["none"] }, "MICROSECONDS": { -"id": "MICROSECONDS", -"is-read-only": false, +"id": "MICROSECONDS", +"is-read-only": false, "description": ["none"] }, "NANOSECONDS": { -"id": "NANOSECONDS", -"is-read-only": false, +"id": "NANOSECONDS", +"is-read-only": false, "description": ["none"] }, "PICOSECONDS": { -"id": "PICOSECONDS", -"is-read-only": false, +"id": "PICOSECONDS", +"is-read-only": false, "description": ["none"] }, "time-unit": { -"id": "time-unit", -"is-read-only": false, +"id": "time-unit", +"is-read-only": false, "description": ["none"] }, "period": { -"id": "period", -"is-read-only": false, +"id": "period", +"is-read-only": false, "description": ["none"] }, "time-interval-g": { -"id": "time-interval-g", -"is-read-only": false, +"id": "time-interval-g", +"is-read-only": false, "description": ["none"] }, "layer-protocol-qualifier": { -"id": "layer-protocol-qualifier", -"is-read-only": false, +"id": "layer-protocol-qualifier", +"is-read-only": false, "description": ["This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol. This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules. Examples: - LayerProtocolName := OPTICAL_DATA_UNIT LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc - LayerProtocolName := DIGITAL_SIGNAL_RATE LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc - LayerProtocolName := PHOTONIC_MEDIA LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS"] }, "get-service-interface-point-details": { -"id": "get-service-interface-point-details", -"is-read-only": false, +"id": "get-service-interface-point-details", +"is-read-only": false, "description": ["none"] }, "sip-id-or-name": { -"id": "sip-id-or-name", -"is-read-only": false, +"id": "sip-id-or-name", +"is-read-only": false, "description": ["none"] }, "sip": { -"id": "sip", -"is-read-only": false, +"id": "sip", +"is-read-only": false, "description": ["none"] }, "get-service-interface-point-list": { -"id": "get-service-interface-point-list", -"is-read-only": false, +"id": "get-service-interface-point-list", +"is-read-only": false, "description": ["none"] }, "sip": { -"id": "sip", -"is-read-only": false, +"id": "sip", +"is-read-only": false, "description": ["none"] }, "update-service-interface-point": { -"id": "update-service-interface-point", -"is-read-only": false, +"id": "update-service-interface-point", +"is-read-only": false, "description": ["none"] }, "sip-id-or-name": { -"id": "sip-id-or-name", -"is-read-only": false, +"id": "sip-id-or-name", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json index 17408df46..d363f437e 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json @@ -1,693 +1,693 @@ -{ "schama-information": { +{ "schema-information": { "tapi-connectivity": { -"id": "tapi-connectivity", -"is-read-only": false, +"id": "tapi-connectivity", +"is-read-only": false, "description": ["This module contains TAPI Connectivity Model definitions. Source: TapiConnectivity.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "connectivity-service-uuid": { -"id": "connectivity-service-uuid", -"is-read-only": false, +"id": "connectivity-service-uuid", +"is-read-only": false, "description": ["none"] }, "connectivity-service-ref-g": { -"id": "connectivity-service-ref-g", -"is-read-only": false, +"id": "connectivity-service-ref-g", +"is-read-only": false, "description": ["none"] }, "connectivity-service-end-point-local-id": { -"id": "connectivity-service-end-point-local-id", -"is-read-only": false, +"id": "connectivity-service-end-point-local-id", +"is-read-only": false, "description": ["none"] }, "connectivity-service-end-point-ref-g": { -"id": "connectivity-service-end-point-ref-g", -"is-read-only": false, +"id": "connectivity-service-end-point-ref-g", +"is-read-only": false, "description": ["none"] }, "connection-end-point-uuid": { -"id": "connection-end-point-uuid", -"is-read-only": false, +"id": "connection-end-point-uuid", +"is-read-only": false, "description": ["none"] }, "connection-end-point-ref-g": { -"id": "connection-end-point-ref-g", -"is-read-only": false, +"id": "connection-end-point-ref-g", +"is-read-only": false, "description": ["none"] }, "connection-uuid": { -"id": "connection-uuid", -"is-read-only": false, +"id": "connection-uuid", +"is-read-only": false, "description": ["none"] }, "connection-ref-g": { -"id": "connection-ref-g", -"is-read-only": false, +"id": "connection-ref-g", +"is-read-only": false, "description": ["none"] }, "switch-control-uuid": { -"id": "switch-control-uuid", -"is-read-only": false, +"id": "switch-control-uuid", +"is-read-only": false, "description": ["none"] }, "switch-control-ref-g": { -"id": "switch-control-ref-g", -"is-read-only": false, +"id": "switch-control-ref-g", +"is-read-only": false, "description": ["none"] }, "route-local-id": { -"id": "route-local-id", -"is-read-only": false, +"id": "route-local-id", +"is-read-only": false, "description": ["none"] }, "route-ref-g": { -"id": "route-ref-g", -"is-read-only": false, +"id": "route-ref-g", +"is-read-only": false, "description": ["none"] }, "connection-end-point": { -"id": "connection-end-point", -"is-read-only": false, +"id": "connection-end-point", +"is-read-only": false, "description": ["none"] }, "lower-connection": { -"id": "lower-connection", -"is-read-only": false, +"id": "lower-connection", +"is-read-only": false, "description": ["An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning). Aggregation is used as for the Node/Topology to allow changes in hierarchy. Connection aggregation reflects Node/Topology aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning."] }, "supported-client-link": { -"id": "supported-client-link", -"is-read-only": false, +"id": "supported-client-link", +"is-read-only": false, "description": ["none"] }, "route": { -"id": "route", -"is-read-only": false, +"id": "route", +"is-read-only": false, "description": ["none"] }, "switch-control": { -"id": "switch-control", -"is-read-only": false, +"id": "switch-control", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "connection-g": { -"id": "connection-g", -"is-read-only": false, +"id": "connection-g", +"is-read-only": false, "description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "layer-protocol-qualifier": { -"id": "layer-protocol-qualifier", -"is-read-only": false, +"id": "layer-protocol-qualifier", +"is-read-only": false, "description": ["none"] }, "parent-node-edge-point": { -"id": "parent-node-edge-point", -"is-read-only": false, +"id": "parent-node-edge-point", +"is-read-only": false, "description": ["none"] }, "client-node-edge-point": { -"id": "client-node-edge-point", -"is-read-only": false, +"id": "client-node-edge-point", +"is-read-only": false, "description": ["none"] }, "aggregated-connection-end-point": { -"id": "aggregated-connection-end-point", -"is-read-only": false, +"id": "aggregated-connection-end-point", +"is-read-only": false, "description": ["none"] }, "connection-port-direction": { -"id": "connection-port-direction", -"is-read-only": false, +"id": "connection-port-direction", +"is-read-only": false, "description": ["The orientation of defined flow at the EndPoint."] }, "connection-port-role": { -"id": "connection-port-role", -"is-read-only": false, +"id": "connection-port-role", +"is-read-only": false, "description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] }, "connection-end-point-g": { -"id": "connection-end-point-g", -"is-read-only": false, +"id": "connection-end-point-g", +"is-read-only": false, "description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."] }, "service-layer": { -"id": "service-layer", -"is-read-only": false, +"id": "service-layer", +"is-read-only": false, "description": ["none"] }, "service-type": { -"id": "service-type", -"is-read-only": false, +"id": "service-type", +"is-read-only": false, "description": ["none"] }, "service-level": { -"id": "service-level", -"is-read-only": false, +"id": "service-level", +"is-read-only": false, "description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"] }, "requested-capacity": { -"id": "requested-capacity", -"is-read-only": false, +"id": "requested-capacity", +"is-read-only": false, "description": ["none"] }, "connectivity-direction": { -"id": "connectivity-direction", -"is-read-only": false, +"id": "connectivity-direction", +"is-read-only": false, "description": ["none"] }, "schedule": { -"id": "schedule", -"is-read-only": false, +"id": "schedule", +"is-read-only": false, "description": ["none"] }, "coroute-inclusion": { -"id": "coroute-inclusion", -"is-read-only": false, +"id": "coroute-inclusion", +"is-read-only": false, "description": ["none"] }, "diversity-exclusion": { -"id": "diversity-exclusion", -"is-read-only": false, +"id": "diversity-exclusion", +"is-read-only": false, "description": ["none"] }, "connectivity-constraint-g": { -"id": "connectivity-constraint-g", -"is-read-only": false, +"id": "connectivity-constraint-g", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "connection": { -"id": "connection", -"is-read-only": false, +"id": "connection", +"is-read-only": false, "description": ["none"] }, "connectivity-service-g": { -"id": "connectivity-service-g", -"is-read-only": false, +"id": "connectivity-service-g", +"is-read-only": false, "description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "layer-protocol-qualifier": { -"id": "layer-protocol-qualifier", -"is-read-only": false, +"id": "layer-protocol-qualifier", +"is-read-only": false, "description": ["none"] }, "service-interface-point": { -"id": "service-interface-point", -"is-read-only": false, +"id": "service-interface-point", +"is-read-only": false, "description": ["none"] }, "connection-end-point": { -"id": "connection-end-point", -"is-read-only": false, +"id": "connection-end-point", +"is-read-only": false, "description": ["none"] }, "capacity": { -"id": "capacity", -"is-read-only": false, +"id": "capacity", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["The orientation of defined flow at the EndPoint."] }, "role": { -"id": "role", -"is-read-only": false, +"id": "role", +"is-read-only": false, "description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] }, "protection-role": { -"id": "protection-role", -"is-read-only": false, +"id": "protection-role", +"is-read-only": false, "description": ["To specify the protection role of this Port when create or update ConnectivityService."] }, "connectivity-service-end-point-g": { -"id": "connectivity-service-end-point-g", -"is-read-only": false, +"id": "connectivity-service-end-point-g", +"is-read-only": false, "description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"] }, "connection-end-point": { -"id": "connection-end-point", -"is-read-only": false, +"id": "connection-end-point", +"is-read-only": false, "description": ["none"] }, "route-g": { -"id": "route-g", -"is-read-only": false, +"id": "route-g", +"is-read-only": false, "description": ["The FC Route (FcRoute) object class models the individual routes of an FC. The route of an FC object is represented by a list of FCs at a lower level. Note that depending on the service supported by an FC, an the FC can have multiple routes."] }, "connectivity-service": { -"id": "connectivity-service", -"is-read-only": false, +"id": "connectivity-service", +"is-read-only": false, "description": ["none"] }, "connection": { -"id": "connection", -"is-read-only": false, +"id": "connection", +"is-read-only": false, "description": ["none"] }, "connectivity-context-g": { -"id": "connectivity-context-g", -"is-read-only": false, +"id": "connectivity-context-g", +"is-read-only": false, "description": ["none"] }, "selected-connection-end-point": { -"id": "selected-connection-end-point", -"is-read-only": false, +"id": "selected-connection-end-point", +"is-read-only": false, "description": ["none"] }, "selected-route": { -"id": "selected-route", -"is-read-only": false, +"id": "selected-route", +"is-read-only": false, "description": ["none"] }, "selection-control": { -"id": "selection-control", -"is-read-only": false, +"id": "selection-control", +"is-read-only": false, "description": ["Degree of administrative control applied to the switch selection."] }, "selection-reason": { -"id": "selection-reason", -"is-read-only": false, +"id": "selection-reason", +"is-read-only": false, "description": ["The reason for the current switch selection."] }, "switch-direction": { -"id": "switch-direction", -"is-read-only": false, +"id": "switch-direction", +"is-read-only": false, "description": ["Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both."] }, "switch-g": { -"id": "switch-g", -"is-read-only": false, +"id": "switch-g", +"is-read-only": false, "description": ["The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection). If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open'). The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict."] }, "sub-switch-control": { -"id": "sub-switch-control", -"is-read-only": false, +"id": "sub-switch-control", +"is-read-only": false, "description": ["none"] }, "switch": { -"id": "switch", -"is-read-only": false, +"id": "switch", +"is-read-only": false, "description": ["none"] }, "switch-control-g": { -"id": "switch-control-g", -"is-read-only": false, +"id": "switch-control-g", +"is-read-only": false, "description": ["Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme."] }, "resilience-type": { -"id": "resilience-type", -"is-read-only": false, +"id": "resilience-type", +"is-read-only": false, "description": ["none"] }, "restoration-coordinate-type": { -"id": "restoration-coordinate-type", -"is-read-only": false, +"id": "restoration-coordinate-type", +"is-read-only": false, "description": ["The coordination mechanism between multi-layers."] }, "restore-priority": { -"id": "restore-priority", -"is-read-only": false, +"id": "restore-priority", +"is-read-only": false, "description": ["none"] }, "reversion-mode": { -"id": "reversion-mode", -"is-read-only": false, +"id": "reversion-mode", +"is-read-only": false, "description": ["Indcates whether the protection scheme is revertive or non-revertive."] }, "wait-to-revert-time": { -"id": "wait-to-revert-time", -"is-read-only": false, +"id": "wait-to-revert-time", +"is-read-only": false, "description": ["If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource."] }, "hold-off-time": { -"id": "hold-off-time", -"is-read-only": false, +"id": "hold-off-time", +"is-read-only": false, "description": ["This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm."] }, "is-lock-out": { -"id": "is-lock-out", -"is-read-only": false, +"id": "is-lock-out", +"is-read-only": false, "description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."] }, "is-frozen": { -"id": "is-frozen", -"is-read-only": false, +"id": "is-frozen", +"is-read-only": false, "description": ["Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected."] }, "is-coordinated-switching-both-ends": { -"id": "is-coordinated-switching-both-ends", -"is-read-only": false, +"id": "is-coordinated-switching-both-ends", +"is-read-only": false, "description": ["Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends."] }, "max-switch-times": { -"id": "max-switch-times", -"is-read-only": false, +"id": "max-switch-times", +"is-read-only": false, "description": ["Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset."] }, "preferred-restoration-layer": { -"id": "preferred-restoration-layer", -"is-read-only": false, +"id": "preferred-restoration-layer", +"is-read-only": false, "description": ["Indicate which layer this resilience parameters package configured for."] }, "resilience-constraint-g": { -"id": "resilience-constraint-g", -"is-read-only": false, +"id": "resilience-constraint-g", +"is-read-only": false, "description": ["A list of control parameters to apply to a switch."] }, "connection-end-point": { -"id": "connection-end-point", -"is-read-only": false, +"id": "connection-end-point", +"is-read-only": false, "description": ["none"] }, "cep-list-g": { -"id": "cep-list-g", -"is-read-only": false, +"id": "cep-list-g", +"is-read-only": false, "description": ["none"] }, "POINT_TO_POINT_CONNECTIVITY": { -"id": "POINT_TO_POINT_CONNECTIVITY", -"is-read-only": false, +"id": "POINT_TO_POINT_CONNECTIVITY", +"is-read-only": false, "description": ["none"] }, "POINT_TO_MULTIPOINT_CONNECTIVITY": { -"id": "POINT_TO_MULTIPOINT_CONNECTIVITY", -"is-read-only": false, +"id": "POINT_TO_MULTIPOINT_CONNECTIVITY", +"is-read-only": false, "description": ["none"] }, "MULTIPOINT_CONNECTIVITY": { -"id": "MULTIPOINT_CONNECTIVITY", -"is-read-only": false, +"id": "MULTIPOINT_CONNECTIVITY", +"is-read-only": false, "description": ["none"] }, "ROOTED_MULTIPOINT_CONNECTIVITY": { -"id": "ROOTED_MULTIPOINT_CONNECTIVITY", -"is-read-only": false, +"id": "ROOTED_MULTIPOINT_CONNECTIVITY", +"is-read-only": false, "description": ["none"] }, "service-type": { -"id": "service-type", -"is-read-only": false, +"id": "service-type", +"is-read-only": false, "description": ["none"] }, "REVERTIVE": { -"id": "REVERTIVE", -"is-read-only": false, +"id": "REVERTIVE", +"is-read-only": false, "description": ["An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time)."] }, "NON-REVERTIVE": { -"id": "NON-REVERTIVE", -"is-read-only": false, +"id": "NON-REVERTIVE", +"is-read-only": false, "description": ["An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers."] }, "reversion-mode": { -"id": "reversion-mode", -"is-read-only": false, +"id": "reversion-mode", +"is-read-only": false, "description": ["The reversion mode associated with protection."] }, "LOCK_OUT": { -"id": "LOCK_OUT", -"is-read-only": false, +"id": "LOCK_OUT", +"is-read-only": false, "description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."] }, "NORMAL": { -"id": "NORMAL", -"is-read-only": false, +"id": "NORMAL", +"is-read-only": false, "description": ["none"] }, "MANUAL": { -"id": "MANUAL", -"is-read-only": false, +"id": "MANUAL", +"is-read-only": false, "description": ["none"] }, "FORCED": { -"id": "FORCED", -"is-read-only": false, +"id": "FORCED", +"is-read-only": false, "description": ["none"] }, "selection-control": { -"id": "selection-control", -"is-read-only": false, +"id": "selection-control", +"is-read-only": false, "description": ["Possible degrees of administrative control applied to the Route selection."] }, "LOCKOUT": { -"id": "LOCKOUT", -"is-read-only": false, +"id": "LOCKOUT", +"is-read-only": false, "description": ["none"] }, "NORMAL": { -"id": "NORMAL", -"is-read-only": false, +"id": "NORMAL", +"is-read-only": false, "description": ["none"] }, "MANUAL": { -"id": "MANUAL", -"is-read-only": false, +"id": "MANUAL", +"is-read-only": false, "description": ["none"] }, "FORCED": { -"id": "FORCED", -"is-read-only": false, +"id": "FORCED", +"is-read-only": false, "description": ["none"] }, "WAIT_TO_REVERT": { -"id": "WAIT_TO_REVERT", -"is-read-only": false, +"id": "WAIT_TO_REVERT", +"is-read-only": false, "description": ["none"] }, "SIGNAL_DEGRADE": { -"id": "SIGNAL_DEGRADE", -"is-read-only": false, +"id": "SIGNAL_DEGRADE", +"is-read-only": false, "description": ["none"] }, "SIGNAL_FAIL": { -"id": "SIGNAL_FAIL", -"is-read-only": false, +"id": "SIGNAL_FAIL", +"is-read-only": false, "description": ["none"] }, "selection-reason": { -"id": "selection-reason", -"is-read-only": false, +"id": "selection-reason", +"is-read-only": false, "description": ["The cause of the current route selection."] }, "NO_COORDINATE": { -"id": "NO_COORDINATE", -"is-read-only": false, +"id": "NO_COORDINATE", +"is-read-only": false, "description": ["none"] }, "HOLD_OFF_TIME": { -"id": "HOLD_OFF_TIME", -"is-read-only": false, +"id": "HOLD_OFF_TIME", +"is-read-only": false, "description": ["none"] }, "WAIT_FOR_NOTIFICATION": { -"id": "WAIT_FOR_NOTIFICATION", -"is-read-only": false, +"id": "WAIT_FOR_NOTIFICATION", +"is-read-only": false, "description": ["none"] }, "coordinate-type": { -"id": "coordinate-type", -"is-read-only": false, +"id": "coordinate-type", +"is-read-only": false, "description": ["none"] }, "WORK": { -"id": "WORK", -"is-read-only": false, +"id": "WORK", +"is-read-only": false, "description": ["none"] }, "PROTECT": { -"id": "PROTECT", -"is-read-only": false, +"id": "PROTECT", +"is-read-only": false, "description": ["none"] }, "PROTECTED": { -"id": "PROTECTED", -"is-read-only": false, +"id": "PROTECTED", +"is-read-only": false, "description": ["none"] }, "NA": { -"id": "NA", -"is-read-only": false, +"id": "NA", +"is-read-only": false, "description": ["none"] }, "WORK_RESTORE": { -"id": "WORK_RESTORE", -"is-read-only": false, +"id": "WORK_RESTORE", +"is-read-only": false, "description": ["none"] }, "PROTECT_RESTORE": { -"id": "PROTECT_RESTORE", -"is-read-only": false, +"id": "PROTECT_RESTORE", +"is-read-only": false, "description": ["none"] }, "protection-role": { -"id": "protection-role", -"is-read-only": false, +"id": "protection-role", +"is-read-only": false, "description": ["none"] }, "get-connection-details": { -"id": "get-connection-details", -"is-read-only": false, +"id": "get-connection-details", +"is-read-only": false, "description": ["none"] }, "service-id-or-name": { -"id": "service-id-or-name", -"is-read-only": false, +"id": "service-id-or-name", +"is-read-only": false, "description": ["none"] }, "connection-id-or-name": { -"id": "connection-id-or-name", -"is-read-only": false, +"id": "connection-id-or-name", +"is-read-only": false, "description": ["none"] }, "connection": { -"id": "connection", -"is-read-only": false, +"id": "connection", +"is-read-only": false, "description": ["none"] }, "get-connectivity-service-list": { -"id": "get-connectivity-service-list", -"is-read-only": false, +"id": "get-connectivity-service-list", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "get-connectivity-service-details": { -"id": "get-connectivity-service-details", -"is-read-only": false, +"id": "get-connectivity-service-details", +"is-read-only": false, "description": ["none"] }, "service-id-or-name": { -"id": "service-id-or-name", -"is-read-only": false, +"id": "service-id-or-name", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "create-connectivity-service": { -"id": "create-connectivity-service", -"is-read-only": false, +"id": "create-connectivity-service", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "connectivity-constraint": { -"id": "connectivity-constraint", -"is-read-only": false, +"id": "connectivity-constraint", +"is-read-only": false, "description": ["none"] }, "routing-constraint": { -"id": "routing-constraint", -"is-read-only": false, +"id": "routing-constraint", +"is-read-only": false, "description": ["none"] }, "topology-constraint": { -"id": "topology-constraint", -"is-read-only": false, +"id": "topology-constraint", +"is-read-only": false, "description": ["none"] }, "resilience-constraint": { -"id": "resilience-constraint", -"is-read-only": false, +"id": "resilience-constraint", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "update-connectivity-service": { -"id": "update-connectivity-service", -"is-read-only": false, +"id": "update-connectivity-service", +"is-read-only": false, "description": ["none"] }, "service-id-or-name": { -"id": "service-id-or-name", -"is-read-only": false, +"id": "service-id-or-name", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "connectivity-constraint": { -"id": "connectivity-constraint", -"is-read-only": false, +"id": "connectivity-constraint", +"is-read-only": false, "description": ["none"] }, "routing-constraint": { -"id": "routing-constraint", -"is-read-only": false, +"id": "routing-constraint", +"is-read-only": false, "description": ["none"] }, "topology-constraint": { -"id": "topology-constraint", -"is-read-only": false, +"id": "topology-constraint", +"is-read-only": false, "description": ["none"] }, "resilience-constraint": { -"id": "resilience-constraint", -"is-read-only": false, +"id": "resilience-constraint", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "delete-connectivity-service": { -"id": "delete-connectivity-service", -"is-read-only": false, +"id": "delete-connectivity-service", +"is-read-only": false, "description": ["none"] }, "service-id-or-name": { -"id": "service-id-or-name", -"is-read-only": false, +"id": "service-id-or-name", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json index 14b1c57e4..01b8c92e0 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json @@ -1,203 +1,203 @@ -{ "schama-information": { +{ "schema-information": { "tapi-dsr": { -"id": "tapi-dsr", -"is-read-only": false, +"id": "tapi-dsr", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE": { -"id": "DIGITAL_SIGNAL_TYPE", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_GigE": { -"id": "DIGITAL_SIGNAL_TYPE_GigE", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_GigE", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_10_GigE_LAN": { -"id": "DIGITAL_SIGNAL_TYPE_10_GigE_LAN", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_10_GigE_LAN", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_10_GigE_WAN": { -"id": "DIGITAL_SIGNAL_TYPE_10_GigE_WAN", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_10_GigE_WAN", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_40_GigE": { -"id": "DIGITAL_SIGNAL_TYPE_40_GigE", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_40_GigE", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_100_GigE": { -"id": "DIGITAL_SIGNAL_TYPE_100_GigE", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_100_GigE", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_100": { -"id": "DIGITAL_SIGNAL_TYPE_FC_100", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_100", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_200": { -"id": "DIGITAL_SIGNAL_TYPE_FC_200", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_200", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_400": { -"id": "DIGITAL_SIGNAL_TYPE_FC_400", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_400", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_800": { -"id": "DIGITAL_SIGNAL_TYPE_FC_800", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_800", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_1200": { -"id": "DIGITAL_SIGNAL_TYPE_FC_1200", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_1200", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_1600": { -"id": "DIGITAL_SIGNAL_TYPE_FC_1600", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_1600", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_FC_3200": { -"id": "DIGITAL_SIGNAL_TYPE_FC_3200", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_FC_3200", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_STM_1": { -"id": "DIGITAL_SIGNAL_TYPE_STM_1", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_STM_1", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_STM_4": { -"id": "DIGITAL_SIGNAL_TYPE_STM_4", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_STM_4", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_STM_16": { -"id": "DIGITAL_SIGNAL_TYPE_STM_16", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_STM_16", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_STM_64": { -"id": "DIGITAL_SIGNAL_TYPE_STM_64", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_STM_64", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_STM_256": { -"id": "DIGITAL_SIGNAL_TYPE_STM_256", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_STM_256", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OC_3": { -"id": "DIGITAL_SIGNAL_TYPE_OC_3", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OC_3", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OC_12": { -"id": "DIGITAL_SIGNAL_TYPE_OC_12", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OC_12", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OC_48": { -"id": "DIGITAL_SIGNAL_TYPE_OC_48", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OC_48", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OC_192": { -"id": "DIGITAL_SIGNAL_TYPE_OC_192", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OC_192", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OC_768": { -"id": "DIGITAL_SIGNAL_TYPE_OC_768", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OC_768", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OTU_1": { -"id": "DIGITAL_SIGNAL_TYPE_OTU_1", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OTU_1", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OTU_2": { -"id": "DIGITAL_SIGNAL_TYPE_OTU_2", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OTU_2", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OTU_2E": { -"id": "DIGITAL_SIGNAL_TYPE_OTU_2E", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OTU_2E", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OTU_3": { -"id": "DIGITAL_SIGNAL_TYPE_OTU_3", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OTU_3", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_OTU_4": { -"id": "DIGITAL_SIGNAL_TYPE_OTU_4", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_OTU_4", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_GPON": { -"id": "DIGITAL_SIGNAL_TYPE_GPON", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_GPON", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_XGPON": { -"id": "DIGITAL_SIGNAL_TYPE_XGPON", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_XGPON", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_IB_SDR": { -"id": "DIGITAL_SIGNAL_TYPE_IB_SDR", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_IB_SDR", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_IB_DDR": { -"id": "DIGITAL_SIGNAL_TYPE_IB_DDR", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_IB_DDR", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_IB_QDR": { -"id": "DIGITAL_SIGNAL_TYPE_IB_QDR", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_IB_QDR", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_SBCON_ESCON": { -"id": "DIGITAL_SIGNAL_TYPE_SBCON_ESCON", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_SBCON_ESCON", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_DVB_ASI": { -"id": "DIGITAL_SIGNAL_TYPE_DVB_ASI", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_DVB_ASI", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_SDI": { -"id": "DIGITAL_SIGNAL_TYPE_SDI", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_SDI", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_SDI_1G5": { -"id": "DIGITAL_SIGNAL_TYPE_SDI_1G5", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_SDI_1G5", +"is-read-only": false, "description": ["none"] }, "DIGITAL_SIGNAL_TYPE_SDI_3G": { -"id": "DIGITAL_SIGNAL_TYPE_SDI_3G", -"is-read-only": false, +"id": "DIGITAL_SIGNAL_TYPE_SDI_3G", +"is-read-only": false, "description": ["none"] }, "digital-signal-type": { -"id": "digital-signal-type", -"is-read-only": false, +"id": "digital-signal-type", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json index 8e8b903ee..177d0813c 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json @@ -1,1778 +1,1778 @@ -{ "schama-information": { +{ "schema-information": { "tapi-eth": { -"id": "tapi-eth", -"is-read-only": false, +"id": "tapi-eth", +"is-read-only": false, "description": ["This module contains TAPI ETH Model definitions. Source: TapiEth.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "auxiliary-function-position-sequence": { -"id": "auxiliary-function-position-sequence", -"is-read-only": false, +"id": "auxiliary-function-position-sequence", +"is-read-only": false, "description": ["This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP."] }, "vlan-config": { -"id": "vlan-config", -"is-read-only": false, +"id": "vlan-config", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021. range of type : -1, 0, 1..4094"] }, "csf-rdi-fdi-enable": { -"id": "csf-rdi-fdi-enable", -"is-read-only": false, +"id": "csf-rdi-fdi-enable", +"is-read-only": false, "description": ["This attribute models the MI_CSFrdifdiEnable information defined in G.8021."] }, "csf-report": { -"id": "csf-report", -"is-read-only": false, +"id": "csf-report", +"is-read-only": false, "description": ["This attribute models the MI_CSF_Reported information defined in G.8021. range of type : true, false"] }, "filter-config-snk": { -"id": "filter-config-snk", -"is-read-only": false, +"id": "filter-config-snk", +"is-read-only": false, "description": ["This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."] }, "mac-length": { -"id": "mac-length", -"is-read-only": false, +"id": "mac-length", +"is-read-only": false, "description": ["This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes. range of type : 1518, 1522, 2000"] }, "filter-config": { -"id": "filter-config", -"is-read-only": false, +"id": "filter-config", +"is-read-only": false, "description": ["This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: - All bridges address: 01-80-C2-00-00-10, - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."] }, "is-ssf-reported": { -"id": "is-ssf-reported", -"is-read-only": false, +"id": "is-ssf-reported", +"is-read-only": false, "description": ["This attribute provisions whether the SSF defect should be reported as fault cause or not. It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021."] }, "pll-thr": { -"id": "pll-thr", -"is-read-only": false, +"id": "pll-thr", +"is-read-only": false, "description": ["This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021. range of type : 0..number of ports"] }, "actor-oper-key": { -"id": "actor-oper-key", -"is-read-only": false, +"id": "actor-oper-key", +"is-read-only": false, "description": ["See 802.1AX: The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2. The meaning of particular Key values is of local significance. range of type : 16 bit"] }, "actor-system-id": { -"id": "actor-system-id", -"is-read-only": false, +"id": "actor-system-id", +"is-read-only": false, "description": ["See 802.1AX: A MAC address used as a unique identifier for the System that contains this Aggregator."] }, "actor-system-priority": { -"id": "actor-system-priority", -"is-read-only": false, +"id": "actor-system-priority", +"is-read-only": false, "description": ["See 802.1AX: Indicating the priority associated with the Actor’s System ID. range of type : 2-octet"] }, "collector-max-delay": { -"id": "collector-max-delay", -"is-read-only": false, +"id": "collector-max-delay", +"is-read-only": false, "description": ["See 802.1AX: The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1). range of type : 16-bit"] }, "data-rate": { -"id": "data-rate", -"is-read-only": false, +"id": "data-rate", +"is-read-only": false, "description": ["See 802.1AX: The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links."] }, "partner-oper-key": { -"id": "partner-oper-key", -"is-read-only": false, +"id": "partner-oper-key", +"is-read-only": false, "description": ["See 802.1AX: The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System. range of type : 16-bit"] }, "partner-system-id": { -"id": "partner-system-id", -"is-read-only": false, +"id": "partner-system-id", +"is-read-only": false, "description": ["See 802.1AX: A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System."] }, "partner-system-priority": { -"id": "partner-system-priority", -"is-read-only": false, +"id": "partner-system-priority", +"is-read-only": false, "description": ["See 802.1AX: Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System. range of type : 2-octet"] }, "csf-config": { -"id": "csf-config", -"is-read-only": false, +"id": "csf-config", +"is-read-only": false, "description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021. range of type : true, false"] }, "traffic-shaping": { -"id": "traffic-shaping", -"is-read-only": false, +"id": "traffic-shaping", +"is-read-only": false, "description": ["none"] }, "traffic-conditioning": { -"id": "traffic-conditioning", -"is-read-only": false, +"id": "traffic-conditioning", +"is-read-only": false, "description": ["none"] }, "eth-ctp-pac-g": { -"id": "eth-ctp-pac-g", -"is-read-only": false, +"id": "eth-ctp-pac-g", +"is-read-only": false, "description": ["none"] }, "ety-term": { -"id": "ety-term", -"is-read-only": false, +"id": "ety-term", +"is-read-only": false, "description": ["none"] }, "eth-term": { -"id": "eth-term", -"is-read-only": false, +"id": "eth-term", +"is-read-only": false, "description": ["none"] }, "eth-ctp": { -"id": "eth-ctp", -"is-read-only": false, +"id": "eth-ctp", +"is-read-only": false, "description": ["none"] }, "eth-connection-end-point-spec-g": { -"id": "eth-connection-end-point-spec-g", -"is-read-only": false, +"id": "eth-connection-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "priority-regenerate": { -"id": "priority-regenerate", -"is-read-only": false, +"id": "priority-regenerate", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021."] }, "ether-type": { -"id": "ether-type", -"is-read-only": false, +"id": "ether-type", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021."] }, "filter-config-1": { -"id": "filter-config-1", -"is-read-only": false, +"id": "filter-config-1", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed. range of type : MacAddress: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F; ActionEnum: PASS, BLOCK"] }, "frametype-config": { -"id": "frametype-config", -"is-read-only": false, +"id": "frametype-config", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021. range of type : see Enumeration"] }, "port-vid": { -"id": "port-vid", -"is-read-only": false, +"id": "port-vid", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021."] }, "priority-code-point-config": { -"id": "priority-code-point-config", -"is-read-only": false, +"id": "priority-code-point-config", +"is-read-only": false, "description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021. range of type : see Enumeration"] }, "eth-termination-pac-g": { -"id": "eth-termination-pac-g", -"is-read-only": false, +"id": "eth-termination-pac-g", +"is-read-only": false, "description": ["This object class models the Ethernet Flow Termination function located at a layer boundary."] }, "is-fts-enabled": { -"id": "is-fts-enabled", -"is-read-only": false, +"id": "is-fts-enabled", +"is-read-only": false, "description": ["This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information."] }, "is-tx-pause-enabled": { -"id": "is-tx-pause-enabled", -"is-read-only": false, +"id": "is-tx-pause-enabled", +"is-read-only": false, "description": ["This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021."] }, "phy-type": { -"id": "phy-type", -"is-read-only": false, +"id": "phy-type", +"is-read-only": false, "description": ["This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2."] }, "phy-type-list": { -"id": "phy-type-list", -"is-read-only": false, +"id": "phy-type-list", +"is-read-only": false, "description": ["This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3."] }, "ety-termination-pac-g": { -"id": "ety-termination-pac-g", -"is-read-only": false, +"id": "ety-termination-pac-g", +"is-read-only": false, "description": ["none"] }, "prio-config-list": { -"id": "prio-config-list", -"is-read-only": false, +"id": "prio-config-list", +"is-read-only": false, "description": ["This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."] }, "cond-config-list": { -"id": "cond-config-list", -"is-read-only": false, +"id": "cond-config-list", +"is-read-only": false, "description": ["This attribute indicates for the conditioner process the conditioning parameters: - Queue ID: Indicates the Queue ID - Committed Information Rate (CIR): number of bits per second - Committed Burst Size (CBS): number of bytes - Excess Information Rate (EIR): number of bits per second - Excess Burst Size (EBS): number of bytes - Coupling flag (CF): 0 or 1 - Color mode (CM): color-blind and color-aware."] }, "codirectional": { -"id": "codirectional", -"is-read-only": false, +"id": "codirectional", +"is-read-only": false, "description": ["This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP."] }, "traffic-conditioning-pac-g": { -"id": "traffic-conditioning-pac-g", -"is-read-only": false, +"id": "traffic-conditioning-pac-g", +"is-read-only": false, "description": ["This object class models the ETH traffic conditioning function as defined in G.8021. Basic attributes: codirectional, condConfigList, prioConfigList"] }, "prio-config-list": { -"id": "prio-config-list", -"is-read-only": false, +"id": "prio-config-list", +"is-read-only": false, "description": ["This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."] }, "queue-config-list": { -"id": "queue-config-list", -"is-read-only": false, +"id": "queue-config-list", +"is-read-only": false, "description": ["This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped."] }, "sched-config": { -"id": "sched-config", -"is-read-only": false, +"id": "sched-config", +"is-read-only": false, "description": ["This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021. Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS). Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute."] }, "codirectional": { -"id": "codirectional", -"is-read-only": false, +"id": "codirectional", +"is-read-only": false, "description": ["This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP."] }, "traffic-shaping-pac-g": { -"id": "traffic-shaping-pac-g", -"is-read-only": false, +"id": "traffic-shaping-pac-g", +"is-read-only": false, "description": ["This object class models the ETH traffic shaping function as defined in G.8021. Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig"] }, "client-mel": { -"id": "client-mel", -"is-read-only": false, +"id": "client-mel", +"is-read-only": false, "description": ["none"] }, "eth-meg-spec-g": { -"id": "eth-meg-spec-g", -"is-read-only": false, +"id": "eth-meg-spec-g", +"is-read-only": false, "description": ["none"] }, "eth-mep-common": { -"id": "eth-mep-common", -"is-read-only": false, +"id": "eth-mep-common", +"is-read-only": false, "description": ["none"] }, "eth-mep-source-pac": { -"id": "eth-mep-source-pac", -"is-read-only": false, +"id": "eth-mep-source-pac", +"is-read-only": false, "description": ["none"] }, "eth-mep-sink": { -"id": "eth-mep-sink", -"is-read-only": false, +"id": "eth-mep-sink", +"is-read-only": false, "description": ["none"] }, "eth-mep-spec-g": { -"id": "eth-mep-spec-g", -"is-read-only": false, +"id": "eth-mep-spec-g", +"is-read-only": false, "description": ["none"] }, "eth-mip-spec-g": { -"id": "eth-mip-spec-g", -"is-read-only": false, +"id": "eth-mip-spec-g", +"is-read-only": false, "description": ["none"] }, "eth-lb-msg": { -"id": "eth-lb-msg", -"is-read-only": false, +"id": "eth-lb-msg", +"is-read-only": false, "description": ["none"] }, "number": { -"id": "number", -"is-read-only": false, +"id": "number", +"is-read-only": false, "description": ["G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process."] }, "eth-loopback-job-g": { -"id": "eth-loopback-job-g", -"is-read-only": false, +"id": "eth-loopback-job-g", +"is-read-only": false, "description": ["This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob). This class models also the 'loopback discover' process, when destinationAddress is multicast. When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP."] }, "mep-mac": { -"id": "mep-mac", -"is-read-only": false, +"id": "mep-mac", +"is-read-only": false, "description": ["This attribute contains the MAC Address of the MEP."] }, "is-cc-enabled": { -"id": "is-cc-enabled", -"is-read-only": false, +"id": "is-cc-enabled", +"is-read-only": false, "description": ["This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051."] }, "cc-period": { -"id": "cc-period", -"is-read-only": false, +"id": "cc-period", +"is-read-only": false, "description": ["This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CCM message should be sent. Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM."] }, "cc-priority": { -"id": "cc-priority", -"is-read-only": false, +"id": "cc-priority", +"is-read-only": false, "description": ["This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent."] }, "lck-period": { -"id": "lck-period", -"is-read-only": false, +"id": "lck-period", +"is-read-only": false, "description": ["This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent. range of type : 1s, 1min"] }, "lck-priority": { -"id": "lck-priority", -"is-read-only": false, +"id": "lck-priority", +"is-read-only": false, "description": ["This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent."] }, "eth-mep-common-g": { -"id": "eth-mep-common-g", -"is-read-only": false, +"id": "eth-mep-common-g", +"is-read-only": false, "description": ["Basic attributes: adminState, clientMel, megIdentifier, mepMac Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled Lock Process related attributes: lckPeriod, lckPriority This object class models the MEP functions that are common to MEP Sink and MEP Source."] }, "dm-1-priority": { -"id": "dm-1-priority", -"is-read-only": false, +"id": "dm-1-priority", +"is-read-only": false, "description": ["This attribute indicates the list of 1DM priorities for the MepSink."] }, "ais-priority": { -"id": "ais-priority", -"is-read-only": false, +"id": "ais-priority", +"is-read-only": false, "description": ["This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent."] }, "ais-period": { -"id": "ais-period", -"is-read-only": false, +"id": "ais-period", +"is-read-only": false, "description": ["This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent. range of type : 1s, 1min"] }, "is-csf-reported": { -"id": "is-csf-reported", -"is-read-only": false, +"id": "is-csf-reported", +"is-read-only": false, "description": ["This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not."] }, "is-csf-rdi-fdi-enabled": { -"id": "is-csf-rdi-fdi-enabled", -"is-read-only": false, +"id": "is-csf-rdi-fdi-enabled", +"is-read-only": false, "description": ["This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051."] }, "bandwidth-report": { -"id": "bandwidth-report", -"is-read-only": false, +"id": "bandwidth-report", +"is-read-only": false, "description": ["This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source."] }, "lm-degm": { -"id": "lm-degm", -"is-read-only": false, +"id": "lm-degm", +"is-read-only": false, "description": ["This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021."] }, "lm-deg-thr": { -"id": "lm-deg-thr", -"is-read-only": false, +"id": "lm-deg-thr", +"is-read-only": false, "description": ["This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021."] }, "lm-m": { -"id": "lm-m", -"is-read-only": false, +"id": "lm-m", +"is-read-only": false, "description": ["This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021."] }, "lm-tf-min": { -"id": "lm-tf-min", -"is-read-only": false, +"id": "lm-tf-min", +"is-read-only": false, "description": ["This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021."] }, "eth-mep-sink-g": { -"id": "eth-mep-sink-g", -"is-read-only": false, +"id": "eth-mep-sink-g", +"is-read-only": false, "description": ["1DM related attribute: 1DmPriority AIS Process related attributes: aisPeriod, aisPriority Bandwidth notification Process related attribute: bandwidthReport Basic attribute: peerMepRefList CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported Defect correlation Process related attribute: currentProblemList This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of the dual-ended maintenance job, such as test. This object contains the configuration parameters for detecting 'degraded signal' (DEG)."] }, "aps-priority": { -"id": "aps-priority", -"is-read-only": false, +"id": "aps-priority", +"is-read-only": false, "description": ["This attribute specifies the priority of the APS messages. See section 8.1.5 APS insert process in G.8021."] }, "csf-priority": { -"id": "csf-priority", -"is-read-only": false, +"id": "csf-priority", +"is-read-only": false, "description": ["This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent"] }, "csf-period": { -"id": "csf-period", -"is-read-only": false, +"id": "csf-period", +"is-read-only": false, "description": ["This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent. range of type : 1s, 1min"] }, "csf-config": { -"id": "csf-config", -"is-read-only": false, +"id": "csf-config", +"is-read-only": false, "description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021."] }, "eth-mep-source-g": { -"id": "eth-mep-source-g", -"is-read-only": false, +"id": "eth-mep-source-g", +"is-read-only": false, "description": ["APS Process related attribute: apsPriority Basic attribute: mepIdentifier CSF Process related attributes: csfConfig, csfPeriod, csfPriority Link trace related operation: linkTrace Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource Test related operations: testInitiatorStart, testInitiatorTerminate This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test."] }, "eth-lt-msg": { -"id": "eth-lt-msg", -"is-read-only": false, +"id": "eth-lt-msg", +"is-read-only": false, "description": ["none"] }, "time-to-live": { -"id": "time-to-live", -"is-read-only": false, +"id": "time-to-live", +"is-read-only": false, "description": ["G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol. The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed."] }, "eth-link-trace-job-g": { -"id": "eth-link-trace-job-g", -"is-read-only": false, +"id": "eth-link-trace-job-g", +"is-read-only": false, "description": ["This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP. The termination occurs at specified stop time (schedule attribute of OamJob)."] }, "eth-test-msg": { -"id": "eth-test-msg", -"is-read-only": false, +"id": "eth-test-msg", +"is-read-only": false, "description": ["none"] }, "eth-test-job-g": { -"id": "eth-test-job-g", -"is-read-only": false, +"id": "eth-test-job-g", +"is-read-only": false, "description": ["This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted. The termination occurs at specified stop time (schedule attribute of OamJob)."] }, "responder-mep-id": { -"id": "responder-mep-id", -"is-read-only": false, +"id": "responder-mep-id", +"is-read-only": false, "description": ["none"] }, "source-address": { -"id": "source-address", -"is-read-only": false, +"id": "source-address", +"is-read-only": false, "description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."] }, "priority": { -"id": "priority", -"is-read-only": false, +"id": "priority", +"is-read-only": false, "description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"] }, "test-identifier": { -"id": "test-identifier", -"is-read-only": false, +"id": "test-identifier", +"is-read-only": false, "description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"] }, "eth-on-demand-measurement-job-control-sink-g": { -"id": "eth-on-demand-measurement-job-control-sink-g", -"is-read-only": false, +"id": "eth-on-demand-measurement-job-control-sink-g", +"is-read-only": false, "description": ["This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running."] }, "controller-mep-id": { -"id": "controller-mep-id", -"is-read-only": false, +"id": "controller-mep-id", +"is-read-only": false, "description": ["none"] }, "oam-pdu-generation-type": { -"id": "oam-pdu-generation-type", -"is-read-only": false, +"id": "oam-pdu-generation-type", +"is-read-only": false, "description": ["This attribute contains the pattern that is used for the generation of OAM PDUs."] }, "destination-address": { -"id": "destination-address", -"is-read-only": false, +"id": "destination-address", +"is-read-only": false, "description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."] }, "priority": { -"id": "priority", -"is-read-only": false, +"id": "priority", +"is-read-only": false, "description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"] }, "message-period": { -"id": "message-period", -"is-read-only": false, +"id": "message-period", +"is-read-only": false, "description": ["This attribute contains the frequency of the OAM message (PDU) generation within a series. Note that the value 0 means that only one OAM message per measurement interval is generated. range of type : See corresponding Enum."] }, "repetition-period": { -"id": "repetition-period", -"is-read-only": false, +"id": "repetition-period", +"is-read-only": false, "description": ["This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series)."] }, "measurement-interval": { -"id": "measurement-interval", -"is-read-only": false, +"id": "measurement-interval", +"is-read-only": false, "description": ["This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals. Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible. range of type : Non-negative"] }, "test-identifier": { -"id": "test-identifier", -"is-read-only": false, +"id": "test-identifier", +"is-read-only": false, "description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of LMM/LMR measurement. range of type : 0..(2^32) - 1"] }, "data-tlv-length": { -"id": "data-tlv-length", -"is-read-only": false, +"id": "data-tlv-length", +"is-read-only": false, "description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."] }, "eth-on-demand-measurement-job-control-source-g": { -"id": "eth-on-demand-measurement-job-control-source-g", -"is-read-only": false, +"id": "eth-on-demand-measurement-job-control-source-g", +"is-read-only": false, "description": ["Basic attributes: destinationAddress, priority Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval Optional attributes: dataTlvLength, testIdentifier This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running."] }, "responder-mep-id": { -"id": "responder-mep-id", -"is-read-only": false, +"id": "responder-mep-id", +"is-read-only": false, "description": ["none"] }, "is-enabled": { -"id": "is-enabled", -"is-read-only": false, +"id": "is-enabled", +"is-read-only": false, "description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."] }, "source-address": { -"id": "source-address", -"is-read-only": false, +"id": "source-address", +"is-read-only": false, "description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."] }, "test-identifier": { -"id": "test-identifier", -"is-read-only": false, +"id": "test-identifier", +"is-read-only": false, "description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"] }, "eth-pro-active-measurement-job-control-sink-g": { -"id": "eth-pro-active-measurement-job-control-sink-g", -"is-read-only": false, +"id": "eth-pro-active-measurement-job-control-sink-g", +"is-read-only": false, "description": ["This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the “Enable” attribute should have the value “FALSE”."] }, "controller-mep-id": { -"id": "controller-mep-id", -"is-read-only": false, +"id": "controller-mep-id", +"is-read-only": false, "description": ["none"] }, "is-enabled": { -"id": "is-enabled", -"is-read-only": false, +"id": "is-enabled", +"is-read-only": false, "description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."] }, "destination-address": { -"id": "destination-address", -"is-read-only": false, +"id": "destination-address", +"is-read-only": false, "description": ["This attribute provides the Unicast MAC address of the intented destination."] }, "priority": { -"id": "priority", -"is-read-only": false, +"id": "priority", +"is-read-only": false, "description": ["This attribute contains the priority value on which the MEP performs the measurement. When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames. The EMF usese this value to assign the “P” parameter of the measurement operation."] }, "period": { -"id": "period", -"is-read-only": false, +"id": "period", +"is-read-only": false, "description": ["This attribute indicates the period (frequency) of the measurement frame transmission. range of type : 100ms, 1s, 10s"] }, "test-identifier": { -"id": "test-identifier", -"is-read-only": false, +"id": "test-identifier", +"is-read-only": false, "description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of 2-way loss measurement. range of type : 0..(2^32) - 1"] }, "data-tlv-length": { -"id": "data-tlv-length", -"is-read-only": false, +"id": "data-tlv-length", +"is-read-only": false, "description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."] }, "eth-pro-active-measurement-job-control-source-g": { -"id": "eth-pro-active-measurement-job-control-source-g", -"is-read-only": false, +"id": "eth-pro-active-measurement-job-control-source-g", +"is-read-only": false, "description": ["This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation."] }, "pro-active-near-end-1-dm-parameters": { -"id": "pro-active-near-end-1-dm-parameters", -"is-read-only": false, +"id": "pro-active-near-end-1-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical near end performnace parameters."] }, "eth-pro-active-1-dm-performance-data-g": { -"id": "eth-pro-active-1-dm-performance-data-g", -"is-read-only": false, +"id": "eth-pro-active-1-dm-performance-data-g", +"is-read-only": false, "description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM)."] }, "pro-active-near-end-1-lm-parameters": { -"id": "pro-active-near-end-1-lm-parameters", -"is-read-only": false, +"id": "pro-active-near-end-1-lm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical near end performnace parameters."] }, "eth-pro-active-1-lm-performance-data-g": { -"id": "eth-pro-active-1-lm-performance-data-g", -"is-read-only": false, +"id": "eth-pro-active-1-lm-performance-data-g", +"is-read-only": false, "description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL)."] }, "pro-active-bi-dir-dm-parameters": { -"id": "pro-active-bi-dir-dm-parameters", -"is-read-only": false, +"id": "pro-active-bi-dir-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical bidirectional performnace parameters."] }, "pro-active-far-end-dm-parameters": { -"id": "pro-active-far-end-dm-parameters", -"is-read-only": false, +"id": "pro-active-far-end-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical far end performnace parameters."] }, "pro-active-near-end-dm-parameters": { -"id": "pro-active-near-end-dm-parameters", -"is-read-only": false, +"id": "pro-active-near-end-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical near end performnace parameters."] }, "eth-pro-active-dm-performance-data-g": { -"id": "eth-pro-active-dm-performance-data-g", -"is-read-only": false, +"id": "eth-pro-active-dm-performance-data-g", +"is-read-only": false, "description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR)."] }, "pro-active-far-end-lm-parameters": { -"id": "pro-active-far-end-lm-parameters", -"is-read-only": false, +"id": "pro-active-far-end-lm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical far end performnace parameters."] }, "pro-active-near-end-lm-parameters": { -"id": "pro-active-near-end-lm-parameters", -"is-read-only": false, +"id": "pro-active-near-end-lm-parameters", +"is-read-only": false, "description": ["This attribute contains the statistical near end performnace parameters."] }, "bidirectional-uas": { -"id": "bidirectional-uas", -"is-read-only": false, +"id": "bidirectional-uas", +"is-read-only": false, "description": ["This attribute contains the bidirectional UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."] }, "eth-pro-active-lm-performance-data-g": { -"id": "eth-pro-active-lm-performance-data-g", -"is-read-only": false, +"id": "eth-pro-active-lm-performance-data-g", +"is-read-only": false, "description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR)."] }, "on-demand-near-end-1-dm-parameters": { -"id": "on-demand-near-end-1-dm-parameters", -"is-read-only": false, +"id": "on-demand-near-end-1-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."] }, "eth-on-demand-1-dm-performance-data-g": { -"id": "eth-on-demand-1-dm-performance-data-g", -"is-read-only": false, +"id": "eth-on-demand-1-dm-performance-data-g", +"is-read-only": false, "description": ["none"] }, "on-demand-near-end-1-lm-parameters": { -"id": "on-demand-near-end-1-lm-parameters", -"is-read-only": false, +"id": "on-demand-near-end-1-lm-parameters", +"is-read-only": false, "description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."] }, "eth-on-demand-1-lm-performance-data-g": { -"id": "eth-on-demand-1-lm-performance-data-g", -"is-read-only": false, +"id": "eth-on-demand-1-lm-performance-data-g", +"is-read-only": false, "description": ["none"] }, "on-demand-far-end-dm-parameters": { -"id": "on-demand-far-end-dm-parameters", -"is-read-only": false, +"id": "on-demand-far-end-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."] }, "on-demand-near-end-dm-parameters": { -"id": "on-demand-near-end-dm-parameters", -"is-read-only": false, +"id": "on-demand-near-end-dm-parameters", +"is-read-only": false, "description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."] }, "eth-on-demand-dm-performance-data-g": { -"id": "eth-on-demand-dm-performance-data-g", -"is-read-only": false, +"id": "eth-on-demand-dm-performance-data-g", +"is-read-only": false, "description": ["none"] }, "on-demand-far-end-lm-parameters": { -"id": "on-demand-far-end-lm-parameters", -"is-read-only": false, +"id": "on-demand-far-end-lm-parameters", +"is-read-only": false, "description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction."] }, "on-demand-near-end-lm-parameters": { -"id": "on-demand-near-end-lm-parameters", -"is-read-only": false, +"id": "on-demand-near-end-lm-parameters", +"is-read-only": false, "description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."] }, "eth-on-demand-lm-performance-data-g": { -"id": "eth-on-demand-lm-performance-data-g", -"is-read-only": false, +"id": "eth-on-demand-lm-performance-data-g", +"is-read-only": false, "description": ["none"] }, "pro-active-control-1way-source": { -"id": "pro-active-control-1way-source", -"is-read-only": false, +"id": "pro-active-control-1way-source", +"is-read-only": false, "description": ["none"] }, "pro-active-control-1way-sink": { -"id": "pro-active-control-1way-sink", -"is-read-only": false, +"id": "pro-active-control-1way-sink", +"is-read-only": false, "description": ["none"] }, "eth-pro-active-1way-measurement-job-g": { -"id": "eth-pro-active-1way-measurement-job-g", -"is-read-only": false, +"id": "eth-pro-active-1way-measurement-job-g", +"is-read-only": false, "description": ["none"] }, "pro-active-control-2way-source": { -"id": "pro-active-control-2way-source", -"is-read-only": false, +"id": "pro-active-control-2way-source", +"is-read-only": false, "description": ["none"] }, "eth-pro-active-2way-measurement-job-g": { -"id": "eth-pro-active-2way-measurement-job-g", -"is-read-only": false, +"id": "eth-pro-active-2way-measurement-job-g", +"is-read-only": false, "description": ["none"] }, "on-demand-control-2way-source": { -"id": "on-demand-control-2way-source", -"is-read-only": false, +"id": "on-demand-control-2way-source", +"is-read-only": false, "description": ["none"] }, "eth-on-demand-2way-measurement-job-g": { -"id": "eth-on-demand-2way-measurement-job-g", -"is-read-only": false, +"id": "eth-on-demand-2way-measurement-job-g", +"is-read-only": false, "description": ["none"] }, "on-demand-control-1way-source": { -"id": "on-demand-control-1way-source", -"is-read-only": false, +"id": "on-demand-control-1way-source", +"is-read-only": false, "description": ["none"] }, "on-demand-control-1way-sink": { -"id": "on-demand-control-1way-sink", -"is-read-only": false, +"id": "on-demand-control-1way-sink", +"is-read-only": false, "description": ["none"] }, "eth-on-demand-1way-measurement-job-g": { -"id": "eth-on-demand-1way-measurement-job-g", -"is-read-only": false, +"id": "eth-on-demand-1way-measurement-job-g", +"is-read-only": false, "description": ["none"] }, "near-end-1-dm-cross-threshold": { -"id": "near-end-1-dm-cross-threshold", -"is-read-only": false, +"id": "near-end-1-dm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the near end cross threshold values of the delay measurements."] }, "near-end-1-dm-clear-threshold": { -"id": "near-end-1-dm-clear-threshold", -"is-read-only": false, +"id": "near-end-1-dm-clear-threshold", +"is-read-only": false, "description": ["This attribute contains the near end clear threshold values of the delay measurements."] }, "eth-1-dm-threshold-data-g": { -"id": "eth-1-dm-threshold-data-g", -"is-read-only": false, +"id": "eth-1-dm-threshold-data-g", +"is-read-only": false, "description": ["This data type contains the threshold values for frame delay related 1-way measurements."] }, "near-end-1-lm-cross-threshold": { -"id": "near-end-1-lm-cross-threshold", -"is-read-only": false, +"id": "near-end-1-lm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the near end cross threshold values of the loss measurements."] }, "near-end-1-lm-clear-threshold": { -"id": "near-end-1-lm-clear-threshold", -"is-read-only": false, +"id": "near-end-1-lm-clear-threshold", +"is-read-only": false, "description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."] }, "eth-1-lm-threshold-data-g": { -"id": "eth-1-lm-threshold-data-g", -"is-read-only": false, +"id": "eth-1-lm-threshold-data-g", +"is-read-only": false, "description": ["This data type contains the threshold values for frame loss related 1-way measurements."] }, "near-end-dm-cross-threshold": { -"id": "near-end-dm-cross-threshold", -"is-read-only": false, +"id": "near-end-dm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the near end cross threshold values of the delay measurements."] }, "near-end-dm-clear-threshold": { -"id": "near-end-dm-clear-threshold", -"is-read-only": false, +"id": "near-end-dm-clear-threshold", +"is-read-only": false, "description": ["This attribute contains the near end clear threshold values of the delay measurements."] }, "far-end-dm-cross-threshold": { -"id": "far-end-dm-cross-threshold", -"is-read-only": false, +"id": "far-end-dm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the far end cross threshold values of the delay measurements."] }, "far-end-dm-clear-threshold": { -"id": "far-end-dm-clear-threshold", -"is-read-only": false, +"id": "far-end-dm-clear-threshold", +"is-read-only": false, "description": ["This attribute contains the far end clear threshold values of the delay measurements."] }, "bi-dir-dm-cross-threshold": { -"id": "bi-dir-dm-cross-threshold", -"is-read-only": false, +"id": "bi-dir-dm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the bidirectional cross threshold values of the delay measurements."] }, "bi-dir-dm-clear-threshold": { -"id": "bi-dir-dm-clear-threshold", -"is-read-only": false, +"id": "bi-dir-dm-clear-threshold", +"is-read-only": false, "description": ["This attribute contains the bidirectional clear threshold values of the delay measurements."] }, "eth-dm-threshold-data-g": { -"id": "eth-dm-threshold-data-g", -"is-read-only": false, +"id": "eth-dm-threshold-data-g", +"is-read-only": false, "description": ["This data type contains the threshold values for frame delay related 2-way measurements."] }, "near-end-lm-cross-threshold": { -"id": "near-end-lm-cross-threshold", -"is-read-only": false, +"id": "near-end-lm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the near end cross threshold values of the loss measurements."] }, "near-end-lm-clear-threshold": { -"id": "near-end-lm-clear-threshold", -"is-read-only": false, +"id": "near-end-lm-clear-threshold", +"is-read-only": false, "description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."] }, "far-end-lm-cross-threshold": { -"id": "far-end-lm-cross-threshold", -"is-read-only": false, +"id": "far-end-lm-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the far end cross threshold values of the loss measurements."] }, "far-end-lm-clear-threshold": { -"id": "far-end-lm-clear-threshold", -"is-read-only": false, +"id": "far-end-lm-clear-threshold", +"is-read-only": false, "description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the far end clear threshold values of the loss measurements."] }, "bi-dir-lm-uas-cross-threshold": { -"id": "bi-dir-lm-uas-cross-threshold", -"is-read-only": false, +"id": "bi-dir-lm-uas-cross-threshold", +"is-read-only": false, "description": ["This attribute contains the bidirectional cross threshold value of the UAS loss measurement."] }, "bi-dir-lm-uas-clear-threshold": { -"id": "bi-dir-lm-uas-clear-threshold", -"is-read-only": false, +"id": "bi-dir-lm-uas-clear-threshold", +"is-read-only": false, "description": ["This attribute is only valid for the UAS parameter working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the bidirectional clear threshold value of the UAS loss measurement."] }, "eth-lm-threshold-data-g": { -"id": "eth-lm-threshold-data-g", -"is-read-only": false, +"id": "eth-lm-threshold-data-g", +"is-read-only": false, "description": ["This data type contains the threshold values for frame loss related 2-way measurements."] }, "rec-lbr-frames": { -"id": "rec-lbr-frames", -"is-read-only": false, +"id": "rec-lbr-frames", +"is-read-only": false, "description": ["G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames."] }, "out-of-order-lbr-frames": { -"id": "out-of-order-lbr-frames", -"is-read-only": false, +"id": "out-of-order-lbr-frames", +"is-read-only": false, "description": ["G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO)."] }, "sent-lbm-frames": { -"id": "sent-lbm-frames", -"is-read-only": false, +"id": "sent-lbm-frames", +"is-read-only": false, "description": ["G.8052: This parameter returns the total number of sent LBM frames."] }, "crc-lbr-frames": { -"id": "crc-lbr-frames", -"is-read-only": false, +"id": "crc-lbr-frames", +"is-read-only": false, "description": ["G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed."] }, "ber-lbr-frames": { -"id": "ber-lbr-frames", -"is-read-only": false, +"id": "ber-lbr-frames", +"is-read-only": false, "description": ["G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern."] }, "detected-peer-mep": { -"id": "detected-peer-mep", -"is-read-only": false, +"id": "detected-peer-mep", +"is-read-only": false, "description": ["G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP."] }, "eth-loopback-result-data-g": { -"id": "eth-loopback-result-data-g", -"is-read-only": false, +"id": "eth-loopback-result-data-g", +"is-read-only": false, "description": ["none"] }, "result-list": { -"id": "result-list", -"is-read-only": false, +"id": "result-list", +"is-read-only": false, "description": ["G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames. The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV."] }, "eth-link-trace-result-data-g": { -"id": "eth-link-trace-result-data-g", -"is-read-only": false, +"id": "eth-link-trace-result-data-g", +"is-read-only": false, "description": ["none"] }, "sent-tst-frames": { -"id": "sent-tst-frames", -"is-read-only": false, +"id": "sent-tst-frames", +"is-read-only": false, "description": ["G.8052: This parameter returns the total number of sent TST frames."] }, "eth-test-result-data-g": { -"id": "eth-test-result-data-g", -"is-read-only": false, +"id": "eth-test-result-data-g", +"is-read-only": false, "description": ["none"] }, "destination-address": { -"id": "destination-address", -"is-read-only": false, +"id": "destination-address", +"is-read-only": false, "description": ["G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP."] }, "priority": { -"id": "priority", -"is-read-only": false, +"id": "priority", +"is-read-only": false, "description": ["G.8052: This parameter provides the priority to be used in the LBM frame."] }, "eth-oam-operation-common-pac-g": { -"id": "eth-oam-operation-common-pac-g", -"is-read-only": false, +"id": "eth-oam-operation-common-pac-g", +"is-read-only": false, "description": ["none"] }, "period": { -"id": "period", -"is-read-only": false, +"id": "period", +"is-read-only": false, "description": ["G.8052: This parameter provides the periodicity of the TST OAM messages."] }, "drop-eligibility": { -"id": "drop-eligibility", -"is-read-only": false, +"id": "drop-eligibility", +"is-read-only": false, "description": ["G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered."] }, "data-tlv-length": { -"id": "data-tlv-length", -"is-read-only": false, +"id": "data-tlv-length", +"is-read-only": false, "description": ["G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame."] }, "test-pattern": { -"id": "test-pattern", -"is-read-only": false, +"id": "test-pattern", +"is-read-only": false, "description": ["G.8052: This parameter provides the test pattern to be used in the optional Data TLV. Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc. The following values of pattern types are defined: 0: 'Null signal without CRC-32' 1: 'Null signal with CRC-32' 2: 'PRBS 2^31-1 without CRC-32' 3: 'PRBS 2^31-1 with CRC-32'."] }, "eth-oam-msg-common-pac-g": { -"id": "eth-oam-msg-common-pac-g", -"is-read-only": false, +"id": "eth-oam-msg-common-pac-g", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE": { -"id": "ETH_OAM_JOB_TYPE", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_1DM": { -"id": "ETH_OAM_JOB_TYPE_ETH_1DM", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_1DM", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_1SLM": { -"id": "ETH_OAM_JOB_TYPE_ETH_1SLM", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_1SLM", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_LM_CCM": { -"id": "ETH_OAM_JOB_TYPE_ETH_LM_CCM", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_LM_CCM", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_LM_LMM": { -"id": "ETH_OAM_JOB_TYPE_ETH_LM_LMM", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_LM_LMM", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_SLM": { -"id": "ETH_OAM_JOB_TYPE_ETH_SLM", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_SLM", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_DM": { -"id": "ETH_OAM_JOB_TYPE_ETH_DM", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_DM", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_LTC": { -"id": "ETH_OAM_JOB_TYPE_ETH_LTC", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_LTC", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_LBK": { -"id": "ETH_OAM_JOB_TYPE_ETH_LBK", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_LBK", +"is-read-only": false, "description": ["none"] }, "ETH_OAM_JOB_TYPE_ETH_TEST": { -"id": "ETH_OAM_JOB_TYPE_ETH_TEST", -"is-read-only": false, +"id": "ETH_OAM_JOB_TYPE_ETH_TEST", +"is-read-only": false, "description": ["none"] }, "priority": { -"id": "priority", -"is-read-only": false, +"id": "priority", +"is-read-only": false, "description": ["none"] }, "queue-id": { -"id": "queue-id", -"is-read-only": false, +"id": "queue-id", +"is-read-only": false, "description": ["none"] }, "priority-configuration-g": { -"id": "priority-configuration-g", -"is-read-only": false, +"id": "priority-configuration-g", +"is-read-only": false, "description": ["none"] }, "queue-id": { -"id": "queue-id", -"is-read-only": false, +"id": "queue-id", +"is-read-only": false, "description": ["This attribute indicates the queue id."] }, "queue-depth": { -"id": "queue-depth", -"is-read-only": false, +"id": "queue-depth", +"is-read-only": false, "description": ["This attribute defines the depth of the queue in bytes."] }, "queue-threshold": { -"id": "queue-threshold", -"is-read-only": false, +"id": "queue-threshold", +"is-read-only": false, "description": ["This attribute defines the threshold of the queue in bytes."] }, "queue-configuration-g": { -"id": "queue-configuration-g", -"is-read-only": false, +"id": "queue-configuration-g", +"is-read-only": false, "description": ["none"] }, "cir": { -"id": "cir", -"is-read-only": false, +"id": "cir", +"is-read-only": false, "description": ["This attribute indicates the Committed Information Rate in bits/s."] }, "cbs": { -"id": "cbs", -"is-read-only": false, +"id": "cbs", +"is-read-only": false, "description": ["This attribute indicates the Committed Burst Size in bytes."] }, "eir": { -"id": "eir", -"is-read-only": false, +"id": "eir", +"is-read-only": false, "description": ["This attribute indicates the Excess Information Rate in bits/s."] }, "ebs": { -"id": "ebs", -"is-read-only": false, +"id": "ebs", +"is-read-only": false, "description": ["This attribute indicates the Excess Burst Size in bytes."] }, "coupling-flag": { -"id": "coupling-flag", -"is-read-only": false, +"id": "coupling-flag", +"is-read-only": false, "description": ["This attribute indicates the coupling flag."] }, "colour-mode": { -"id": "colour-mode", -"is-read-only": false, +"id": "colour-mode", +"is-read-only": false, "description": ["This attribute indicates the colour mode."] }, "queue-id": { -"id": "queue-id", -"is-read-only": false, +"id": "queue-id", +"is-read-only": false, "description": ["This attribute indicates the queue id."] }, "traffic-conditioning-configuration-g": { -"id": "traffic-conditioning-configuration-g", -"is-read-only": false, +"id": "traffic-conditioning-configuration-g", +"is-read-only": false, "description": ["none"] }, "mac-address": { -"id": "mac-address", -"is-read-only": false, +"id": "mac-address", +"is-read-only": false, "description": ["This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D)."] }, "priority-0": { -"id": "priority-0", -"is-read-only": false, +"id": "priority-0", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 0."] }, "priority-1": { -"id": "priority-1", -"is-read-only": false, +"id": "priority-1", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 1."] }, "priority-2": { -"id": "priority-2", -"is-read-only": false, +"id": "priority-2", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 2."] }, "priority-3": { -"id": "priority-3", -"is-read-only": false, +"id": "priority-3", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 3."] }, "priority-4": { -"id": "priority-4", -"is-read-only": false, +"id": "priority-4", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 4."] }, "priority-5": { -"id": "priority-5", -"is-read-only": false, +"id": "priority-5", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 5."] }, "priority-6": { -"id": "priority-6", -"is-read-only": false, +"id": "priority-6", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 6."] }, "priority-7": { -"id": "priority-7", -"is-read-only": false, +"id": "priority-7", +"is-read-only": false, "description": ["This attribute defines the new priority value for the old priority value 7."] }, "priority-mapping-g": { -"id": "priority-mapping-g", -"is-read-only": false, +"id": "priority-mapping-g", +"is-read-only": false, "description": ["This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021."] }, "vid": { -"id": "vid", -"is-read-only": false, +"id": "vid", +"is-read-only": false, "description": ["This primitive type models the 12 Bit VLAN identifier of a VLAN tag."] }, "modify-cross-connection-data": { -"id": "modify-cross-connection-data", -"is-read-only": false, +"id": "modify-cross-connection-data", +"is-read-only": false, "description": ["none"] }, "address": { -"id": "address", -"is-read-only": false, +"id": "address", +"is-read-only": false, "description": ["This attribute contains the MAC address of the address tuple."] }, "port-list": { -"id": "port-list", -"is-read-only": false, +"id": "port-list", +"is-read-only": false, "description": ["This attribute contains the ports associated to the MAC address in the address tuple."] }, "address-tuple-g": { -"id": "address-tuple-g", -"is-read-only": false, +"id": "address-tuple-g", +"is-read-only": false, "description": ["This data type contains an address tuple consisting of a MAC address and a corresponding port list."] }, "scheduling-configuration": { -"id": "scheduling-configuration", -"is-read-only": false, +"id": "scheduling-configuration", +"is-read-only": false, "description": ["The syntax of this dataType is pending on the specification in G.8021, which is for further study."] }, "c-2-00-00-10": { -"id": "c-2-00-00-10", -"is-read-only": false, +"id": "c-2-00-00-10", +"is-read-only": false, "description": ["This attribute identifies the 'All LANs Bridge Management Group Address'."] }, "c-2-00-00-00": { -"id": "c-2-00-00-00", -"is-read-only": false, +"id": "c-2-00-00-00", +"is-read-only": false, "description": ["This attribute identifies the STP/RSTP/MSTP protocol address."] }, "c-2-00-00-01": { -"id": "c-2-00-00-01", -"is-read-only": false, +"id": "c-2-00-00-01", +"is-read-only": false, "description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol)."] }, "c-2-00-00-02": { -"id": "c-2-00-00-02", -"is-read-only": false, +"id": "c-2-00-00-02", +"is-read-only": false, "description": ["This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols)."] }, "c-2-00-00-03": { -"id": "c-2-00-00-03", -"is-read-only": false, +"id": "c-2-00-00-03", +"is-read-only": false, "description": ["This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol)."] }, "c-2-00-00-04": { -"id": "c-2-00-00-04", -"is-read-only": false, +"id": "c-2-00-00-04", +"is-read-only": false, "description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address."] }, "c-2-00-00-05": { -"id": "c-2-00-00-05", -"is-read-only": false, +"id": "c-2-00-00-05", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-06": { -"id": "c-2-00-00-06", -"is-read-only": false, +"id": "c-2-00-00-06", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-07": { -"id": "c-2-00-00-07", -"is-read-only": false, +"id": "c-2-00-00-07", +"is-read-only": false, "description": ["This attribute identifies the Metro Ethernet Forum E-LMI protocol group address."] }, "c-2-00-00-08": { -"id": "c-2-00-00-08", -"is-read-only": false, +"id": "c-2-00-00-08", +"is-read-only": false, "description": ["This attribute identifies the Provider Bridge Group address."] }, "c-2-00-00-09": { -"id": "c-2-00-00-09", -"is-read-only": false, +"id": "c-2-00-00-09", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-0-a": { -"id": "c-2-00-00-0-a", -"is-read-only": false, +"id": "c-2-00-00-0-a", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-0-b": { -"id": "c-2-00-00-0-b", -"is-read-only": false, +"id": "c-2-00-00-0-b", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-0-c": { -"id": "c-2-00-00-0-c", -"is-read-only": false, +"id": "c-2-00-00-0-c", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-0-d": { -"id": "c-2-00-00-0-d", -"is-read-only": false, +"id": "c-2-00-00-0-d", +"is-read-only": false, "description": ["This attribute identifies the Provider Bridge MVRP address."] }, "c-2-00-00-0-e": { -"id": "c-2-00-00-0-e", -"is-read-only": false, +"id": "c-2-00-00-0-e", +"is-read-only": false, "description": ["This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol)."] }, "c-2-00-00-0-f": { -"id": "c-2-00-00-0-f", -"is-read-only": false, +"id": "c-2-00-00-0-f", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-20": { -"id": "c-2-00-00-20", -"is-read-only": false, +"id": "c-2-00-00-20", +"is-read-only": false, "description": ["This attribute identifies the Customer and Provider Bridge MMRP address."] }, "c-2-00-00-21": { -"id": "c-2-00-00-21", -"is-read-only": false, +"id": "c-2-00-00-21", +"is-read-only": false, "description": ["This attribute identifies the Customer Bridge MVRP address."] }, "c-2-00-00-22": { -"id": "c-2-00-00-22", -"is-read-only": false, +"id": "c-2-00-00-22", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-23": { -"id": "c-2-00-00-23", -"is-read-only": false, +"id": "c-2-00-00-23", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-24": { -"id": "c-2-00-00-24", -"is-read-only": false, +"id": "c-2-00-00-24", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-25": { -"id": "c-2-00-00-25", -"is-read-only": false, +"id": "c-2-00-00-25", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-26": { -"id": "c-2-00-00-26", -"is-read-only": false, +"id": "c-2-00-00-26", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-27": { -"id": "c-2-00-00-27", -"is-read-only": false, +"id": "c-2-00-00-27", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-28": { -"id": "c-2-00-00-28", -"is-read-only": false, +"id": "c-2-00-00-28", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-29": { -"id": "c-2-00-00-29", -"is-read-only": false, +"id": "c-2-00-00-29", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-2-a": { -"id": "c-2-00-00-2-a", -"is-read-only": false, +"id": "c-2-00-00-2-a", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-2-b": { -"id": "c-2-00-00-2-b", -"is-read-only": false, +"id": "c-2-00-00-2-b", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-2-c": { -"id": "c-2-00-00-2-c", -"is-read-only": false, +"id": "c-2-00-00-2-c", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-2-d": { -"id": "c-2-00-00-2-d", -"is-read-only": false, +"id": "c-2-00-00-2-d", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-2-e": { -"id": "c-2-00-00-2-e", -"is-read-only": false, +"id": "c-2-00-00-2-e", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "c-2-00-00-2-f": { -"id": "c-2-00-00-2-f", -"is-read-only": false, +"id": "c-2-00-00-2-f", +"is-read-only": false, "description": ["Reserved for future standardization."] }, "control-frame-filter-g": { -"id": "control-frame-filter-g", -"is-read-only": false, +"id": "control-frame-filter-g", +"is-read-only": false, "description": ["This data type identifies the filter action for each of the 33 group MAC addresses (control frames). Value 'false' means block: The frame is discarded by the filter process. Value 'true' means pass: The frame is passed unchanged through the filter process."] }, "source-mac-address": { -"id": "source-mac-address", -"is-read-only": false, +"id": "source-mac-address", +"is-read-only": false, "description": ["The sourceMacAddress is the address from the far end."] }, "port-id": { -"id": "port-id", -"is-read-only": false, +"id": "port-id", +"is-read-only": false, "description": ["This attribute returns the far end port identifier."] }, "nominal-bandwidth": { -"id": "nominal-bandwidth", -"is-read-only": false, +"id": "nominal-bandwidth", +"is-read-only": false, "description": ["This attribute returns the configured bandwidth"] }, "current-bandwidth": { -"id": "current-bandwidth", -"is-read-only": false, +"id": "current-bandwidth", +"is-read-only": false, "description": ["This attribute returns the current bandwidth."] }, "bandwidth-report-g": { -"id": "bandwidth-report-g", -"is-read-only": false, +"id": "bandwidth-report-g", +"is-read-only": false, "description": ["Data type for the bandwidth report."] }, "LOCK": { -"id": "LOCK", -"is-read-only": false, +"id": "LOCK", +"is-read-only": false, "description": ["none"] }, "NORMAL": { -"id": "NORMAL", -"is-read-only": false, +"id": "NORMAL", +"is-read-only": false, "description": ["none"] }, "admin-state": { -"id": "admin-state", -"is-read-only": false, +"id": "admin-state", +"is-read-only": false, "description": ["none"] }, "COLOUR_BLIND": { -"id": "COLOUR_BLIND", -"is-read-only": false, +"id": "COLOUR_BLIND", +"is-read-only": false, "description": ["none"] }, "COLOUR_AWARE": { -"id": "COLOUR_AWARE", -"is-read-only": false, +"id": "COLOUR_AWARE", +"is-read-only": false, "description": ["none"] }, "colour-mode": { -"id": "colour-mode", -"is-read-only": false, +"id": "colour-mode", +"is-read-only": false, "description": ["none"] }, "DISABLED": { -"id": "DISABLED", -"is-read-only": false, +"id": "DISABLED", +"is-read-only": false, "description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is false - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."] }, "ENABLED": { -"id": "ENABLED", -"is-read-only": false, +"id": "ENABLED", +"is-read-only": false, "description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."] }, "ENABLED_WITH_RDI_FDI": { -"id": "ENABLED_WITH_RDI_FDI", -"is-read-only": false, +"id": "ENABLED_WITH_RDI_FDI", +"is-read-only": false, "description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is false."] }, "ENABLED_WITH_RDI_FDI_DCI": { -"id": "ENABLED_WITH_RDI_FDI_DCI", -"is-read-only": false, +"id": "ENABLED_WITH_RDI_FDI_DCI", +"is-read-only": false, "description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is true."] }, "ENABLED_WITH_DCI": { -"id": "ENABLED_WITH_DCI", -"is-read-only": false, +"id": "ENABLED_WITH_DCI", +"is-read-only": false, "description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is true."] }, "csf-config": { -"id": "csf-config", -"is-read-only": false, +"id": "csf-config", +"is-read-only": false, "description": ["none"] }, "OTHER": { -"id": "OTHER", -"is-read-only": false, +"id": "OTHER", +"is-read-only": false, "description": ["none"] }, "UNKNOWN": { -"id": "UNKNOWN", -"is-read-only": false, +"id": "UNKNOWN", +"is-read-only": false, "description": ["none"] }, "NONE": { -"id": "NONE", -"is-read-only": false, +"id": "NONE", +"is-read-only": false, "description": ["none"] }, "2BASE_TL": { -"id": "2BASE_TL", -"is-read-only": false, +"id": "2BASE_TL", +"is-read-only": false, "description": ["none"] }, "10MBIT_S": { -"id": "10MBIT_S", -"is-read-only": false, +"id": "10MBIT_S", +"is-read-only": false, "description": ["none"] }, "10PASS_TS": { -"id": "10PASS_TS", -"is-read-only": false, +"id": "10PASS_TS", +"is-read-only": false, "description": ["none"] }, "100BASE_T4": { -"id": "100BASE_T4", -"is-read-only": false, +"id": "100BASE_T4", +"is-read-only": false, "description": ["none"] }, "100BASE_X": { -"id": "100BASE_X", -"is-read-only": false, +"id": "100BASE_X", +"is-read-only": false, "description": ["none"] }, "100BASE_T2": { -"id": "100BASE_T2", -"is-read-only": false, +"id": "100BASE_T2", +"is-read-only": false, "description": ["none"] }, "1000BASE_X": { -"id": "1000BASE_X", -"is-read-only": false, +"id": "1000BASE_X", +"is-read-only": false, "description": ["none"] }, "1000BASE_T": { -"id": "1000BASE_T", -"is-read-only": false, +"id": "1000BASE_T", +"is-read-only": false, "description": ["none"] }, "10GBASE-X": { -"id": "10GBASE-X", -"is-read-only": false, +"id": "10GBASE-X", +"is-read-only": false, "description": ["none"] }, "10GBASE_R": { -"id": "10GBASE_R", -"is-read-only": false, +"id": "10GBASE_R", +"is-read-only": false, "description": ["none"] }, "10GBASE_W": { -"id": "10GBASE_W", -"is-read-only": false, +"id": "10GBASE_W", +"is-read-only": false, "description": ["none"] }, "ety-phy-type": { -"id": "ety-phy-type", -"is-read-only": false, +"id": "ety-phy-type", +"is-read-only": false, "description": ["none"] }, "ADMIT_ONLY_VLAN_TAGGED_FRAMES": { -"id": "ADMIT_ONLY_VLAN_TAGGED_FRAMES", -"is-read-only": false, +"id": "ADMIT_ONLY_VLAN_TAGGED_FRAMES", +"is-read-only": false, "description": ["none"] }, "ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES": { -"id": "ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES", -"is-read-only": false, +"id": "ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES", +"is-read-only": false, "description": ["none"] }, "ADMIT_ALL_FRAMES": { -"id": "ADMIT_ALL_FRAMES", -"is-read-only": false, +"id": "ADMIT_ALL_FRAMES", +"is-read-only": false, "description": ["none"] }, "frame-type": { -"id": "frame-type", -"is-read-only": false, +"id": "frame-type", +"is-read-only": false, "description": ["none"] }, "3_33MS": { -"id": "3_33MS", -"is-read-only": false, +"id": "3_33MS", +"is-read-only": false, "description": ["Default for protection."] }, "10MS": { -"id": "10MS", -"is-read-only": false, +"id": "10MS", +"is-read-only": false, "description": ["none"] }, "100MS": { -"id": "100MS", -"is-read-only": false, +"id": "100MS", +"is-read-only": false, "description": ["none"] }, "1S": { -"id": "1S", -"is-read-only": false, +"id": "1S", +"is-read-only": false, "description": ["none"] }, "10S": { -"id": "10S", -"is-read-only": false, +"id": "10S", +"is-read-only": false, "description": ["none"] }, "1MIN": { -"id": "1MIN", -"is-read-only": false, +"id": "1MIN", +"is-read-only": false, "description": ["none"] }, "10MIN": { -"id": "10MIN", -"is-read-only": false, +"id": "10MIN", +"is-read-only": false, "description": ["none"] }, "oam-period": { -"id": "oam-period", -"is-read-only": false, +"id": "oam-period", +"is-read-only": false, "description": ["Provides the frequency for the OAM PDU insertion."] }, "8P0D": { -"id": "8P0D", -"is-read-only": false, +"id": "8P0D", +"is-read-only": false, "description": ["none"] }, "7P1D": { -"id": "7P1D", -"is-read-only": false, +"id": "7P1D", +"is-read-only": false, "description": ["none"] }, "6P2D": { -"id": "6P2D", -"is-read-only": false, +"id": "6P2D", +"is-read-only": false, "description": ["none"] }, "5P3D": { -"id": "5P3D", -"is-read-only": false, +"id": "5P3D", +"is-read-only": false, "description": ["none"] }, "DEI": { -"id": "DEI", -"is-read-only": false, +"id": "DEI", +"is-read-only": false, "description": ["This enumeration value means that all priorities should be drop eligible. DEI = Drop Eligibility Indicator"] }, "pcp-coding": { -"id": "pcp-coding", -"is-read-only": false, +"id": "pcp-coding", +"is-read-only": false, "description": ["This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q."] }, "C_Tag": { -"id": "C_Tag", -"is-read-only": false, +"id": "C_Tag", +"is-read-only": false, "description": ["0x8100"] }, "S_Tag": { -"id": "S_Tag", -"is-read-only": false, +"id": "S_Tag", +"is-read-only": false, "description": ["0x88a8"] }, "I_Tag": { -"id": "I_Tag", -"is-read-only": false, +"id": "I_Tag", +"is-read-only": false, "description": ["88-e7"] }, "vlan-type": { -"id": "vlan-type", -"is-read-only": false, +"id": "vlan-type", +"is-read-only": false, "description": ["This enumeration contains the Ethertypes defined in IEEE 802.1Q."] }, "1MIN": { -"id": "1MIN", -"is-read-only": false, +"id": "1MIN", +"is-read-only": false, "description": ["none"] }, "1S": { -"id": "1S", -"is-read-only": false, +"id": "1S", +"is-read-only": false, "description": ["none"] }, "10S": { -"id": "10S", -"is-read-only": false, +"id": "10S", +"is-read-only": false, "description": ["none"] }, "0": { -"id": "0", -"is-read-only": false, +"id": "0", +"is-read-only": false, "description": ["none"] }, "repetition-period": { -"id": "repetition-period", -"is-read-only": false, +"id": "repetition-period", +"is-read-only": false, "description": ["This enumeration defines the allowed values for the repetition period in on-demand measurements. Note: The value 0 means that the value is not relevant."] }, "10MS": { -"id": "10MS", -"is-read-only": false, +"id": "10MS", +"is-read-only": false, "description": ["none"] }, "100MS": { -"id": "100MS", -"is-read-only": false, +"id": "100MS", +"is-read-only": false, "description": ["none"] }, "1S": { -"id": "1S", -"is-read-only": false, +"id": "1S", +"is-read-only": false, "description": ["none"] }, "10S": { -"id": "10S", -"is-read-only": false, +"id": "10S", +"is-read-only": false, "description": ["none"] }, "0": { -"id": "0", -"is-read-only": false, +"id": "0", +"is-read-only": false, "description": ["none"] }, "message-period": { -"id": "message-period", -"is-read-only": false, +"id": "message-period", +"is-read-only": false, "description": ["This enumeration defines the allowed values for the message period in on-demand measurements. Notes: The value 10ms is only used in synthetic loss measurements. The value 0 means that the value is not relevant."] }, "SINGLE_INSTANCE": { -"id": "SINGLE_INSTANCE", -"is-read-only": false, +"id": "SINGLE_INSTANCE", +"is-read-only": false, "description": ["none"] }, "REPETITIVE_INSTANCE": { -"id": "REPETITIVE_INSTANCE", -"is-read-only": false, +"id": "REPETITIVE_INSTANCE", +"is-read-only": false, "description": ["none"] }, "SINGLE_SERIES": { -"id": "SINGLE_SERIES", -"is-read-only": false, +"id": "SINGLE_SERIES", +"is-read-only": false, "description": ["none"] }, "REPETITIVE_SERIES": { -"id": "REPETITIVE_SERIES", -"is-read-only": false, +"id": "REPETITIVE_SERIES", +"is-read-only": false, "description": ["none"] }, "oam-pdu-generation-type": { -"id": "oam-pdu-generation-type", -"is-read-only": false, +"id": "oam-pdu-generation-type", +"is-read-only": false, "description": ["This enumeration defines the generation pattern of the on-demand OAM PDUs (messages)."] }, "number-of-samples": { -"id": "number-of-samples", -"is-read-only": false, +"id": "number-of-samples", +"is-read-only": false, "description": ["This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement. range of type : non-negative"] }, "frame-delay-list": { -"id": "frame-delay-list", -"is-read-only": false, +"id": "frame-delay-list", +"is-read-only": false, "description": ["This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute."] }, "frame-delay-variation-list": { -"id": "frame-delay-variation-list", -"is-read-only": false, +"id": "frame-delay-variation-list", +"is-read-only": false, "description": ["This attribute contains the frame delay variations measured in ns (nano second). The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0)."] }, "on-demand-dm-performance-parameters-g": { -"id": "on-demand-dm-performance-parameters-g", -"is-read-only": false, +"id": "on-demand-dm-performance-parameters-g", +"is-read-only": false, "description": ["This data type contains the results of an on-demand delay measurement job."] }, "total-transmitted-frames": { -"id": "total-transmitted-frames", -"is-read-only": false, +"id": "total-transmitted-frames", +"is-read-only": false, "description": ["This attribute contains the total number of frames transmitted."] }, "total-lost-frames": { -"id": "total-lost-frames", -"is-read-only": false, +"id": "total-lost-frames", +"is-read-only": false, "description": ["This attribute contains the total number of frames lost."] }, "total-frame-loss-ratio": { -"id": "total-frame-loss-ratio", -"is-read-only": false, +"id": "total-frame-loss-ratio", +"is-read-only": false, "description": ["This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)). The accuracy of the value is for further study."] }, "on-demand-lm-performance-parameters-g": { -"id": "on-demand-lm-performance-parameters-g", -"is-read-only": false, +"id": "on-demand-lm-performance-parameters-g", +"is-read-only": false, "description": ["This data type contains the results of an on-demand loss measurement job."] }, "minimum-frame-delay": { -"id": "minimum-frame-delay", -"is-read-only": false, +"id": "minimum-frame-delay", +"is-read-only": false, "description": ["This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."] }, "average-frame-delay": { -"id": "average-frame-delay", -"is-read-only": false, +"id": "average-frame-delay", +"is-read-only": false, "description": ["This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."] }, "maximum-frame-delay": { -"id": "maximum-frame-delay", -"is-read-only": false, +"id": "maximum-frame-delay", +"is-read-only": false, "description": ["This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."] }, "minimum-frame-delay-variation": { -"id": "minimum-frame-delay-variation", -"is-read-only": false, +"id": "minimum-frame-delay-variation", +"is-read-only": false, "description": ["This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."] }, "average-frame-delay-variation": { -"id": "average-frame-delay-variation", -"is-read-only": false, +"id": "average-frame-delay-variation", +"is-read-only": false, "description": ["This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."] }, "maximum-frame-delay-variation": { -"id": "maximum-frame-delay-variation", -"is-read-only": false, +"id": "maximum-frame-delay-variation", +"is-read-only": false, "description": ["This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."] }, "statistical-dm-performance-parameters-g": { -"id": "statistical-dm-performance-parameters-g", -"is-read-only": false, +"id": "statistical-dm-performance-parameters-g", +"is-read-only": false, "description": ["This data type contains the statistical delay measurement performance parameters."] }, "minimum-frame-loss-ratio": { -"id": "minimum-frame-loss-ratio", -"is-read-only": false, +"id": "minimum-frame-loss-ratio", +"is-read-only": false, "description": ["This attribute contains the minimum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."] }, "average-frame-loss-ratio": { -"id": "average-frame-loss-ratio", -"is-read-only": false, +"id": "average-frame-loss-ratio", +"is-read-only": false, "description": ["This attribute contains the average frame loss ratio calculated over a period of time. The accuracy of the value is for further study."] }, "maximum-frame-loss-ratio": { -"id": "maximum-frame-loss-ratio", -"is-read-only": false, +"id": "maximum-frame-loss-ratio", +"is-read-only": false, "description": ["This attribute contains the maximum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."] }, "ses": { -"id": "ses", -"is-read-only": false, +"id": "ses", +"is-read-only": false, "description": ["This attribute contains the SES detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."] }, "uas": { -"id": "uas", -"is-read-only": false, +"id": "uas", +"is-read-only": false, "description": ["This attribute contains UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."] }, "statistical-lm-performance-parameters-g": { -"id": "statistical-lm-performance-parameters-g", -"is-read-only": false, +"id": "statistical-lm-performance-parameters-g", +"is-read-only": false, "description": ["This data type contains the statistical loss measurement performance parameters."] }, "eth-oam-job-type": { -"id": "eth-oam-job-type", -"is-read-only": false, +"id": "eth-oam-job-type", +"is-read-only": false, "description": ["none"] }, "source-address": { -"id": "source-address", -"is-read-only": false, +"id": "source-address", +"is-read-only": false, "description": ["G.8052: This attribute contains the source MAC Address of an individual LTR frame result."] }, "time-to-live": { -"id": "time-to-live", -"is-read-only": false, +"id": "time-to-live", +"is-read-only": false, "description": ["G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result."] }, "data-tlv-length": { -"id": "data-tlv-length", -"is-read-only": false, +"id": "data-tlv-length", +"is-read-only": false, "description": ["G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result."] }, "link-trace-result-g": { -"id": "link-trace-result-g", -"is-read-only": false, +"id": "link-trace-result-g", +"is-read-only": false, "description": ["G.8052: This data type contains the result from an individual LTR frame."] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json index cb170ac16..57926bd1a 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json @@ -1,648 +1,648 @@ -{ "schama-information": { +{ "schema-information": { "tapi-notification": { -"id": "tapi-notification", -"is-read-only": false, +"id": "tapi-notification", +"is-read-only": false, "description": ["This module contains TAPI Notification Model definitions. Source: TapiNotification.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "notification": { -"id": "notification", -"is-read-only": false, +"id": "notification", +"is-read-only": false, "description": ["none"] }, "notification-channel": { -"id": "notification-channel", -"is-read-only": false, +"id": "notification-channel", +"is-read-only": false, "description": ["none"] }, "subscription-filter": { -"id": "subscription-filter", -"is-read-only": false, +"id": "subscription-filter", +"is-read-only": false, "description": ["none"] }, "subscription-state": { -"id": "subscription-state", -"is-read-only": false, +"id": "subscription-state", +"is-read-only": false, "description": ["none"] }, "supported-notification-types": { -"id": "supported-notification-types", -"is-read-only": false, +"id": "supported-notification-types", +"is-read-only": false, "description": ["none"] }, "supported-object-types": { -"id": "supported-object-types", -"is-read-only": false, +"id": "supported-object-types", +"is-read-only": false, "description": ["none"] }, "notification-subscription-service-g": { -"id": "notification-subscription-service-g", -"is-read-only": false, +"id": "notification-subscription-service-g", +"is-read-only": false, "description": ["none"] }, "requested-notification-types": { -"id": "requested-notification-types", -"is-read-only": false, +"id": "requested-notification-types", +"is-read-only": false, "description": ["none"] }, "requested-object-types": { -"id": "requested-object-types", -"is-read-only": false, +"id": "requested-object-types", +"is-read-only": false, "description": ["none"] }, "requested-layer-protocols": { -"id": "requested-layer-protocols", -"is-read-only": false, +"id": "requested-layer-protocols", +"is-read-only": false, "description": ["none"] }, "requested-object-identifier": { -"id": "requested-object-identifier", -"is-read-only": false, +"id": "requested-object-identifier", +"is-read-only": false, "description": ["none"] }, "include-content": { -"id": "include-content", -"is-read-only": false, +"id": "include-content", +"is-read-only": false, "description": ["Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)"] }, "subscription-filter-g": { -"id": "subscription-filter-g", -"is-read-only": false, +"id": "subscription-filter-g", +"is-read-only": false, "description": ["none"] }, "notification": { -"id": "notification", -"is-read-only": false, +"id": "notification", +"is-read-only": false, "description": ["none"] }, "notification-type": { -"id": "notification-type", -"is-read-only": false, +"id": "notification-type", +"is-read-only": false, "description": ["none"] }, "target-object-type": { -"id": "target-object-type", -"is-read-only": false, +"id": "target-object-type", +"is-read-only": false, "description": ["none"] }, "target-object-identifier": { -"id": "target-object-identifier", -"is-read-only": false, +"id": "target-object-identifier", +"is-read-only": false, "description": ["none"] }, "target-object-name": { -"id": "target-object-name", -"is-read-only": false, +"id": "target-object-name", +"is-read-only": false, "description": ["none"] }, "event-time-stamp": { -"id": "event-time-stamp", -"is-read-only": false, +"id": "event-time-stamp", +"is-read-only": false, "description": ["none"] }, "sequence-number": { -"id": "sequence-number", -"is-read-only": false, +"id": "sequence-number", +"is-read-only": false, "description": ["A monotonous increasing sequence number associated with the notification. The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined."] }, "source-indicator": { -"id": "source-indicator", -"is-read-only": false, +"id": "source-indicator", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "changed-attributes": { -"id": "changed-attributes", -"is-read-only": false, +"id": "changed-attributes", +"is-read-only": false, "description": ["none"] }, "additional-info": { -"id": "additional-info", -"is-read-only": false, +"id": "additional-info", +"is-read-only": false, "description": ["none"] }, "additional-text": { -"id": "additional-text", -"is-read-only": false, +"id": "additional-text", +"is-read-only": false, "description": ["none"] }, "tca-info": { -"id": "tca-info", -"is-read-only": false, +"id": "tca-info", +"is-read-only": false, "description": ["none"] }, "alarm-info": { -"id": "alarm-info", -"is-read-only": false, +"id": "alarm-info", +"is-read-only": false, "description": ["none"] }, "notification-g": { -"id": "notification-g", -"is-read-only": false, +"id": "notification-g", +"is-read-only": false, "description": ["none"] }, "stream-address": { -"id": "stream-address", -"is-read-only": false, +"id": "stream-address", +"is-read-only": false, "description": ["The address/location/URI of the channel/stream to which the subscribed notifications are published. This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string."] }, "next-sequence-no": { -"id": "next-sequence-no", -"is-read-only": false, +"id": "next-sequence-no", +"is-read-only": false, "description": ["The sequence number of the next notification that will be published on the channel"] }, "notification-channel-g": { -"id": "notification-channel-g", -"is-read-only": false, +"id": "notification-channel-g", +"is-read-only": false, "description": ["none"] }, "notif-subscription": { -"id": "notif-subscription", -"is-read-only": false, +"id": "notif-subscription", +"is-read-only": false, "description": ["none"] }, "notification": { -"id": "notification", -"is-read-only": false, +"id": "notification", +"is-read-only": false, "description": ["none"] }, "notification-context-g": { -"id": "notification-context-g", -"is-read-only": false, +"id": "notification-context-g", +"is-read-only": false, "description": ["none"] }, "is-transient": { -"id": "is-transient", -"is-read-only": false, +"id": "is-transient", +"is-read-only": false, "description": ["none"] }, "perceived-severity": { -"id": "perceived-severity", -"is-read-only": false, +"id": "perceived-severity", +"is-read-only": false, "description": ["none"] }, "probable-cause": { -"id": "probable-cause", -"is-read-only": false, +"id": "probable-cause", +"is-read-only": false, "description": ["none"] }, "service-affecting": { -"id": "service-affecting", -"is-read-only": false, +"id": "service-affecting", +"is-read-only": false, "description": ["none"] }, "alarm-info-g": { -"id": "alarm-info-g", -"is-read-only": false, +"id": "alarm-info-g", +"is-read-only": false, "description": ["none"] }, "is-transient": { -"id": "is-transient", -"is-read-only": false, +"id": "is-transient", +"is-read-only": false, "description": ["none"] }, "threshold-crossing": { -"id": "threshold-crossing", -"is-read-only": false, +"id": "threshold-crossing", +"is-read-only": false, "description": ["none"] }, "threshold-parameter": { -"id": "threshold-parameter", -"is-read-only": false, +"id": "threshold-parameter", +"is-read-only": false, "description": ["none"] }, "threshold-value": { -"id": "threshold-value", -"is-read-only": false, +"id": "threshold-value", +"is-read-only": false, "description": ["none"] }, "perceived-severity": { -"id": "perceived-severity", -"is-read-only": false, +"id": "perceived-severity", +"is-read-only": false, "description": ["none"] }, "measurement-interval": { -"id": "measurement-interval", -"is-read-only": false, +"id": "measurement-interval", +"is-read-only": false, "description": ["none"] }, "suspect-interval-flag": { -"id": "suspect-interval-flag", -"is-read-only": false, +"id": "suspect-interval-flag", +"is-read-only": false, "description": ["none"] }, "tca-info-g": { -"id": "tca-info-g", -"is-read-only": false, +"id": "tca-info-g", +"is-read-only": false, "description": ["none"] }, "value-name": { -"id": "value-name", -"is-read-only": false, +"id": "value-name", +"is-read-only": false, "description": ["The name of the value. The value need not have a name."] }, "old-value": { -"id": "old-value", -"is-read-only": false, +"id": "old-value", +"is-read-only": false, "description": ["The value"] }, "new-value": { -"id": "new-value", -"is-read-only": false, +"id": "new-value", +"is-read-only": false, "description": ["The value"] }, "name-and-value-change-g": { -"id": "name-and-value-change-g", -"is-read-only": false, +"id": "name-and-value-change-g", +"is-read-only": false, "description": ["A scoped name-value triple, including old value and new value"] }, "OBJECT_CREATION": { -"id": "OBJECT_CREATION", -"is-read-only": false, +"id": "OBJECT_CREATION", +"is-read-only": false, "description": ["Not a normal state. The system is unable to determine the correct value."] }, "OBJECT_DELETION": { -"id": "OBJECT_DELETION", -"is-read-only": false, +"id": "OBJECT_DELETION", +"is-read-only": false, "description": ["none"] }, "ATTRIBUTE_VALUE_CHANGE": { -"id": "ATTRIBUTE_VALUE_CHANGE", -"is-read-only": false, +"id": "ATTRIBUTE_VALUE_CHANGE", +"is-read-only": false, "description": ["none"] }, "ALARM_EVENT": { -"id": "ALARM_EVENT", -"is-read-only": false, +"id": "ALARM_EVENT", +"is-read-only": false, "description": ["none"] }, "THRESHOLD_CROSSING_ALERT": { -"id": "THRESHOLD_CROSSING_ALERT", -"is-read-only": false, +"id": "THRESHOLD_CROSSING_ALERT", +"is-read-only": false, "description": ["none"] }, "notification-type": { -"id": "notification-type", -"is-read-only": false, +"id": "notification-type", +"is-read-only": false, "description": ["List of supported Notifications types."] }, "TOPOLOGY": { -"id": "TOPOLOGY", -"is-read-only": false, +"id": "TOPOLOGY", +"is-read-only": false, "description": ["none"] }, "NODE": { -"id": "NODE", -"is-read-only": false, +"id": "NODE", +"is-read-only": false, "description": ["none"] }, "LINK": { -"id": "LINK", -"is-read-only": false, +"id": "LINK", +"is-read-only": false, "description": ["none"] }, "CONNECTION": { -"id": "CONNECTION", -"is-read-only": false, +"id": "CONNECTION", +"is-read-only": false, "description": ["none"] }, "PATH": { -"id": "PATH", -"is-read-only": false, +"id": "PATH", +"is-read-only": false, "description": ["none"] }, "CONNECTIVITY_SERVICE": { -"id": "CONNECTIVITY_SERVICE", -"is-read-only": false, +"id": "CONNECTIVITY_SERVICE", +"is-read-only": false, "description": ["none"] }, "VIRTUAL_NETWORK_SERVICE": { -"id": "VIRTUAL_NETWORK_SERVICE", -"is-read-only": false, +"id": "VIRTUAL_NETWORK_SERVICE", +"is-read-only": false, "description": ["none"] }, "PATH_COMPUTATION_SERVICE": { -"id": "PATH_COMPUTATION_SERVICE", -"is-read-only": false, +"id": "PATH_COMPUTATION_SERVICE", +"is-read-only": false, "description": ["none"] }, "NODE_EDGE_POINT": { -"id": "NODE_EDGE_POINT", -"is-read-only": false, +"id": "NODE_EDGE_POINT", +"is-read-only": false, "description": ["none"] }, "SERVICE_INTERFACE_POINT": { -"id": "SERVICE_INTERFACE_POINT", -"is-read-only": false, +"id": "SERVICE_INTERFACE_POINT", +"is-read-only": false, "description": ["none"] }, "CONNECTION_END_POINT": { -"id": "CONNECTION_END_POINT", -"is-read-only": false, +"id": "CONNECTION_END_POINT", +"is-read-only": false, "description": ["none"] }, "MAINTENANCE_ENTITY_GROUP": { -"id": "MAINTENANCE_ENTITY_GROUP", -"is-read-only": false, +"id": "MAINTENANCE_ENTITY_GROUP", +"is-read-only": false, "description": ["none"] }, "MAINTENANCE_ENTITY": { -"id": "MAINTENANCE_ENTITY", -"is-read-only": false, +"id": "MAINTENANCE_ENTITY", +"is-read-only": false, "description": ["none"] }, "MEG_END_POINT": { -"id": "MEG_END_POINT", -"is-read-only": false, +"id": "MEG_END_POINT", +"is-read-only": false, "description": ["none"] }, "MEG_INTERMEDIATE_POINT": { -"id": "MEG_INTERMEDIATE_POINT", -"is-read-only": false, +"id": "MEG_INTERMEDIATE_POINT", +"is-read-only": false, "description": ["none"] }, "SWITCH_CONTROL": { -"id": "SWITCH_CONTROL", -"is-read-only": false, +"id": "SWITCH_CONTROL", +"is-read-only": false, "description": ["none"] }, "SWITCH": { -"id": "SWITCH", -"is-read-only": false, +"id": "SWITCH", +"is-read-only": false, "description": ["none"] }, "ROUTE": { -"id": "ROUTE", -"is-read-only": false, +"id": "ROUTE", +"is-read-only": false, "description": ["none"] }, "NODE_RULE_GROUP": { -"id": "NODE_RULE_GROUP", -"is-read-only": false, +"id": "NODE_RULE_GROUP", +"is-read-only": false, "description": ["none"] }, "INTER_RULE_GROUP": { -"id": "INTER_RULE_GROUP", -"is-read-only": false, +"id": "INTER_RULE_GROUP", +"is-read-only": false, "description": ["none"] }, "RULE": { -"id": "RULE", -"is-read-only": false, +"id": "RULE", +"is-read-only": false, "description": ["none"] }, "OAM_JOB": { -"id": "OAM_JOB", -"is-read-only": false, +"id": "OAM_JOB", +"is-read-only": false, "description": ["none"] }, "object-type": { -"id": "object-type", -"is-read-only": false, +"id": "object-type", +"is-read-only": false, "description": ["The list of TAPI Global Object Class types on which Notifications can be raised."] }, "RESOURCE_OPERATION": { -"id": "RESOURCE_OPERATION", -"is-read-only": false, +"id": "RESOURCE_OPERATION", +"is-read-only": false, "description": ["none"] }, "MANAGEMENT_OPERATION": { -"id": "MANAGEMENT_OPERATION", -"is-read-only": false, +"id": "MANAGEMENT_OPERATION", +"is-read-only": false, "description": ["none"] }, "UNKNOWN": { -"id": "UNKNOWN", -"is-read-only": false, +"id": "UNKNOWN", +"is-read-only": false, "description": ["none"] }, "source-indicator": { -"id": "source-indicator", -"is-read-only": false, +"id": "source-indicator", +"is-read-only": false, "description": ["none"] }, "SUSPENDED": { -"id": "SUSPENDED", -"is-read-only": false, +"id": "SUSPENDED", +"is-read-only": false, "description": ["none"] }, "ACTIVE": { -"id": "ACTIVE", -"is-read-only": false, +"id": "ACTIVE", +"is-read-only": false, "description": ["none"] }, "subscription-state": { -"id": "subscription-state", -"is-read-only": false, +"id": "subscription-state", +"is-read-only": false, "description": ["none"] }, "CRITICAL": { -"id": "CRITICAL", -"is-read-only": false, +"id": "CRITICAL", +"is-read-only": false, "description": ["none"] }, "MAJOR": { -"id": "MAJOR", -"is-read-only": false, +"id": "MAJOR", +"is-read-only": false, "description": ["none"] }, "MINOR": { -"id": "MINOR", -"is-read-only": false, +"id": "MINOR", +"is-read-only": false, "description": ["none"] }, "WARNING": { -"id": "WARNING", -"is-read-only": false, +"id": "WARNING", +"is-read-only": false, "description": ["none"] }, "CLEARED": { -"id": "CLEARED", -"is-read-only": false, +"id": "CLEARED", +"is-read-only": false, "description": ["none"] }, "perceived-severity-type": { -"id": "perceived-severity-type", -"is-read-only": false, +"id": "perceived-severity-type", +"is-read-only": false, "description": ["none"] }, "THRESHOLD_ABOVE": { -"id": "THRESHOLD_ABOVE", -"is-read-only": false, +"id": "THRESHOLD_ABOVE", +"is-read-only": false, "description": ["none"] }, "THRESHOLD_BELOW": { -"id": "THRESHOLD_BELOW", -"is-read-only": false, +"id": "THRESHOLD_BELOW", +"is-read-only": false, "description": ["none"] }, "CLEARED": { -"id": "CLEARED", -"is-read-only": false, +"id": "CLEARED", +"is-read-only": false, "description": ["none"] }, "threshold-crossing-type": { -"id": "threshold-crossing-type", -"is-read-only": false, +"id": "threshold-crossing-type", +"is-read-only": false, "description": ["none"] }, "SERVICE_AFFECTING": { -"id": "SERVICE_AFFECTING", -"is-read-only": false, +"id": "SERVICE_AFFECTING", +"is-read-only": false, "description": ["none"] }, "NOT_SERVICE_AFFECTING": { -"id": "NOT_SERVICE_AFFECTING", -"is-read-only": false, +"id": "NOT_SERVICE_AFFECTING", +"is-read-only": false, "description": ["none"] }, "UNKNOWN": { -"id": "UNKNOWN", -"is-read-only": false, +"id": "UNKNOWN", +"is-read-only": false, "description": ["none"] }, "service-affecting": { -"id": "service-affecting", -"is-read-only": false, +"id": "service-affecting", +"is-read-only": false, "description": ["none"] }, "WARNING": { -"id": "WARNING", -"is-read-only": false, +"id": "WARNING", +"is-read-only": false, "description": ["none"] }, "CLEAR": { -"id": "CLEAR", -"is-read-only": false, +"id": "CLEAR", +"is-read-only": false, "description": ["none"] }, "perceived-tca-severity": { -"id": "perceived-tca-severity", -"is-read-only": false, +"id": "perceived-tca-severity", +"is-read-only": false, "description": ["none"] }, "get-supported-notification-types": { -"id": "get-supported-notification-types", -"is-read-only": false, +"id": "get-supported-notification-types", +"is-read-only": false, "description": ["none"] }, "supported-notification-types": { -"id": "supported-notification-types", -"is-read-only": false, +"id": "supported-notification-types", +"is-read-only": false, "description": ["none"] }, "supported-object-types": { -"id": "supported-object-types", -"is-read-only": false, +"id": "supported-object-types", +"is-read-only": false, "description": ["none"] }, "create-notification-subscription-service": { -"id": "create-notification-subscription-service", -"is-read-only": false, +"id": "create-notification-subscription-service", +"is-read-only": false, "description": ["none"] }, "subscription-filter": { -"id": "subscription-filter", -"is-read-only": false, +"id": "subscription-filter", +"is-read-only": false, "description": ["none"] }, "subscription-state": { -"id": "subscription-state", -"is-read-only": false, +"id": "subscription-state", +"is-read-only": false, "description": ["none"] }, "subscription-service": { -"id": "subscription-service", -"is-read-only": false, +"id": "subscription-service", +"is-read-only": false, "description": ["none"] }, "update-notification-subscription-service": { -"id": "update-notification-subscription-service", -"is-read-only": false, +"id": "update-notification-subscription-service", +"is-read-only": false, "description": ["none"] }, "subscription-id-or-name": { -"id": "subscription-id-or-name", -"is-read-only": false, +"id": "subscription-id-or-name", +"is-read-only": false, "description": ["none"] }, "subscription-filter": { -"id": "subscription-filter", -"is-read-only": false, +"id": "subscription-filter", +"is-read-only": false, "description": ["none"] }, "subscription-state": { -"id": "subscription-state", -"is-read-only": false, +"id": "subscription-state", +"is-read-only": false, "description": ["none"] }, "subscription-service": { -"id": "subscription-service", -"is-read-only": false, +"id": "subscription-service", +"is-read-only": false, "description": ["none"] }, "delete-notification-subscription-service": { -"id": "delete-notification-subscription-service", -"is-read-only": false, +"id": "delete-notification-subscription-service", +"is-read-only": false, "description": ["none"] }, "subscription-id-or-name": { -"id": "subscription-id-or-name", -"is-read-only": false, +"id": "subscription-id-or-name", +"is-read-only": false, "description": ["none"] }, "subscription-service": { -"id": "subscription-service", -"is-read-only": false, +"id": "subscription-service", +"is-read-only": false, "description": ["none"] }, "get-notification-subscription-service-details": { -"id": "get-notification-subscription-service-details", -"is-read-only": false, +"id": "get-notification-subscription-service-details", +"is-read-only": false, "description": ["none"] }, "subscription-id-or-name": { -"id": "subscription-id-or-name", -"is-read-only": false, +"id": "subscription-id-or-name", +"is-read-only": false, "description": ["none"] }, "subscription-service": { -"id": "subscription-service", -"is-read-only": false, +"id": "subscription-service", +"is-read-only": false, "description": ["none"] }, "get-notification-subscription-service-list": { -"id": "get-notification-subscription-service-list", -"is-read-only": false, +"id": "get-notification-subscription-service-list", +"is-read-only": false, "description": ["none"] }, "subscription-service": { -"id": "subscription-service", -"is-read-only": false, +"id": "subscription-service", +"is-read-only": false, "description": ["none"] }, "get-notification-list": { -"id": "get-notification-list", -"is-read-only": false, +"id": "get-notification-list", +"is-read-only": false, "description": ["none"] }, "subscription-id-or-name": { -"id": "subscription-id-or-name", -"is-read-only": false, +"id": "subscription-id-or-name", +"is-read-only": false, "description": ["none"] }, "time-period": { -"id": "time-period", -"is-read-only": false, +"id": "time-period", +"is-read-only": false, "description": ["none"] }, "notification": { -"id": "notification", -"is-read-only": false, +"id": "notification", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json index c6903ed35..33cd05d2c 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json @@ -1,778 +1,778 @@ -{ "schama-information": { +{ "schema-information": { "tapi-oam": { -"id": "tapi-oam", -"is-read-only": false, +"id": "tapi-oam", +"is-read-only": false, "description": ["This module contains TAPI OAM Model definitions. Source: TapiOam.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "oam-service-uuid": { -"id": "oam-service-uuid", -"is-read-only": false, +"id": "oam-service-uuid", +"is-read-only": false, "description": ["none"] }, "oam-service-ref-g": { -"id": "oam-service-ref-g", -"is-read-only": false, +"id": "oam-service-ref-g", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point-local-id": { -"id": "oam-service-end-point-local-id", -"is-read-only": false, +"id": "oam-service-end-point-local-id", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point-ref-g": { -"id": "oam-service-end-point-ref-g", -"is-read-only": false, +"id": "oam-service-end-point-ref-g", +"is-read-only": false, "description": ["none"] }, "meg-uuid": { -"id": "meg-uuid", -"is-read-only": false, +"id": "meg-uuid", +"is-read-only": false, "description": ["none"] }, "meg-ref-g": { -"id": "meg-ref-g", -"is-read-only": false, +"id": "meg-ref-g", +"is-read-only": false, "description": ["none"] }, "maintenance-entity-local-id": { -"id": "maintenance-entity-local-id", -"is-read-only": false, +"id": "maintenance-entity-local-id", +"is-read-only": false, "description": ["none"] }, "maintenance-entity-ref-g": { -"id": "maintenance-entity-ref-g", -"is-read-only": false, +"id": "maintenance-entity-ref-g", +"is-read-only": false, "description": ["none"] }, "mep-local-id": { -"id": "mep-local-id", -"is-read-only": false, +"id": "mep-local-id", +"is-read-only": false, "description": ["none"] }, "mep-ref-g": { -"id": "mep-ref-g", -"is-read-only": false, +"id": "mep-ref-g", +"is-read-only": false, "description": ["none"] }, "mip-local-id": { -"id": "mip-local-id", -"is-read-only": false, +"id": "mip-local-id", +"is-read-only": false, "description": ["none"] }, "mip-ref-g": { -"id": "mip-ref-g", -"is-read-only": false, +"id": "mip-ref-g", +"is-read-only": false, "description": ["none"] }, "oam-job-uuid": { -"id": "oam-job-uuid", -"is-read-only": false, +"id": "oam-job-uuid", +"is-read-only": false, "description": ["none"] }, "oam-job-ref-g": { -"id": "oam-job-ref-g", -"is-read-only": false, +"id": "oam-job-ref-g", +"is-read-only": false, "description": ["none"] }, "pm-current-data-local-id": { -"id": "pm-current-data-local-id", -"is-read-only": false, +"id": "pm-current-data-local-id", +"is-read-only": false, "description": ["none"] }, "pm-current-data-ref-g": { -"id": "pm-current-data-ref-g", -"is-read-only": false, +"id": "pm-current-data-ref-g", +"is-read-only": false, "description": ["none"] }, "pm-history-data-local-id": { -"id": "pm-history-data-local-id", -"is-read-only": false, +"id": "pm-history-data-local-id", +"is-read-only": false, "description": ["none"] }, "pm-history-data-ref-g": { -"id": "pm-history-data-ref-g", -"is-read-only": false, +"id": "pm-history-data-ref-g", +"is-read-only": false, "description": ["none"] }, "oam-profile-uuid": { -"id": "oam-profile-uuid", -"is-read-only": false, +"id": "oam-profile-uuid", +"is-read-only": false, "description": ["none"] }, "oam-profile-ref-g": { -"id": "oam-profile-ref-g", -"is-read-only": false, +"id": "oam-profile-ref-g", +"is-read-only": false, "description": ["none"] }, "pm-threshold-data-local-id": { -"id": "pm-threshold-data-local-id", -"is-read-only": false, +"id": "pm-threshold-data-local-id", +"is-read-only": false, "description": ["none"] }, "pm-threshold-data-ref-g": { -"id": "pm-threshold-data-ref-g", -"is-read-only": false, +"id": "pm-threshold-data-ref-g", +"is-read-only": false, "description": ["none"] }, "pm-bin-data-local-id": { -"id": "pm-bin-data-local-id", -"is-read-only": false, +"id": "pm-bin-data-local-id", +"is-read-only": false, "description": ["none"] }, "pm-bin-data-ref-g": { -"id": "pm-bin-data-ref-g", -"is-read-only": false, +"id": "pm-bin-data-ref-g", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point": { -"id": "oam-service-end-point", -"is-read-only": false, +"id": "oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "mep-identifier": { -"id": "mep-identifier", -"is-read-only": false, +"id": "mep-identifier", +"is-read-only": false, "description": ["none"] }, "peer-mep-identifier": { -"id": "peer-mep-identifier", -"is-read-only": false, +"id": "peer-mep-identifier", +"is-read-only": false, "description": ["none"] }, "mep-g": { -"id": "mep-g", -"is-read-only": false, +"id": "mep-g", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point": { -"id": "oam-service-end-point", -"is-read-only": false, +"id": "oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "oam-profile": { -"id": "oam-profile", -"is-read-only": false, +"id": "oam-profile", +"is-read-only": false, "description": ["none"] }, "pm-current-data": { -"id": "pm-current-data", -"is-read-only": false, +"id": "pm-current-data", +"is-read-only": false, "description": ["Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob. For example, typically at least one 15min and one 24hr; optionally one additional configurable (< 15min)"] }, "oam-job-type": { -"id": "oam-job-type", -"is-read-only": false, +"id": "oam-job-type", +"is-read-only": false, "description": ["none"] }, "schedule": { -"id": "schedule", -"is-read-only": false, +"id": "schedule", +"is-read-only": false, "description": ["none"] }, "creation-time": { -"id": "creation-time", -"is-read-only": false, +"id": "creation-time", +"is-read-only": false, "description": ["none"] }, "oam-job-g": { -"id": "oam-job-g", -"is-read-only": false, +"id": "oam-job-g", +"is-read-only": false, "description": ["none"] }, "me": { -"id": "me", -"is-read-only": false, +"id": "me", +"is-read-only": false, "description": ["none"] }, "mep": { -"id": "mep", -"is-read-only": false, +"id": "mep", +"is-read-only": false, "description": ["1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present) 2. ME may have 1 MEP (case of edge domaind, where the peer MEP is ouside the managed domain) 3. ME may have 2 MEPs"] }, "mip": { -"id": "mip", -"is-read-only": false, +"id": "mip", +"is-read-only": false, "description": ["ME may 0, 1, or more MIPs"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "meg-level": { -"id": "meg-level", -"is-read-only": false, +"id": "meg-level", +"is-read-only": false, "description": ["none"] }, "meg-identifier": { -"id": "meg-identifier", -"is-read-only": false, +"id": "meg-identifier", +"is-read-only": false, "description": ["none"] }, "meg-g": { -"id": "meg-g", -"is-read-only": false, +"id": "meg-g", +"is-read-only": false, "description": ["none"] }, "mep": { -"id": "mep", -"is-read-only": false, +"id": "mep", +"is-read-only": false, "description": ["none"] }, "mip": { -"id": "mip", -"is-read-only": false, +"id": "mip", +"is-read-only": false, "description": ["none"] }, "connection-route": { -"id": "connection-route", -"is-read-only": false, +"id": "connection-route", +"is-read-only": false, "description": ["none"] }, "maintenance-entity-g": { -"id": "maintenance-entity-g", -"is-read-only": false, +"id": "maintenance-entity-g", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point": { -"id": "oam-service-end-point", -"is-read-only": false, +"id": "oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "mip-g": { -"id": "mip-g", -"is-read-only": false, +"id": "mip-g", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "meg": { -"id": "meg", -"is-read-only": false, +"id": "meg", +"is-read-only": false, "description": ["none"] }, "oam-profile": { -"id": "oam-profile", -"is-read-only": false, +"id": "oam-profile", +"is-read-only": false, "description": ["none"] }, "oam-service-g": { -"id": "oam-service-g", -"is-read-only": false, +"id": "oam-service-g", +"is-read-only": false, "description": ["none"] }, "oam-service": { -"id": "oam-service", -"is-read-only": false, +"id": "oam-service", +"is-read-only": false, "description": ["none"] }, "meg": { -"id": "meg", -"is-read-only": false, +"id": "meg", +"is-read-only": false, "description": ["none"] }, "oam-job": { -"id": "oam-job", -"is-read-only": false, +"id": "oam-job", +"is-read-only": false, "description": ["none"] }, "oam-profile": { -"id": "oam-profile", -"is-read-only": false, +"id": "oam-profile", +"is-read-only": false, "description": ["none"] }, "oam-context-g": { -"id": "oam-context-g", -"is-read-only": false, +"id": "oam-context-g", +"is-read-only": false, "description": ["none"] }, "service-interface-point": { -"id": "service-interface-point", -"is-read-only": false, +"id": "service-interface-point", +"is-read-only": false, "description": ["none"] }, "connectivity-service-end-point": { -"id": "connectivity-service-end-point", -"is-read-only": false, +"id": "connectivity-service-end-point", +"is-read-only": false, "description": ["none"] }, "mep": { -"id": "mep", -"is-read-only": false, +"id": "mep", +"is-read-only": false, "description": ["none"] }, "mip": { -"id": "mip", -"is-read-only": false, +"id": "mip", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point-g": { -"id": "oam-service-end-point-g", -"is-read-only": false, +"id": "oam-service-end-point-g", +"is-read-only": false, "description": ["none"] }, "mip": { -"id": "mip", -"is-read-only": false, +"id": "mip", +"is-read-only": false, "description": ["none"] }, "mep": { -"id": "mep", -"is-read-only": false, +"id": "mep", +"is-read-only": false, "description": ["none"] }, "mep-mip-list-g": { -"id": "mep-mip-list-g", -"is-read-only": false, +"id": "mep-mip-list-g", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "meg-level": { -"id": "meg-level", -"is-read-only": false, +"id": "meg-level", +"is-read-only": false, "description": ["none"] }, "oam-constraint-g": { -"id": "oam-constraint-g", -"is-read-only": false, +"id": "oam-constraint-g", +"is-read-only": false, "description": ["none"] }, "pm-history-data": { -"id": "pm-history-data", -"is-read-only": false, +"id": "pm-history-data", +"is-read-only": false, "description": ["in case of 24hr Current Data, at least 1 History Data. In case of 15min Current Data, at least 16 History Data. In case of <15min, the number of History Data shall be able to cover a span of 4 hours."] }, "granularity-period": { -"id": "granularity-period", -"is-read-only": false, +"id": "granularity-period", +"is-read-only": false, "description": ["none"] }, "timestamp": { -"id": "timestamp", -"is-read-only": false, +"id": "timestamp", +"is-read-only": false, "description": ["This attribute indicates the start of the current monitoring interval. The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval."] }, "elapsed-time": { -"id": "elapsed-time", -"is-read-only": false, +"id": "elapsed-time", +"is-read-only": false, "description": ["none"] }, "suspect-interval-flag": { -"id": "suspect-interval-flag", -"is-read-only": false, +"id": "suspect-interval-flag", +"is-read-only": false, "description": ["This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are: – Suspect data were detected by the actual resource doing data collection. – Transition of the administrativeState attribute to/from the 'lock' state. – Transition of the operationalState to/from the 'disabled' state. – Scheduler setting that inhibits the collection function. – The performance counters were reset during the interval. – The currentData (or subclass) object instance was created during the monitoring period."] }, "pm-current-data-g": { -"id": "pm-current-data-g", -"is-read-only": false, +"id": "pm-current-data-g", +"is-read-only": false, "description": ["none"] }, "granularity-period": { -"id": "granularity-period", -"is-read-only": false, +"id": "granularity-period", +"is-read-only": false, "description": ["none"] }, "period-end-time": { -"id": "period-end-time", -"is-read-only": false, +"id": "period-end-time", +"is-read-only": false, "description": ["none"] }, "suspect-interval-flag": { -"id": "suspect-interval-flag", -"is-read-only": false, +"id": "suspect-interval-flag", +"is-read-only": false, "description": ["This attribute indicates that the performance data may not be reliable."] }, "pm-history-data-g": { -"id": "pm-history-data-g", -"is-read-only": false, +"id": "pm-history-data-g", +"is-read-only": false, "description": ["none"] }, "pm-threshold-data": { -"id": "pm-threshold-data", -"is-read-only": false, +"id": "pm-threshold-data", +"is-read-only": false, "description": ["none"] }, "pm-bin-data": { -"id": "pm-bin-data", -"is-read-only": false, +"id": "pm-bin-data", +"is-read-only": false, "description": ["none"] }, "oam-profile-g": { -"id": "oam-profile-g", -"is-read-only": false, +"id": "oam-profile-g", +"is-read-only": false, "description": ["none"] }, "granularity-period": { -"id": "granularity-period", -"is-read-only": false, +"id": "granularity-period", +"is-read-only": false, "description": ["none"] }, "is-transient": { -"id": "is-transient", -"is-read-only": false, +"id": "is-transient", +"is-read-only": false, "description": ["none"] }, "pm-threshold-data-g": { -"id": "pm-threshold-data-g", -"is-read-only": false, +"id": "pm-threshold-data-g", +"is-read-only": false, "description": ["none"] }, "granularity-period": { -"id": "granularity-period", -"is-read-only": false, +"id": "granularity-period", +"is-read-only": false, "description": ["none"] }, "pm-bin-data-g": { -"id": "pm-bin-data-g", -"is-read-only": false, +"id": "pm-bin-data-g", +"is-read-only": false, "description": ["none"] }, "OAM_JOB_TYPE": { -"id": "OAM_JOB_TYPE", -"is-read-only": false, +"id": "OAM_JOB_TYPE", +"is-read-only": false, "description": ["none"] }, "oam-job-type": { -"id": "oam-job-type", -"is-read-only": false, +"id": "oam-job-type", +"is-read-only": false, "description": ["none"] }, "create-oam-service": { -"id": "create-oam-service", -"is-read-only": false, +"id": "create-oam-service", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "oam-constraint": { -"id": "oam-constraint", -"is-read-only": false, +"id": "oam-constraint", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "delete-oam-service": { -"id": "delete-oam-service", -"is-read-only": false, +"id": "delete-oam-service", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "get-oam-service": { -"id": "get-oam-service", -"is-read-only": false, +"id": "get-oam-service", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "create-oam-job": { -"id": "create-oam-job", -"is-read-only": false, +"id": "create-oam-job", +"is-read-only": false, "description": ["none"] }, "oam-job-type": { -"id": "oam-job-type", -"is-read-only": false, +"id": "oam-job-type", +"is-read-only": false, "description": ["none"] }, "oam-service-end-point": { -"id": "oam-service-end-point", -"is-read-only": false, +"id": "oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "oam-profile": { -"id": "oam-profile", -"is-read-only": false, +"id": "oam-profile", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "schedule": { -"id": "schedule", -"is-read-only": false, +"id": "schedule", +"is-read-only": false, "description": ["none"] }, "oam-job": { -"id": "oam-job", -"is-read-only": false, +"id": "oam-job", +"is-read-only": false, "description": ["none"] }, "get-oam-job": { -"id": "get-oam-job", -"is-read-only": false, +"id": "get-oam-job", +"is-read-only": false, "description": ["none"] }, "job-id": { -"id": "job-id", -"is-read-only": false, +"id": "job-id", +"is-read-only": false, "description": ["none"] }, "oam-job": { -"id": "oam-job", -"is-read-only": false, +"id": "oam-job", +"is-read-only": false, "description": ["none"] }, "get-oam-service-list": { -"id": "get-oam-service-list", -"is-read-only": false, +"id": "get-oam-service-list", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "get-meg": { -"id": "get-meg", -"is-read-only": false, +"id": "get-meg", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "meg": { -"id": "meg", -"is-read-only": false, +"id": "meg", +"is-read-only": false, "description": ["none"] }, "update-oam-service": { -"id": "update-oam-service", -"is-read-only": false, +"id": "update-oam-service", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "oam-constraint": { -"id": "oam-constraint", -"is-read-only": false, +"id": "oam-constraint", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "delete-oam-job": { -"id": "delete-oam-job", -"is-read-only": false, +"id": "delete-oam-job", +"is-read-only": false, "description": ["none"] }, "job-id": { -"id": "job-id", -"is-read-only": false, +"id": "job-id", +"is-read-only": false, "description": ["none"] }, "update-oam-job": { -"id": "update-oam-job", -"is-read-only": false, +"id": "update-oam-job", +"is-read-only": false, "description": ["none"] }, "job-id": { -"id": "job-id", -"is-read-only": false, +"id": "job-id", +"is-read-only": false, "description": ["none"] }, "oam-profile": { -"id": "oam-profile", -"is-read-only": false, +"id": "oam-profile", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "schedule": { -"id": "schedule", -"is-read-only": false, +"id": "schedule", +"is-read-only": false, "description": ["none"] }, "oam-job": { -"id": "oam-job", -"is-read-only": false, +"id": "oam-job", +"is-read-only": false, "description": ["none"] }, "create-oam-service-end-point": { -"id": "create-oam-service-end-point", -"is-read-only": false, +"id": "create-oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "sip-id": { -"id": "sip-id", -"is-read-only": false, +"id": "sip-id", +"is-read-only": false, "description": ["none"] }, "c-sep-id": { -"id": "c-sep-id", -"is-read-only": false, +"id": "c-sep-id", +"is-read-only": false, "description": ["none"] }, "layer": { -"id": "layer", -"is-read-only": false, +"id": "layer", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "delete-oam-service-end-point": { -"id": "delete-oam-service-end-point", -"is-read-only": false, +"id": "delete-oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "o-sep-id": { -"id": "o-sep-id", -"is-read-only": false, +"id": "o-sep-id", +"is-read-only": false, "description": ["none"] }, "update-oam-service-end-point": { -"id": "update-oam-service-end-point", -"is-read-only": false, +"id": "update-oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "o-sep-id": { -"id": "o-sep-id", -"is-read-only": false, +"id": "o-sep-id", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "get-oam-service-end-point": { -"id": "get-oam-service-end-point", -"is-read-only": false, +"id": "get-oam-service-end-point", +"is-read-only": false, "description": ["none"] }, "service-id": { -"id": "service-id", -"is-read-only": false, +"id": "service-id", +"is-read-only": false, "description": ["none"] }, "o-sep-id": { -"id": "o-sep-id", -"is-read-only": false, +"id": "o-sep-id", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json index b59a737a4..c3ae65d32 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json @@ -1,733 +1,733 @@ -{ "schama-information": { +{ "schema-information": { "tapi-odu": { -"id": "tapi-odu", -"is-read-only": false, +"id": "tapi-odu", +"is-read-only": false, "description": ["This module contains TAPI Odu Model definitions. Source: TapiOdu.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "opu-tributary-slot-size": { -"id": "opu-tributary-slot-size", -"is-read-only": false, +"id": "opu-tributary-slot-size", +"is-read-only": false, "description": ["This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP."] }, "auto-payload-type": { -"id": "auto-payload-type", -"is-read-only": false, +"id": "auto-payload-type", +"is-read-only": false, "description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied."] }, "configured-client-type": { -"id": "configured-client-type", -"is-read-only": false, +"id": "configured-client-type", +"is-read-only": false, "description": ["This attribute configures the type of the client CTP of the server ODU TTP."] }, "configured-mapping-type": { -"id": "configured-mapping-type", -"is-read-only": false, +"id": "configured-mapping-type", +"is-read-only": false, "description": ["This attributes indicates the configured mapping type."] }, "accepted-payload-type": { -"id": "accepted-payload-type", -"is-read-only": false, +"id": "accepted-payload-type", +"is-read-only": false, "description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. This attribute is a 2-digit Hex code that indicates the new accepted payload type. Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE."] }, "odu-termination-and-client-adaptation-pac-g": { -"id": "odu-termination-and-client-adaptation-pac-g", -"is-read-only": false, +"id": "odu-termination-and-client-adaptation-pac-g", +"is-read-only": false, "description": ["This Pac contains the attributes associated with the client adaptation function of the server layer TTP It is present only if the CEP contains a TTP"] }, "odu-common": { -"id": "odu-common", -"is-read-only": false, +"id": "odu-common", +"is-read-only": false, "description": ["none"] }, "odu-term-and-adapter": { -"id": "odu-term-and-adapter", -"is-read-only": false, +"id": "odu-term-and-adapter", +"is-read-only": false, "description": ["none"] }, "odu-ctp": { -"id": "odu-ctp", -"is-read-only": false, +"id": "odu-ctp", +"is-read-only": false, "description": ["none"] }, "odu-protection": { -"id": "odu-protection", -"is-read-only": false, +"id": "odu-protection", +"is-read-only": false, "description": ["none"] }, "odu-connection-end-point-spec-g": { -"id": "odu-connection-end-point-spec-g", -"is-read-only": false, +"id": "odu-connection-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "client-capacity": { -"id": "client-capacity", -"is-read-only": false, +"id": "client-capacity", +"is-read-only": false, "description": ["none"] }, "max-client-instances": { -"id": "max-client-instances", -"is-read-only": false, +"id": "max-client-instances", +"is-read-only": false, "description": ["none"] }, "max-client-size": { -"id": "max-client-size", -"is-read-only": false, +"id": "max-client-size", +"is-read-only": false, "description": ["none"] }, "odu-pool-pac-g": { -"id": "odu-pool-pac-g", -"is-read-only": false, +"id": "odu-pool-pac-g", +"is-read-only": false, "description": ["none"] }, "odu-pool": { -"id": "odu-pool", -"is-read-only": false, +"id": "odu-pool", +"is-read-only": false, "description": ["none"] }, "odu-node-edge-point-spec-g": { -"id": "odu-node-edge-point-spec-g", -"is-read-only": false, +"id": "odu-node-edge-point-spec-g", +"is-read-only": false, "description": ["none"] }, "tributary-slot-list": { -"id": "tributary-slot-list", -"is-read-only": false, +"id": "tributary-slot-list", +"is-read-only": false, "description": ["This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly)."] }, "tributary-port-number": { -"id": "tributary-port-number", -"is-read-only": false, +"id": "tributary-port-number", +"is-read-only": false, "description": ["This attribute identifies the tributary port number that is associated with the ODU CTP. range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU. In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero. In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016. In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016. In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016."] }, "accepted-msi": { -"id": "accepted-msi", -"is-read-only": false, +"id": "accepted-msi", +"is-read-only": false, "description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function."] }, "odu-ctp-pac-g": { -"id": "odu-ctp-pac-g", -"is-read-only": false, +"id": "odu-ctp-pac-g", +"is-read-only": false, "description": ["This Pac contains the attributes associated with the CTP It is present only if the CEP contains a CTP"] }, "odu-mep": { -"id": "odu-mep", -"is-read-only": false, +"id": "odu-mep", +"is-read-only": false, "description": ["none"] }, "odu-ncm": { -"id": "odu-ncm", -"is-read-only": false, +"id": "odu-ncm", +"is-read-only": false, "description": ["none"] }, "odu-tcm": { -"id": "odu-tcm", -"is-read-only": false, +"id": "odu-tcm", +"is-read-only": false, "description": ["none"] }, "odu-defect": { -"id": "odu-defect", -"is-read-only": false, +"id": "odu-defect", +"is-read-only": false, "description": ["none"] }, "odu-pm": { -"id": "odu-pm", -"is-read-only": false, +"id": "odu-pm", +"is-read-only": false, "description": ["none"] }, "odu-mep-spec-g": { -"id": "odu-mep-spec-g", -"is-read-only": false, +"id": "odu-mep-spec-g", +"is-read-only": false, "description": ["none"] }, "aps-enable": { -"id": "aps-enable", -"is-read-only": false, +"id": "aps-enable", +"is-read-only": false, "description": ["This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function."] }, "aps-level": { -"id": "aps-level", -"is-read-only": false, +"id": "aps-level", +"is-read-only": false, "description": ["This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively."] }, "odu-protection-pac-g": { -"id": "odu-protection-pac-g", -"is-read-only": false, +"id": "odu-protection-pac-g", +"is-read-only": false, "description": ["none"] }, "tcm-fields-in-use": { -"id": "tcm-fields-in-use", -"is-read-only": false, +"id": "tcm-fields-in-use", +"is-read-only": false, "description": ["This attribute indicates the used TCM fields of the ODU OH."] }, "odu-ncm-pac-g": { -"id": "odu-ncm-pac-g", -"is-read-only": false, +"id": "odu-ncm-pac-g", +"is-read-only": false, "description": ["none"] }, "tcm-extension": { -"id": "tcm-extension", -"is-read-only": false, +"id": "tcm-extension", +"is-read-only": false, "description": ["none"] }, "tcm-mode": { -"id": "tcm-mode", -"is-read-only": false, +"id": "tcm-mode", +"is-read-only": false, "description": ["This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent."] }, "codirectional": { -"id": "codirectional", -"is-read-only": false, +"id": "codirectional", +"is-read-only": false, "description": ["This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional."] }, "ac-status-source": { -"id": "ac-status-source", -"is-read-only": false, +"id": "ac-status-source", +"is-read-only": false, "description": ["This attribute indicates the status of the accepted TCM."] }, "ac-status-sink": { -"id": "ac-status-sink", -"is-read-only": false, +"id": "ac-status-sink", +"is-read-only": false, "description": ["This attribute indicates the status of the accepted TCM."] }, "admin-state-source": { -"id": "admin-state-source", -"is-read-only": false, +"id": "admin-state-source", +"is-read-only": false, "description": ["This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction."] }, "admin-state-sink": { -"id": "admin-state-sink", -"is-read-only": false, +"id": "admin-state-sink", +"is-read-only": false, "description": ["This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction."] }, "odu-tcm-mep-pac-g": { -"id": "odu-tcm-mep-pac-g", -"is-read-only": false, +"id": "odu-tcm-mep-pac-g", +"is-read-only": false, "description": ["none"] }, "odu-mip": { -"id": "odu-mip", -"is-read-only": false, +"id": "odu-mip", +"is-read-only": false, "description": ["none"] }, "odu-ncm": { -"id": "odu-ncm", -"is-read-only": false, +"id": "odu-ncm", +"is-read-only": false, "description": ["none"] }, "odu-tcm": { -"id": "odu-tcm", -"is-read-only": false, +"id": "odu-tcm", +"is-read-only": false, "description": ["none"] }, "odu-pm": { -"id": "odu-pm", -"is-read-only": false, +"id": "odu-pm", +"is-read-only": false, "description": ["none"] }, "odu-defect": { -"id": "odu-defect", -"is-read-only": false, +"id": "odu-defect", +"is-read-only": false, "description": ["none"] }, "odu-mip-spec-g": { -"id": "odu-mip-spec-g", -"is-read-only": false, +"id": "odu-mip-spec-g", +"is-read-only": false, "description": ["none"] }, "acti": { -"id": "acti", -"is-read-only": false, +"id": "acti", +"is-read-only": false, "description": ["The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail."] }, "ex-dapi": { -"id": "ex-dapi", -"is-read-only": false, +"id": "ex-dapi", +"is-read-only": false, "description": ["The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."] }, "ex-sapi": { -"id": "ex-sapi", -"is-read-only": false, +"id": "ex-sapi", +"is-read-only": false, "description": ["The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."] }, "tim-act-disabled": { -"id": "tim-act-disabled", -"is-read-only": false, +"id": "tim-act-disabled", +"is-read-only": false, "description": ["This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink."] }, "tim-det-mode": { -"id": "tim-det-mode", -"is-read-only": false, +"id": "tim-det-mode", +"is-read-only": false, "description": ["This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI"] }, "deg-m": { -"id": "deg-m", -"is-read-only": false, +"id": "deg-m", +"is-read-only": false, "description": ["This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected."] }, "deg-thr": { -"id": "deg-thr", -"is-read-only": false, +"id": "deg-thr", +"is-read-only": false, "description": ["This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."] }, "odu-mip-pac-g": { -"id": "odu-mip-pac-g", -"is-read-only": false, +"id": "odu-mip-pac-g", +"is-read-only": false, "description": ["none"] }, "tcm-field": { -"id": "tcm-field", -"is-read-only": false, +"id": "tcm-field", +"is-read-only": false, "description": ["This attribute indicates the tandem connection monitoring field of the ODU OH."] }, "odu-tcm-mip-pac-g": { -"id": "odu-tcm-mip-pac-g", -"is-read-only": false, +"id": "odu-tcm-mip-pac-g", +"is-read-only": false, "description": ["none"] }, "dm-source": { -"id": "dm-source", -"is-read-only": false, +"id": "dm-source", +"is-read-only": false, "description": ["This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue."] }, "dm-value": { -"id": "dm-value", -"is-read-only": false, +"id": "dm-value", +"is-read-only": false, "description": ["This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1."] }, "txti": { -"id": "txti", -"is-read-only": false, +"id": "txti", +"is-read-only": false, "description": ["The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission."] }, "odu-mep-pac-g": { -"id": "odu-mep-pac-g", -"is-read-only": false, +"id": "odu-mep-pac-g", +"is-read-only": false, "description": ["none"] }, "odu-type": { -"id": "odu-type", -"is-read-only": false, +"id": "odu-type", +"is-read-only": false, "description": ["This attribute specifies the type of the ODU termination point."] }, "odu-rate": { -"id": "odu-rate", -"is-read-only": false, +"id": "odu-rate", +"is-read-only": false, "description": ["This attribute indicates the rate of the ODU terminatino point. This attribute is Set at create; i.e., once created it cannot be changed directly. In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute)."] }, "odu-rate-tolerance": { -"id": "odu-rate-tolerance", -"is-read-only": false, +"id": "odu-rate-tolerance", +"is-read-only": false, "description": ["This attribute indicates the rate tolerance of the ODU termination point. Valid values are real value in the unit of ppm. Standardized values are defined in Table 7-2/G.709."] }, "odu-common-pac-g": { -"id": "odu-common-pac-g", -"is-read-only": false, +"id": "odu-common-pac-g", +"is-read-only": false, "description": ["none"] }, "n-bbe": { -"id": "n-bbe", -"is-read-only": false, +"id": "n-bbe", +"is-read-only": false, "description": ["Near-end Background Block Error"] }, "f-bbe": { -"id": "f-bbe", -"is-read-only": false, +"id": "f-bbe", +"is-read-only": false, "description": ["Far-end Background Block Error"] }, "n-ses": { -"id": "n-ses", -"is-read-only": false, +"id": "n-ses", +"is-read-only": false, "description": ["Near-end Severely Errored Second"] }, "f-ses": { -"id": "f-ses", -"is-read-only": false, +"id": "f-ses", +"is-read-only": false, "description": ["Far-end Severely Errored Second"] }, "uas": { -"id": "uas", -"is-read-only": false, +"id": "uas", +"is-read-only": false, "description": ["UnAvailable Second"] }, "odu-pm-pac-g": { -"id": "odu-pm-pac-g", -"is-read-only": false, +"id": "odu-pm-pac-g", +"is-read-only": false, "description": ["Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class. PM data attributes: fBbe, fSes, nBbe, nSes. uas"] }, "bdi": { -"id": "bdi", -"is-read-only": false, +"id": "bdi", +"is-read-only": false, "description": ["Backward Defect Indication"] }, "deg": { -"id": "deg", -"is-read-only": false, +"id": "deg", +"is-read-only": false, "description": ["Signal Degraded"] }, "lck": { -"id": "lck", -"is-read-only": false, +"id": "lck", +"is-read-only": false, "description": ["Locked"] }, "oci": { -"id": "oci", -"is-read-only": false, +"id": "oci", +"is-read-only": false, "description": ["Open Connection Indicator"] }, "ssf": { -"id": "ssf", -"is-read-only": false, +"id": "ssf", +"is-read-only": false, "description": ["Server Signal Failure"] }, "tim": { -"id": "tim", -"is-read-only": false, +"id": "tim", +"is-read-only": false, "description": ["Trail Trace Identifier Mismatch"] }, "odu-defect-pac-g": { -"id": "odu-defect-pac-g", -"is-read-only": false, +"id": "odu-defect-pac-g", +"is-read-only": false, "description": ["The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised."] }, "ODU_TYPE": { -"id": "ODU_TYPE", -"is-read-only": false, +"id": "ODU_TYPE", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU0": { -"id": "ODU_TYPE_ODU0", -"is-read-only": false, +"id": "ODU_TYPE_ODU0", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU1": { -"id": "ODU_TYPE_ODU1", -"is-read-only": false, +"id": "ODU_TYPE_ODU1", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU2": { -"id": "ODU_TYPE_ODU2", -"is-read-only": false, +"id": "ODU_TYPE_ODU2", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU2E": { -"id": "ODU_TYPE_ODU2E", -"is-read-only": false, +"id": "ODU_TYPE_ODU2E", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU3": { -"id": "ODU_TYPE_ODU3", -"is-read-only": false, +"id": "ODU_TYPE_ODU3", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU4": { -"id": "ODU_TYPE_ODU4", -"is-read-only": false, +"id": "ODU_TYPE_ODU4", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU_FLEX": { -"id": "ODU_TYPE_ODU_FLEX", -"is-read-only": false, +"id": "ODU_TYPE_ODU_FLEX", +"is-read-only": false, "description": ["none"] }, "ODU_TYPE_ODU_CN": { -"id": "ODU_TYPE_ODU_CN", -"is-read-only": false, +"id": "ODU_TYPE_ODU_CN", +"is-read-only": false, "description": ["none"] }, "odu-type": { -"id": "odu-type", -"is-read-only": false, +"id": "odu-type", +"is-read-only": false, "description": ["none"] }, "AMP": { -"id": "AMP", -"is-read-only": false, +"id": "AMP", +"is-read-only": false, "description": ["none"] }, "BMP": { -"id": "BMP", -"is-read-only": false, +"id": "BMP", +"is-read-only": false, "description": ["none"] }, "GFP-F": { -"id": "GFP-F", -"is-read-only": false, +"id": "GFP-F", +"is-read-only": false, "description": ["none"] }, "GMP": { -"id": "GMP", -"is-read-only": false, +"id": "GMP", +"is-read-only": false, "description": ["none"] }, "TTP_GFP_BMP": { -"id": "TTP_GFP_BMP", -"is-read-only": false, +"id": "TTP_GFP_BMP", +"is-read-only": false, "description": ["none"] }, "NULL": { -"id": "NULL", -"is-read-only": false, +"id": "NULL", +"is-read-only": false, "description": ["none"] }, "mapping-type": { -"id": "mapping-type", -"is-read-only": false, +"id": "mapping-type", +"is-read-only": false, "description": ["none"] }, "DAPI": { -"id": "DAPI", -"is-read-only": false, +"id": "DAPI", +"is-read-only": false, "description": ["none"] }, "SAPI": { -"id": "SAPI", -"is-read-only": false, +"id": "SAPI", +"is-read-only": false, "description": ["none"] }, "BOTH": { -"id": "BOTH", -"is-read-only": false, +"id": "BOTH", +"is-read-only": false, "description": ["none"] }, "OFF": { -"id": "OFF", -"is-read-only": false, +"id": "OFF", +"is-read-only": false, "description": ["none"] }, "tim-det-mo": { -"id": "tim-det-mo", -"is-read-only": false, +"id": "tim-det-mo", +"is-read-only": false, "description": ["List of modes for trace identifier mismatch detection."] }, "1G25": { -"id": "1G25", -"is-read-only": false, +"id": "1G25", +"is-read-only": false, "description": ["none"] }, "2G5": { -"id": "2G5", -"is-read-only": false, +"id": "2G5", +"is-read-only": false, "description": ["none"] }, "odu-slot-size": { -"id": "odu-slot-size", -"is-read-only": false, +"id": "odu-slot-size", +"is-read-only": false, "description": ["none"] }, "named-payload-type": { -"id": "named-payload-type", -"is-read-only": false, +"id": "named-payload-type", +"is-read-only": false, "description": ["none"] }, "hex-payload-type": { -"id": "hex-payload-type", -"is-read-only": false, +"id": "hex-payload-type", +"is-read-only": false, "description": ["none"] }, "odu-payload-type-g": { -"id": "odu-payload-type-g", -"is-read-only": false, +"id": "odu-payload-type-g", +"is-read-only": false, "description": ["none"] }, "UNKNOWN": { -"id": "UNKNOWN", -"is-read-only": false, +"id": "UNKNOWN", +"is-read-only": false, "description": ["none"] }, "UNINTERPRETABLE": { -"id": "UNINTERPRETABLE", -"is-read-only": false, +"id": "UNINTERPRETABLE", +"is-read-only": false, "description": ["none"] }, "odu-named-payload-type": { -"id": "odu-named-payload-type", -"is-read-only": false, +"id": "odu-named-payload-type", +"is-read-only": false, "description": ["none"] }, "deg-thr-value": { -"id": "deg-thr-value", -"is-read-only": false, +"id": "deg-thr-value", +"is-read-only": false, "description": ["Percentage of detected errored blocks"] }, "deg-thr-type": { -"id": "deg-thr-type", -"is-read-only": false, +"id": "deg-thr-type", +"is-read-only": false, "description": ["Number of errored blocks"] }, "percentage-granularity": { -"id": "percentage-granularity", -"is-read-only": false, +"id": "percentage-granularity", +"is-read-only": false, "description": ["none"] }, "deg-thr-g": { -"id": "deg-thr-g", -"is-read-only": false, +"id": "deg-thr-g", +"is-read-only": false, "description": ["Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. degThrValue when type is PERCENTAGE: percentageGranularity is used to indicate the number of decimal points So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100% So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100% degThrValue when type is NUMBER_ERROR_BLOCKS: Number of Errored Blocks is captured in an integer value."] }, "PERCENTAGE": { -"id": "PERCENTAGE", -"is-read-only": false, +"id": "PERCENTAGE", +"is-read-only": false, "description": ["Choice of % or Number of errored blocks"] }, "NUMBER_ERRORED_BLOCKS": { -"id": "NUMBER_ERRORED_BLOCKS", -"is-read-only": false, +"id": "NUMBER_ERRORED_BLOCKS", +"is-read-only": false, "description": ["Number of % or blocks"] }, "deg-thr-type": { -"id": "deg-thr-type", -"is-read-only": false, +"id": "deg-thr-type", +"is-read-only": false, "description": ["The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."] }, "NO_SOURCE_TC": { -"id": "NO_SOURCE_TC", -"is-read-only": false, +"id": "NO_SOURCE_TC", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection"] }, "IN_USE_WITHOUT_IAE": { -"id": "IN_USE_WITHOUT_IAE", -"is-read-only": false, +"id": "IN_USE_WITHOUT_IAE", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 0 0 1, In use without IAE (Incoming Alignment Error)"] }, "IN_USE_WITH_IAE": { -"id": "IN_USE_WITH_IAE", -"is-read-only": false, +"id": "IN_USE_WITH_IAE", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)"] }, "RESERVED_1": { -"id": "RESERVED_1", -"is-read-only": false, +"id": "RESERVED_1", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization"] }, "RESERVED_2": { -"id": "RESERVED_2", -"is-read-only": false, +"id": "RESERVED_2", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization"] }, "LCK": { -"id": "LCK", -"is-read-only": false, +"id": "LCK", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK"] }, "OCI": { -"id": "OCI", -"is-read-only": false, +"id": "OCI", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI"] }, "AIS": { -"id": "AIS", -"is-read-only": false, +"id": "AIS", +"is-read-only": false, "description": ["TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS"] }, "tcm-status": { -"id": "tcm-status", -"is-read-only": false, +"id": "tcm-status", +"is-read-only": false, "description": ["See Table 15-5/G.709/Y.1331"] }, "OPERATIONAL": { -"id": "OPERATIONAL", -"is-read-only": false, +"id": "OPERATIONAL", +"is-read-only": false, "description": ["none"] }, "TRANSPARENT": { -"id": "TRANSPARENT", -"is-read-only": false, +"id": "TRANSPARENT", +"is-read-only": false, "description": ["none"] }, "MONITOR": { -"id": "MONITOR", -"is-read-only": false, +"id": "MONITOR", +"is-read-only": false, "description": ["none"] }, "tcm-mode": { -"id": "tcm-mode", -"is-read-only": false, +"id": "tcm-mode", +"is-read-only": false, "description": ["List of value modes for the sink side of the tandem connection monitoring function."] }, "INTRUSIVE": { -"id": "INTRUSIVE", -"is-read-only": false, +"id": "INTRUSIVE", +"is-read-only": false, "description": ["none"] }, "NON-INTRUSIVE": { -"id": "NON-INTRUSIVE", -"is-read-only": false, +"id": "NON-INTRUSIVE", +"is-read-only": false, "description": ["none"] }, "tcm-monitoring": { -"id": "tcm-monitoring", -"is-read-only": false, +"id": "tcm-monitoring", +"is-read-only": false, "description": ["Monitoring types for the tandem connection monitoring function."] }, "NORMAL": { -"id": "NORMAL", -"is-read-only": false, +"id": "NORMAL", +"is-read-only": false, "description": ["none"] }, "PASS-THROUGH": { -"id": "PASS-THROUGH", -"is-read-only": false, +"id": "PASS-THROUGH", +"is-read-only": false, "description": ["none"] }, "ERASE": { -"id": "ERASE", -"is-read-only": false, +"id": "ERASE", +"is-read-only": false, "description": ["none"] }, "tcm-extension": { -"id": "tcm-extension", -"is-read-only": false, +"id": "tcm-extension", +"is-read-only": false, "description": ["none"] }, "ONES": { -"id": "ONES", -"is-read-only": false, +"id": "ONES", +"is-read-only": false, "description": ["none"] }, "ONE_TENTHS": { -"id": "ONE_TENTHS", -"is-read-only": false, +"id": "ONE_TENTHS", +"is-read-only": false, "description": ["value * (1/10)"] }, "ONE_HUNDREDTHS": { -"id": "ONE_HUNDREDTHS", -"is-read-only": false, +"id": "ONE_HUNDREDTHS", +"is-read-only": false, "description": ["value * (1/100)"] }, "ONE_THOUSANDTHS": { -"id": "ONE_THOUSANDTHS", -"is-read-only": false, +"id": "ONE_THOUSANDTHS", +"is-read-only": false, "description": ["value * (1/1000)"] }, "percentage-granularity": { -"id": "percentage-granularity", -"is-read-only": false, +"id": "percentage-granularity", +"is-read-only": false, "description": ["none"] }, "bidirectional": { -"id": "bidirectional", -"is-read-only": false, +"id": "bidirectional", +"is-read-only": false, "description": ["none"] }, "uas": { -"id": "uas", -"is-read-only": false, +"id": "uas", +"is-read-only": false, "description": ["none"] }, "nuas": { -"id": "nuas", -"is-read-only": false, +"id": "nuas", +"is-read-only": false, "description": ["none"] }, "fuas": { -"id": "fuas", -"is-read-only": false, +"id": "fuas", +"is-read-only": false, "description": ["none"] }, "uas-choice-g": { -"id": "uas-choice-g", -"is-read-only": false, +"id": "uas-choice-g", +"is-read-only": false, "description": ["If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json index 4cf6b1c30..c969c91b1 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json @@ -1,403 +1,403 @@ -{ "schama-information": { +{ "schema-information": { "tapi-path-computation": { -"id": "tapi-path-computation", -"is-read-only": false, +"id": "tapi-path-computation", +"is-read-only": false, "description": ["This module contains TAPI Path Computation Model definitions. Source: TapiPathComputation.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "path-uuid": { -"id": "path-uuid", -"is-read-only": false, +"id": "path-uuid", +"is-read-only": false, "description": ["none"] }, "path-ref-g": { -"id": "path-ref-g", -"is-read-only": false, +"id": "path-ref-g", +"is-read-only": false, "description": ["none"] }, "link": { -"id": "link", -"is-read-only": false, +"id": "link", +"is-read-only": false, "description": ["none"] }, "routing-constraint": { -"id": "routing-constraint", -"is-read-only": false, +"id": "routing-constraint", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "path-g": { -"id": "path-g", -"is-read-only": false, +"id": "path-g", +"is-read-only": false, "description": ["Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes"] }, "service-interface-point": { -"id": "service-interface-point", -"is-read-only": false, +"id": "service-interface-point", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "layer-protocol-qualifier": { -"id": "layer-protocol-qualifier", -"is-read-only": false, +"id": "layer-protocol-qualifier", +"is-read-only": false, "description": ["none"] }, "capacity": { -"id": "capacity", -"is-read-only": false, +"id": "capacity", +"is-read-only": false, "description": ["none"] }, "role": { -"id": "role", -"is-read-only": false, +"id": "role", +"is-read-only": false, "description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["The orientation of defined flow at the EndPoint."] }, "path-service-end-point-g": { -"id": "path-service-end-point-g", -"is-read-only": false, +"id": "path-service-end-point-g", +"is-read-only": false, "description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"] }, "path": { -"id": "path", -"is-read-only": false, +"id": "path", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "routing-constraint": { -"id": "routing-constraint", -"is-read-only": false, +"id": "routing-constraint", +"is-read-only": false, "description": ["none"] }, "topology-constraint": { -"id": "topology-constraint", -"is-read-only": false, +"id": "topology-constraint", +"is-read-only": false, "description": ["none"] }, "objective-function": { -"id": "objective-function", -"is-read-only": false, +"id": "objective-function", +"is-read-only": false, "description": ["none"] }, "optimization-constraint": { -"id": "optimization-constraint", -"is-read-only": false, +"id": "optimization-constraint", +"is-read-only": false, "description": ["none"] }, "path-computation-service-g": { -"id": "path-computation-service-g", -"is-read-only": false, +"id": "path-computation-service-g", +"is-read-only": false, "description": ["none"] }, "bandwidth-optimization": { -"id": "bandwidth-optimization", -"is-read-only": false, +"id": "bandwidth-optimization", +"is-read-only": false, "description": ["none"] }, "concurrent-paths": { -"id": "concurrent-paths", -"is-read-only": false, +"id": "concurrent-paths", +"is-read-only": false, "description": ["none"] }, "cost-optimization": { -"id": "cost-optimization", -"is-read-only": false, +"id": "cost-optimization", +"is-read-only": false, "description": ["none"] }, "link-utilization": { -"id": "link-utilization", -"is-read-only": false, +"id": "link-utilization", +"is-read-only": false, "description": ["none"] }, "resource-sharing": { -"id": "resource-sharing", -"is-read-only": false, +"id": "resource-sharing", +"is-read-only": false, "description": ["none"] }, "path-objective-function-g": { -"id": "path-objective-function-g", -"is-read-only": false, +"id": "path-objective-function-g", +"is-read-only": false, "description": ["none"] }, "traffic-interruption": { -"id": "traffic-interruption", -"is-read-only": false, +"id": "traffic-interruption", +"is-read-only": false, "description": ["none"] }, "path-optimization-constraint-g": { -"id": "path-optimization-constraint-g", -"is-read-only": false, +"id": "path-optimization-constraint-g", +"is-read-only": false, "description": ["none"] }, "cost-characteristic": { -"id": "cost-characteristic", -"is-read-only": false, +"id": "cost-characteristic", +"is-read-only": false, "description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."] }, "latency-characteristic": { -"id": "latency-characteristic", -"is-read-only": false, +"id": "latency-characteristic", +"is-read-only": false, "description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."] }, "risk-diversity-characteristic": { -"id": "risk-diversity-characteristic", -"is-read-only": false, +"id": "risk-diversity-characteristic", +"is-read-only": false, "description": ["none"] }, "diversity-policy": { -"id": "diversity-policy", -"is-read-only": false, +"id": "diversity-policy", +"is-read-only": false, "description": ["none"] }, "route-objective-function": { -"id": "route-objective-function", -"is-read-only": false, +"id": "route-objective-function", +"is-read-only": false, "description": ["none"] }, "route-direction": { -"id": "route-direction", -"is-read-only": false, +"id": "route-direction", +"is-read-only": false, "description": ["none"] }, "is-exclusive": { -"id": "is-exclusive", -"is-read-only": false, +"id": "is-exclusive", +"is-read-only": false, "description": ["To distinguish if the resources are to be exclusive to the service"] }, "routing-constraint-g": { -"id": "routing-constraint-g", -"is-read-only": false, +"id": "routing-constraint-g", +"is-read-only": false, "description": ["none"] }, "path-comp-service": { -"id": "path-comp-service", -"is-read-only": false, +"id": "path-comp-service", +"is-read-only": false, "description": ["none"] }, "path": { -"id": "path", -"is-read-only": false, +"id": "path", +"is-read-only": false, "description": ["none"] }, "path-computation-context-g": { -"id": "path-computation-context-g", -"is-read-only": false, +"id": "path-computation-context-g", +"is-read-only": false, "description": ["none"] }, "include-topology": { -"id": "include-topology", -"is-read-only": false, +"id": "include-topology", +"is-read-only": false, "description": ["none"] }, "avoid-topology": { -"id": "avoid-topology", -"is-read-only": false, +"id": "avoid-topology", +"is-read-only": false, "description": ["none"] }, "include-path": { -"id": "include-path", -"is-read-only": false, +"id": "include-path", +"is-read-only": false, "description": ["none"] }, "exclude-path": { -"id": "exclude-path", -"is-read-only": false, +"id": "exclude-path", +"is-read-only": false, "description": ["none"] }, "include-link": { -"id": "include-link", -"is-read-only": false, +"id": "include-link", +"is-read-only": false, "description": ["This is a loose constraint - that is it is unordered and could be a partial list"] }, "exclude-link": { -"id": "exclude-link", -"is-read-only": false, +"id": "exclude-link", +"is-read-only": false, "description": ["none"] }, "include-node": { -"id": "include-node", -"is-read-only": false, +"id": "include-node", +"is-read-only": false, "description": ["This is a loose constraint - that is it is unordered and could be a partial list"] }, "exclude-node": { -"id": "exclude-node", -"is-read-only": false, +"id": "exclude-node", +"is-read-only": false, "description": ["none"] }, "preferred-transport-layer": { -"id": "preferred-transport-layer", -"is-read-only": false, +"id": "preferred-transport-layer", +"is-read-only": false, "description": ["soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers"] }, "topology-constraint-g": { -"id": "topology-constraint-g", -"is-read-only": false, +"id": "topology-constraint-g", +"is-read-only": false, "description": ["none"] }, "MIN_WORK_ROUTE_HOP": { -"id": "MIN_WORK_ROUTE_HOP", -"is-read-only": false, +"id": "MIN_WORK_ROUTE_HOP", +"is-read-only": false, "description": ["none"] }, "MIN_WORK_ROUTE_COST": { -"id": "MIN_WORK_ROUTE_COST", -"is-read-only": false, +"id": "MIN_WORK_ROUTE_COST", +"is-read-only": false, "description": ["none"] }, "MIN_WORK_ROUTE_LATENCY": { -"id": "MIN_WORK_ROUTE_LATENCY", -"is-read-only": false, +"id": "MIN_WORK_ROUTE_LATENCY", +"is-read-only": false, "description": ["none"] }, "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP": { -"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP", -"is-read-only": false, +"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP", +"is-read-only": false, "description": ["none"] }, "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST": { -"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST", -"is-read-only": false, +"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST", +"is-read-only": false, "description": ["none"] }, "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY": { -"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY", -"is-read-only": false, +"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY", +"is-read-only": false, "description": ["none"] }, "LOAD_BALANCE_MAX_UNUSED_CAPACITY": { -"id": "LOAD_BALANCE_MAX_UNUSED_CAPACITY", -"is-read-only": false, +"id": "LOAD_BALANCE_MAX_UNUSED_CAPACITY", +"is-read-only": false, "description": ["none"] }, "route-objective-function": { -"id": "route-objective-function", -"is-read-only": false, +"id": "route-objective-function", +"is-read-only": false, "description": ["none"] }, "SRLG": { -"id": "SRLG", -"is-read-only": false, +"id": "SRLG", +"is-read-only": false, "description": ["none"] }, "SRNG": { -"id": "SRNG", -"is-read-only": false, +"id": "SRNG", +"is-read-only": false, "description": ["none"] }, "SNG": { -"id": "SNG", -"is-read-only": false, +"id": "SNG", +"is-read-only": false, "description": ["none"] }, "NODE": { -"id": "NODE", -"is-read-only": false, +"id": "NODE", +"is-read-only": false, "description": ["none"] }, "LINK": { -"id": "LINK", -"is-read-only": false, +"id": "LINK", +"is-read-only": false, "description": ["none"] }, "diversity-policy": { -"id": "diversity-policy", -"is-read-only": false, +"id": "diversity-policy", +"is-read-only": false, "description": ["none"] }, "compute-p-2-p-path": { -"id": "compute-p-2-p-path", -"is-read-only": false, +"id": "compute-p-2-p-path", +"is-read-only": false, "description": ["none"] }, "sep": { -"id": "sep", -"is-read-only": false, +"id": "sep", +"is-read-only": false, "description": ["none"] }, "routing-constraint": { -"id": "routing-constraint", -"is-read-only": false, +"id": "routing-constraint", +"is-read-only": false, "description": ["none"] }, "topology-constraint": { -"id": "topology-constraint", -"is-read-only": false, +"id": "topology-constraint", +"is-read-only": false, "description": ["none"] }, "objective-function": { -"id": "objective-function", -"is-read-only": false, +"id": "objective-function", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "optimize-p-2-p-path": { -"id": "optimize-p-2-p-path", -"is-read-only": false, +"id": "optimize-p-2-p-path", +"is-read-only": false, "description": ["none"] }, "path-id-or-name": { -"id": "path-id-or-name", -"is-read-only": false, +"id": "path-id-or-name", +"is-read-only": false, "description": ["none"] }, "routing-constraint": { -"id": "routing-constraint", -"is-read-only": false, +"id": "routing-constraint", +"is-read-only": false, "description": ["none"] }, "optimization-constraint": { -"id": "optimization-constraint", -"is-read-only": false, +"id": "optimization-constraint", +"is-read-only": false, "description": ["none"] }, "objective-function": { -"id": "objective-function", -"is-read-only": false, +"id": "objective-function", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "delete-p-2-p-path": { -"id": "delete-p-2-p-path", -"is-read-only": false, +"id": "delete-p-2-p-path", +"is-read-only": false, "description": ["none"] }, "path-id-or-name": { -"id": "path-id-or-name", -"is-read-only": false, +"id": "path-id-or-name", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json index d4cf4ef7a..b2e4b4c25 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json @@ -1,798 +1,798 @@ -{ "schama-information": { +{ "schema-information": { "tapi-photonic-media": { -"id": "tapi-photonic-media", -"is-read-only": false, +"id": "tapi-photonic-media", +"is-read-only": false, "description": ["This module contains TAPI PhotonicMedia Model definitions. Source: TapiPhotonicMedia.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "number-of-otsi": { -"id": "number-of-otsi", -"is-read-only": false, +"id": "number-of-otsi", +"is-read-only": false, "description": ["none"] }, "otsi-gserver-adaptation-pac-g": { -"id": "otsi-gserver-adaptation-pac-g", -"is-read-only": false, +"id": "otsi-gserver-adaptation-pac-g", +"is-read-only": false, "description": ["none"] }, "otsi-termination": { -"id": "otsi-termination", -"is-read-only": false, +"id": "otsi-termination", +"is-read-only": false, "description": ["none"] }, "otsi-connection-end-point-spec-g": { -"id": "otsi-connection-end-point-spec-g", -"is-read-only": false, +"id": "otsi-connection-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "selected-central-frequency": { -"id": "selected-central-frequency", -"is-read-only": false, +"id": "selected-central-frequency", +"is-read-only": false, "unit":"MHz", "description": ["none"] }, "selected-application-identifier": { -"id": "selected-application-identifier", -"is-read-only": false, +"id": "selected-application-identifier", +"is-read-only": false, "description": ["This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."] }, "selected-modulation": { -"id": "selected-modulation", -"is-read-only": false, +"id": "selected-modulation", +"is-read-only": false, "description": ["This parameter defines the modulation used at the source"] }, "selected-spectrum": { -"id": "selected-spectrum", -"is-read-only": false, +"id": "selected-spectrum", +"is-read-only": false, "description": ["none"] }, "transmited-power": { -"id": "transmited-power", -"is-read-only": false, +"id": "transmited-power", +"is-read-only": false, "description": ["Measured power at the Transmitter."] }, "received-power": { -"id": "received-power", -"is-read-only": false, +"id": "received-power", +"is-read-only": false, "description": ["none"] }, "laser-properties": { -"id": "laser-properties", -"is-read-only": false, +"id": "laser-properties", +"is-read-only": false, "description": ["Laser properties."] }, "otsi-termination-pac-g": { -"id": "otsi-termination-pac-g", -"is-read-only": false, +"id": "otsi-termination-pac-g", +"is-read-only": false, "description": ["Provides status information only."] }, "supportable-spectrum": { -"id": "supportable-spectrum", -"is-read-only": false, +"id": "supportable-spectrum", +"is-read-only": false, "description": ["none"] }, "available-spectrum": { -"id": "available-spectrum", -"is-read-only": false, +"id": "available-spectrum", +"is-read-only": false, "description": ["none"] }, "occupied-spectrum": { -"id": "occupied-spectrum", -"is-read-only": false, +"id": "occupied-spectrum", +"is-read-only": false, "description": ["none"] }, "media-channel-pool-capability-pac-g": { -"id": "media-channel-pool-capability-pac-g", -"is-read-only": false, +"id": "media-channel-pool-capability-pac-g", +"is-read-only": false, "description": ["none"] }, "mc-pool": { -"id": "mc-pool", -"is-read-only": false, +"id": "mc-pool", +"is-read-only": false, "description": ["none"] }, "media-channel-node-edge-point-spec-g": { -"id": "media-channel-node-edge-point-spec-g", -"is-read-only": false, +"id": "media-channel-node-edge-point-spec-g", +"is-read-only": false, "description": ["none"] }, "optical-routing-strategy": { -"id": "optical-routing-strategy", -"is-read-only": false, +"id": "optical-routing-strategy", +"is-read-only": false, "description": ["none"] }, "otsi-routing-spec-g": { -"id": "otsi-routing-spec-g", -"is-read-only": false, +"id": "otsi-routing-spec-g", +"is-read-only": false, "description": ["none"] }, "occupied-spectrum": { -"id": "occupied-spectrum", -"is-read-only": false, +"id": "occupied-spectrum", +"is-read-only": false, "description": ["none"] }, "measured-power-ingress": { -"id": "measured-power-ingress", -"is-read-only": false, +"id": "measured-power-ingress", +"is-read-only": false, "description": ["none"] }, "measured-power-egress": { -"id": "measured-power-egress", -"is-read-only": false, +"id": "measured-power-egress", +"is-read-only": false, "description": ["none"] }, "media-channel-properties-pac-g": { -"id": "media-channel-properties-pac-g", -"is-read-only": false, +"id": "media-channel-properties-pac-g", +"is-read-only": false, "description": ["none"] }, "otsi-adapter": { -"id": "otsi-adapter", -"is-read-only": false, +"id": "otsi-adapter", +"is-read-only": false, "description": ["none"] }, "fec-parameters": { -"id": "fec-parameters", -"is-read-only": false, +"id": "fec-parameters", +"is-read-only": false, "description": ["none"] }, "otsi-assembly-connection-end-point-spec-g": { -"id": "otsi-assembly-connection-end-point-spec-g", -"is-read-only": false, +"id": "otsi-assembly-connection-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "supportable-lower-central-frequency": { -"id": "supportable-lower-central-frequency", -"is-read-only": false, +"id": "supportable-lower-central-frequency", +"is-read-only": false, "unit":"MHz", "description": ["The lower frequency of the channel spectrum"] }, "supportable-upper-central-frequency": { -"id": "supportable-upper-central-frequency", -"is-read-only": false, +"id": "supportable-upper-central-frequency", +"is-read-only": false, "unit":"MHz", "description": ["The Upper frequency of the channel spectrum"] }, "supportable-application-identifier": { -"id": "supportable-application-identifier", -"is-read-only": false, +"id": "supportable-application-identifier", +"is-read-only": false, "description": ["The list of supportable ApplicationIdentifiers."] }, "supportable-modulation": { -"id": "supportable-modulation", -"is-read-only": false, +"id": "supportable-modulation", +"is-read-only": false, "description": ["This parameter defines the modulation used at the source"] }, "total-power-warn-threshold": { -"id": "total-power-warn-threshold", -"is-read-only": false, +"id": "total-power-warn-threshold", +"is-read-only": false, "unit":"dBm", "description": ["none"] }, "otsi-capability-pac-g": { -"id": "otsi-capability-pac-g", -"is-read-only": false, +"id": "otsi-capability-pac-g", +"is-read-only": false, "description": ["Can read the status of the warning for the upper value that the power can reach."] }, "otsi-capability": { -"id": "otsi-capability", -"is-read-only": false, +"id": "otsi-capability", +"is-read-only": false, "description": ["none"] }, "otsi-service-interface-point-spec-g": { -"id": "otsi-service-interface-point-spec-g", -"is-read-only": false, +"id": "otsi-service-interface-point-spec-g", +"is-read-only": false, "description": ["none"] }, "otsi-config": { -"id": "otsi-config", -"is-read-only": false, +"id": "otsi-config", +"is-read-only": false, "description": ["none"] }, "nmc-config": { -"id": "nmc-config", -"is-read-only": false, +"id": "nmc-config", +"is-read-only": false, "description": ["none"] }, "otsi-connectivity-service-end-point-spec-g": { -"id": "otsi-connectivity-service-end-point-spec-g", -"is-read-only": false, +"id": "otsi-connectivity-service-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "central-frequency": { -"id": "central-frequency", -"is-read-only": false, +"id": "central-frequency", +"is-read-only": false, "unit":"MHz", "description": ["The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave"] }, "application-identifier": { -"id": "application-identifier", -"is-read-only": false, +"id": "application-identifier", +"is-read-only": false, "description": ["This attribute indicates the selected Application Identifier."] }, "modulation": { -"id": "modulation", -"is-read-only": false, +"id": "modulation", +"is-read-only": false, "description": ["The modulation techniqu selected at the source."] }, "laser-control": { -"id": "laser-control", -"is-read-only": false, +"id": "laser-control", +"is-read-only": false, "description": ["Laser control can be FORCED-ON, FORCED-OFF or AUTOMATIC-LASER-SHUTDOWN"] }, "transmit-power": { -"id": "transmit-power", -"is-read-only": false, +"id": "transmit-power", +"is-read-only": false, "description": ["Transmit power as requested."] }, "total-power-warn-threshold-upper": { -"id": "total-power-warn-threshold-upper", -"is-read-only": false, +"id": "total-power-warn-threshold-upper", +"is-read-only": false, "unit":"dBm", "description": ["Configure the Max, Default and Min values for the Upper power threshold."] }, "total-power-warn-threshold-lower": { -"id": "total-power-warn-threshold-lower", -"is-read-only": false, +"id": "total-power-warn-threshold-lower", +"is-read-only": false, "unit":"dBm", "description": ["Configure Max, Default and Min values for lower power threshold."] }, "otsi-termination-config-pac-g": { -"id": "otsi-termination-config-pac-g", -"is-read-only": false, +"id": "otsi-termination-config-pac-g", +"is-read-only": false, "description": ["none"] }, "pre-fec-ber": { -"id": "pre-fec-ber", -"is-read-only": false, +"id": "pre-fec-ber", +"is-read-only": false, "description": ["counter: bit error rate before correction by FEC"] }, "post-fec-ber": { -"id": "post-fec-ber", -"is-read-only": false, +"id": "post-fec-ber", +"is-read-only": false, "description": ["counter: bit error rate after correction by FEC"] }, "corrected-bytes": { -"id": "corrected-bytes", -"is-read-only": false, +"id": "corrected-bytes", +"is-read-only": false, "description": ["Bytes corrected between those that were received corrupted"] }, "corrected-bits": { -"id": "corrected-bits", -"is-read-only": false, +"id": "corrected-bits", +"is-read-only": false, "description": ["Bits corrected between those that were received corrupted"] }, "uncorrectable-bytes": { -"id": "uncorrectable-bytes", -"is-read-only": false, +"id": "uncorrectable-bytes", +"is-read-only": false, "description": ["Bytes that could not be corrected by FEC"] }, "uncorrectable-bits": { -"id": "uncorrectable-bits", -"is-read-only": false, +"id": "uncorrectable-bits", +"is-read-only": false, "description": ["Bits that could not be corrected by FEC"] }, "fec-properties-pac-g": { -"id": "fec-properties-pac-g", -"is-read-only": false, +"id": "fec-properties-pac-g", +"is-read-only": false, "description": ["none"] }, "mc-pool": { -"id": "mc-pool", -"is-read-only": false, +"id": "mc-pool", +"is-read-only": false, "description": ["none"] }, "media-channel-service-interface-point-spec-g": { -"id": "media-channel-service-interface-point-spec-g", -"is-read-only": false, +"id": "media-channel-service-interface-point-spec-g", +"is-read-only": false, "description": ["none"] }, "mc-config": { -"id": "mc-config", -"is-read-only": false, +"id": "mc-config", +"is-read-only": false, "description": ["none"] }, "media-channel-connectivity-service-end-point-spec-g": { -"id": "media-channel-connectivity-service-end-point-spec-g", -"is-read-only": false, +"id": "media-channel-connectivity-service-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "spectrum": { -"id": "spectrum", -"is-read-only": false, +"id": "spectrum", +"is-read-only": false, "description": ["none"] }, "media-channel-config-pac-g": { -"id": "media-channel-config-pac-g", -"is-read-only": false, +"id": "media-channel-config-pac-g", +"is-read-only": false, "description": ["none"] }, "media-channel": { -"id": "media-channel", -"is-read-only": false, +"id": "media-channel", +"is-read-only": false, "description": ["none"] }, "media-channel-connection-end-point-spec-g": { -"id": "media-channel-connection-end-point-spec-g", -"is-read-only": false, +"id": "media-channel-connection-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "ots-media-channel": { -"id": "ots-media-channel", -"is-read-only": false, +"id": "ots-media-channel", +"is-read-only": false, "description": ["none"] }, "ots-connection-end-point-spec-g": { -"id": "ots-connection-end-point-spec-g", -"is-read-only": false, +"id": "ots-connection-end-point-spec-g", +"is-read-only": false, "description": ["none"] }, "media-channel-assembly-spec-g": { -"id": "media-channel-assembly-spec-g", -"is-read-only": false, +"id": "media-channel-assembly-spec-g", +"is-read-only": false, "description": ["none"] }, "laser-status": { -"id": "laser-status", -"is-read-only": false, +"id": "laser-status", +"is-read-only": false, "description": ["none"] }, "laser-application-type": { -"id": "laser-application-type", -"is-read-only": false, +"id": "laser-application-type", +"is-read-only": false, "description": ["The type of laser, its operational wavelengths, and its applications. String size 255."] }, "laser-bias-current": { -"id": "laser-bias-current", -"is-read-only": false, +"id": "laser-bias-current", +"is-read-only": false, "description": ["The Bias current of the laser that is the medium polarization current of the laser."] }, "laser-temperature": { -"id": "laser-temperature", -"is-read-only": false, +"id": "laser-temperature", +"is-read-only": false, "description": ["The temperature of the laser"] }, "laser-properties-pac-g": { -"id": "laser-properties-pac-g", -"is-read-only": false, +"id": "laser-properties-pac-g", +"is-read-only": false, "description": ["none"] }, "total-power": { -"id": "total-power", -"is-read-only": false, +"id": "total-power", +"is-read-only": false, "description": ["The total power at any point in a channel specified in dBm. range of type : -99.000..99.000"] }, "power-spectral-density": { -"id": "power-spectral-density", -"is-read-only": false, +"id": "power-spectral-density", +"is-read-only": false, "description": ["This describes how power of a signal is distributed over frequency specified in nW/MHz range of type : -2147483648..2147483648"] }, "power-properties-pac-g": { -"id": "power-properties-pac-g", -"is-read-only": false, +"id": "power-properties-pac-g", +"is-read-only": false, "description": ["Indication with severity warning raised when a total power value measured is above the threshold."] }, "total-power-upper-warn-threshold-default": { -"id": "total-power-upper-warn-threshold-default", -"is-read-only": false, +"id": "total-power-upper-warn-threshold-default", +"is-read-only": false, "description": ["Can read the value of the default threshold that was set"] }, "total-power-upper-warn-threshold-min": { -"id": "total-power-upper-warn-threshold-min", -"is-read-only": false, +"id": "total-power-upper-warn-threshold-min", +"is-read-only": false, "description": ["Can read the value of the lower threshold that was set"] }, "total-power-upper-warn-threshold-max": { -"id": "total-power-upper-warn-threshold-max", -"is-read-only": false, +"id": "total-power-upper-warn-threshold-max", +"is-read-only": false, "description": ["Can read the value of the upper threshold that was set"] }, "total-power-lower-warn-threshold-default": { -"id": "total-power-lower-warn-threshold-default", -"is-read-only": false, +"id": "total-power-lower-warn-threshold-default", +"is-read-only": false, "description": ["Can read the value of the default threshold that was set"] }, "total-power-lower-warn-threshold-max": { -"id": "total-power-lower-warn-threshold-max", -"is-read-only": false, +"id": "total-power-lower-warn-threshold-max", +"is-read-only": false, "description": ["Can read the value of the upper threshold that was set"] }, "total-power-lower-warn-threshold-min": { -"id": "total-power-lower-warn-threshold-min", -"is-read-only": false, +"id": "total-power-lower-warn-threshold-min", +"is-read-only": false, "description": ["Can read the value of the lower threshold that was set"] }, "total-power-threshold-pac-g": { -"id": "total-power-threshold-pac-g", -"is-read-only": false, +"id": "total-power-threshold-pac-g", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE": { -"id": "SPECTRUM_TYPE", -"is-read-only": false, +"id": "SPECTRUM_TYPE", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_OTSi": { -"id": "SPECTRUM_TYPE_OTSi", -"is-read-only": false, +"id": "SPECTRUM_TYPE_OTSi", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_OTSiA": { -"id": "SPECTRUM_TYPE_OTSiA", -"is-read-only": false, +"id": "SPECTRUM_TYPE_OTSiA", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_OTSiG": { -"id": "SPECTRUM_TYPE_OTSiG", -"is-read-only": false, +"id": "SPECTRUM_TYPE_OTSiG", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_NMC": { -"id": "SPECTRUM_TYPE_NMC", -"is-read-only": false, +"id": "SPECTRUM_TYPE_NMC", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_NMCA": { -"id": "SPECTRUM_TYPE_NMCA", -"is-read-only": false, +"id": "SPECTRUM_TYPE_NMCA", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_SMC": { -"id": "SPECTRUM_TYPE_SMC", -"is-read-only": false, +"id": "SPECTRUM_TYPE_SMC", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_SMCA": { -"id": "SPECTRUM_TYPE_SMCA", -"is-read-only": false, +"id": "SPECTRUM_TYPE_SMCA", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_OCH": { -"id": "SPECTRUM_TYPE_OCH", -"is-read-only": false, +"id": "SPECTRUM_TYPE_OCH", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_OMS": { -"id": "SPECTRUM_TYPE_OMS", -"is-read-only": false, +"id": "SPECTRUM_TYPE_OMS", +"is-read-only": false, "description": ["none"] }, "SPECTRUM_TYPE_OTS": { -"id": "SPECTRUM_TYPE_OTS", -"is-read-only": false, +"id": "SPECTRUM_TYPE_OTS", +"is-read-only": false, "description": ["none"] }, "application-identifier-type": { -"id": "application-identifier-type", -"is-read-only": false, +"id": "application-identifier-type", +"is-read-only": false, "description": ["The ITU-T recommendation which defines the application code format."] }, "application-code": { -"id": "application-code", -"is-read-only": false, +"id": "application-code", +"is-read-only": false, "description": ["none"] }, "application-identifier-g": { -"id": "application-identifier-g", -"is-read-only": false, +"id": "application-identifier-g", +"is-read-only": false, "description": ["The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."] }, "grid-type": { -"id": "grid-type", -"is-read-only": false, +"id": "grid-type", +"is-read-only": false, "description": ["Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width"] }, "adjustment-granularity": { -"id": "adjustment-granularity", -"is-read-only": false, +"id": "adjustment-granularity", +"is-read-only": false, "description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)"] }, "central-frequency": { -"id": "central-frequency", -"is-read-only": false, +"id": "central-frequency", +"is-read-only": false, "unit":"MHz", "description": ["The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave."] }, "channel-number": { -"id": "channel-number", -"is-read-only": false, +"id": "channel-number", +"is-read-only": false, "description": ["As per ITU-T G.694.1, this attribute is denoted as 'n' and is used to calculate the nominal central frequency (in THz) as follows: 193.1 + × where channelNumber is a positive or negative integer including 0 and adjustment_granularity is the nominal central frequency granularity in THz"] }, "central-frequency-or-wavelength-g": { -"id": "central-frequency-or-wavelength-g", -"is-read-only": false, +"id": "central-frequency-or-wavelength-g", +"is-read-only": false, "description": ["This data-type holds the central frequency directly or optionally the information to determine the nominal central frequency of a FIXED grid (DWDM or CWDM) and FLEX grid type systems. As per ITU-T G.694.1, the nominal central frequency (in THz) is calculated as follows: 193.1 + × where channelNumber is a positive or negative integer including 0 and is the nominal central frequency granularity in THz For FIXED grid types, the adjustmentGranularity is one of (0.1/0.05/0.025/0.0125) THz corresponding to channel spacing of one of (100/50/25/12.5) GHz For FLEX grid type, the adjusmentGranularity is 0.00625 THz and the slot width is variable in increments of 12.5 GHz"] }, "OPTIMAL_OSNR": { -"id": "OPTIMAL_OSNR", -"is-read-only": false, +"id": "OPTIMAL_OSNR", +"is-read-only": false, "description": ["none"] }, "NO_RELAY": { -"id": "NO_RELAY", -"is-read-only": false, +"id": "NO_RELAY", +"is-read-only": false, "description": ["none"] }, "MIN_RELAY": { -"id": "MIN_RELAY", -"is-read-only": false, +"id": "MIN_RELAY", +"is-read-only": false, "description": ["none"] }, "PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE": { -"id": "PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE", -"is-read-only": false, +"id": "PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE", +"is-read-only": false, "description": ["none"] }, "PREFERRED_NO_SKIPPING_WAVELENGTH": { -"id": "PREFERRED_NO_SKIPPING_WAVELENGTH", -"is-read-only": false, +"id": "PREFERRED_NO_SKIPPING_WAVELENGTH", +"is-read-only": false, "description": ["none"] }, "optical-routing-strategy": { -"id": "optical-routing-strategy", -"is-read-only": false, +"id": "optical-routing-strategy", +"is-read-only": false, "description": ["none"] }, "PROPRIETARY": { -"id": "PROPRIETARY", -"is-read-only": false, +"id": "PROPRIETARY", +"is-read-only": false, "description": ["none"] }, "ITUT_G959_1": { -"id": "ITUT_G959_1", -"is-read-only": false, +"id": "ITUT_G959_1", +"is-read-only": false, "description": ["none"] }, "ITUT_G698_1": { -"id": "ITUT_G698_1", -"is-read-only": false, +"id": "ITUT_G698_1", +"is-read-only": false, "description": ["none"] }, "ITUT_G698_2": { -"id": "ITUT_G698_2", -"is-read-only": false, +"id": "ITUT_G698_2", +"is-read-only": false, "description": ["none"] }, "ITUT_G696_1": { -"id": "ITUT_G696_1", -"is-read-only": false, +"id": "ITUT_G696_1", +"is-read-only": false, "description": ["none"] }, "ITUT_G695": { -"id": "ITUT_G695", -"is-read-only": false, +"id": "ITUT_G695", +"is-read-only": false, "description": ["none"] }, "application-identifier-type": { -"id": "application-identifier-type", -"is-read-only": false, +"id": "application-identifier-type", +"is-read-only": false, "description": ["none"] }, "DWDM": { -"id": "DWDM", -"is-read-only": false, +"id": "DWDM", +"is-read-only": false, "description": ["Fixed frequency grid in C & L bands as specified in ITU-T G.694.1"] }, "CWDM": { -"id": "CWDM", -"is-read-only": false, +"id": "CWDM", +"is-read-only": false, "description": ["Fixed frequency grid as specified in ITU-T G.694.2"] }, "FLEX": { -"id": "FLEX", -"is-read-only": false, +"id": "FLEX", +"is-read-only": false, "description": ["Flexible frequency grid as specified in ITU-T G.694.1. In this case, - the allowed frequency slots have a nominal central frequency (in THz) defined by: 193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz - and a slot width defined by: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz. Any combination of frequency slots is allowed as long as no two frequency slots overlap."] }, "GRIDLESS": { -"id": "GRIDLESS", -"is-read-only": false, +"id": "GRIDLESS", +"is-read-only": false, "description": ["none"] }, "UNSPECIFIED": { -"id": "UNSPECIFIED", -"is-read-only": false, +"id": "UNSPECIFIED", +"is-read-only": false, "description": ["Unspecified/proprietary frequency grid"] }, "grid-type": { -"id": "grid-type", -"is-read-only": false, +"id": "grid-type", +"is-read-only": false, "description": ["The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications."] }, "G_100GHZ": { -"id": "G_100GHZ", -"is-read-only": false, +"id": "G_100GHZ", +"is-read-only": false, "description": ["100000 MHz"] }, "G_50GHZ": { -"id": "G_50GHZ", -"is-read-only": false, +"id": "G_50GHZ", +"is-read-only": false, "description": ["50000 MHz"] }, "G_25GHZ": { -"id": "G_25GHZ", -"is-read-only": false, +"id": "G_25GHZ", +"is-read-only": false, "description": ["25000 MHz"] }, "G_12_5GHZ": { -"id": "G_12_5GHZ", -"is-read-only": false, +"id": "G_12_5GHZ", +"is-read-only": false, "description": ["12500 MHz"] }, "G_6_25GHZ": { -"id": "G_6_25GHZ", -"is-read-only": false, +"id": "G_6_25GHZ", +"is-read-only": false, "description": ["6250 MHz"] }, "G_3_125GHZ": { -"id": "G_3_125GHZ", -"is-read-only": false, +"id": "G_3_125GHZ", +"is-read-only": false, "description": ["3125 MHz"] }, "UNCONSTRAINED": { -"id": "UNCONSTRAINED", -"is-read-only": false, +"id": "UNCONSTRAINED", +"is-read-only": false, "description": ["none"] }, "adjustment-granularity": { -"id": "adjustment-granularity", -"is-read-only": false, +"id": "adjustment-granularity", +"is-read-only": false, "description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency"] }, "upper-frequency": { -"id": "upper-frequency", -"is-read-only": false, +"id": "upper-frequency", +"is-read-only": false, "unit":"MHz", "description": ["The upper frequency bound of the media channel spectrum specified in MHz"] }, "lower-frequency": { -"id": "lower-frequency", +"id": "lower-frequency", "is-read-only": false, -"unit":"MHz", +"unit":"MHz", "description": ["The lower frequency bound of the media channel spectrum specified in MHz"] }, "frequency-slot": { -"id": "frequency-slot", -"is-read-only": false, +"id": "frequency-slot", +"is-read-only": false, "description": ["none"] }, "spectrum-g": { -"id": "spectrum-g", -"is-read-only": false, +"id": "spectrum-g", +"is-read-only": false, "description": ["This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems."] }, "RZ": { -"id": "RZ", -"is-read-only": false, +"id": "RZ", +"is-read-only": false, "description": ["none"] }, "NRZ": { -"id": "NRZ", -"is-read-only": false, +"id": "NRZ", +"is-read-only": false, "description": ["none"] }, "BPSK": { -"id": "BPSK", -"is-read-only": false, +"id": "BPSK", +"is-read-only": false, "description": ["none"] }, "DPSK": { -"id": "DPSK", -"is-read-only": false, +"id": "DPSK", +"is-read-only": false, "description": ["none"] }, "QPSK": { -"id": "QPSK", -"is-read-only": false, +"id": "QPSK", +"is-read-only": false, "description": ["none"] }, "8QAM": { -"id": "8QAM", -"is-read-only": false, +"id": "8QAM", +"is-read-only": false, "description": ["none"] }, "16QAM": { -"id": "16QAM", -"is-read-only": false, +"id": "16QAM", +"is-read-only": false, "description": ["none"] }, "UNDEFINED": { -"id": "UNDEFINED", -"is-read-only": false, +"id": "UNDEFINED", +"is-read-only": false, "description": ["none"] }, "modulation-technique": { -"id": "modulation-technique", -"is-read-only": false, +"id": "modulation-technique", +"is-read-only": false, "description": ["none"] }, "spectral-width": { -"id": "spectral-width", -"is-read-only": false, +"id": "spectral-width", +"is-read-only": false, "description": ["Width of the media channel spectrum specified in MHz"] }, "slot-width-number": { -"id": "slot-width-number", -"is-read-only": false, +"id": "slot-width-number", +"is-read-only": false, "description": ["As per ITU-T G.694.1, this attribute is denoted as 'm' and is used to calculate the slot width (in GHz) as follows: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz."] }, "frequency-slot-g": { -"id": "frequency-slot-g", -"is-read-only": false, +"id": "frequency-slot-g", +"is-read-only": false, "description": ["The frequency range allocated to a slot and unavailable to other slots within a flexible grid. A frequency slot is defined by its nominal central frequency. As per ITU-T G.694.1 the slot width is calculated as follows: 12.5 × where slotWidthNumber is a positive integer and 12.5 is the slot width granularity in GHz"] }, "PUMP": { -"id": "PUMP", -"is-read-only": false, +"id": "PUMP", +"is-read-only": false, "description": ["none"] }, "MODULATED": { -"id": "MODULATED", -"is-read-only": false, +"id": "MODULATED", +"is-read-only": false, "description": ["none"] }, "PULSE": { -"id": "PULSE", -"is-read-only": false, +"id": "PULSE", +"is-read-only": false, "description": ["none"] }, "laser-type": { -"id": "laser-type", -"is-read-only": false, +"id": "laser-type", +"is-read-only": false, "description": ["none"] }, "spectrum-type": { -"id": "spectrum-type", -"is-read-only": false, +"id": "spectrum-type", +"is-read-only": false, "description": ["none"] }, "FORCED-ON": { -"id": "FORCED-ON", -"is-read-only": false, +"id": "FORCED-ON", +"is-read-only": false, "description": ["none"] }, "FORCED-OFF": { -"id": "FORCED-OFF", -"is-read-only": false, +"id": "FORCED-OFF", +"is-read-only": false, "description": ["none"] }, "AUTOMATIC-LASER-SHUTDOWN": { -"id": "AUTOMATIC-LASER-SHUTDOWN", -"is-read-only": false, +"id": "AUTOMATIC-LASER-SHUTDOWN", +"is-read-only": false, "description": ["none"] }, "UNDEFINED": { -"id": "UNDEFINED", -"is-read-only": false, +"id": "UNDEFINED", +"is-read-only": false, "description": ["none"] }, "laser-control-type": { -"id": "laser-control-type", -"is-read-only": false, +"id": "laser-control-type", +"is-read-only": false, "description": ["none"] }, "ON": { -"id": "ON", -"is-read-only": false, +"id": "ON", +"is-read-only": false, "description": ["none"] }, "OFF": { -"id": "OFF", -"is-read-only": false, +"id": "OFF", +"is-read-only": false, "description": ["none"] }, "PULSING": { -"id": "PULSING", -"is-read-only": false, +"id": "PULSING", +"is-read-only": false, "description": ["none"] }, "UNDEFINED": { -"id": "UNDEFINED", -"is-read-only": false, +"id": "UNDEFINED", +"is-read-only": false, "description": ["none"] }, "laser-control-status-type": { -"id": "laser-control-status-type", -"is-read-only": false, +"id": "laser-control-status-type", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json index b4a0dc1e9..b0c2bd8cd 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json @@ -1,648 +1,648 @@ -{ "schama-information": { +{ "schema-information": { "tapi-topology": { -"id": "tapi-topology", -"is-read-only": false, +"id": "tapi-topology", +"is-read-only": false, "description": ["This module contains TAPI Topology Model definitions. Source: TapiTopology.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "topology-uuid": { -"id": "topology-uuid", -"is-read-only": false, +"id": "topology-uuid", +"is-read-only": false, "description": ["none"] }, "topology-ref-g": { -"id": "topology-ref-g", -"is-read-only": false, +"id": "topology-ref-g", +"is-read-only": false, "description": ["none"] }, "link-uuid": { -"id": "link-uuid", -"is-read-only": false, +"id": "link-uuid", +"is-read-only": false, "description": ["none"] }, "link-ref-g": { -"id": "link-ref-g", -"is-read-only": false, +"id": "link-ref-g", +"is-read-only": false, "description": ["none"] }, "node-uuid": { -"id": "node-uuid", -"is-read-only": false, +"id": "node-uuid", +"is-read-only": false, "description": ["none"] }, "node-ref-g": { -"id": "node-ref-g", -"is-read-only": false, +"id": "node-ref-g", +"is-read-only": false, "description": ["none"] }, "node-edge-point-uuid": { -"id": "node-edge-point-uuid", -"is-read-only": false, +"id": "node-edge-point-uuid", +"is-read-only": false, "description": ["none"] }, "node-edge-point-ref-g": { -"id": "node-edge-point-ref-g", -"is-read-only": false, +"id": "node-edge-point-ref-g", +"is-read-only": false, "description": ["none"] }, "node-rule-group-uuid": { -"id": "node-rule-group-uuid", -"is-read-only": false, +"id": "node-rule-group-uuid", +"is-read-only": false, "description": ["none"] }, "node-rule-group-ref-g": { -"id": "node-rule-group-ref-g", -"is-read-only": false, +"id": "node-rule-group-ref-g", +"is-read-only": false, "description": ["none"] }, "node-edge-point": { -"id": "node-edge-point", -"is-read-only": false, +"id": "node-edge-point", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["The directionality of the Link. Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). Is not present in more complex cases."] }, "resilience-type": { -"id": "resilience-type", -"is-read-only": false, +"id": "resilience-type", +"is-read-only": false, "description": ["none"] }, "link-g": { -"id": "link-g", -"is-read-only": false, +"id": "link-g", +"is-read-only": false, "description": ["The Link object class models effective adjacency between two or more ForwardingDomains (FD)."] }, "owned-node-edge-point": { -"id": "owned-node-edge-point", -"is-read-only": false, +"id": "owned-node-edge-point", +"is-read-only": false, "description": ["none"] }, "aggregated-node-edge-point": { -"id": "aggregated-node-edge-point", -"is-read-only": false, +"id": "aggregated-node-edge-point", +"is-read-only": false, "description": ["none"] }, "node-rule-group": { -"id": "node-rule-group", -"is-read-only": false, +"id": "node-rule-group", +"is-read-only": false, "description": ["none"] }, "encap-topology": { -"id": "encap-topology", -"is-read-only": false, +"id": "encap-topology", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "node-g": { -"id": "node-g", -"is-read-only": false, +"id": "node-g", +"is-read-only": false, "description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."] }, "node": { -"id": "node", -"is-read-only": false, +"id": "node", +"is-read-only": false, "description": ["none"] }, "link": { -"id": "link", -"is-read-only": false, +"id": "link", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "topology-g": { -"id": "topology-g", -"is-read-only": false, +"id": "topology-g", +"is-read-only": false, "description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."] }, "transitioned-layer-protocol-name": { -"id": "transitioned-layer-protocol-name", -"is-read-only": false, +"id": "transitioned-layer-protocol-name", +"is-read-only": false, "description": ["Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role."] }, "layer-protocol-transition-pac-g": { -"id": "layer-protocol-transition-pac-g", -"is-read-only": false, +"id": "layer-protocol-transition-pac-g", +"is-read-only": false, "description": ["Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. This abstraction is relevant when considering multi-layer routing. The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details. This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved. Links that included details in this Pac are often referred to as Transitional Links."] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "supported-cep-layer-protocol-qualifier": { -"id": "supported-cep-layer-protocol-qualifier", -"is-read-only": false, +"id": "supported-cep-layer-protocol-qualifier", +"is-read-only": false, "description": ["none"] }, "aggregated-node-edge-point": { -"id": "aggregated-node-edge-point", -"is-read-only": false, +"id": "aggregated-node-edge-point", +"is-read-only": false, "description": ["none"] }, "mapped-service-interface-point": { -"id": "mapped-service-interface-point", -"is-read-only": false, +"id": "mapped-service-interface-point", +"is-read-only": false, "description": ["NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental"] }, "link-port-direction": { -"id": "link-port-direction", -"is-read-only": false, +"id": "link-port-direction", +"is-read-only": false, "description": ["The orientation of defined flow at the LinkEnd."] }, "link-port-role": { -"id": "link-port-role", -"is-read-only": false, +"id": "link-port-role", +"is-read-only": false, "description": ["Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root) in the context of the Link with respect to the Link function."] }, "node-edge-point-g": { -"id": "node-edge-point-g", -"is-read-only": false, +"id": "node-edge-point-g", +"is-read-only": false, "description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."] }, "risk-characteristic": { -"id": "risk-characteristic", -"is-read-only": false, +"id": "risk-characteristic", +"is-read-only": false, "description": ["A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration."] }, "risk-parameter-pac-g": { -"id": "risk-parameter-pac-g", -"is-read-only": false, +"id": "risk-parameter-pac-g", +"is-read-only": false, "description": ["The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection. A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization. The realization can be partitioned into segments which have some relevant common failure modes. There is a risk of failure/degradation of each segment of the underlying realization. Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct). Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity. Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk. The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity. A segment has one or more risk characteristic. Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other. Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics."] }, "cost-characteristic": { -"id": "cost-characteristic", -"is-read-only": false, +"id": "cost-characteristic", +"is-read-only": false, "description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."] }, "transfer-cost-pac-g": { -"id": "transfer-cost-pac-g", -"is-read-only": false, +"id": "transfer-cost-pac-g", +"is-read-only": false, "description": ["The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity There may be many perspectives from which cost may be considered for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. Using an entity will incur a cost."] }, "error-characteristic": { -"id": "error-characteristic", -"is-read-only": false, +"id": "error-characteristic", +"is-read-only": false, "description": ["Describes the degree to which the signal propagated can be errored. Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded."] }, "loss-characteristic": { -"id": "loss-characteristic", -"is-read-only": false, +"id": "loss-characteristic", +"is-read-only": false, "description": ["Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow. Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips)."] }, "repeat-delivery-characteristic": { -"id": "repeat-delivery-characteristic", -"is-read-only": false, +"id": "repeat-delivery-characteristic", +"is-read-only": false, "description": ["Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay."] }, "delivery-order-characteristic": { -"id": "delivery-order-characteristic", -"is-read-only": false, +"id": "delivery-order-characteristic", +"is-read-only": false, "description": ["Describes the degree to which packets will be delivered out of sequence. Does not apply to TDM as the TDM protocols maintain strict order."] }, "unavailable-time-characteristic": { -"id": "unavailable-time-characteristic", -"is-read-only": false, +"id": "unavailable-time-characteristic", +"is-read-only": false, "description": ["Describes the duration for which there may be no valid signal propagated."] }, "server-integrity-process-characteristic": { -"id": "server-integrity-process-characteristic", -"is-read-only": false, +"id": "server-integrity-process-characteristic", +"is-read-only": false, "description": ["Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity."] }, "transfer-integrity-pac-g": { -"id": "transfer-integrity-pac-g", -"is-read-only": false, +"id": "transfer-integrity-pac-g", +"is-read-only": false, "description": ["Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal. It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals. Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact."] }, "latency-characteristic": { -"id": "latency-characteristic", -"is-read-only": false, +"id": "latency-characteristic", +"is-read-only": false, "description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."] }, "transfer-timing-pac-g": { -"id": "transfer-timing-pac-g", -"is-read-only": false, +"id": "transfer-timing-pac-g", +"is-read-only": false, "description": ["A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity."] }, "validation-mechanism": { -"id": "validation-mechanism", -"is-read-only": false, +"id": "validation-mechanism", +"is-read-only": false, "description": ["Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity."] }, "validation-pac-g": { -"id": "validation-pac-g", -"is-read-only": false, +"id": "validation-pac-g", +"is-read-only": false, "description": ["Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity."] }, "topology": { -"id": "topology", -"is-read-only": false, +"id": "topology", +"is-read-only": false, "description": ["none"] }, "network-topology-service-g": { -"id": "network-topology-service-g", -"is-read-only": false, +"id": "network-topology-service-g", +"is-read-only": false, "description": ["none"] }, "nw-topology-service": { -"id": "nw-topology-service", -"is-read-only": false, +"id": "nw-topology-service", +"is-read-only": false, "description": ["none"] }, "topology": { -"id": "topology", -"is-read-only": false, +"id": "topology", +"is-read-only": false, "description": ["none"] }, "topology-context-g": { -"id": "topology-context-g", -"is-read-only": false, +"id": "topology-context-g", +"is-read-only": false, "description": ["none"] }, "rule": { -"id": "rule", -"is-read-only": false, +"id": "rule", +"is-read-only": false, "description": ["none"] }, "associated-node-rule-group": { -"id": "associated-node-rule-group", -"is-read-only": false, +"id": "associated-node-rule-group", +"is-read-only": false, "description": ["none"] }, "inter-rule-group-g": { -"id": "inter-rule-group-g", -"is-read-only": false, +"id": "inter-rule-group-g", +"is-read-only": false, "description": ["none"] }, "rule": { -"id": "rule", -"is-read-only": false, +"id": "rule", +"is-read-only": false, "description": ["none"] }, "node-edge-point": { -"id": "node-edge-point", -"is-read-only": false, +"id": "node-edge-point", +"is-read-only": false, "description": ["none"] }, "composed-rule-group": { -"id": "composed-rule-group", -"is-read-only": false, +"id": "composed-rule-group", +"is-read-only": false, "description": ["none"] }, "inter-rule-group": { -"id": "inter-rule-group", -"is-read-only": false, +"id": "inter-rule-group", +"is-read-only": false, "description": ["none"] }, "node-rule-group-g": { -"id": "node-rule-group-g", -"is-read-only": false, +"id": "node-rule-group-g", +"is-read-only": false, "description": ["none"] }, "rule-type": { -"id": "rule-type", -"is-read-only": false, +"id": "rule-type", +"is-read-only": false, "description": ["none"] }, "forwarding-rule": { -"id": "forwarding-rule", -"is-read-only": false, +"id": "forwarding-rule", +"is-read-only": false, "description": ["none"] }, "override-priority": { -"id": "override-priority", -"is-read-only": false, +"id": "override-priority", +"is-read-only": false, "description": ["none"] }, "rule-g": { -"id": "rule-g", -"is-read-only": false, +"id": "rule-g", +"is-read-only": false, "description": ["none"] }, "cost-name": { -"id": "cost-name", -"is-read-only": false, +"id": "cost-name", +"is-read-only": false, "description": ["The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName."] }, "cost-value": { -"id": "cost-value", -"is-read-only": false, +"id": "cost-value", +"is-read-only": false, "description": ["The specific cost."] }, "cost-algorithm": { -"id": "cost-algorithm", -"is-read-only": false, +"id": "cost-algorithm", +"is-read-only": false, "description": ["The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm."] }, "cost-characteristic-g": { -"id": "cost-characteristic-g", -"is-read-only": false, +"id": "cost-characteristic-g", +"is-read-only": false, "description": ["The information for a particular cost characteristic."] }, "traffic-property-name": { -"id": "traffic-property-name", -"is-read-only": false, +"id": "traffic-property-name", +"is-read-only": false, "description": ["The identifier of the specific traffic property to which the queuing latency applies."] }, "fixed-latency-characteristic": { -"id": "fixed-latency-characteristic", -"is-read-only": false, +"id": "fixed-latency-characteristic", +"is-read-only": false, "description": ["A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity"] }, "queing-latency-characteristic": { -"id": "queing-latency-characteristic", -"is-read-only": false, +"id": "queing-latency-characteristic", +"is-read-only": false, "description": ["The specific queuing latency for the traffic property."] }, "jitter-characteristic": { -"id": "jitter-characteristic", -"is-read-only": false, +"id": "jitter-characteristic", +"is-read-only": false, "description": ["High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency. Applies to TDM systems (and not packet)."] }, "wander-characteristic": { -"id": "wander-characteristic", -"is-read-only": false, +"id": "wander-characteristic", +"is-read-only": false, "description": ["Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency. Applies to TDM systems (and not packet)."] }, "latency-characteristic-g": { -"id": "latency-characteristic-g", -"is-read-only": false, +"id": "latency-characteristic-g", +"is-read-only": false, "description": ["Provides information on latency characteristic for a particular stated trafficProperty."] }, "risk-characteristic-name": { -"id": "risk-characteristic-name", -"is-read-only": false, +"id": "risk-characteristic-name", +"is-read-only": false, "description": ["The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge). Depending upon the importance of the traffic being routed different risk characteristics will be evaluated."] }, "risk-identifier-list": { -"id": "risk-identifier-list", -"is-read-only": false, +"id": "risk-identifier-list", +"is-read-only": false, "description": ["A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity."] }, "risk-characteristic-g": { -"id": "risk-characteristic-g", -"is-read-only": false, +"id": "risk-characteristic-g", +"is-read-only": false, "description": ["The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic."] }, "validation-mechanism": { -"id": "validation-mechanism", -"is-read-only": false, +"id": "validation-mechanism", +"is-read-only": false, "description": ["Name of mechanism used to validate adjacency"] }, "layer-protocol-adjacency-validated": { -"id": "layer-protocol-adjacency-validated", -"is-read-only": false, +"id": "layer-protocol-adjacency-validated", +"is-read-only": false, "description": ["State of validatiion"] }, "validation-robustness": { -"id": "validation-robustness", -"is-read-only": false, +"id": "validation-robustness", +"is-read-only": false, "description": ["Quality of validation (i.e. how likely is the stated validation to be invalid)"] }, "validation-mechanism-g": { -"id": "validation-mechanism-g", -"is-read-only": false, +"id": "validation-mechanism-g", +"is-read-only": false, "description": ["Identifies the validation mechanism and describes the characteristics of that mechanism"] }, "MAY_FORWARD_ACROSS_GROUP": { -"id": "MAY_FORWARD_ACROSS_GROUP", -"is-read-only": false, +"id": "MAY_FORWARD_ACROSS_GROUP", +"is-read-only": false, "description": ["none"] }, "MUST_FORWARD_ACROSS_GROUP": { -"id": "MUST_FORWARD_ACROSS_GROUP", -"is-read-only": false, +"id": "MUST_FORWARD_ACROSS_GROUP", +"is-read-only": false, "description": ["none"] }, "CANNOT_FORWARD_ACROSS_GROUP": { -"id": "CANNOT_FORWARD_ACROSS_GROUP", -"is-read-only": false, +"id": "CANNOT_FORWARD_ACROSS_GROUP", +"is-read-only": false, "description": ["none"] }, "NO_STATEMENT_ON_FORWARDING": { -"id": "NO_STATEMENT_ON_FORWARDING", -"is-read-only": false, +"id": "NO_STATEMENT_ON_FORWARDING", +"is-read-only": false, "description": ["none"] }, "forwarding-rule": { -"id": "forwarding-rule", -"is-read-only": false, +"id": "forwarding-rule", +"is-read-only": false, "description": ["none"] }, "FORWARDING": { -"id": "FORWARDING", -"is-read-only": false, +"id": "FORWARDING", +"is-read-only": false, "description": ["none"] }, "CAPACITY": { -"id": "CAPACITY", -"is-read-only": false, +"id": "CAPACITY", +"is-read-only": false, "description": ["none"] }, "COST": { -"id": "COST", -"is-read-only": false, +"id": "COST", +"is-read-only": false, "description": ["none"] }, "TIMING": { -"id": "TIMING", -"is-read-only": false, +"id": "TIMING", +"is-read-only": false, "description": ["none"] }, "RISK": { -"id": "RISK", -"is-read-only": false, +"id": "RISK", +"is-read-only": false, "description": ["none"] }, "GROUPING": { -"id": "GROUPING", -"is-read-only": false, +"id": "GROUPING", +"is-read-only": false, "description": ["none"] }, "rule-type": { -"id": "rule-type", -"is-read-only": false, +"id": "rule-type", +"is-read-only": false, "description": ["none"] }, "restoration-policy": { -"id": "restoration-policy", -"is-read-only": false, +"id": "restoration-policy", +"is-read-only": false, "description": ["none"] }, "protection-type": { -"id": "protection-type", -"is-read-only": false, +"id": "protection-type", +"is-read-only": false, "description": ["none"] }, "resilience-type-g": { -"id": "resilience-type-g", -"is-read-only": false, +"id": "resilience-type-g", +"is-read-only": false, "description": ["none"] }, "PER_DOMAIN_RESTORATION": { -"id": "PER_DOMAIN_RESTORATION", -"is-read-only": false, +"id": "PER_DOMAIN_RESTORATION", +"is-read-only": false, "description": ["none"] }, "END_TO_END_RESTORATION": { -"id": "END_TO_END_RESTORATION", -"is-read-only": false, +"id": "END_TO_END_RESTORATION", +"is-read-only": false, "description": ["none"] }, "NA": { -"id": "NA", -"is-read-only": false, +"id": "NA", +"is-read-only": false, "description": ["none"] }, "restoration-policy": { -"id": "restoration-policy", -"is-read-only": false, +"id": "restoration-policy", +"is-read-only": false, "description": ["none"] }, "NO_PROTECTON": { -"id": "NO_PROTECTON", -"is-read-only": false, +"id": "NO_PROTECTON", +"is-read-only": false, "description": ["none"] }, "ONE_PLUS_ONE_PROTECTION": { -"id": "ONE_PLUS_ONE_PROTECTION", -"is-read-only": false, +"id": "ONE_PLUS_ONE_PROTECTION", +"is-read-only": false, "description": ["none"] }, "ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION": { -"id": "ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION", -"is-read-only": false, +"id": "ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION", +"is-read-only": false, "description": ["none"] }, "PERMANENT_ONE_PLUS_ONE_PROTECTION": { -"id": "PERMANENT_ONE_PLUS_ONE_PROTECTION", -"is-read-only": false, +"id": "PERMANENT_ONE_PLUS_ONE_PROTECTION", +"is-read-only": false, "description": ["none"] }, "ONE_FOR_ONE_PROTECTION": { -"id": "ONE_FOR_ONE_PROTECTION", -"is-read-only": false, +"id": "ONE_FOR_ONE_PROTECTION", +"is-read-only": false, "description": ["none"] }, "DYNAMIC_RESTORATION": { -"id": "DYNAMIC_RESTORATION", -"is-read-only": false, +"id": "DYNAMIC_RESTORATION", +"is-read-only": false, "description": ["none"] }, "PRE_COMPUTED_RESTORATION": { -"id": "PRE_COMPUTED_RESTORATION", -"is-read-only": false, +"id": "PRE_COMPUTED_RESTORATION", +"is-read-only": false, "description": ["none"] }, "protection-type": { -"id": "protection-type", -"is-read-only": false, +"id": "protection-type", +"is-read-only": false, "description": ["none"] }, "get-topology-details": { -"id": "get-topology-details", -"is-read-only": false, +"id": "get-topology-details", +"is-read-only": false, "description": ["none"] }, "topology-id-or-name": { -"id": "topology-id-or-name", -"is-read-only": false, +"id": "topology-id-or-name", +"is-read-only": false, "description": ["none"] }, "topology": { -"id": "topology", -"is-read-only": false, +"id": "topology", +"is-read-only": false, "description": ["none"] }, "get-node-details": { -"id": "get-node-details", -"is-read-only": false, +"id": "get-node-details", +"is-read-only": false, "description": ["none"] }, "topology-id-or-name": { -"id": "topology-id-or-name", -"is-read-only": false, +"id": "topology-id-or-name", +"is-read-only": false, "description": ["none"] }, "node-id-or-name": { -"id": "node-id-or-name", -"is-read-only": false, +"id": "node-id-or-name", +"is-read-only": false, "description": ["none"] }, "node": { -"id": "node", -"is-read-only": false, +"id": "node", +"is-read-only": false, "description": ["none"] }, "get-node-edge-point-details": { -"id": "get-node-edge-point-details", -"is-read-only": false, +"id": "get-node-edge-point-details", +"is-read-only": false, "description": ["none"] }, "topology-id-or-name": { -"id": "topology-id-or-name", -"is-read-only": false, +"id": "topology-id-or-name", +"is-read-only": false, "description": ["none"] }, "node-id-or-name": { -"id": "node-id-or-name", -"is-read-only": false, +"id": "node-id-or-name", +"is-read-only": false, "description": ["none"] }, "ep-id-or-name": { -"id": "ep-id-or-name", -"is-read-only": false, +"id": "ep-id-or-name", +"is-read-only": false, "description": ["none"] }, "node-edge-point": { -"id": "node-edge-point", -"is-read-only": false, +"id": "node-edge-point", +"is-read-only": false, "description": ["none"] }, "get-link-details": { -"id": "get-link-details", -"is-read-only": false, +"id": "get-link-details", +"is-read-only": false, "description": ["none"] }, "topology-id-or-name": { -"id": "topology-id-or-name", -"is-read-only": false, +"id": "topology-id-or-name", +"is-read-only": false, "description": ["none"] }, "link-id-or-name": { -"id": "link-id-or-name", -"is-read-only": false, +"id": "link-id-or-name", +"is-read-only": false, "description": ["none"] }, "link": { -"id": "link", -"is-read-only": false, +"id": "link", +"is-read-only": false, "description": ["none"] }, "get-topology-list": { -"id": "get-topology-list", -"is-read-only": false, +"id": "get-topology-list", +"is-read-only": false, "description": ["none"] }, "topology": { -"id": "topology", -"is-read-only": false, +"id": "topology", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json index 868841df1..ddeb8cb08 100644 --- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json +++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json @@ -1,198 +1,198 @@ -{ "schama-information": { +{ "schema-information": { "tapi-virtual-network": { -"id": "tapi-virtual-network", -"is-read-only": false, +"id": "tapi-virtual-network", +"is-read-only": false, "description": ["This module contains TAPI Virtual Network Model definitions. Source: TapiVirtualNetwork.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] }, "virtual-nw-service-uuid": { -"id": "virtual-nw-service-uuid", -"is-read-only": false, +"id": "virtual-nw-service-uuid", +"is-read-only": false, "description": ["none"] }, "virtual-nw-service-ref-g": { -"id": "virtual-nw-service-ref-g", -"is-read-only": false, +"id": "virtual-nw-service-ref-g", +"is-read-only": false, "description": ["none"] }, "src-service-end-point": { -"id": "src-service-end-point", -"is-read-only": false, +"id": "src-service-end-point", +"is-read-only": false, "description": ["none"] }, "sink-service-end-point": { -"id": "sink-service-end-point", -"is-read-only": false, +"id": "sink-service-end-point", +"is-read-only": false, "description": ["none"] }, "diversity-exclusion": { -"id": "diversity-exclusion", -"is-read-only": false, +"id": "diversity-exclusion", +"is-read-only": false, "description": ["none"] }, "requested-capacity": { -"id": "requested-capacity", -"is-read-only": false, +"id": "requested-capacity", +"is-read-only": false, "description": ["none"] }, "service-level": { -"id": "service-level", -"is-read-only": false, +"id": "service-level", +"is-read-only": false, "description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"] }, "service-layer": { -"id": "service-layer", -"is-read-only": false, +"id": "service-layer", +"is-read-only": false, "description": ["none"] }, "cost-characteristic": { -"id": "cost-characteristic", -"is-read-only": false, +"id": "cost-characteristic", +"is-read-only": false, "description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."] }, "latency-characteristic": { -"id": "latency-characteristic", -"is-read-only": false, +"id": "latency-characteristic", +"is-read-only": false, "description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."] }, "virtual-network-constraint-g": { -"id": "virtual-network-constraint-g", -"is-read-only": false, +"id": "virtual-network-constraint-g", +"is-read-only": false, "description": ["none"] }, "topology": { -"id": "topology", -"is-read-only": false, +"id": "topology", +"is-read-only": false, "description": ["none"] }, "end-point": { -"id": "end-point", -"is-read-only": false, +"id": "end-point", +"is-read-only": false, "description": ["none"] }, "vnw-constraint": { -"id": "vnw-constraint", -"is-read-only": false, +"id": "vnw-constraint", +"is-read-only": false, "description": ["none"] }, "schedule": { -"id": "schedule", -"is-read-only": false, +"id": "schedule", +"is-read-only": false, "description": ["none"] }, "state": { -"id": "state", -"is-read-only": false, +"id": "state", +"is-read-only": false, "description": ["none"] }, "layer-protocol-name": { -"id": "layer-protocol-name", -"is-read-only": false, +"id": "layer-protocol-name", +"is-read-only": false, "description": ["none"] }, "virtual-network-service-g": { -"id": "virtual-network-service-g", -"is-read-only": false, +"id": "virtual-network-service-g", +"is-read-only": false, "description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."] }, "service-interface-point": { -"id": "service-interface-point", -"is-read-only": false, +"id": "service-interface-point", +"is-read-only": false, "description": ["none"] }, "role": { -"id": "role", -"is-read-only": false, +"id": "role", +"is-read-only": false, "description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] }, "direction": { -"id": "direction", -"is-read-only": false, +"id": "direction", +"is-read-only": false, "description": ["The orientation of defined flow at the EndPoint."] }, "service-layer": { -"id": "service-layer", -"is-read-only": false, +"id": "service-layer", +"is-read-only": false, "description": ["none"] }, "virtual-network-service-end-point-g": { -"id": "virtual-network-service-end-point-g", -"is-read-only": false, +"id": "virtual-network-service-end-point-g", +"is-read-only": false, "description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"] }, "virtual-nw-service": { -"id": "virtual-nw-service", -"is-read-only": false, +"id": "virtual-nw-service", +"is-read-only": false, "description": ["none"] }, "virtual-network-context-g": { -"id": "virtual-network-context-g", -"is-read-only": false, +"id": "virtual-network-context-g", +"is-read-only": false, "description": ["none"] }, "create-virtual-network-service": { -"id": "create-virtual-network-service", -"is-read-only": false, +"id": "create-virtual-network-service", +"is-read-only": false, "description": ["none"] }, "sep": { -"id": "sep", -"is-read-only": false, +"id": "sep", +"is-read-only": false, "description": ["none"] }, "vnw-constraint": { -"id": "vnw-constraint", -"is-read-only": false, +"id": "vnw-constraint", +"is-read-only": false, "description": ["none"] }, "conn-schedule": { -"id": "conn-schedule", -"is-read-only": false, +"id": "conn-schedule", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "delete-virtual-network-service": { -"id": "delete-virtual-network-service", -"is-read-only": false, +"id": "delete-virtual-network-service", +"is-read-only": false, "description": ["none"] }, "service-id-or-name": { -"id": "service-id-or-name", -"is-read-only": false, +"id": "service-id-or-name", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "get-virtual-network-service-details": { -"id": "get-virtual-network-service-details", -"is-read-only": false, +"id": "get-virtual-network-service-details", +"is-read-only": false, "description": ["none"] }, "service-id-or-name": { -"id": "service-id-or-name", -"is-read-only": false, +"id": "service-id-or-name", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }, "get-virtual-network-service-list": { -"id": "get-virtual-network-service-list", -"is-read-only": false, +"id": "get-virtual-network-service-list", +"is-read-only": false, "description": ["none"] }, "service": { -"id": "service", -"is-read-only": false, +"id": "service", +"is-read-only": false, "description": ["none"] }} -} \ No newline at end of file +} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java b/sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java deleted file mode 100644 index 397239eb6..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/AaiTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import java.util.ArrayList; -import java.util.List; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiConnector.impl.AaiProviderClient; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.HtDevicemanagerConfiguration; - -public class AaiTest { - - public static void main(String[] args) - { - HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration(); - - AaiProviderClient provider = new AaiProviderClient(cfg, null); - - String mountPointName = "testDevice 01"; - String type="Unit"; - String model="Horizon Compact+"; - String vendor="DragonWave-X"; - String ipv4="127.0.0.1"; - String ipv6="::1"; - List ifInfos = new ArrayList<>(); - ifInfos.add("LP-MWPS-RADIO"); - InventoryInformation ii=new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos); - System.out.println("registering device"); - provider.onDeviceRegistered(mountPointName,ii); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - System.out.println("unregistering device"); - provider.onDeviceUnregistered(mountPointName); - System.out.println("finished"); - try { - provider.close(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java deleted file mode 100644 index 40a19101f..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/AkkaConfigTest.java +++ /dev/null @@ -1,194 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig.ClusterNodeInfo; - -public class AkkaConfigTest { - - private static String getAkkaConfigSingleNodeText() - { -return "\n" + - "odl-cluster-data {\n" + - " akka {\n" + - " remote {\n" + - " artery {\n" + - " enabled = off\n" + - " canonical.hostname = \"127.0.0.1\"\n" + - " canonical.port = 2550\n" + - " }\n" + - " netty.tcp {\n" + - " hostname = \"127.0.0.1\"\n" + - " port = 2550\n" + - " }\n" + - " # when under load we might trip a false positive on the failure detector\n" + - " # transport-failure-detector {\n" + - " # heartbeat-interval = 4 s\n" + - " # acceptable-heartbeat-pause = 16s\n" + - " # }\n" + - " }\n" + - "\n" + - " cluster {\n" + - " # Remove \".tcp\" when using artery.\n" + - " seed-nodes = [\"akka.tcp://opendaylight-cluster-data@127.0.0.1:2550\"]\n" + - "\n" + - " roles = [\n" + - " \"member-1\"\n" + - " ]\n" + - "\n" + - " }\n" + - "\n" + - " persistence {\n" + - " # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by\n" + - " # modifying the following two properties. The directory location specified may be a relative or absolute path. \n" + - " # The relative path is always relative to KARAF_HOME.\n" + - "\n" + - " # snapshot-store.local.dir = \"target/snapshots\"\n" + - " # journal.leveldb.dir = \"target/journal\"\n" + - "\n" + - " journal {\n" + - " leveldb {\n" + - " # Set native = off to use a Java-only implementation of leveldb.\n" + - " # Note that the Java-only version is not currently considered by Akka to be production quality.\n" + - "\n" + - " # native = off\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}"; - } - private static String getAkkaConfigClusterNodeText() - { - return "\n" + - "odl-cluster-data {\n" + - "\n" + - " akka {\n" + - " loglevel = \"\"\n" + - " remote {\n" + - " netty.tcp {\n" + - " hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + - " port = 2550\n" + - " }\n" + - " }\n" + - " actor {\n" + - " debug{\n" + - " autoreceive = on\n" + - " lifecycle = on\n" + - " unhandled = on\n" + - " fsm = on\n" + - " event-stream = on\n" + - " }\n" + - " }\n" + - " cluster {\n" + - " seed-nodes = [\"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2550\"]\n" + - " seed-node-timeout = 15s\n" + - " roles = [\"member-1\"]\n" + - "\n" + - " }\n" + - " persistence {\n" + - " journal-plugin-fallback {\n" + - " circuit-breaker {\n" + - " max-failures = 10\n" + - " call-timeout = 60s\n" + - " reset-timeout = 30s\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}\n" + - "\n" + - "odl-cluster-rpc {\n" + - "\n" + - " akka {\n" + - " loglevel = \"\"\n" + - " remote {\n" + - " netty.tcp {\n" + - " hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + - " port = 2551\n" + - " }\n" + - " }\n" + - " actor {\n" + - " debug{\n" + - " autoreceive = on\n" + - " lifecycle = on\n" + - " unhandled = on\n" + - " fsm = on\n" + - " event-stream = on\n" + - " }\n" + - " }\n" + - " cluster {\n" + - " seed-nodes = [\"akka.tcp://odl-cluster-rpc@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2551\"]\n" + - " seed-node-timeout = 15s\n" + - " }\n" + - " persistence {\n" + - " journal-plugin-fallback {\n" + - " circuit-breaker {\n" + - " max-failures = 10\n" + - " call-timeout = 60s\n" + - " reset-timeout = 30s\n" + - " }\n" + - " }\n" + - " }\n" + - " }\n" + - "}\n" + - "\n" + - ""; - } - public static void main(String[] args) - { - AkkaConfig cfg; - try { - System.out.println("testing clusternode config1"); - System.out.println("==========================="); - cfg = AkkaConfig.parse(getAkkaConfigClusterNodeText()); - System.out.println("succeeded: "); - System.out.println(cfg.toString()); - System.out.println(String.format("found %d cluster nodes",cfg.getClusterConfig().getSeedNodes().size())); - for(ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) - { - System.out.println(n.toString()); - } - } catch (Exception e) { - System.out.println("failed: "+e.getMessage()); - } - try { - System.out.println("testing singlenode config1"); - System.out.println("==========================="); - cfg = AkkaConfig.parse(getAkkaConfigSingleNodeText()); - System.out.println("succeeded: "); - System.out.println(cfg.toString()); - } catch (Exception e) { - System.out.println("failed: "+e.getMessage()); - } - try { - System.out.println("testing clusternode config1"); - System.out.println("==========================="); - cfg = AkkaConfig.load("/home/herbert/Nextcloud/captured-karaf-logs/akka.conf"); - System.out.println("succeeded: "); - System.out.println(cfg.toString()); - System.out.println(String.format("found %d cluster nodes",cfg.getClusterConfig().getSeedNodes().size())); - for(ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) - { - System.out.println(n.toString()); - } - } catch (Exception e) { - System.out.println("failed: "+e.getMessage()); - } - - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java deleted file mode 100644 index 1f2f183fd..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/ClusterConfigTest.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.HtDevicemanagerConfiguration; - -public class ClusterConfigTest { - - public static void main(String[] args) - { - final String geoconf="/home/herbert/Nextcloud/captured-karaf-logs/geo.conf"; - final String akkconf="/home/herbert/Nextcloud/captured-karaf-logs/akka.conf"; - final String devmgrprop=""; - - - try { - GeoConfig geo = geoconf==null?null:GeoConfig.load(geoconf); - AkkaConfig akkaConfig = AkkaConfig.load(akkconf); - //HtDevicemanagerConfiguration config = HtDevicemanagerConfiguration.getTestConfiguration(devmgrprop); - String hostName = "0.0.0.0"; - hostName=akkaConfig.getClusterConfig().getHostName(hostName); - String clusterDBName=akkaConfig.getClusterConfig().getDBClusterName(null); - String nodeName=String.format("node%d.%s",akkaConfig.getClusterConfig().getRoleMemberIndex(),clusterDBName); - - System.out.println("hostname="+hostName); - System.out.println("clusterdbName="+clusterDBName); - System.out.println("nodename="+nodeName); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java deleted file mode 100644 index 48cf2db72..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/ConfigTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.HtDevicemanagerConfiguration; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.PmConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.ToggleAlarmConfig; - -public class ConfigTest { - - public static void main(String[] args) - { - HtDevicemanagerConfiguration config; - DcaeConfig c; - EsConfig c3; - AaiConfig c4; - PmConfig c5; - ToggleAlarmConfig c6; - /*config= = HtDevicemanagerConfiguration.getTestConfiguration(); - c=config.getDcae(); - c2=AotsMConfig.getAots(config); - c3=config.getEs(); - c4= config.getAai(); - c5 = config.getPm(); - System.out.println(c.toString()); - System.out.println(c2.toString()); - System.out.println(c3.toString()); - System.out.println(c4.toString()); - System.out.println(c5.toString()); - IConfigChangedListener listener = new IConfigChangedListener() { - - @Override - public void onConfigChanged() { - System.out.println("sth changed"); - AaiConfig c=AaiConfig.reload(); - System.out.println(c.toString()); - } - }; - System.out.println("start listening for changes"); - - config.registerConfigChangedListener(listener ); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - config.unregisterConfigChangedListener(listener); - System.out.println("finished"); - */ - HtDevicemanagerConfiguration.clear(); - config = HtDevicemanagerConfiguration.getTestConfiguration("/home/herbert/tmp/devicemanager.properties"); - c=config.getDcae(); - c3=config.getEs(); - c4 = config.getAai(); - c5 = config.getPm(); - c6 = config.getToggleAlarm(); - System.out.println(c.toString()); - System.out.println(c3.toString()); - System.out.println(c4.toString()); - System.out.println(c5.toString()); - System.out.println(c6.toString()); - - - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java b/sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java deleted file mode 100644 index 9f9962a55..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/ESWebAPITest.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import java.io.IOException; - -import org.json.JSONException; -import org.json.JSONObject; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseWebAPIClient; - -public class ESWebAPITest { - - public static void main(String[] args) - { - HtDatabaseWebAPIClient client=new HtDatabaseWebAPIClient(); - try { - String response=client.sendRequest("/mwtn/mediator-server/_search", "GET", new JSONObject("{\"match\":{\"id\":id}}")); - System.out.println(response); - } catch (JSONException | IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java b/sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java deleted file mode 100644 index 36e60e177..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/GeoConfigTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig; - -public class GeoConfigTest { - - - private static String getClusterGeoConfigContent() - { -return "\n" + - "lumina-geo-cluster {\n" + - " primary_roles = [\n" + - " \"member-1\",\"member-2\",\"member-3\"\n" + - " ]\n" + - " secondary_roles = [\n" + - " \"member-4\",\"member-5\",\"member-6\"\n" + - " ]\n" + - " ip_roles_table = [\n" + - "\n" + - " {\n" + - "role=\"member-1\"\n" + - "ip=\"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + - "},\n" + - "{\n" + - "role=\"member-2\"\n" + - "ip=\"zltcmtn23arbc02.2f0377.mtn23a.tci.att.com\"\n" + - "},\n" + - "{\n" + - "role=\"member-3\"\n" + - "ip=\"zltcmtn23arbc03.2f0377.mtn23a.tci.att.com\"\n" + - "},\n" + - "{\n" + - "role=\"member-4\"\n" + - "ip=\"zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com\"\n" + - "},\n" + - "{\n" + - "role=\"member-5\"\n" + - "ip=\"zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com\"\n" + - "},\n" + - "{\n" + - "role=\"member-6\"\n" + - "ip=\"zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com\"\n" + - "}\n" + - " \n" + - " ]\n" + - "}\n" + - "\n" + - "\n" + - "\n" + - "\n" + - ""; - } - public static void main(String[] args) - { - GeoConfig config; - try { - System.out.println("testing clusternode geo config1"); - System.out.println("==========================="); - config = GeoConfig.parse(getClusterGeoConfigContent()); - System.out.println("succeeded: "); - System.out.println(config.toString()); - System.out.println("primary roles:"); - System.out.println(config.getPrimaryRoles().toString()); - System.out.println("secondary roles:"); - System.out.println(config.getSecondaryRoles().toString()); - - } catch (Exception e) { - System.out.println("failed: "+e.getMessage()); - } - try { - System.out.println("testing clusternode geo config1"); - System.out.println("==========================="); - config = GeoConfig.load("/home/herbert/Nextcloud/captured-karaf-logs/geo.conf"); - System.out.println("succeeded: "); - System.out.println(config.toString()); - System.out.println("primary roles:"); - System.out.println(config.getPrimaryRoles().toString()); - System.out.println("secondary roles:"); - System.out.println(config.getSecondaryRoles().toString()); - - } catch (Exception e) { - System.out.println("failed: "+e.getMessage()); - } - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ResTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ResTest.java deleted file mode 100644 index 17e8d3076..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/ResTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import java.io.IOException; -import java.util.List; - -import org.json.JSONException; -import org.json.JSONObject; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources; - -public class ResTest { - - private static void testDuplicateKeyJSON() - { - try - { - String str=Resources.getFileContent("/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json"); - - JSONObject o=new JSONObject(str) { - - @Override - public JSONObject putOnce(String key, Object value) throws JSONException { - - - Object storedValue; - if (key != null && value != null) { - if ((storedValue = this.opt(key)) != null ) { - if(!storedValue.equals(value)) { //Only through Exception for different values with same key - //Replace - System.out.println("duplicate found"); - this.remove(key); - this.put(key, value); - - } else { - return this; - } - } else { - this.put(key, value); - } - } - return this; - } - }; - System.out.println(o.toString()); - } - catch(IOException err) - { - err.printStackTrace(); - } - } - public static void main(String[] args) - { - JSONObject o=Resources.getJSONFile("/elasticsearch/index/sdnevents/sdneventsMapping.json"); - System.out.println(o==null?"null":o.toString()); - - List list=Resources.getJSONFiles("/elasticsearch/index", true); - System.out.println("found "+list.size()+" valid json files"); - - testDuplicateKeyJSON(); - - } -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java b/sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java deleted file mode 100644 index 812ce4770..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/TestFileChangeNotification.java +++ /dev/null @@ -1,147 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import java.io.File; -import java.io.IOException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -public class TestFileChangeNotification { - /** - * Check every now and then that a certain file has not changed. If it has, then - * call the {@link #doOnChange} method. - * - * @author JunHo Yoon - * @since 3.1.1 - */ - public static abstract class FileWatchdog extends Thread { - - private static final Logger LOGGER = LoggerFactory.getLogger(FileWatchdog.class); - /** - * The default delay between every file modification check, set to 60 - * seconds. - */ - public static final long DEFAULT_DELAY = 60000; - /** - * The name of the file to observe for changes. - */ - private String filename; - - /** - * The delay to observe between every check. By default set - * {@link #DEFAULT_DELAY}. - */ - private long delay = DEFAULT_DELAY; - - private File file; - private long lastModified = 0; - private boolean warnedAlready = false; - private boolean interrupted = false; - - protected FileWatchdog(String filename) { - this.filename = filename; - file = new File(filename); - setDaemon(true); - checkAndConfigure(); - } - - /** - * Set the delay to observe between each check of the file changes. - * - * @param delay - * the frequency of file watch. - */ - public void setDelay(long delay) { - this.delay = delay; - } - - /** - * abstract method to be run when the file is changed. - */ - protected abstract void doOnChange(); - - protected void checkAndConfigure() { - boolean fileExists; - try { - fileExists = file.exists(); - } catch (SecurityException e) { - LOGGER.warn("Was not allowed to read check file existence, file:[" + filename + "]."); - interrupted = true; // there is no point in continuing - return; - } - - if (fileExists) { - long l = file.lastModified(); // this can also throw a - if (lastModified ==0) { - lastModified = l; // is very unlikely. - } - if (l > lastModified) { // however, if we reached this point this - lastModified = l; // is very unlikely. - doOnChange(); - warnedAlready = false; - } - } else { - if (!warnedAlready) { - LOGGER.debug("[" + filename + "] does not exist."); - warnedAlready = true; - } - } - } - - @Override - public void run() { - while (!interrupted && !isInterrupted()) { - try { - Thread.sleep(delay); - } catch (InterruptedException e) { - } - checkAndConfigure(); - } - } - } - - public static class SomeWatchFile extends FileWatchdog{ - - protected SomeWatchFile(String filename) { - super(filename); - this.setDelay(1000); - } - - @Override - protected void doOnChange() { - System.out.println("File has changed"); - } - } - - public static void main(String args[]) throws IOException { - SomeWatchFile someWatchFile = new SomeWatchFile ("watchedFile.txt"); - someWatchFile.start(); - - String fileName = "watchedFile.txt"; - File tempFile = new File(fileName); - tempFile.createNewFile(); - - System.out.println("1. Press F5 in eclipse to see and modify 2. Press enter to exit"); - System.in.read(); - System.out.println("Remove file "+fileName); - tempFile.delete(); - } - - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java b/sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java deleted file mode 100644 index fdf62c2d6..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/UntilTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -public class UntilTest { - - public static void main(String[] args) { - - System.out.println("Test"); - int retry=0, maxRetries=3; - boolean noErrorIndication=false; - - do { - - if (retry > 0) - System.out.println("Sleep"); - noErrorIndication = retry == 0; - System.out.println(retry+ " " + noErrorIndication); - - } while (noErrorIndication == false && retry++ < maxRetries); - - System.out.println("Done "+noErrorIndication+" "+retry); - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java b/sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java deleted file mode 100644 index 860a46ba6..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/ZonedDateTimeTimesTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -import java.time.ZonedDateTime; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilter; - -public class ZonedDateTimeTimesTest { - - public static void main(String[] args) { - - - EsMaintenanceFilter fi = new EsMaintenanceFilter(); - - System.out.println("Default 1: "+fi); - - - fi.setEndAsString("2018-01-01T10:00:00+05:00"); - - System.out.println("Default 2: "+fi); - - System.out.println("As String: "+fi.getEndAsString()); - - - ZonedDateTime start = ZonedDateTime.parse("2018-01-01T10:00:00+05:00"); - ZonedDateTime end = ZonedDateTime.parse("2019-01-01T10:00:00+05:00"); - ZonedDateTime now; - - now = ZonedDateTime.parse("2017-05-01T10:00:00+05:00"); - System.out.println("Vor: "+EsMaintenanceFilter.isInPeriod(start, end, now)); - - now = ZonedDateTime.parse("2018-05-01T10:00:00+05:00"); - System.out.println("in: "+EsMaintenanceFilter.isInPeriod(start, end, now)); - - now = ZonedDateTime.parse("2019-05-01T10:00:00+05:00"); - System.out.println("nach: "+EsMaintenanceFilter.isInPeriod(start, end, now)); - - } - - -} diff --git a/sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java b/sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java deleted file mode 100644 index 4da7251d2..000000000 --- a/sdnr/wt/devicemanager/provider/src/main/test/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/DBPluginExtractTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database; - -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseNode; - -public class DBPluginExtractTest { - - public static void main(String[] args) - { - HtDatabaseNode.checkorcreateplugins("/home/herbert/test"); - } -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java b/sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java deleted file mode 100644 index c5426e3b6..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/ExampleHttpClient.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ - - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPClient; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.http.BaseHTTPResponse; - -/* - * base... baseURL, e.g. http://10.10.55.11:8432/api/paut/ - * - * usage: this.sendRequest() - * uri... all after the baseURL => request-url=base+uri - * headers: https://developer.mozilla.org/de/docs/Web/HTTP/Headers - * - */ -public class ExampleHttpClient extends BaseHTTPClient{ - - private final String username; - private final String password; - - /* - * for normal http request without ssl client certificate authorization - */ - public ExampleHttpClient(String base, boolean trustAllCerts,String user,String passwd) - { - super(base,trustAllCerts); - this.username=user; - this.password=passwd; - int timeout=60000;//http timeout in ms - this.setTimeout(timeout); - - - } - /* - * for client cert authorization - */ - public ExampleHttpClient(String base, boolean trustAllCerts, String certFilename, String passphrase, - int sslCertType) { - super(base, trustAllCerts, certFilename, passphrase, sslCertType); - this.username=""; - this.password=""; - - } - - - public void doExamplePost(String param1,int param2) throws IOException - { - String uri="network/pnf/id"; - String method="GET"; - String body=String.format("{\"param1\":\"%s\",\"param1\":%d}",param1,param2); - Map headers = new HashMap(); - headers.put("Accept-Encoding", "utf-8"); - headers.put("Authorization", BaseHTTPClient.getAuthorizationHeaderValue(this.username, this.password)); - BaseHTTPResponse response=this.sendRequest(uri, method, body, headers ); - - if(response.code==BaseHTTPResponse.CODE200) - { - - } - - - } -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java b/sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java deleted file mode 100644 index fd7773554..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/TestMappEquipment.java +++ /dev/null @@ -1,39 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================================== - * ONAP : ccsdk feature sdnr wt - * ================================================================================================= - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. - * ================================================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - * ============LICENSE_END========================================================================== - ******************************************************************************/ - -public class TestMappEquipment { - - public static void main(String[] args) { - - /* - MyEquipmentBuilder eb = new MyEquipmentBuilder(); - eb.setAdministrativeState(AdministrativeState.Unlocked); - eb.setCategory((new CategoryBuilder()).setCategory(EquipmentCategory.Rack).build()); - - Equipment e2 = eb.build(); - - String inspect = HtDatabaseEventsService.inspect(e2,0); - System.out.println("Inspect: "+inspect); - - String json = HtDatabaseEventsService.toJson(e2); - System.out.println("JSON: "+json); - */ - - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java deleted file mode 100644 index e9ccc53b3..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaePrivateTester.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================= - * ONAP : ccsdk feature sdnr wt - * ================================================================================ - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeConnector.test; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.Reader; -import java.net.URL; -import java.net.URLConnection; -import java.security.cert.X509Certificate; -import javax.net.ssl.HostnameVerifier; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; - -public class DcaePrivateTester { - - - public static void test(URL url, boolean readFromServer) throws Exception { - // Create a trust manager that does not validate certificate chains - TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { - @Override - public java.security.cert.X509Certificate[] getAcceptedIssuers() { - return null; - } - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - } - } }; - // Install the all-trusting trust manager - final SSLContext sc = SSLContext.getInstance("TLS"); - sc.init(null, trustAllCerts, new java.security.SecureRandom()); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - // Create all-trusting host name verifier - HostnameVerifier allHostsValid = (hostname, session) -> true; - - // Install the all-trusting host verifier - HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); - - //URL url = new URL("https://www.google.com"); - URLConnection con = url.openConnection(); - System.out.println("Connection background: "+con.getClass().getName()+" "+url.getHost()); - - if (readFromServer) { - final Reader reader = new InputStreamReader(con.getInputStream()); - final BufferedReader br = new BufferedReader(reader); - String line = ""; - while ((line = br.readLine()) != null) { - System.out.println(line); - } - br.close(); - } /**/ - } // End of main - - - -// httpTestUrl=https://plan.fritz.box:9092/ux/# -// keyStore=etc/clientkeystore -// keyStorePassword=daylight2016 - public static void main(String[] args) { - - String urlString = "https://www.google.de"; - //String urlString = "https://plan.fritz.box:9092/ux/#"; - //String urlString = "http://plan.fritz.box:9091/ux/#"; - //String urlString = "http://127.0.0.1:30000/eventListener/v3"; - - try { - test(new URL(urlString), true); - } catch (Exception e) { - System.out.println("(..something..) failed"); - e.printStackTrace(); - } - /* - System.out.println("Test HTTPS"); - - final HttpsClient httpTestClient; - httpTestClient = new HttpsClient(); - - httpTestClient.testIt( - //"https://plan.fritz.box:9092/ux/#", - "https://www.google.de", - "/home/herbert/odl/distribution-karaf-0.5.1-Boron-SR1/etc/clientkeystore", - "daylight2016" - );/**/ - - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java deleted file mode 100644 index ffc007a06..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/DcaeTestClient.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================= - * ONAP : ccsdk feature sdnr wt - * ================================================================================ - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeConnector.test; - -import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeMessages; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeSenderImpl; - -public class DcaeTestClient { - - private static final boolean TESTCOLLECTOR_YES = true; - - public static void main(String[] args) { - - System.out.println("Test program to verify DCAE https connectivity"); - - //Get configuration - DcaeConfig configuration = DcaeConfig.getDefaultConfiguration(); - - if (configuration != null) { - - //Start services - System.out.println("Configuration: "+configuration); - - DcaeSenderImpl dcaeClient = new DcaeSenderImpl(configuration.getEventReveicerUrl(), configuration.getUserCredentials()); - - if (TESTCOLLECTOR_YES) { - System.out.println("Connect to testclient and send notifications"); - - DcaeMessages dcaeMessages = new DcaeMessages(dcaeClient, "ControllerName", 31, null); - - for (int t=0; t < 2; t++) { - try { - Thread.sleep(1000); //1000 milliseconds is one second. - } catch(InterruptedException ex) { - Thread.currentThread().interrupt(); - } - System.out.println(t+". Send notification and receive answer message"); - System.out.println("Heartbeat message: "+dcaeMessages.postHeartBeat()); - System.out.println("Status of ECOMP Client: "+dcaeClient.getStatusAsString()); - } - - } else { - - System.out.println("Connect to server and receive initial answer."); - System.out.println("Message: "+dcaeClient.testConnectServer()); - - } - - } - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java deleted file mode 100644 index 6ff18b48f..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/dcaeConnector/test/HttpsClient.java +++ /dev/null @@ -1,304 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================= - * ONAP : ccsdk feature sdnr wt - * ================================================================================ - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeConnector.test; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.security.KeyManagementException; -import java.security.NoSuchAlgorithmException; -import java.security.SecureRandom; -import java.security.cert.Certificate; -import java.security.cert.X509Certificate; -import javax.net.ssl.HttpsURLConnection; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLPeerUnverifiedException; -import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient; - -public class HttpsClient{ - - private static final MyLogger LOG = MyLogger.getLogger(DcaeProviderClient.class); - - void test() { - - TrustManager tm = new X509TrustManager() { - - @Override - public void checkClientTrusted(X509Certificate[] chain, String authType) - throws java.security.cert.CertificateException { - //do nothing, you're the client - } - - @Override - public void checkServerTrusted(X509Certificate[] chain, String authType) - throws java.security.cert.CertificateException { - /* chain[chain.length -1] is the candidate for the - * root certificate. - * Look it up to see whether it's in your list. - * If not, ask the user for permission to add it. - * If not granted, reject. - * Validate the chain using CertPathValidator and - * your list of trusted roots. - */ - } - - @Override - public X509Certificate[] getAcceptedIssuers() { - //also only relevant for servers - return null; - } - }; - - TrustManager tml[] = new TrustManager[1]; - tml[0] = tm; - - - try { - SSLContext ctx = SSLContext.getInstance("TLS"); - ctx.init(null, tml, null); - @SuppressWarnings("unused") - SSLSocketFactory sslF = ctx.getSocketFactory(); - - } catch (NoSuchAlgorithmException | KeyManagementException e) { - e.printStackTrace(); - } - - - }; - - void setupAllTrustingManager() { - // Create a trust manager that does not validate certificate chains - TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){ - @Override - public X509Certificate[] getAcceptedIssuers(){return null;} - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType){} - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType){} - }}; - - // Install the all-trusting trust manager - try { - SSLContext sc = SSLContext.getInstance("TLS"); - sc.init(null, trustAllCerts, new SecureRandom()); - HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); - } catch (Exception e) { - ; - } - } - - void testIt(String https_url, String keyStoreName, String keyStorePassword){ - - LOG.info("Message to: {} begin.", https_url); - - if (https_url.equals("off")) { - LOG.info("Function switched off"); - return; - } - - /* - KeyManagerFactory keyManagerFactory = null; - - try { - KeyStore ks = KeyStore.getInstance("JKS"); - FileInputStream in = new FileInputStream(keyStoreName); - ks.load(in, keyStorePassword.toCharArray()); - - CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); - FileInputStream in2 = new FileInputStream("etc/eventprovider.cert"); - X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in2); - - KeyStore.Entry newEntry = new KeyStore.TrustedCertificateEntry(cert); - ks.setEntry("someAlias", newEntry, null); - - keyManagerFactory = KeyManagerFactory.getInstance("X509"); - keyManagerFactory.init(ks, "yourKeyStorePassword".toCharArray()); - - } catch (KeyStoreException e1) { - LOG.info("Exception: {}", e1.getMessage()); - } catch (FileNotFoundException e1) { - LOG.info("Exception: {}", e1.getMessage()); - } catch (NoSuchAlgorithmException e1) { - LOG.info("Exception: {}", e1.getMessage()); - } catch (CertificateException e1) { - LOG.info("Exception: {}", e1.getMessage()); - } catch (IOException e1) { - LOG.info("Exception: {}", e1.getMessage()); - } catch (UnrecoverableKeyException e1) { - LOG.info("Exception: {}", e1.getMessage()); - } - - // Create a trust manager that does not validate certificate chains - TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){ - @Override - public X509Certificate[] getAcceptedIssuers(){return null;} - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType){} - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType){} - }}; - */ - File file = new File(keyStoreName); - LOG.info("Setup keystore begin "+keyStoreName+" "+keyStorePassword+" Exists: "+file.exists()); - - System.setProperty("javax.net.debug","ssl"); - System.setProperty("javax.net.ssl.keyStoreType", "jks"); - System.setProperty("javax.net.ssl.keyStore", keyStoreName); - System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); - - LOG.info("Setup keystore complete"); - - javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier( - (hostname, sslSession) -> { - LOG.info("Hostname check {}", hostname); - return true; - }); - LOG.info("Setup name verifier."); - - try { - /* - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(keyManagerFactory.getKeyManagers(), trustAllCerts, null); - SSLContext.setDefault(sslContext); - */ - - URL url = new URL(https_url); - LOG.info("Url object created"); - - HttpsURLConnection con = (HttpsURLConnection)url.openConnection(); - - LOG.info("openConnection"); - - //dumpl all cert info - print_https_cert(con); - - //dump all the content - print_content(con); - - } catch (MalformedURLException e) { - LOG.info("Exception: {}", e.getMessage()); - } catch (IOException e) { - LOG.info("Exception: {}", e.getMessage()); - } - - LOG.info("Message to: {} end.", https_url); - - } - - private void print_https_cert(HttpsURLConnection con){ - - StringBuffer logMsg = new StringBuffer(); - - if(con!=null){ - - try { - logMsg.append("Response Code : " + con.getResponseCode()); - logMsg.append("Cipher Suite : " + con.getCipherSuite()); - logMsg.append("\n"); - - Certificate[] certs = con.getServerCertificates(); - for(Certificate cert : certs){ - logMsg.append("Cert Type : " + cert.getType()); - logMsg.append("Cert Hash Code : " + cert.hashCode()); - logMsg.append("Cert Public Key Algorithm : " + cert.getPublicKey().getAlgorithm()); - logMsg.append("Cert Public Key Format : " + cert.getPublicKey().getFormat()); - logMsg.append("\n"); - } - - - } catch (SSLPeerUnverifiedException e) { - logMsg.append(e.getMessage()); - } catch (IOException e){ - logMsg.append(e.getMessage()); - } - } else { - logMsg.append("No connection"); - } - - LOG.info(logMsg.toString()); - } - - private void print_content(HttpsURLConnection con){ - - StringBuffer logMsg = new StringBuffer(); - if(con!=null){ - - try { - - - logMsg.append("****** Content of the URL ********"); - BufferedReader br = - new BufferedReader( - new InputStreamReader(con.getInputStream())); - - String input; - - while ((input = br.readLine()) != null){ - logMsg.append(input); - } - br.close(); - - - } catch (IOException e) { - logMsg.append(e.getMessage()); - } - - } else { - logMsg.append("No connection"); - } - - LOG.info(logMsg.toString()); - - } - - private static class MyLogger { - - private void out( String s, Object...oList) { - StringBuffer sb = new StringBuffer(); - sb.append("-------> "); - sb.append(s); - sb.append(" P: "); - int t = 0; - for (Object o: oList) { - sb.append("["); - sb.append(t++); - sb.append("]("); - sb.append(o.toString()); - sb.append(")"); - } - System.out.println(sb.toString()); - } - - void info( String s, Object...o) { - out(s,o); - } - - static MyLogger getLogger(Class c) { - return new MyLogger(); - } - } -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java deleted file mode 100644 index 358a17c39..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/Test1dm.java +++ /dev/null @@ -1,175 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================= - * ONAP : ccsdk feature sdnr wt - * ================================================================================ - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - ******************************************************************************/ -package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerService.Action; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.DataBrokerNetconfMock; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.MountPointMock; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.MountPointServiceMock; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.NotificationPublishServiceMock; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.RpcProviderRegistryMock; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.MountPointService; -import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; -import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; - -public class Test1dm { - - private static int DATABASETIMEOUTSECONDS = 30; - - private static Path KARAF_ETC = Paths.get("etc"); - private static DeviceManagerImpl deviceManager; - private static MountPointMock mountPoint; - - - @BeforeClass - public static void before() throws InterruptedException, IOException { - - // Call System property to get the classpath value - Path etc = KARAF_ETC; - delete(etc); - System.out.println("Create empty:"+etc.toString()); - Files.createDirectories(etc); - - //Create mocks - DataBroker dataBroker = new DataBrokerNetconfMock(); - MountPointService mountPointService = new MountPointServiceMock(mountPoint = new MountPointMock()); - NotificationPublishService notificationPublishService = new NotificationPublishServiceMock(); - RpcProviderRegistry rpcProviderRegistry = new RpcProviderRegistryMock(); - - //start using blueprint interface - deviceManager = new DeviceManagerImpl(); - - deviceManager.setDataBroker(dataBroker); - deviceManager.setMountPointService(mountPointService); - deviceManager.setNotificationPublishService(notificationPublishService); - deviceManager.setRpcProviderRegistry(rpcProviderRegistry); - - try { - deviceManager.init(); - } catch (Exception e) { - e.printStackTrace(); - } - System.out.println("Initialization status: "+deviceManager.isDevicemanagerInitializationOk()); - assertTrue("Devicemanager not initialized", deviceManager.isDevicemanagerInitializationOk()); - System.out.println("Initialization done"); - } - - @AfterClass - public static void after() throws InterruptedException, IOException { - - System.out.println("Start shutdown"); - //close using blueprint interface - try { - deviceManager.close(); - } catch (Exception e) { - System.out.println(e); - } - delete(KARAF_ETC); - - } - - @Test - public void test1() throws InterruptedException { - - System.out.println("Test1: Wait for database"); - int timeout = DATABASETIMEOUTSECONDS; - while ( !deviceManager.isDatabaseInitializationFinished() && timeout-- > 0) { - System.out.println("Test1: "+timeout); - Thread.sleep(1000); //On second - } - System.out.println("Test1: database initialized"); - } - - @Test - public void test2() { - System.out.println("Test2: slave mountpoint"); - - mountPoint.setDatabrokerAbsent(true); - NodeId nodeId = new NodeId("mountpointTest1"); - NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder(); - - System.out.println("Call devicemanager"); - try { - deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNodeBuilder.build()); - } catch (Exception e) { - e.printStackTrace(); - fail("Exception received."); - } - System.out.println("Test2: Done"); - - } - - @Test - public void test3() { - System.out.println("Test3: master mountpoint"); - - mountPoint.setDatabrokerAbsent(false); - NodeId nodeId = new NodeId("mountpointTest2"); - NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder(); - - System.out.println("Call devicemanager"); - - try { - deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNodeBuilder.build()); - } catch (Exception e) { - e.printStackTrace(); - fail("Exception received."); - } - System.out.println("Test3: Done"); - - } - - //********************* Private - - private static void delete(Path etc) throws IOException { - if (Files.exists(etc)) { - System.out.println("Found and remove:"+etc.toString()); - delete(etc.toFile()); - } - } - - private static void delete(File f) throws IOException { - if (f.isDirectory()) { - for (File c : f.listFiles()) { - delete(c); - } - } - if (!f.delete()) { - throw new FileNotFoundException("Failed to delete file: " + f); - } - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java new file mode 100644 index 000000000..2ce5ec9d3 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java @@ -0,0 +1,232 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.AaiProviderClient; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration; +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import com.google.common.io.Files; + +public class TestAai { + + private static final String ENABLEDAAI_TESTCONFIG_FILENAME = "test2.properties"; + private static final int AAI_SERVER_PORT=45454; + private static final String TESTCONFIG_CONTENT="[dcae]\n" + + "dcaeUserCredentials=admin:admin\n" + + "dcaeUrl=off\n" + + "dcaeHeartbeatPeriodSeconds=120\n" + + "dcaeTestCollector=no\n" + + "\n" + + "[aots]\n" + + "userPassword=passwd\n" + + "soapurladd=off\n" + + "soapaddtimeout=10\n" + + "soapinqtimeout=20\n" + + "userName=user\n" + + "inqtemplate=inqreq.tmpl.xml\n" + + "assignedto=userid\n" + + "addtemplate=addreq.tmpl.xml\n" + + "severitypassthrough=critical,major,minor,warning\n" + + "systemuser=user\n" + + "prt-offset=1200\n" + + "soapurlinq=off\n" + + "#smtpHost=\n" + + "#smtpPort=\n" + + "#smtpUsername=\n" + + "#smtpPassword=\n" + + "#smtpSender=\n" + + "#smtpReceivers=\n" + + "\n" + + "[es]\n" + + "esCluster=sendateodl5\n" + + "\n" + + "[aai]\n" + + "#keep comment\n" + + "aaiHeaders=[\"X-TransactionId: 9999\"]\n" + + "aaiUrl=http://localhost:"+AAI_SERVER_PORT+"\n" + + "aaiUserCredentials=AAI:AAI\n" + + "aaiDeleteOnMountpointRemove=true\n" + + "aaiTrustAllCerts=false\n" + + "aaiApiVersion=aai/v13\n" + + "aaiPropertiesFile=aaiclient.properties\n" + + "aaiApplicationId=SDNR\n" + + "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" + + "aaiPcks12ClientCertPassphrase=adminadmin\n" + + "aaiClientConnectionTimeout=30000\n" + + "\n" + + "[pm]\n" + + "pmCluster=sendateodl5\n" + + "pmEnabled=true\n" + + "\n" + + ""; + private HttpServer server; + private ExecutorService httpThreadPool; + private HtDevicemanagerConfiguration cfg; + + @Test + public void test() { + HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration(); + + AaiProviderClient provider = new AaiProviderClient(cfg, null); + + String mountPointName = "testDevice 01"; + String type="Unit"; + String model="Horizon Compact+"; + String vendor="DragonWave-X"; + String ipv4="127.0.0.1"; + String ipv6="::1"; + List ifInfos = new ArrayList<>(); + ifInfos.add("LP-MWPS-RADIO"); + InventoryInformation ii=new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos); + System.out.println("registering device"); + provider.onDeviceRegistered(mountPointName,ii); + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("unregistering device"); + provider.onDeviceUnregistered(mountPointName); + System.out.println("finished"); + try { + provider.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Test + public void test2() { + try { + Thread.sleep(3000); + } catch (InterruptedException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + AaiProviderClient provider = new AaiProviderClient(cfg, null); + + String mountPointName = "testDevice 01"; + String type="Unit"; + String model="Horizon Compact+"; + String vendor="DragonWave-X"; + String ipv4="127.0.0.1"; + String ipv6="::1"; + List ifInfos = new ArrayList<>(); + ifInfos.add("LP-MWPS-RADIO"); + InventoryInformation ii=new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos); + System.out.println("registering device"); + provider.onDeviceRegistered(mountPointName); + provider.onDeviceRegistered(mountPointName,ii); + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("unregistering device"); + provider.onDeviceUnregistered(mountPointName); + System.out.println("finished"); + try { + provider.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Before + public void initAaiTestWebserver() throws IOException { + try { + Files.asCharSink(new File(ENABLEDAAI_TESTCONFIG_FILENAME), StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT); + } catch (IOException e1) { + fail(e1.getMessage()); + } + cfg=HtDevicemanagerConfiguration.getTestConfiguration(ENABLEDAAI_TESTCONFIG_FILENAME,true); + cfg.getAai().reload(); + this.server = HttpServer.create(new InetSocketAddress(AAI_SERVER_PORT), 0); + this.httpThreadPool = Executors.newFixedThreadPool(5); + this.server.setExecutor(this.httpThreadPool); + this.server.createContext(cfg.getAai().getBaseUri(), new MyHandler()); + //server.createContext("/", new MyRootHandler()); + this.server.setExecutor(null); // creates a default executor + this.server.start(); + System.out.println("http server started"); + } + + @After + public void stopTestWebserver() { + if (this.server != null) { + this.server.stop(0); + this.httpThreadPool.shutdownNow(); + System.out.println("http server stopped" ); + } + } + static class MyHandler implements HttpHandler { + @Override + public void handle(HttpExchange t) throws IOException { + String method = t.getRequestMethod(); + System.out.println("req method: " + method); + OutputStream os = null; + try { + String res=""; + if (method.equals("GET")) { + t.sendResponseHeaders(404,res.length() ); + os = t.getResponseBody(); + os.write(res.getBytes()); + } else if (method.equals("DELETE")) { + t.sendResponseHeaders(200, res.length()); + os = t.getResponseBody(); + os.write(res.getBytes()); + } else if (method.equals("PUT")) { + t.sendResponseHeaders(200, res.length()); + os = t.getResponseBody(); + os.write(res.getBytes()); + } else { + t.sendResponseHeaders(404, 0); + } + System.out.println("req handled successful"); + + } catch (Exception e) { + System.out.println(e.getMessage()); + } + finally { + if (os != null) + { + os.close(); + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java new file mode 100644 index 000000000..a9df83d0c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java @@ -0,0 +1,138 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.fail; +import java.io.File; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ClusterNodeInfo; + +public class TestAkkaConfig { + + private static String getAkkaConfigSingleNodeText() { + return "\n" + "odl-cluster-data {\n" + " akka {\n" + " remote {\n" + " artery {\n" + + " enabled = off\n" + " canonical.hostname = \"127.0.0.1\"\n" + + " canonical.port = 2550\n" + " }\n" + " netty.tcp {\n" + + " hostname = \"127.0.0.1\"\n" + " port = 2550\n" + " }\n" + + " # when under load we might trip a false positive on the failure detector\n" + + " # transport-failure-detector {\n" + " # heartbeat-interval = 4 s\n" + + " # acceptable-heartbeat-pause = 16s\n" + " # }\n" + " }\n" + "\n" + " cluster {\n" + + " # Remove \".tcp\" when using artery.\n" + + " seed-nodes = [\"akka.tcp://opendaylight-cluster-data@127.0.0.1:2550\"]\n" + "\n" + + " roles = [\n" + " \"member-1\"\n" + " ]\n" + "\n" + " }\n" + "\n" + + " persistence {\n" + + " # By default the snapshots/journal directories live in KARAF_HOME. You can choose to put it somewhere else by\n" + + " # modifying the following two properties. The directory location specified may be a relative or absolute path. \n" + + " # The relative path is always relative to KARAF_HOME.\n" + "\n" + + " # snapshot-store.local.dir = \"target/snapshots\"\n" + + " # journal.leveldb.dir = \"target/journal\"\n" + "\n" + " journal {\n" + + " leveldb {\n" + " # Set native = off to use a Java-only implementation of leveldb.\n" + + " # Note that the Java-only version is not currently considered by Akka to be production quality.\n" + + "\n" + " # native = off\n" + " }\n" + " }\n" + " }\n" + " }\n" + "}"; + } + + private static String getAkkaConfigClusterNodeText() { + return "\n" + "odl-cluster-data {\n" + "\n" + " akka {\n" + " loglevel = \"\"\n" + " remote {\n" + + " netty.tcp {\n" + " hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + + " port = 2550\n" + " }\n" + " }\n" + " actor {\n" + " debug{\n" + + " autoreceive = on\n" + " lifecycle = on\n" + " unhandled = on\n" + + " fsm = on\n" + " event-stream = on\n" + " }\n" + " }\n" + " cluster {\n" + + " seed-nodes = [\"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2550\", \"akka.tcp://opendaylight-cluster-data@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2550\"]\n" + + " seed-node-timeout = 15s\n" + " roles = [\"member-1\"]\n" + "\n" + " }\n" + + " persistence {\n" + " journal-plugin-fallback {\n" + " circuit-breaker {\n" + + " max-failures = 10\n" + " call-timeout = 60s\n" + + " reset-timeout = 30s\n" + " }\n" + " }\n" + " }\n" + " }\n" + "}\n" + "\n" + + "odl-cluster-rpc {\n" + "\n" + " akka {\n" + " loglevel = \"\"\n" + " remote {\n" + + " netty.tcp {\n" + " hostname = \"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + + " port = 2551\n" + " }\n" + " }\n" + " actor {\n" + " debug{\n" + + " autoreceive = on\n" + " lifecycle = on\n" + " unhandled = on\n" + + " fsm = on\n" + " event-stream = on\n" + " }\n" + " }\n" + " cluster {\n" + + " seed-nodes = [\"akka.tcp://odl-cluster-rpc@zltcmtn23arbc01.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc02.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23arbc03.2f0377.mtn23a.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com:2551\", \"akka.tcp://odl-cluster-rpc@zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com:2551\"]\n" + + " seed-node-timeout = 15s\n" + " }\n" + " persistence {\n" + + " journal-plugin-fallback {\n" + " circuit-breaker {\n" + " max-failures = 10\n" + + " call-timeout = 60s\n" + " reset-timeout = 30s\n" + " }\n" + " }\n" + + " }\n" + " }\n" + "}\n" + "\n" + ""; + } + + @Test + public void test1() { + AkkaConfig cfg; + try { + System.out.println("testing clusternode config1"); + System.out.println("==========================="); + cfg = AkkaConfig.parse(getAkkaConfigClusterNodeText()); + System.out.println("succeeded: "); + System.out.println(cfg.toString()); + System.out.println(String.format("found %d cluster nodes", cfg.getClusterConfig().getSeedNodes().size())); + for (ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) { + System.out.println(n.toString()); + } + } catch (Exception e) { + String failMessage = "failed: " + e.getMessage(); + System.out.println(failMessage); + fail(failMessage); + } + } + + @Test + public void test2() { + AkkaConfig cfg; + try { + System.out.println("testing singlenode config1"); + System.out.println("==========================="); + cfg = AkkaConfig.parse(getAkkaConfigSingleNodeText()); + System.out.println("succeeded: "); + System.out.println(cfg.toString()); + } catch (Exception e) { + String failMessage = "failed: " + e.getMessage(); + System.out.println(failMessage); + fail(failMessage); + } + } + + @Test + public void test3() { + AkkaConfig cfg; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("captured-akka.conf").getFile()); + System.out.println(file.getAbsolutePath()); + + try { + System.out.println("testing clusternode config1"); + System.out.println("==========================="); + cfg = AkkaConfig.load(file.getAbsolutePath()); + System.out.println("succeeded: "); + System.out.println(cfg.toString()); + System.out.println(String.format("found %d cluster nodes", cfg.getClusterConfig().getSeedNodes().size())); + for (ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) { + System.out.println(n.toString()); + } + } catch (Exception e) { + String failMessage = "failed: " + e.getMessage(); + System.out.println(failMessage); + fail(failMessage); + } + } + + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java new file mode 100644 index 000000000..6d7cdd130 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java @@ -0,0 +1,203 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import com.google.common.io.Files; + +public class TestDcae { + + private static final String ENABLEDDCAE_TESTCONFIG_FILENAME = "test2.properties"; + private static final int DCAE_SERVER_PORT=45451; + private static final String URI = "/abc"; + private static final String TESTCONFIG_CONTENT="[dcae]\n" + + "dcaeUserCredentials=admin:admin\n" + + "dcaeUrl=http://localhost:"+DCAE_SERVER_PORT+URI+"\n" + + "dcaeHeartbeatPeriodSeconds=120\n" + + "dcaeTestCollector=no\n" + + "\n" + + "[aots]\n" + + "userPassword=passwd\n" + + "soapurladd=off\n" + + "soapaddtimeout=10\n" + + "soapinqtimeout=20\n" + + "userName=user\n" + + "inqtemplate=inqreq.tmpl.xml\n" + + "assignedto=userid\n" + + "addtemplate=addreq.tmpl.xml\n" + + "severitypassthrough=critical,major,minor,warning\n" + + "systemuser=user\n" + + "prt-offset=1200\n" + + "soapurlinq=off\n" + + "#smtpHost=\n" + + "#smtpPort=\n" + + "#smtpUsername=\n" + + "#smtpPassword=\n" + + "#smtpSender=\n" + + "#smtpReceivers=\n" + + "\n" + + "[es]\n" + + "esCluster=sendateodl5\n" + + "\n" + + "[aai]\n" + + "#keep comment\n" + + "aaiHeaders=[\"X-TransactionId: 9999\"]\n" + + "aaiUrl=off\n" + + "aaiUserCredentials=AAI:AAI\n" + + "aaiDeleteOnMountpointRemove=true\n" + + "aaiTrustAllCerts=false\n" + + "aaiApiVersion=aai/v13\n" + + "aaiPropertiesFile=aaiclient.properties\n" + + "aaiApplicationId=SDNR\n" + + "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" + + "aaiPcks12ClientCertPassphrase=adminadmin\n" + + "aaiClientConnectionTimeout=30000\n" + + "\n" + + "[pm]\n" + + "pmCluster=sendateodl5\n" + + "pmEnabled=true\n" + + "\n" + + ""; + private HttpServer server; + private ExecutorService httpThreadPool; + private HtDevicemanagerConfiguration cfg; + + @Test + public void test2() { + try { + Thread.sleep(3000); + } catch (InterruptedException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + DcaeProviderClient provider = new DcaeProviderClient(cfg,"mountpoint",null); + + String mountPointName = "testDevice 01"; + String type="Unit"; + String model="Horizon Compact+"; + String vendor="DragonWave-X"; + String ipv4="127.0.0.1"; + String ipv6="::1"; + List ifInfos = new ArrayList<>(); + ifInfos.add("LP-MWPS-RADIO"); + InventoryInformation ii=new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos); + System.out.println("registering device"); + boolean neDeviceAlarm = false; + ProblemNotificationXml notification = new ProblemNotificationXml(mountPointName, "network-element", "problemName", InternalSeverity.Critical,"123", InternalDateAndTime.getTestpattern()); + provider.sendProblemNotification(mountPointName, notification, neDeviceAlarm); + + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + provider.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + @Before + public void initDcaeTestWebserver() throws IOException { + try { + Files.asCharSink(new File(ENABLEDDCAE_TESTCONFIG_FILENAME), StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT); + } catch (IOException e1) { + fail(e1.getMessage()); + } + cfg=HtDevicemanagerConfiguration.getTestConfiguration(ENABLEDDCAE_TESTCONFIG_FILENAME,true); + cfg.getDcae().reload(); + try + { + this.server = HttpServer.create(new InetSocketAddress(DCAE_SERVER_PORT), 0); + } + catch(Exception e) { + fail(e.getMessage()); + } + this.httpThreadPool = Executors.newFixedThreadPool(5); + this.server.setExecutor(this.httpThreadPool); + this.server.createContext(URI, new MyHandler()); + //server.createContext("/", new MyRootHandler()); + this.server.setExecutor(null); // creates a default executor + this.server.start(); + System.out.println("http server started"); + } + + @After + public void stopTestWebserver() { + if (this.server != null) { + this.server.stop(0); + this.httpThreadPool.shutdownNow(); + System.out.println("http server stopped" ); + } + } + static class MyHandler implements HttpHandler { + @Override + public void handle(HttpExchange t) throws IOException { + String method = t.getRequestMethod(); + System.out.println("req method: " + method); + OutputStream os = null; + try { + String res=""; + if (method.equals("POST")) { + t.sendResponseHeaders(200,res.length() ); + os = t.getResponseBody(); + os.write(res.getBytes()); + } else { + t.sendResponseHeaders(404, 0); + } + System.out.println("req handled successful"); + + } catch (Exception e) { + System.out.println(e.getMessage()); + } + finally { + if (os != null) + { + os.close(); + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java new file mode 100644 index 000000000..3a6655d60 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java @@ -0,0 +1,245 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import org.junit.After; +import org.junit.Before; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.EsConfig; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.PmConfig; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.ToggleAlarmConfig; + +import com.google.common.io.Files; + +public class TestDevMgrPropertiesFile { + + private static final String FILENAME = "test.properties"; + private static final String AAIPROP_FILE="aaiclient.properties"; + protected boolean hasChanged; + + @Before + public void init() { + File f=new File(FILENAME); + if(f.exists()) { + f.delete(); + } + f=new File(AAIPROP_FILE); + if(f.exists()) { + f.delete(); + } + } + @After + public void deinit() { + this.init(); + } + + //@Test + public void test() { + File f=new File(FILENAME); + hasChanged=false; + try { + Files.asCharSink(f, StandardCharsets.UTF_8).write(this.getContent1()); + } catch (IOException e) { + fail(e.getMessage()); + }; + f=new File(AAIPROP_FILE); + try { + Files.asCharSink(f, StandardCharsets.UTF_8).write(this.getAaiPropertiesConfig()); + } catch (IOException e) { + fail(e.getMessage()); + }; + HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration(FILENAME); + assertNotNull(cfg.getAai()); + assertNotNull(cfg.getDcae()); + assertNotNull(cfg.getPm()); + assertNotNull(cfg.getEs()); + assertNotNull(cfg.getToggleAlarm()); + assertTrue(AaiConfig.isInstantiated()); + assertTrue(DcaeConfig.isInstantiated()); + assertTrue(PmConfig.isInstantiated()); + assertTrue(EsConfig.isInstantiated()); + assertTrue(ToggleAlarmConfig.isInstantiated()); + + + assertFalse(cfg.getAai().equals(AaiConfig.getDefaultConfiguration())); + assertFalse(cfg.getDcae().equals(DcaeConfig.getDefaultConfiguration())); + assertFalse(cfg.getPm().equals(PmConfig.getDefaultConfiguration())); + assertFalse(cfg.getEs().equals(EsConfig.getDefaultConfiguration())); + assertFalse(cfg.getToggleAlarm().equals(ToggleAlarmConfig.getDefaultConfiguration())); + System.out.println(cfg.getAai().toString()); + System.out.println(cfg.getDcae().toString()); + System.out.println(cfg.getPm().toString()); + System.out.println(cfg.getEs().toString()); + System.out.println(cfg.getToggleAlarm().toString()); + cfg.registerConfigChangedListener(() -> { + hasChanged=true; + System.out.println("file changed listener triggered"); + AaiConfig.reload(); + DcaeConfig.reload(); + PmConfig.reload(); + EsConfig.reload(); + ToggleAlarmConfig.reload(); + + }); + try { + Files.asCharSink(f, StandardCharsets.UTF_8).write(this.getContent2()); + } catch (IOException e) { + fail(e.getMessage()); + }; + int i=0; + while(!hasChanged && i++<10) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + + } + assertTrue("fileChanged not covered",hasChanged); + assertFalse(cfg.getAai().hashCode()==AaiConfig.getDefaultConfiguration().hashCode()); + assertFalse(cfg.getDcae().hashCode()==DcaeConfig.getDefaultConfiguration().hashCode()); + assertFalse(cfg.getPm().hashCode()==PmConfig.getDefaultConfiguration().hashCode()); + assertFalse(cfg.getEs().hashCode()==EsConfig.getDefaultConfiguration().hashCode()); + assertFalse(cfg.getToggleAlarm().hashCode()==ToggleAlarmConfig.getDefaultConfiguration().hashCode()); + + HtDevicemanagerConfiguration.clear(); + + + } + private CharSequence getContent2() { + return "[dcae]\n" + + "dcaeUserCredentials=admin:admin\n" + + "dcaeUrl=http://localhost:45451/abc\n" + + "dcaeHeartbeatPeriodSeconds=120\n" + + "dcaeTestCollector=no\n" + + "\n" + + "[aots]\n" + + "userPassword=passwd\n" + + "soapurladd=off\n" + + "soapaddtimeout=10\n" + + "soapinqtimeout=20\n" + + "userName=user\n" + + "inqtemplate=inqreq.tmpl.xml\n" + + "assignedto=userid\n" + + "addtemplate=addreq.tmpl.xml\n" + + "severitypassthrough=critical,major,minor,warning\n" + + "systemuser=user\n" + + "prt-offset=1200\n" + + "soapurlinq=off\n" + + "#smtpHost=\n" + + "#smtpPort=\n" + + "#smtpUsername=\n" + + "#smtpPassword=\n" + + "#smtpSender=\n" + + "#smtpReceivers=\n" + + "\n" + + "[es]\n" + + "esCluster=sendateodl5\n" + + "\n" + + "[aai]\n" + + "#keep comment\n" + + "aaiHeaders=[\"X-TransactionId: 9999\"]\n" + + "aaiUrl=off\n" + + "aaiUserCredentials=AAI:AAI\n" + + "aaiDeleteOnMountpointRemove=true\n" + + "aaiTrustAllCerts=false\n" + + "aaiApiVersion=aai/v13\n" + + "aaiPropertiesFile=aaiclient.properties\n" + + "aaiApplicationId=SDNR\n" + + "aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12\n" + + "aaiPcks12ClientCertPassphrase=adminadmin\n" + + "aaiClientConnectionTimeout=30000\n" + + "\n" + + "[pm]\n" + + "pmCluster=sendateodl5\n" + + "pmEnabled=true\n" + + "[toggleAlarmFilter]\n" + + "taEnabled=true\n" + + "taDelay=5555\n" + + ""; + } + + private String getContent1() { + return "[dcae]\n" + + "dcaeUserCredentials=admin:admin\n" + + "dcaeUrl=http://localhost:45/abc\n" + + "dcaeHeartbeatPeriodSeconds=120\n" + + "dcaeTestCollector=no\n" + + "\n" + + "[aots]\n" + + "userPassword=passwd\n" + + "soapurladd=off\n" + + "soapaddtimeout=10\n" + + "soapinqtimeout=20\n" + + "userName=user\n" + + "inqtemplate=inqreq.tmpl.xml\n" + + "assignedto=userid\n" + + "addtemplate=addreq.tmpl.xml\n" + + "severitypassthrough=critical,major,minor,warning\n" + + "systemuser=user\n" + + "prt-offset=1200\n" + + "soapurlinq=off\n" + + "#smtpHost=\n" + + "#smtpPort=\n" + + "#smtpUsername=\n" + + "#smtpPassword=\n" + + "#smtpSender=\n" + + "#smtpReceivers=\n" + + "\n" + + "[es]\n" + + "esCluster=sendateodl5\n" + + "\n" + + "[aai]\n" + + "#keep comment\n" + + "aaiHeaders=[\"X-TransactionId: 9999\"]\n" + + "aaiUrl=off\n" + + "aaiUserCredentials=AAI:AAI\n" + + "aaiDeleteOnMountpointRemove=true\n" + + "aaiTrustAllCerts=false\n" + + "aaiApiVersion=aai/v13\n" + + "aaiPropertiesFile=aaiclient.properties\n" + + "\n" + + "[pm]\n" + + "pmCluster=sendateodl5\n" + + "pmEnabled=true\n" + + "[toggleAlarmFilter]\n" + + "taEnabled=false\n" + + "taDelay=5555\n" + + ""; + } + private String getAaiPropertiesConfig() { + return "org.onap.ccsdk.sli.adaptors.aai.ssl.key=\"\"\n" + + "org.onap.ccsdk.sli.adaptors.aai.ssl.key.psswd=\"\"\n" + + "org.onap.ccsdk.sli.adaptors.aai.host.certificate.ignore=\"false\"\n" + + "org.onap.ccsdk.sli.adaptors.aai.application=\"\"\n" + + "org.onap.ccsdk.sli.adaptors.aai.uri=\"\"\n" + + "connection.timeout=60000\n" + + "read.timeout=60000"; + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java new file mode 100644 index 000000000..76684e50f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java @@ -0,0 +1,315 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtDatabaseWebAPIClient; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerImpl; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.DeviceManagerService.Action; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.DataBrokerNetconfMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.MountPointMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.MountPointServiceMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.NotificationPublishServiceMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock.RpcProviderRegistryMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util.ReadOnlyTransactionMountpoint1211Mock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util.ReadOnlyTransactionMountpoint1211pMock; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util.ReadOnlyTransactionMountpoint12Mock; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; +import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TestDeviceManagerWithDatabase { + + private static int DATABASETIMEOUTSECONDS = 30; + + private static Path KARAF_ETC = Paths.get("etc"); + private static DeviceManagerImpl deviceManager; + private static MountPointMock mountPoint; + private static DataBrokerNetconfMock dataBrokerNetconf; + + private static final Logger LOG = LoggerFactory.getLogger(TestDeviceManagerWithDatabase.class); + + + + @BeforeClass + public static void before() throws InterruptedException, IOException { + + System.out.println("Logger: "+LOG.getClass().getName() + " " + LOG.getName()); + // Call System property to get the classpath value + Path etc = KARAF_ETC; + delete(etc); + + System.out.println("Create empty:"+etc.toString()); + Files.createDirectories(etc); + + //Create mocks + ReadOnlyTransactionMountpoint12Mock readOnlyTransaction = new ReadOnlyTransactionMountpoint12Mock(); + dataBrokerNetconf = new DataBrokerNetconfMock(); + dataBrokerNetconf.setReadOnlyTransaction(readOnlyTransaction); + mountPoint = new MountPointMock(); + mountPoint.setReadOnlyTransaction(readOnlyTransaction); + MountPointService mountPointService = new MountPointServiceMock(mountPoint); + NotificationPublishService notificationPublishService = new NotificationPublishServiceMock(); + RpcProviderRegistry rpcProviderRegistry = new RpcProviderRegistryMock(); + + //start using blueprint interface + deviceManager = new DeviceManagerImpl(); + + deviceManager.setDataBroker(dataBrokerNetconf); + deviceManager.setMountPointService(mountPointService); + deviceManager.setNotificationPublishService(notificationPublishService); + deviceManager.setRpcProviderRegistry(rpcProviderRegistry); + + try { + deviceManager.init(); + } catch (Exception e) { + e.printStackTrace(); + } + + readOnlyTransaction.close(); + System.out.println("Initialization status: "+deviceManager.isDevicemanagerInitializationOk()); + assertTrue("Devicemanager not initialized", deviceManager.isDevicemanagerInitializationOk()); + System.out.println("Initialization done"); + + } + + @AfterClass + public static void after() throws InterruptedException, IOException { + + System.out.println("Start shutdown"); + //close using blueprint interface + try { + deviceManager.close(); + } catch (Exception e) { + System.out.println(e); + } + delete(KARAF_ETC); + + } + + @Test + public void test0() throws InterruptedException { + HtDatabaseWebAPIClient client = new HtDatabaseWebAPIClient(); + try { + String response = client.sendRequest("/mwtn/mediator-server/_search", "GET", + new JSONObject("{\"match\":{\"id\":id}}")); + System.out.println(response); + } catch (JSONException | IOException e) { + e.printStackTrace(); + } + } + + @Test + public void test1() throws InterruptedException { + + System.out.println("Test1: Wait for database"); + int timeout = DATABASETIMEOUTSECONDS; + while ( !deviceManager.isDatabaseInitializationFinished() && timeout-- > 0) { + System.out.println("Test1: "+timeout); + Thread.sleep(1000); //On second + } + System.out.println("Test1: database initialized"); + } + + @Test + public void test2() { + System.out.println("Test2: slave mountpoint"); + + ReadOnlyTransactionMountpoint12Mock readOnlyTransaction = new ReadOnlyTransactionMountpoint12Mock(); + dataBrokerNetconf.setReadOnlyTransaction(readOnlyTransaction); + mountPoint.setReadOnlyTransaction(readOnlyTransaction); + NetconfNode nNode = readOnlyTransaction.getMock().getNetconfNode(); + + mountPoint.setDatabrokerAbsent(true); + NodeId nodeId = new NodeId("mountpointTest2"); + try { + deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode); + } catch (Exception e) { + e.printStackTrace(); + fail("Exception received."); + } + + readOnlyTransaction.close(); + System.out.println("Test2: Done"); + + } + + @Test + public void test3() { + System.out.println("Test3: master mountpoint ONF Model 12"); + + ReadOnlyTransactionMountpoint12Mock readOnlyTransaction = new ReadOnlyTransactionMountpoint12Mock(); + dataBrokerNetconf.setReadOnlyTransaction(readOnlyTransaction); + mountPoint.setReadOnlyTransaction(readOnlyTransaction); + NetconfNode nNode = readOnlyTransaction.getMock().getNetconfNode(); + + mountPoint.setDatabrokerAbsent(false); + NodeId nodeId = new NodeId("mountpointTest3"); + + Capabilities capabilities = Capabilities.getAvailableCapabilities(nNode); + System.out.println("Node capabilites: "+capabilities); + + try { + deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode); + } catch (Exception e) { + e.printStackTrace(); + fail("Exception received."); + } + + readOnlyTransaction.sendProblemNotification(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + } + + readOnlyTransaction.close(); + System.out.println("Test3: Done"); + + } + + @Test + public void test4() { + System.out.println("Test4: master mountpoint ONF Model 1211"); + + ReadOnlyTransactionMountpoint1211Mock readOnlyTransaction = new ReadOnlyTransactionMountpoint1211Mock(); + dataBrokerNetconf.setReadOnlyTransaction(readOnlyTransaction); + mountPoint.setReadOnlyTransaction(readOnlyTransaction); + + NetconfNode nNode = readOnlyTransaction.getMock().getNetconfNode(); + mountPoint.setDatabrokerAbsent(false); + NodeId nodeId = new NodeId("mountpointTest4"); + + Capabilities capabilities = Capabilities.getAvailableCapabilities(nNode); + System.out.println("Node capabilites: "+capabilities); + + try { + deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode); + } catch (Exception e) { + e.printStackTrace(); + fail("Exception received."); + } + + readOnlyTransaction.sendProblemNotification(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + Thread.interrupted(); + } + + readOnlyTransaction.close(); + System.out.println("Test4: Done"); + + } + + @Test + public void test5() { + System.out.println("Test5: master mountpoint ONF Model 1211p"); + + ReadOnlyTransactionMountpoint1211pMock readOnlyTransaction = new ReadOnlyTransactionMountpoint1211pMock(); + dataBrokerNetconf.setReadOnlyTransaction(readOnlyTransaction); + mountPoint.setReadOnlyTransaction(readOnlyTransaction); + + NetconfNode nNode = readOnlyTransaction.getMock().getNetconfNode(); + mountPoint.setDatabrokerAbsent(false); + NodeId nodeId = new NodeId("mountpointTest5"); + + Capabilities capabilities = Capabilities.getAvailableCapabilities(nNode); + System.out.println("Node capabilites: "+capabilities); + + try { + deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode); + } catch (Exception e) { + e.printStackTrace(); + fail("Exception received."); + } + readOnlyTransaction.sendProblemNotification(); + try { + Thread.sleep(500); + } catch (InterruptedException e) { + Thread.interrupted(); + } + + readOnlyTransaction.close(); + System.out.println("Test5: Done"); + + } + + @Test + public void test6() { + + System.out.println("Test6: Write zip data file file"); + File testFile = new File("etc/elasticsearch_update.zip"); + Resources.extractFileTo("elasticsearch_update.zip", testFile); + int wait=130; + while ( testFile.exists() && wait-- > 0) { + System.out.println("Waiting "+wait); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + Thread.interrupted(); + } + } + + + System.out.println("Test6: Done"); + + } + + //********************* Private + + private static void delete(Path etc) throws IOException { + if (Files.exists(etc)) { + System.out.println("Found and remove:"+etc.toString()); + delete(etc.toFile()); + } + } + + private static void delete(File f) throws IOException { + if (f.isDirectory()) { + for (File c : f.listFiles()) { + delete(c); + } + } + if (!f.delete()) { + throw new FileNotFoundException("Failed to delete file: " + f); + } + } + + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java new file mode 100644 index 000000000..5b00cbb78 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestGeoConfig.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.*; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.GeoConfig; + +public class TestGeoConfig { + + @Test + public void test() { + GeoConfig config; + try { + System.out.println("testing clusternode geo config1"); + System.out.println("==========================="); + config = GeoConfig.parse(getClusterGeoConfigContent()); + System.out.println("succeeded: "); + System.out.println(config.toString()); + System.out.println("primary roles:"); + System.out.println(config.getPrimaryRoles().toString()); + System.out.println("secondary roles:"); + System.out.println(config.getSecondaryRoles().toString()); + + } catch (Exception e) { + fail("failed: " + e.getMessage()); + } + } + + + + private static String getClusterGeoConfigContent() { + return "\n" + "lumina-geo-cluster {\n" + " primary_roles = [\n" + + " \"member-1\",\"member-2\",\"member-3\"\n" + " ]\n" + " secondary_roles = [\n" + + " \"member-4\",\"member-5\",\"member-6\"\n" + " ]\n" + " ip_roles_table = [\n" + "\n" + + " {\n" + "role=\"member-1\"\n" + "ip=\"zltcmtn23arbc01.2f0377.mtn23a.tci.att.com\"\n" + "},\n" + + "{\n" + "role=\"member-2\"\n" + "ip=\"zltcmtn23arbc02.2f0377.mtn23a.tci.att.com\"\n" + "},\n" + "{\n" + + "role=\"member-3\"\n" + "ip=\"zltcmtn23arbc03.2f0377.mtn23a.tci.att.com\"\n" + "},\n" + "{\n" + + "role=\"member-4\"\n" + "ip=\"zltcmtn23brbc01.f84e7a.mtn23b.tci.att.com\"\n" + "},\n" + "{\n" + + "role=\"member-5\"\n" + "ip=\"zltcmtn23brbc02.f84e7a.mtn23b.tci.att.com\"\n" + "},\n" + "{\n" + + "role=\"member-6\"\n" + "ip=\"zltcmtn23brbc03.f84e7a.mtn23b.tci.att.com\"\n" + "}\n" + " \n" + + " ]\n" + "}\n" + "\n" + "\n" + "\n" + "\n" + ""; + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java new file mode 100644 index 000000000..1d97eb85b --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMaintenanceTimeFilter.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import java.time.ZonedDateTime; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.maintenance.database.types.EsMaintenanceFilter; + +public class TestMaintenanceTimeFilter { + + private static String DEFAULT1 = "EsMaintenanceFilter [start=1970-01-01T00:00Z[UTC], end=1970-01-01T00:00Z[UTC], definition=EsMaintenanceFilterDefinition [objectIdRef=, problem=], description=]"; + private static String DEFAULT2 = "EsMaintenanceFilter [start=1970-01-01T00:00Z[UTC], end=2018-01-01T10:00+05:00, definition=EsMaintenanceFilterDefinition [objectIdRef=, problem=], description=]"; + + @Test + public void test1() { + EsMaintenanceFilter fi = new EsMaintenanceFilter(); + String fiAsString; + + fiAsString = fi.toString(); + System.out.println("Default 1: " + fiAsString); + if (! fiAsString.equals(DEFAULT1)) { + fail("Time conversion not OK"); + } + } + @Test + public void test2() { + EsMaintenanceFilter fi = new EsMaintenanceFilter(); + String fiAsString; + + fi.setEndAsString("2018-01-01T10:00:00+05:00"); + fiAsString = fi.toString(); + System.out.println("Default 2: " + fi); + System.out.println("As String: " + fi.getEndAsString()); + if (! fiAsString.equals(DEFAULT2)) { + fail("Time conversion not OK"); + } + } + @Test + public void test3() { + + boolean res; + + ZonedDateTime start = ZonedDateTime.parse("2018-01-01T10:00:00+05:00"); + ZonedDateTime end = ZonedDateTime.parse("2019-01-01T10:00:00+05:00"); + ZonedDateTime now; + + now = ZonedDateTime.parse("2017-05-01T10:00:00+05:00"); + res = EsMaintenanceFilter.isInPeriod(start, end, now); + System.out.println("Before: " + res); + assertFalse("before period", res); + + now = ZonedDateTime.parse("2018-05-01T10:00:00+05:00"); + res = EsMaintenanceFilter.isInPeriod(start, end, now); + System.out.println("Within: " + res); + assertTrue("within period",res); + + now = ZonedDateTime.parse("2019-05-01T10:00:00+05:00"); + res = EsMaintenanceFilter.isInPeriod(start, end, now); + System.out.println("After: " + res); + assertFalse("after period", res); + + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java index 4166101c4..0ce62d5c6 100644 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java @@ -1,10 +1,23 @@ -/* - * Copyright (c) 2019 Red Hat, Inc. and others. All rights reserved. +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; import org.junit.Test; diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java new file mode 100644 index 000000000..e91a7ac6d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestNotification.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2019 Red Hat, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.toggleAlarmFilter.NotificationWithServerTimeStamp; + +public class TestNotification { + + @Test + public void test() { + + NotificationWithServerTimeStamp test = new NotificationWithServerTimeStamp<>(1000); + + test.refresh(1000); + test.getStartTime(); + + System.out.println(test); + + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java new file mode 100644 index 000000000..a4fa0b410 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsPerformanceData; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performance.type.g.PerformanceDataBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.historical.performances.g.HistoricalPerformanceDataListBuilder; + +public class TestPerformanceData12 { + + @Test + public void test() { + + PerformanceDataBuilder p = new PerformanceDataBuilder(); + byte b=100; + short s=100; + p.setEs(100); + p.setCses(100); + p.setEs(100); + p.setSes(100); + p.setCses(100); + p.setUnavailability(100); + p.setTxLevelMin(b); + p.setTxLevelMax(b); + p.setTxLevelAvg(b); + p.setRxLevelMin(b); + p.setRxLevelMax(b); + p.setRxLevelAvg(b); + p.setTime2States(100); + p.setTime4StatesS(100); + p.setTime4States(100); + p.setTime8States(100); + p.setTime16StatesS(100); + p.setTime16States(100); + p.setTime32States(100); + p.setTime64States(100); + p.setTime128States(100); + p.setTime256States(100); + p.setTime512States(100); + p.setTime512StatesL(100); + p.setTime1024States(100); + p.setTime1024StatesL(100); + p.setTime2048States(100); + p.setTime2048StatesL(100); + p.setTime4096States(100); + p.setTime4096StatesL(100); + p.setTime8192States(100); + p.setTime8192StatesL(100); + p.setSnirMin(b); + p.setSnirMax(b); + p.setSnirAvg(b); + p.setXpdMin(b); + p.setXpdMax(b); + p.setXpdAvg(b); + p.setRfTempMin(b); + p.setRfTempMax(b); + p.setRfTempAvg(b); + p.setDefectBlocksSum(s); + p.setTimePeriod(100); + + HistoricalPerformanceDataListBuilder pmList = new HistoricalPerformanceDataListBuilder(); + pmList.setPerformanceData(p.build()); + + EsPerformanceData pmData = new EsPerformanceData(pmList.build()); + + assertTrue("Verify value", pmData.getEs() == 100); + + System.out.println(pmData.toString()); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211.java new file mode 100644 index 000000000..ffd460c3c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsPerformanceData; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performance.type.g.PerformanceDataBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.historical.performances.g.HistoricalPerformanceDataListBuilder; + +public class TestPerformanceData1211 { + + @Test + public void test() { + + PerformanceDataBuilder p = new PerformanceDataBuilder(); + byte b=100; + short s=100; + p.setEs(100); + p.setCses(100); + p.setEs(100); + p.setSes(100); + p.setCses(100); + p.setUnavailability(100); + p.setTxLevelMin(b); + p.setTxLevelMax(b); + p.setTxLevelAvg(b); + p.setRxLevelMin(b); + p.setRxLevelMax(b); + p.setRxLevelAvg(b); + p.setTime2States(100); + p.setTime4StatesS(100); + p.setTime4States(100); + p.setTime8States(100); + p.setTime16StatesS(100); + p.setTime16States(100); + p.setTime32States(100); + p.setTime64States(100); + p.setTime128States(100); + p.setTime256States(100); + p.setTime512States(100); + p.setTime512StatesL(100); + p.setTime1024States(100); + p.setTime1024StatesL(100); + p.setTime2048States(100); + p.setTime2048StatesL(100); + p.setTime4096States(100); + p.setTime4096StatesL(100); + p.setTime8192States(100); + p.setTime8192StatesL(100); + p.setSnirMin(b); + p.setSnirMax(b); + p.setSnirAvg(b); + p.setXpdMin(b); + p.setXpdMax(b); + p.setXpdAvg(b); + p.setRfTempMin(b); + p.setRfTempMax(b); + p.setRfTempAvg(b); + p.setDefectBlocksSum(s); + p.setTimePeriod(100); + + HistoricalPerformanceDataListBuilder pmList = new HistoricalPerformanceDataListBuilder(); + pmList.setPerformanceData(p.build()); + + EsPerformanceData pmData = new EsPerformanceData(pmList.build()); + + assertTrue("Verify value", pmData.getEs() == 100); + + System.out.println(pmData.toString()); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211p.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211p.java new file mode 100644 index 000000000..dff517de9 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211p.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.assertTrue; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsPerformanceData; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performance.type.g.PerformanceDataBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.historical.performances.g.HistoricalPerformanceDataListBuilder; + +public class TestPerformanceData1211p { + + @Test + public void test() { + + PerformanceDataBuilder p = new PerformanceDataBuilder(); + byte b=100; + short s=100; + p.setEs(100); + p.setCses(100); + p.setEs(100); + p.setSes(100); + p.setCses(100); + p.setUnavailability(100); + p.setTxLevelMin(b); + p.setTxLevelMax(b); + p.setTxLevelAvg(b); + p.setRxLevelMin(b); + p.setRxLevelMax(b); + p.setRxLevelAvg(b); + p.setTime2States(100); + p.setTime4StatesS(100); + p.setTime4States(100); + p.setTime8States(100); + p.setTime16StatesS(100); + p.setTime16States(100); + p.setTime32States(100); + p.setTime64States(100); + p.setTime128States(100); + p.setTime256States(100); + p.setTime512States(100); + p.setTime512StatesL(100); + p.setTime1024States(100); + p.setTime1024StatesL(100); + p.setTime2048States(100); + p.setTime2048StatesL(100); + p.setTime4096States(100); + p.setTime4096StatesL(100); + p.setTime8192States(100); + p.setTime8192StatesL(100); + p.setSnirMin(b); + p.setSnirMax(b); + p.setSnirAvg(b); + p.setXpdMin(b); + p.setXpdMax(b); + p.setXpdAvg(b); + p.setRfTempMin(b); + p.setRfTempMax(b); + p.setRfTempAvg(b); + p.setDefectBlocksSum(s); + p.setTimePeriod(100); + + HistoricalPerformanceDataListBuilder pmList = new HistoricalPerformanceDataListBuilder(); + pmList.setPerformanceData(p.build()); + + EsPerformanceData pmData = new EsPerformanceData(pmList.build()); + + assertTrue("Verify value", pmData.getEs() == 100); + + System.out.println(pmData.toString()); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsCapability.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsCapability.java new file mode 100644 index 000000000..d4353d9da --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestsCapability.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test; + +import static org.junit.Assert.assertTrue; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.Capabilities; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev170324; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util.Model12ObjectMock; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; + +public class TestsCapability { + + private static NetconfNode nNode; + + @BeforeClass + public static void before() { + nNode = new Model12ObjectMock().getNetconfNode(); + } + + @Test + public void test1() { + + Capabilities capabilities = Capabilities.getAvailableCapabilities(nNode); + assertTrue(capabilities.isSupportingNamespaceAndRevision(NetworkElement.QNAME)); + + } + + @Test + public void test2() { + + Capabilities capabilities = Capabilities.getAvailableCapabilities(nNode); + assertTrue(capabilities.isSupportingNamespaceAndRevision(WrapperMicrowaveModelRev170324.QNAME)); + + } + + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java index 09e0db7d1..65bd2199c 100644 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java @@ -42,6 +42,12 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @SuppressWarnings("deprecation") public class DataBrokerMountpointMock implements DataBroker, BindingService { + ReadOnlyTransaction readOnlyTransaction; + + public void setReadOnlyTransaction(ReadOnlyTransaction readOnlyTransaction) { + this.readOnlyTransaction = readOnlyTransaction; + } + @Override public > ListenerRegistration registerDataTreeChangeListener( DataTreeIdentifier arg0, L arg1) { @@ -55,7 +61,7 @@ public class DataBrokerMountpointMock implements DataBroker, BindingService { @Override public ReadOnlyTransaction newReadOnlyTransaction() { - return null; + return readOnlyTransaction; } @Override @@ -74,4 +80,5 @@ public class DataBrokerMountpointMock implements DataBroker, BindingService { return null; } + } diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java index 77ee58729..4c4781a70 100644 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java @@ -41,40 +41,42 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @SuppressWarnings("deprecation") public class DataBrokerNetconfMock implements DataBroker { + + ReadOnlyTransaction readOnlyTransaction; + + public void setReadOnlyTransaction(ReadOnlyTransaction readOnlyTransaction) { + this.readOnlyTransaction = readOnlyTransaction; + } + @Override public > ListenerRegistration registerDataTreeChangeListener( DataTreeIdentifier arg0, L arg1) { - // TODO Auto-generated method stub return null; } @Override public BindingTransactionChain createTransactionChain(TransactionChainListener listener) { - // TODO Auto-generated method stub return null; } @Override public ReadOnlyTransaction newReadOnlyTransaction() { - return new ReadOnlyTransactionMock(); + return readOnlyTransaction; } @Override public ReadWriteTransaction newReadWriteTransaction() { - // TODO Auto-generated method stub return null; } @Override public WriteTransaction newWriteOnlyTransaction() { - // TODO Auto-generated method stub return null; } @Override public ListenerRegistration registerDataChangeListener(LogicalDatastoreType store, InstanceIdentifier path, DataChangeListener listener, DataChangeScope triggeringScope) { - // TODO Auto-generated method stub return null; } diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java index ca63dcf71..51c33171e 100644 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java @@ -24,6 +24,13 @@ package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock; import com.google.common.base.Optional; import org.opendaylight.controller.md.sal.binding.api.BindingService; import org.opendaylight.controller.md.sal.binding.api.MountPoint; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** @@ -34,10 +41,16 @@ public class MountPointMock implements MountPoint { private boolean databrokerAbsent = true; private final DataBrokerMountpointMock dataBroker = new DataBrokerMountpointMock(); + private final RpcConsumerRegistryMock rpcConsumerRegistry = new RpcConsumerRegistryMock(); + private NotificationService setReadOnlyTransaction; + + private static final InstanceIdentifier NETCONF_TOPO_IID = + InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, + new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName()))); @Override public InstanceIdentifier getIdentifier() { - return null; + return NETCONF_TOPO_IID; } @SuppressWarnings("unchecked") @@ -46,11 +59,19 @@ public class MountPointMock implements MountPoint { System.out.println("Requested mountpoint service: "+service.getSimpleName()+" databrokerAbsent state: "+databrokerAbsent); - Optional res = Optional.absent(); + Optional res; if (service.isInstance(dataBroker)) { + System.out.println("Delivering databroker"); res = databrokerAbsent ? Optional.absent() : Optional.of(dataBroker); - } else if (service.isInstance(org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry.class)) { - res = Optional.of(new RpcConsumerRegistryMock()); + } else if (service.isInstance(rpcConsumerRegistry)) { + System.out.println("Delivering RpcConsumerRegistryMock"); + res = Optional.of(rpcConsumerRegistry); + } else if (service.isInstance(setReadOnlyTransaction)) { + System.out.println("Delivering notificationService"); + res = Optional.of(setReadOnlyTransaction); + } else { + System.out.println("Delivering no service"); + res = Optional.absent(); } return (Optional)res; } @@ -59,4 +80,10 @@ public class MountPointMock implements MountPoint { this.databrokerAbsent = state; } + public void setReadOnlyTransaction(T readOnlyTransaction) { + this.setReadOnlyTransaction = readOnlyTransaction; + dataBroker.setReadOnlyTransaction(readOnlyTransaction); + } + + } diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java index 54408c451..91fc331f3 100644 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java @@ -31,32 +31,19 @@ import org.opendaylight.yangtools.yang.binding.Notification; */ public class NotificationPublishServiceMock implements NotificationPublishService { - /* (non-Javadoc) - * @see org.opendaylight.controller.md.sal.binding.api.NotificationPublishService#offerNotification(org.opendaylight.yangtools.yang.binding.Notification) - */ @Override public ListenableFuture offerNotification(Notification notification) { - // TODO Auto-generated method stub return null; } - /* (non-Javadoc) - * @see org.opendaylight.controller.md.sal.binding.api.NotificationPublishService#offerNotification(org.opendaylight.yangtools.yang.binding.Notification, int, java.util.concurrent.TimeUnit) - */ - @Override + @Override public ListenableFuture offerNotification(Notification notification, int timeout, TimeUnit unit) throws InterruptedException { - // TODO Auto-generated method stub return null; } - /* (non-Javadoc) - * @see org.opendaylight.controller.md.sal.binding.api.NotificationPublishService#putNotification(org.opendaylight.yangtools.yang.binding.Notification) - */ @Override public void putNotification(Notification notification) throws InterruptedException { - // TODO Auto-generated method stub - - } + } } diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java deleted file mode 100644 index 0bfe4b3eb..000000000 --- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/ReadOnlyTransactionMock.java +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************* - * ============LICENSE_START======================================================= - * ONAP : ccsdk feature sdnr wt sdnr-wt-devicemanager-provider - * ================================================================================ - * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. - * All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - ******************************************************************************/ - -package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.mock; - -import com.google.common.base.Optional; -import com.google.common.util.concurrent.CheckedFuture; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev181010; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * @author herbert - * - */ -@SuppressWarnings("deprecation") -public class ReadOnlyTransactionMock implements ReadOnlyTransaction { - - - @Override - public Object getIdentifier() { - return null; - } - - @Override - public CheckedFuture, ReadFailedException> read(LogicalDatastoreType store, - InstanceIdentifier path) { - - NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder(); - netconfNodeBuilder.setConnectionStatus(ConnectionStatus.Connected); - netconfNodeBuilder.setAvailableCapabilities(getCababilitiesList(WrapperMicrowaveModelRev181010.QNAME.toString()).build()); - NetconfNode nnode = netconfNodeBuilder.build(); - NodeBuilder nodeBuilder = new NodeBuilder(); - nodeBuilder.addAugmentation(NetconfNode.class, nnode); - Node node = nodeBuilder.build(); - @SuppressWarnings("unchecked") - Optional res1 = (Optional) Optional.of(node); - CheckedFuture, ReadFailedException> res = new CheckedFuture, ReadFailedException>() { - - @Override - public void addListener(Runnable arg0, Executor arg1) { - } - - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - return false; - } - - @Override - public Optional get() throws InterruptedException, ExecutionException { - return null; - } - - @Override - public Optional get(long timeout, TimeUnit unit) - throws InterruptedException, ExecutionException, TimeoutException { - return null; - } - - @Override - public boolean isCancelled() { - return false; - } - - @Override - public boolean isDone() { - return false; - } - - @Override - public Optional checkedGet() throws ReadFailedException { - return res1; - } - - @Override - public Optional checkedGet(long arg0, TimeUnit arg1) throws TimeoutException, ReadFailedException { - return null; - } - - }; - - - return res; - } - - private AvailableCapabilitiesBuilder getCababilitiesList(String ... strings) { - return getCababilitiesList(null, strings); - } - - private AvailableCapabilitiesBuilder getCababilitiesList(AvailableCapabilitiesBuilder valueBuilder, String ... strings) { - if (valueBuilder == null) { - valueBuilder = new AvailableCapabilitiesBuilder(); - } - List capabilites = new ArrayList<>(); - for (String s : strings) { - AvailableCapabilityBuilder capabilityBuilder = new AvailableCapabilityBuilder(); - capabilityBuilder.setCapability(s); - capabilites.add(capabilityBuilder.build()); - } - valueBuilder.setAvailableCapability(capabilites); - return valueBuilder; - } - - @Override - public void close() { - } - -} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211ObjectMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211ObjectMock.java new file mode 100644 index 000000000..156aabdcb --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211ObjectMock.java @@ -0,0 +1,151 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= ONAP : ccsdk + * feature sdnr wt ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================ Licensed under + * the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev180907; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElementBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ProblemNotification; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ProblemNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfaceDiversityPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwHybridMwStructurePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwPureEthernetStructurePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwAirInterfacePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwEthernetContainerPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MwTdmContainerPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.SeverityType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; +import org.opendaylight.yangtools.concepts.Builder; + +public class Model1211ObjectMock { + + public NetconfNode getNetconfNode() { + + AvailableCapabilitiesBuilder availableCapabilitiesBuilder = + ObjectBuilder.getAvailableCababilitiesList(NetworkElement.QNAME, WrapperMicrowaveModelRev180907.QNAME); + + NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder(); + nNodeBuilder.setAvailableCapabilities(availableCapabilitiesBuilder.build()); + nNodeBuilder.setConnectionStatus(ConnectionStatus.Connected); + + // build + NetconfNode nNode = nNodeBuilder.build(); + return nNode; + } + + public NetworkElement getNetworkElement() { + + NetworkElementBuilder networkElementBuilder = new NetworkElementBuilder(); + + // LTP/LP1 + /* + * LpBuilder lpBuilder1 = new LpBuilder(); lpBuilder1.withKey(new LpKey(new + * UniversalId("MwAirInterfacePacLpKey"))); lpBuilder1.setLayerProtocolName(new + * LayerProtocolName(ONFLayerProtocolName.MWAirInterface.getValue())); + * lpBuilder1.setExtension(Arrays.asList(getExtension("e1", "capability", + * MwAirInterfacePac.QNAME.getLocalName()), getExtension("e1", "revision", + * MwAirInterfacePac.QNAME.getRevision().get().toString()), getExtension("e1", + * "conditional-package", MwAirInterfacePac.QNAME.getModule().toString()))); LtpBuilder ltpBuilder1 + * = new LtpBuilder(); ltpBuilder1.setUuid(new UniversalId("MwAirInterfacePac")); + * ltpBuilder1.withKey(new LtpKey(new UniversalId("MwAirInterfacePacKey"))); + * ltpBuilder1.setLp(values) + */ + // ---- LTP List + networkElementBuilder.setLtp(Arrays.asList( + ObjectBuilder.getLtp(MwAirInterfacePac.class, MwAirInterfacePac.QNAME, + ONFLayerProtocolName.MWAirInterface), + ObjectBuilder.getLtp(MwEthernetContainerPac.class, MwEthernetContainerPac.QNAME, + ONFLayerProtocolName.EthernetContainer12), + ObjectBuilder.getLtp(MwTdmContainerPac.class, MwTdmContainerPac.QNAME, + ONFLayerProtocolName.TDMContainer), + ObjectBuilder.getLtp(MwHybridMwStructurePac.class, MwHybridMwStructurePac.QNAME, + ONFLayerProtocolName.Structure), + ObjectBuilder.getLtp(MwAirInterfaceDiversityPac.class, MwAirInterfaceDiversityPac.QNAME, + ONFLayerProtocolName.Structure), + ObjectBuilder.getLtp(MwPureEthernetStructurePac.class, MwPureEthernetStructurePac.QNAME, + ONFLayerProtocolName.Structure))); + // build + NetworkElement networkElement = networkElementBuilder.build(); + return networkElement; + } + + public , PLB extends Builder> R getCurrentProblems(Class plbClazz, + Class rbClazz) { + + try { + PLB currentProblemListBuilder = plbClazz.newInstance(); + + // currentProblemListBuilder.setProblemName("Problem1"); + Method setProblemName = plbClazz.getDeclaredMethod("setProblemName", String.class); + setProblemName.setAccessible(true); + setProblemName.invoke(currentProblemListBuilder, "Problem1"); + + // currentProblemListBuilder.setProblemSeverity(SeverityType.Critical); + Method setProblemSeverity = plbClazz.getDeclaredMethod("setProblemSeverity", SeverityType.class); + setProblemSeverity.setAccessible(true); + setProblemSeverity.invoke(currentProblemListBuilder, SeverityType.Critical); + + // currentProblemListBuilder.setSequenceNumber(1); + Method setSequenceNumber = plbClazz.getDeclaredMethod("setSequenceNumber", Integer.class); + setSequenceNumber.setAccessible(true); + setSequenceNumber.invoke(currentProblemListBuilder, 1); + + // currentProblemListBuilder.setTimeStamp(new + // DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + Method setTimeStamp = plbClazz.getDeclaredMethod("setTimeStamp", DateAndTime.class); + setTimeStamp.setAccessible(true); + setTimeStamp.invoke(currentProblemListBuilder, + new DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + + // AirInterfaceCurrentProblemsBuilder airInterfaceCurrentProblemsBuilder = new + // AirInterfaceCurrentProblemsBuilder(); + Builder airInterfaceCurrentProblemsBuilder = rbClazz.newInstance(); + // airInterfaceCurrentProblemsBuilder.setCurrentProblemList(Arrays.asList(currentProblemListBuilder.build())); + Method setCurrentProblemList = rbClazz.getDeclaredMethod("setCurrentProblemList", List.class); + setCurrentProblemList.setAccessible(true); + setCurrentProblemList.invoke(airInterfaceCurrentProblemsBuilder, + Arrays.asList(currentProblemListBuilder.build())); + + return airInterfaceCurrentProblemsBuilder.build(); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException + | IllegalArgumentException | InvocationTargetException e) { + e.printStackTrace(); + return null; + } + } + + public ProblemNotification getProblemNotification() { + ProblemNotificationBuilder b = new ProblemNotificationBuilder(); + b.setProblem("ProblemNotification"); + b.setSeverity(SeverityType.Minor); + b.setCounter(2); + b.setObjectIdRef(new UniversalId("test")); + b.setTimeStamp(new DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + return b.build(); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211pObjectMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211pObjectMock.java new file mode 100644 index 000000000..46b66aebc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model1211pObjectMock.java @@ -0,0 +1,138 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= ONAP : ccsdk + * feature sdnr wt ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved. + * ================================================================================ Licensed under + * the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev181010; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElementBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ProblemNotification; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ProblemNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfaceDiversityPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwHybridMwStructurePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwPureEthernetStructurePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwAirInterfacePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwEthernetContainerPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MwTdmContainerPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.SeverityType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; +import org.opendaylight.yangtools.concepts.Builder; + +public class Model1211pObjectMock { + + public NetconfNode getNetconfNode() { + + AvailableCapabilitiesBuilder availableCapabilitiesBuilder = + ObjectBuilder.getAvailableCababilitiesList(NetworkElement.QNAME, WrapperMicrowaveModelRev181010.QNAME); + + NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder(); + nNodeBuilder.setAvailableCapabilities(availableCapabilitiesBuilder.build()); + nNodeBuilder.setConnectionStatus(ConnectionStatus.Connected); + + // build + NetconfNode nNode = nNodeBuilder.build(); + return nNode; + } + + public NetworkElement getNetworkElement() { + + NetworkElementBuilder networkElementBuilder = new NetworkElementBuilder(); + + // ---- LTP List + networkElementBuilder.setLtp(Arrays.asList( + ObjectBuilder.getLtp(MwAirInterfacePac.class, MwAirInterfacePac.QNAME, + ONFLayerProtocolName.MWAirInterface), + ObjectBuilder.getLtp(MwEthernetContainerPac.class, MwEthernetContainerPac.QNAME, + ONFLayerProtocolName.EthernetContainer12), + ObjectBuilder.getLtp(MwTdmContainerPac.class, MwTdmContainerPac.QNAME, + ONFLayerProtocolName.TDMContainer), + ObjectBuilder.getLtp(MwHybridMwStructurePac.class, MwHybridMwStructurePac.QNAME, + ONFLayerProtocolName.Structure), + ObjectBuilder.getLtp(MwAirInterfaceDiversityPac.class, MwAirInterfaceDiversityPac.QNAME, + ONFLayerProtocolName.Structure), + ObjectBuilder.getLtp(MwPureEthernetStructurePac.class, MwPureEthernetStructurePac.QNAME, + ONFLayerProtocolName.Structure))); + // build + NetworkElement networkElement = networkElementBuilder.build(); + return networkElement; + } + + public , PLB extends Builder> R getCurrentProblems(Class plbClazz, + Class rbClazz) { + + try { + PLB currentProblemListBuilder = plbClazz.newInstance(); + + // currentProblemListBuilder.setProblemName("Problem1"); + Method setProblemName = plbClazz.getDeclaredMethod("setProblemName", String.class); + setProblemName.setAccessible(true); + setProblemName.invoke(currentProblemListBuilder, "Problem1"); + + // currentProblemListBuilder.setProblemSeverity(SeverityType.Critical); + Method setProblemSeverity = plbClazz.getDeclaredMethod("setProblemSeverity", SeverityType.class); + setProblemSeverity.setAccessible(true); + setProblemSeverity.invoke(currentProblemListBuilder, SeverityType.Critical); + + // currentProblemListBuilder.setSequenceNumber(1); + Method setSequenceNumber = plbClazz.getDeclaredMethod("setSequenceNumber", Integer.class); + setSequenceNumber.setAccessible(true); + setSequenceNumber.invoke(currentProblemListBuilder, 1); + + // currentProblemListBuilder.setTimeStamp(new + // DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + Method setTimeStamp = plbClazz.getDeclaredMethod("setTimeStamp", DateAndTime.class); + setTimeStamp.setAccessible(true); + setTimeStamp.invoke(currentProblemListBuilder, + new DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + + // AirInterfaceCurrentProblemsBuilder airInterfaceCurrentProblemsBuilder = new + // AirInterfaceCurrentProblemsBuilder(); + Builder airInterfaceCurrentProblemsBuilder = rbClazz.newInstance(); + // airInterfaceCurrentProblemsBuilder.setCurrentProblemList(Arrays.asList(currentProblemListBuilder.build())); + Method setCurrentProblemList = rbClazz.getDeclaredMethod("setCurrentProblemList", List.class); + setCurrentProblemList.setAccessible(true); + setCurrentProblemList.invoke(airInterfaceCurrentProblemsBuilder, + Arrays.asList(currentProblemListBuilder.build())); + + return airInterfaceCurrentProblemsBuilder.build(); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException + | IllegalArgumentException | InvocationTargetException e) { + e.printStackTrace(); + return null; + } + } + + public ProblemNotification getProblemNotification() { + ProblemNotificationBuilder b = new ProblemNotificationBuilder(); + b.setProblem("ProblemNotification"); + b.setSeverity(SeverityType.Minor); + b.setCounter(2); + b.setObjectIdRef(new UniversalId("test")); + b.setTimeStamp(new DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + return b.build(); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model12ObjectMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model12ObjectMock.java new file mode 100644 index 000000000..9d7c0f3b0 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/Model12ObjectMock.java @@ -0,0 +1,160 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalDateAndTime; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.wrapperc.WrapperMicrowaveModelRev170324; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElementBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfaceDiversityPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwAirInterfacePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwEthernetContainerPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwHybridMwStructurePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwPureEthernetStructurePac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MwTdmContainerPac; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ProblemNotification; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ProblemNotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.SeverityType; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.current.problems.g.CurrentProblemListBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceCurrentProblems; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceCurrentProblemsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; +import org.opendaylight.yangtools.concepts.Builder; + +public class Model12ObjectMock { + + public NetconfNode getNetconfNode() { + + AvailableCapabilitiesBuilder availableCapabilitiesBuilder = + ObjectBuilder.getAvailableCababilitiesList(NetworkElement.QNAME, WrapperMicrowaveModelRev170324.QNAME); + + NetconfNodeBuilder nNodeBuilder = new NetconfNodeBuilder(); + nNodeBuilder.setAvailableCapabilities(availableCapabilitiesBuilder.build()); + nNodeBuilder.setConnectionStatus(ConnectionStatus.Connected); + + // build + NetconfNode nNode = nNodeBuilder.build(); + return nNode; + } + + public NetworkElement getNetworkElement() { + + NetworkElementBuilder networkElementBuilder = new NetworkElementBuilder(); + + // ---- LTP List + networkElementBuilder.setLtp(Arrays.asList( + ObjectBuilder.getLtp(MwAirInterfacePac.class, MwAirInterfacePac.QNAME, ONFLayerProtocolName.MWAirInterface), + ObjectBuilder.getLtp(MwEthernetContainerPac.class, MwEthernetContainerPac.QNAME, + ONFLayerProtocolName.EthernetContainer12), + ObjectBuilder.getLtp(MwTdmContainerPac.class, MwTdmContainerPac.QNAME, ONFLayerProtocolName.TDMContainer), + ObjectBuilder.getLtp(MwHybridMwStructurePac.class, MwHybridMwStructurePac.QNAME, ONFLayerProtocolName.Structure), + ObjectBuilder.getLtp(MwAirInterfaceDiversityPac.class, MwAirInterfaceDiversityPac.QNAME, ONFLayerProtocolName.Structure), + ObjectBuilder.getLtp(MwPureEthernetStructurePac.class, MwPureEthernetStructurePac.QNAME, ONFLayerProtocolName.Structure) + )); + // build + NetworkElement networkElement = networkElementBuilder.build(); + return networkElement; + } + + public AirInterfaceCurrentProblems getMwAirInterfacePacCurrentProblems() { + /* + * CurrentProblemListBuilder currentProblemListBuilder = new CurrentProblemListBuilder(); + * currentProblemListBuilder.setProblemName("Problem1"); + * currentProblemListBuilder.setProblemSeverity(SeverityType.Critical); + * currentProblemListBuilder.setSequenceNumber(1); currentProblemListBuilder.setTimeStamp(new + * DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + * + * AirInterfaceCurrentProblemsBuilder airInterfaceCurrentProblemsBuilder = new + * AirInterfaceCurrentProblemsBuilder(); + * airInterfaceCurrentProblemsBuilder.setCurrentProblemList(Arrays.asList(currentProblemListBuilder. + * build())); + * + * return airInterfaceCurrentProblemsBuilder.build(); + */ + return getCurrentProblems(CurrentProblemListBuilder.class, AirInterfaceCurrentProblemsBuilder.class); + } + + public , PLB extends Builder> R getCurrentProblems(Class plbClazz, + Class rbClazz) { + + try { + PLB currentProblemListBuilder = plbClazz.newInstance(); + + // currentProblemListBuilder.setProblemName("Problem1"); + Method setProblemName = plbClazz.getDeclaredMethod("setProblemName", String.class); + setProblemName.setAccessible(true); + setProblemName.invoke(currentProblemListBuilder, "Problem1"); + + // currentProblemListBuilder.setProblemSeverity(SeverityType.Critical); + Method setProblemSeverity = plbClazz.getDeclaredMethod("setProblemSeverity", SeverityType.class); + setProblemSeverity.setAccessible(true); + setProblemSeverity.invoke(currentProblemListBuilder, SeverityType.Critical); + + // currentProblemListBuilder.setSequenceNumber(1); + Method setSequenceNumber = plbClazz.getDeclaredMethod("setSequenceNumber", Integer.class); + setSequenceNumber.setAccessible(true); + setSequenceNumber.invoke(currentProblemListBuilder, 1); + + // currentProblemListBuilder.setTimeStamp(new + // DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + Method setTimeStamp = plbClazz.getDeclaredMethod("setTimeStamp", DateAndTime.class); + setTimeStamp.setAccessible(true); + setTimeStamp.invoke(currentProblemListBuilder, + new DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + + // AirInterfaceCurrentProblemsBuilder airInterfaceCurrentProblemsBuilder = new + // AirInterfaceCurrentProblemsBuilder(); + Builder airInterfaceCurrentProblemsBuilder = rbClazz.newInstance(); + // airInterfaceCurrentProblemsBuilder.setCurrentProblemList(Arrays.asList(currentProblemListBuilder.build())); + Method setCurrentProblemList = rbClazz.getDeclaredMethod("setCurrentProblemList", List.class); + setCurrentProblemList.setAccessible(true); + setCurrentProblemList.invoke(airInterfaceCurrentProblemsBuilder, + Arrays.asList(currentProblemListBuilder.build())); + + return airInterfaceCurrentProblemsBuilder.build(); + } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException + | IllegalArgumentException | InvocationTargetException e) { + e.printStackTrace(); + return null; + } + } + + public ProblemNotification getProblemNotification() { + ProblemNotificationBuilder b = new ProblemNotificationBuilder(); + b.setProblem("ProblemNotification"); + b.setSeverity(SeverityType.Minor); + b.setCounter(2); + b.setObjectIdRef(new UniversalId("test")); + b.setTimeStamp(new DateAndTime(InternalDateAndTime.getTestpattern().getValue())); + return b.build(); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ObjectBuilder.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ObjectBuilder.java new file mode 100644 index 000000000..b2faa5667 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ObjectBuilder.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container.ONFLayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.Extension; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.extension.g.ExtensionBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.LpBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.logical.termination.point.g.LpKey; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.network.element.Ltp; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.network.element.LtpBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.network.element.LtpKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapabilityBuilder; +import org.opendaylight.yangtools.yang.common.QName; + +public class ObjectBuilder { + + static AvailableCapabilitiesBuilder getAvailableCababilitiesList(QName... qNames) { + return getAvailableCababilitiesList(null, qNames); + } + + static AvailableCapabilitiesBuilder getAvailableCababilitiesList(AvailableCapabilitiesBuilder valueBuilder, + QName... qNames) { + if (valueBuilder == null) { + valueBuilder = new AvailableCapabilitiesBuilder(); + } + List capabilites = new ArrayList<>(); + for (QName s : qNames) { + AvailableCapabilityBuilder capabilityBuilder = new AvailableCapabilityBuilder(); + capabilityBuilder.setCapability(s.toString()); + capabilites.add(capabilityBuilder.build()); + } + valueBuilder.setAvailableCapability(capabilites); + return valueBuilder; + } + + static Extension getExtension(String valueName, String value) { + ExtensionBuilder lpExtension = new ExtensionBuilder(); + lpExtension.setValueName(valueName); + lpExtension.setValue(value); + return lpExtension.build(); + } + + static Ltp getLtp(Class clazz, QName qname, ONFLayerProtocolName onflayerProtocolName) { + String baseName = clazz.getSimpleName(); + LpBuilder lpBuilder = new LpBuilder(); + lpBuilder.withKey(new LpKey(new UniversalId(baseName + "LpKey"))); + lpBuilder.setLayerProtocolName(new LayerProtocolName(onflayerProtocolName.getValue())); + lpBuilder.setExtension(Arrays.asList(getExtension("capability", qname.getNamespace().toString()), + getExtension("revision", qname.getRevision().get().toString()), + getExtension("conditional-package", qname.getLocalName()))); + + LtpBuilder ltpBuilder = new LtpBuilder(); + ltpBuilder.setUuid(new UniversalId(baseName)); + ltpBuilder.setLp(Arrays.asList(lpBuilder.build())); + ltpBuilder.withKey(new LtpKey(new UniversalId(baseName + "LtpKey"))); + return ltpBuilder.build(); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211Mock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211Mock.java new file mode 100644 index 000000000..5dbffa3b2 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211Mock.java @@ -0,0 +1,208 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import com.google.common.base.Optional; +import com.google.common.util.concurrent.CheckedFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.MicrowaveModelListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.NotificationListener; + +/** + * @author herbert + * + */ +@SuppressWarnings("deprecation") +public class ReadOnlyTransactionMountpoint1211Mock implements ReadOnlyTransaction, NotificationService { + + private final Model1211ObjectMock mock = new Model1211ObjectMock(); + private MicrowaveModelListener modelListener; + + @Override + public Object getIdentifier() { + return null; + } + + public Model1211ObjectMock getMock() { + return mock; + } + + @SuppressWarnings("unchecked") + @Override + public CheckedFuture, ReadFailedException> read(LogicalDatastoreType store, + InstanceIdentifier path) { + + System.out.println("READ: " + path + " Store: " + store); + + Optional res1; + + if (path.getTargetType().equals(Node.class)) { + System.out.println("Deliver " + path.getTargetType()); + NetconfNode nNode = mock.getNetconfNode(); + NodeBuilder nodeBuilder = new NodeBuilder(); + nodeBuilder.addAugmentation(NetconfNode.class, nNode); + Node node = nodeBuilder.build(); + res1 = (Optional) Optional.of(node); + + } else if (path.getTargetType().equals(NetworkElement.class)) { + System.out.println("Deliver " + path.getTargetType()); + NetworkElement ne = mock.getNetworkElement(); + res1 = (Optional) Optional.of(ne); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceCurrentProblems.class)) { + // MwAirInterfacePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.pac.AirInterfaceCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems.class)) { + // MwAirInterfaceDiversityPac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.diversity.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems.class)) { + // MwHybridMwStructurePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.hybrid.mw.structure.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems.class)) { + // MwAirInterfaceDiversityPac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.air._interface.diversity.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems.class)) { + // MwPureEthernetStructurePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.pure.ethernet.structure.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac.EthernetContainerCurrentProblems.class)) { + //EthernetContainerCurrentProblems + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ethernet.container.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.ethernet.container.pac.EthernetContainerCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.tdm.container.pac.TdmContainerCurrentProblems.class)) { + // TdmContainerCurrentProblems + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.tdm.container.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.mw.tdm.container.pac.TdmContainerCurrentProblemsBuilder.class)); + + } else { + System.err.println("Nothing to deliver for" + path.getTargetType()); + res1 = Optional.absent(); + } + + + CheckedFuture, ReadFailedException> res = new CheckedFuture, ReadFailedException>() { + + @Override + public void addListener(Runnable arg0, Executor arg1) {} + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + @Override + public Optional get() throws InterruptedException, ExecutionException { + return res1; + } + + @Override + public Optional get(long timeout, TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + return null; + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean isDone() { + return false; + } + + @Override + public Optional checkedGet() throws ReadFailedException { + return res1; + } + + @Override + public Optional checkedGet(long arg0, TimeUnit arg1) throws TimeoutException, ReadFailedException { + return null; + } + + }; + return res; + + } + + + @Override + public void close() {} + + @Override + public ListenerRegistration registerNotificationListener(T listener) { + this.modelListener = (MicrowaveModelListener)listener; + return null; + } + + + public void sendProblemNotification() { + System.out.println("Send out Problemnotification"); + modelListener.onProblemNotification(mock.getProblemNotification()); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211pMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211pMock.java new file mode 100644 index 000000000..9b49c5b99 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint1211pMock.java @@ -0,0 +1,209 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import com.google.common.base.Optional; +import com.google.common.util.concurrent.CheckedFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.MicrowaveModelListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.NotificationListener; + +/** + * @author herbert + * + */ +@SuppressWarnings("deprecation") +public class ReadOnlyTransactionMountpoint1211pMock implements ReadOnlyTransaction, NotificationService { + + private final Model1211pObjectMock mock = new Model1211pObjectMock(); + private MicrowaveModelListener modelListener; + + @Override + public Object getIdentifier() { + return null; + } + + public Model1211pObjectMock getMock() { + return mock; + } + + @SuppressWarnings("unchecked") + @Override + public CheckedFuture, ReadFailedException> read(LogicalDatastoreType store, + InstanceIdentifier path) { + + System.out.println("READ: " + path + " Store: " + store); + + Optional res1; + + if (path.getTargetType().equals(Node.class)) { + System.out.println("Deliver " + path.getTargetType()); + NetconfNode nNode = mock.getNetconfNode(); + NodeBuilder nodeBuilder = new NodeBuilder(); + nodeBuilder.addAugmentation(NetconfNode.class, nNode); + Node node = nodeBuilder.build(); + res1 = (Optional) Optional.of(node); + + } else if (path.getTargetType().equals(NetworkElement.class)) { + System.out.println("Deliver " + path.getTargetType()); + NetworkElement ne = mock.getNetworkElement(); + res1 = (Optional) Optional.of(ne); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceCurrentProblems.class)) { + // MwAirInterfacePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.pac.AirInterfaceCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems.class)) { + // MwAirInterfaceDiversityPac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.diversity.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems.class)) { + // MwHybridMwStructurePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.hybrid.mw.structure.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems.class)) { + // MwAirInterfaceDiversityPac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.air._interface.diversity.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems.class)) { + // MwPureEthernetStructurePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.pure.ethernet.structure.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblemsBuilder.class)); + + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac.EthernetContainerCurrentProblems.class)) { + //EthernetContainerCurrentProblems + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ethernet.container.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.ethernet.container.pac.EthernetContainerCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.tdm.container.pac.TdmContainerCurrentProblems.class)) { + // TdmContainerCurrentProblems + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.tdm.container.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.mw.tdm.container.pac.TdmContainerCurrentProblemsBuilder.class)); + + } else { + System.err.println("Nothing to deliver for" + path.getTargetType()); + res1 = Optional.absent(); + } + + + CheckedFuture, ReadFailedException> res = new CheckedFuture, ReadFailedException>() { + + @Override + public void addListener(Runnable arg0, Executor arg1) {} + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + @Override + public Optional get() throws InterruptedException, ExecutionException { + return res1; + } + + @Override + public Optional get(long timeout, TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + return null; + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean isDone() { + return false; + } + + @Override + public Optional checkedGet() throws ReadFailedException { + return res1; + } + + @Override + public Optional checkedGet(long arg0, TimeUnit arg1) throws TimeoutException, ReadFailedException { + return null; + } + + }; + return res; + + } + + + @Override + public void close() {} + + @Override + public ListenerRegistration registerNotificationListener(T listener) { + this.modelListener = (MicrowaveModelListener)listener; + return null; + } + + + public void sendProblemNotification() { + System.out.println("Send out Problemnotification"); + modelListener.onProblemNotification(mock.getProblemNotification()); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint12Mock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint12Mock.java new file mode 100644 index 000000000..45c0f3900 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ReadOnlyTransactionMountpoint12Mock.java @@ -0,0 +1,199 @@ +/******************************************************************************* + * ============LICENSE_START======================================================= + * ONAP : ccsdk feature sdnr wt + * ================================================================================ + * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + ******************************************************************************/ +package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util; + +import com.google.common.base.Optional; +import com.google.common.util.concurrent.CheckedFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import org.opendaylight.controller.md.sal.binding.api.NotificationService; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement; +import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.MicrowaveModelListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.NotificationListener; + +/** + * @author herbert + * + */ +@SuppressWarnings("deprecation") +public class ReadOnlyTransactionMountpoint12Mock implements ReadOnlyTransaction, NotificationService { + + private final Model12ObjectMock mock = new Model12ObjectMock(); + private MicrowaveModelListener modelListener; + + @Override + public Object getIdentifier() { + return null; + } + + public Model12ObjectMock getMock() { + return mock; + } + + @SuppressWarnings("unchecked") + @Override + public CheckedFuture, ReadFailedException> read(LogicalDatastoreType store, + InstanceIdentifier path) { + + System.out.println("READ: " + path + " Store: " + store); + + Optional res1; + + if (path.getTargetType().equals(Node.class)) { + System.out.println("Deliver " + path.getTargetType()); + NetconfNode nNode = mock.getNetconfNode(); + NodeBuilder nodeBuilder = new NodeBuilder(); + nodeBuilder.addAugmentation(NetconfNode.class, nNode); + Node node = nodeBuilder.build(); + res1 = (Optional) Optional.of(node); + + } else if (path.getTargetType().equals(NetworkElement.class)) { + System.out.println("Deliver " + path.getTargetType()); + NetworkElement ne = mock.getNetworkElement(); + res1 = (Optional) Optional.of(ne); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceCurrentProblems.class)) { + // MwAirInterfacePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.pac.AirInterfaceCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblems.class)) { + // MwHybridMwStructurePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.hybrid.mw.structure.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.hybrid.mw.structure.pac.HybridMwStructureCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblems.class)) { + // MwAirInterfaceDiversityPac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.air._interface.diversity.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.air._interface.diversity.pac.AirInterfaceDiversityCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblems.class)) { + // MwPureEthernetStructurePac + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.pure.ethernet.structure.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.pure.ethernet.structure.pac.PureEthernetStructureCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac.EthernetContainerCurrentProblems.class)) { + //EthernetContainerCurrentProblems + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.ethernet.container.pac.EthernetContainerCurrentProblemsBuilder.class)); + + } else if (path.getTargetType().equals( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.tdm.container.pac.TdmContainerCurrentProblems.class)) { + // TdmContainerCurrentProblems + System.out.println("Deliver " + path.getTargetType()); + res1 = (Optional) Optional.of(mock.getCurrentProblems( + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.tdm.container.current.problems.g.CurrentProblemListBuilder.class, + org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.mw.tdm.container.pac.TdmContainerCurrentProblemsBuilder.class)); + + } else { + System.err.println("Nothing to deliver for" + path.getTargetType()); + res1 = Optional.absent(); + } + + + CheckedFuture, ReadFailedException> res = new CheckedFuture, ReadFailedException>() { + + @Override + public void addListener(Runnable arg0, Executor arg1) {} + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return false; + } + + @Override + public Optional get() throws InterruptedException, ExecutionException { + return res1; + } + + @Override + public Optional get(long timeout, TimeUnit unit) + throws InterruptedException, ExecutionException, TimeoutException { + return null; + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public boolean isDone() { + return false; + } + + @Override + public Optional checkedGet() throws ReadFailedException { + return res1; + } + + @Override + public Optional checkedGet(long arg0, TimeUnit arg1) throws TimeoutException, ReadFailedException { + return null; + } + + }; + return res; + + } + + @Override + public void close() {} + + @Override + public ListenerRegistration registerNotificationListener(T listener) { + this.modelListener = (MicrowaveModelListener)listener; + return null; + } + + + public void sendProblemNotification() { + System.out.println("Send out Problemnotification"); + modelListener.onProblemNotification(mock.getProblemNotification()); + } + +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf b/sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf new file mode 100644 index 000000000..8489f0905 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/captured-akka.conf @@ -0,0 +1,72 @@ + +odl-cluster-data { + + akka { + loglevel = "" + remote { + netty.tcp { + hostname = "zltcdyh1arbc02.2f0377.dyh1a.tci.att.com" + port = 2550 + } + } + actor { + debug{ + autoreceive = on + lifecycle = on + unhandled = on + fsm = on + event-stream = on + } + } + cluster { + seed-nodes = ["akka.tcp://opendaylight-cluster-data@zltcdyh1arbc01.2f0377.dyh1a.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1arbc02.2f0377.dyh1a.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1arbc03.2f0377.dyh1a.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1brbc01.f84e7a.dyh1b.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1brbc02.f84e7a.dyh1b.tci.att.com:2550", "akka.tcp://opendaylight-cluster-data@zltcdyh1brbc03.f84e7a.dyh1b.tci.att.com:2550"] + seed-node-timeout = 15s + roles = ["member-2"] + + } + persistence { + journal-plugin-fallback { + circuit-breaker { + max-failures = 10 + call-timeout = 60s + reset-timeout = 30s + } + } + } + } +} + +odl-cluster-rpc { + + akka { + loglevel = "" + remote { + netty.tcp { + hostname = "zltcdyh1arbc02.2f0377.dyh1a.tci.att.com" + port = 2551 + } + } + actor { + debug{ + autoreceive = on + lifecycle = on + unhandled = on + fsm = on + event-stream = on + } + } + cluster { + seed-nodes = ["akka.tcp://odl-cluster-rpc@zltcdyh1arbc01.2f0377.dyh1a.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1arbc02.2f0377.dyh1a.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1arbc03.2f0377.dyh1a.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1brbc01.f84e7a.dyh1b.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1brbc02.f84e7a.dyh1b.tci.att.com:2551", "akka.tcp://odl-cluster-rpc@zltcdyh1brbc03.f84e7a.dyh1b.tci.att.com:2551"] + seed-node-timeout = 15s + } + persistence { + journal-plugin-fallback { + circuit-breaker { + max-failures = 10 + call-timeout = 60s + reset-timeout = 30s + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml new file mode 100644 index 000000000..896d51616 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml @@ -0,0 +1,103 @@ +# ======================== Elasticsearch Configuration ========================= +# +# NOTE: Elasticsearch comes with reasonable defaults for most settings. +# Before you set out to tweak and tune the configuration, make sure you +# understand what are you trying to accomplish and the consequences. +# +# The primary way of configuring a node is via this file. This template lists +# the most important settings you may want to configure for a production cluster. +# +# Please see the documentation for further information on configuration options: +# +# +# ---------------------------------- Cluster ----------------------------------- +# +# Use a descriptive name for your cluster: +# +cluster.name: $clustername +# +# ------------------------------------ Node ------------------------------------ +# +# Use a descriptive name for the node: +# +node.name: $nodename +# +# Add custom attributes to the node: +# +# node.rack: r1 +# +# ----------------------------------- Paths ------------------------------------ +# +# Path to directory where to store the data (separate multiple locations by comma): +# +# path.data: /path/to/data +path.data: etc +path.home: data +path.plugins: etc/elasticsearch-plugins +# +# Path to log files: +# +# path.logs: /path/to/logs +# +# ----------------------------------- Memory ----------------------------------- +# +# Lock the memory on startup: +# +# bootstrap.mlockall: true +# +# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory +# available on the system and that the owner of the process is allowed to use this limit. +# +# Elasticsearch performs poorly when the system is swapping the memory. +# +# ---------------------------------- Network ----------------------------------- +# +# Set the bind address to a specific IP (IPv4 or IPv6): +# +# network.host: 192.168.0.1 +network.bind_host: 0.0.0.0 +network.publish_host: $hostname +# +# Set a custom port for HTTP: +# +# http.port: 9200 +# +# For more information, see the documentation at: +# +# +# --------------------------------- Discovery ---------------------------------- +# +# Pass an initial list of hosts to perform discovery when new node is started: +# The default list of hosts is ["127.0.0.1", "[::1]"] +# +# discovery.zen.ping.unicast.hosts: ["host1", "host2"] +# +# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1): +# +# discovery.zen.minimum_master_nodes: 3 +# +# For more information, see the documentation at: +# +# +# ---------------------------------- Gateway ----------------------------------- +# +# Block initial recovery after a full cluster restart until N nodes are started: +# +# gateway.recover_after_nodes: 3 +# +# For more information, see the documentation at: +# +# +# ---------------------------------- Various ----------------------------------- +# +# Disable starting multiple nodes on a single system: +# +# node.max_local_storage_nodes: 1 +# +# Require explicit names when deleting indices: +# +# action.destructive_requires_name: true + +# Required for Kibana 4.x support +index.max_result_window: 2147483647 +#transport.tcp.port: 9301 diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json new file mode 100644 index 000000000..2c93d8662 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json @@ -0,0 +1,21 @@ +{ + "sdn-controller" : { + "dlux" : { + "ip-version" : "ipv4", + "host" : "localhost", + "port" : 8181, + "transport-protocol" : "http", + "username" : "admin", + "password" : "admin" + }, + "main" : { + "ip-version" : "ipv4", + "host" : "localhost", + "port" : 8181, + "transport-protocol" : "http", + "username" : "admin", + "password" : "admin" + } + } +} + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json new file mode 100644 index 000000000..596584efc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json @@ -0,0 +1,751 @@ +{ + "schema-information": { + "ForwardingDomain": { + "id": "ForwardingDomain", + "uml-id": "_oGql-FLNEeO75dO39GbF8Q", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The ForwardingDomain (FD) object class models the topological component which represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model. The FD object provides the context for instructing the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. The LTPs available are those defined at the boundary of the FD. At a lowere level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned." + ] + }, + "layerProtocolNameList": { + "id": "layerProtocolNameList", + "uml-id": "_oGqmAlLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_P-Hp8MD4EeSoNOrYOfaryg", + "order-number": 1, + "is-read-only": false, + "description": [ + "One or more protocol layers at which the FD represents the opportunity to enable forwarding between LTP that bound it." + ] + }, + "_lowerLevelFdRefList": { + "id": "_lowerLevelFdRefList", + "uml-id": "_oGqmBVLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGql-FLNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": false, + "description": [ + "The FD object class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning). The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD. Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition)." + ] + }, + "_fcRefList": { + "id": "_fcRefList", + "uml-id": "_oGql_1LNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGqmC1LNEeO75dO39GbF8Q", + "order-number": 3, + "is-read-only": false, + "description": [ + "An FD contains one or more FCs. A contained FC connects LTPs that bound the FD." + ] + }, + "ForwardingConstruct": { + "id": "ForwardingConstruct", + "uml-id": "_oGqmC1LNEeO75dO39GbF8Q", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs at a particular specific layerProtocol. Like the LTP the FC supports any transport protocol including all circuit and packet forms. It is used to effect forwarding of transport characteristic (layer protocol) information. An FC can be in only one FD. The ForwardingConstruct is a Forwarding entity. At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances. The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structure for linear, ring or mesh protection schemes." + ] + }, + "_lowerLevelFcRefList": { + "id": "_lowerLevelFcRefList", + "uml-id": "_i7UzkFYfEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_oGqmC1LNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": false, + "description": [ + "An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning). Aggregation is used as for the FD to allow changes in hierarchy." + ] + }, + "_fcPortList": { + "id": "_fcPortList", + "uml-id": "_gqUk0FYgEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_b_lUAFYgEeOVGaP4lO41SQ", + "order-number": 3, + "is-read-only": false, + "description": [ + "The association of the FC to LTPs is made via FcPorts (essentially the ports of the FC)." + ] + }, + "_fcSwitchList": { + "id": "_fcSwitchList", + "uml-id": "_d_droFYhEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_a97NQFYhEeOVGaP4lO41SQ", + "order-number": 4, + "is-read-only": false, + "description": [ + "If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects. The arrangement of switches for a particular instance is described by a referenced FcSpec" + ] + }, + "forwardingDirection": { + "id": "forwardingDirection", + "uml-id": "_9_yMUEDAEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_dV67AEC8EeWxhL2B6Peg6A", + "order-number": 5, + "is-read-only": false, + "description": [ + "The directionality of the ForwardingConstruct. Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). Is not present in more complex cases." + ] + }, + "NetworkElement": { + "id": "NetworkElement", + "uml-id": "_oGqnr1LNEeO75dO39GbF8Q", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The Network Element (NE) object class represents a network element (traditional NE) in the data plane. A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a single management-control port. In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element. NE is really a product bundling or some view of management scope, management access, session. The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links)." + ] + }, + "_fdRefList": { + "id": "_fdRefList", + "uml-id": "_oGqnslLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGql-FLNEeO75dO39GbF8Q", + "order-number": 1, + "is-read-only": false, + "description": [ + "Represents the FD that is completely within the boundary of the NE. At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned. Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association." + ] + }, + "FcPort": { + "id": "FcPort", + "uml-id": "_b_lUAFYgEeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The association of the FC to LTPs is made via FcPorts. The FcPort object class models the access to the FC function. The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the FcPort may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The FcPort replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the FcPort as a Port on that component" + ] + }, + "role": { + "id": "role", + "uml-id": "_Ykm6QFeGEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_DUU_sGZ_EeWrX_JIGzXlSg", + "order-number": 2, + "is-read-only": false, + "description": [ + "Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function." + ] + }, + "fcPortDirection": { + "id": "fcPortDirection", + "uml-id": "_1HbEgEDAEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_2WpC8EC7EeWxhL2B6Peg6A", + "order-number": 3, + "is-read-only": false, + "description": [ + "The orientation of defined flow at the FcPort." + ] + }, + "LayerProtocol": { + "id": "LayerProtocol", + "uml-id": "_gROecFYXEeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP." + ] + }, + "configuredClientCapacity": { + "id": "configuredClientCapacity", + "uml-id": "_CUJD4BicEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": false, + "description": [ + "Provides a summarized view of the client capacity that is configurable for use. Note the cleint LTP association should provide all necessary detail hence this attribute is questionable." + ] + }, + "lpDirection": { + "id": "lpDirection", + "uml-id": "_GuuSYEDBEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_RWILYEDAEeWQeOKbNUpP9A", + "order-number": 3, + "is-read-only": false, + "description": [ + "The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows" + ] + }, + "terminationState": { + "id": "terminationState", + "uml-id": "_p2YfoGeEEeWmgIwAIZlYKQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": false, + "description": [ + "Indicates whether the layer is terminated and if so how." + ] + }, + "LogicalTerminationPoint": { + "id": "LogicalTerminationPoint", + "uml-id": "_eEpDMFX4EeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms." + ] + }, + "_serverLtpRefList": { + "id": "_serverLtpRefList", + "uml-id": "_D4N9IFX5EeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 1, + "is-read-only": false, + "description": [ + "References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT)." + ] + }, + "_clientLtpRefList": { + "id": "_clientLtpRefList", + "uml-id": "_3Y4zAFYWEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing." + ] + }, + "_lpList": { + "id": "_lpList", + "uml-id": "_lvFOQFYXEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_gROecFYXEeOVGaP4lO41SQ", + "order-number": 3, + "is-read-only": false, + "description": [ + "Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical)" + ] + }, + "_connectedLtpRef": { + "id": "_connectedLtpRef", + "uml-id": "_CHM6YFYYEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 4, + "is-read-only": false, + "description": [ + "Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding. Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts." + ] + }, + "_peerLtpRef": { + "id": "_peerLtpRef", + "uml-id": "_TkuhMFYYEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 5, + "is-read-only": false, + "description": [ + "References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP." + ] + }, + "physicalPortReference": { + "id": "physicalPortReference", + "uml-id": "_RLDi4BieEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 6, + "is-read-only": false, + "description": [ + "One or more text labels for the unmodelled physical port associated with the LTP. In many cases there is no associated physical port" + ] + }, + "_ltpRefList": { + "id": "_ltpRefList", + "uml-id": "_vq1NIBigEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 7, + "is-read-only": false, + "description": [ + "References one or more LTPs in other views that represent this LTP. The referencing LTP is the rovider of capability." + ] + }, + "ltpDirection": { + "id": "ltpDirection", + "uml-id": "_S811EEDBEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_RWILYEDAEeWQeOKbNUpP9A", + "order-number": 8, + "is-read-only": false, + "description": [ + "The overall directionality of the LTP. - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs. - A SINK LTP can only contain SINK LPs - A SOURCE LTP can only contain SOURCE LPs" + ] + }, + "FcSwitch": { + "id": "FcSwitch", + "uml-id": "_a97NQFYhEeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The FcSwitch object class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs the functoion of the Protection Group in a traditional model. Associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection FcPorts (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) FcPorts where eith protection or working can feed one or more protected FcPort. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1).. May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state." + ] + }, + "holdOffTime": { + "id": "holdOffTime", + "uml-id": "_oGqn6FLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": false, + "description": [ + "This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm." + ] + }, + "waitToRestoreTime": { + "id": "waitToRestoreTime", + "uml-id": "_oGqn5lLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": false, + "description": [ + "If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operaion (e.g a fault has cleared) before restoring traffic to that preferred FcPort." + ] + }, + "protType": { + "id": "protType", + "uml-id": "_oGqn6lLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_c3Hu8Gb3EeWrX_JIGzXlSg", + "order-number": 3, + "is-read-only": false, + "description": [ + "Indicates the protection scheme that is used for the ProtectionGroup." + ] + }, + "operType": { + "id": "operType", + "uml-id": "_oGqn41LNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGqjf1LNEeO75dO39GbF8Q", + "order-number": 4, + "is-read-only": false, + "description": [ + "This attribute whether or not the protection scheme is revertive or non-revertive." + ] + }, + "_selectedFcPortRefList": { + "id": "_selectedFcPortRefList", + "uml-id": "_2PdiYI8lEeOw_ste-s6RrA", + "uml-type": "ownedAttribute", + "type": "_b_lUAFYgEeOVGaP4lO41SQ", + "order-number": 5, + "is-read-only": false, + "description": [ + "Indicates which points are selected by the switch." + ] + }, + "Name": { + "id": "Name", + "uml-id": "_BUcVEI2tEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Name: A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity." + ] + }, + "nameList": { + "id": "nameList", + "uml-id": "_ajjMYI2uEeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_y7oy8I3tEeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "List of names." + ] + }, + "GlobalClass": { + "id": "GlobalClass", + "uml-id": "_iVJ1kI2wEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others). Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context. (consider in the context of an Object Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature)" + ] + }, + "LocalClass": { + "id": "LocalClass", + "uml-id": "_k5nWYI2wEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.. Feature of an Entity: An inseparable, externally distinguishable part of an entity. The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable. (consider in the context of an Object Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)" + ] + }, + "localIdList": { + "id": "localIdList", + "uml-id": "_RMJegI22EeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_y7oy8I3tEeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "description": [ + "An identifier that is unique in the context of some scope that is less than the global scope. (consider in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)" + ] + }, + "Label": { + "id": "Label", + "uml-id": "_u0HQoI2wEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A property of an entity with a value that is not expected to be unique and is allowed to change. A label carries no semantics with respect to the purpose of the entity and has no effect on the entity behavior or state." + ] + }, + "labelList": { + "id": "labelList", + "uml-id": "_olrqYI2uEeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_y7oy8I3tEeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "description": [ + "List of labels." + ] + }, + "Extension": { + "id": "Extension", + "uml-id": "_bCi74I22EeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Extension provides an opportunity to define properties not declared in the class that extend the class enabling a realization with simple ad-hoc extension of standard classes to be conformant." + ] + }, + "extensionList": { + "id": "extensionList", + "uml-id": "_uQqu4I28EeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_y7oy8I3tEeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "description": [ + "List of simple name-value extentions" + ] + }, + "UniversalIdAuthority": { + "id": "UniversalIdAuthority", + "uml-id": "_StA-4I23EeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the authority that controls the allocation of UUIDs." + ] + }, + "NameAndValueAuthority": { + "id": "NameAndValueAuthority", + "uml-id": "_ulDtsI3AEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the authority that controls the legal valuse for the names and values of a name/value attribute." + ] + }, + "uuid": { + "id": "uuid", + "uml-id": "_U1tnkI31EeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 0, + "is-read-only": false, + "description": [ + "The UUID for the NameValueAuthority." + ] + }, + "ConditionalPackage": { + "id": "ConditionalPackage", + "uml-id": "_-ZWVQJP0EeOqfpp-ZJSmaA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The base class for conditional packages." + ] + }, + "State_Pac": { + "id": "State_Pac", + "uml-id": "_RG6VILEtEeSZUdYfPSdgew", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Provides general state attributes." + ] + }, + "operationalState": { + "id": "operationalState", + "uml-id": "_dO6owLEtEeSZUdYfPSdgew", + "uml-type": "ownedAttribute", + "type": "_lNclkLEtEeSZUdYfPSdgew", + "order-number": 1, + "is-read-only": true, + "description": [ + "The operational state is used to indicate whether or not the resource is installed and working" + ] + }, + "administrativeControl": { + "id": "administrativeControl", + "uml-id": "_7gqwALEtEeSZUdYfPSdgew", + "uml-type": "ownedAttribute", + "type": "_-xPeALEvEeSZUdYfPSdgew", + "order-number": 2, + "is-read-only": false, + "description": [ + "The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources. The value is the current control target. The actual administrativeState may or may not be at target." + ] + }, + "administrativeState": { + "id": "administrativeState", + "uml-id": "_AjGvILEuEeSZUdYfPSdgew", + "uml-type": "ownedAttribute", + "type": "_KSKOYLEuEeSZUdYfPSdgew", + "order-number": 3, + "is-read-only": true, + "description": [ + "Shows whether or not the client has permission to use or has a prohibition against using the resource. The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources." + ] + }, + "lifecycleState": { + "id": "lifecycleState", + "uml-id": "_PzqZ0GgiEeWmgIwAIZlYKQ", + "uml-type": "ownedAttribute", + "type": "_YSsboGgiEeWmgIwAIZlYKQ", + "order-number": 4, + "is-read-only": false, + "description": [ + "Used to track the planned deployment, allocation to clients and withdrawal of resources." + ] + }, + "LayerProtocolName": { + "id": "LayerProtocolName", + "uml-id": "_P-Hp8MD4EeSoNOrYOfaryg", + "uml-type": "uml:DataType", + "description": [ + "Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)" + ] + }, + "PortRole": { + "id": "PortRole", + "uml-id": "_DUU_sGZ_EeWrX_JIGzXlSg", + "uml-type": "uml:DataType", + "description": [ + "The role of a port in the context of the function of the forwarding entity that it bounds" + ] + }, + "ProtectionType": { + "id": "ProtectionType", + "uml-id": "_c3Hu8Gb3EeWrX_JIGzXlSg", + "uml-type": "uml:DataType", + "description": [ + "Identifies the type of rotection of an FcSwitch." + ] + }, + "DateAndTime": { + "id": "DateAndTime", + "uml-id": "_oGqi1lLNEeO75dO39GbF8Q", + "uml-type": "uml:DataType", + "description": [ + "This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000 .. 9999 year MM 01 .. 12 month dd 01 .. 31 day hh 00 .. 23 hour mm 00 .. 59 minute ss 00 .. 59 second s .0 .. .9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00 .. 23 time zone difference in hours Mm 00 .. 59 time zone difference in minutes." + ] + }, + "NameAndValue": { + "id": "NameAndValue", + "uml-id": "_y7oy8I3tEeO38ZmbECnvbg", + "uml-type": "uml:DataType", + "description": [ + "A scoped name-value pair" + ] + }, + "valueName": { + "id": "valueName", + "uml-id": "_77PyQI3tEeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "The name of the value. The value need not have a name." + ] + }, + "UniversalId": { + "id": "UniversalId", + "uml-id": "_SU3Q4I30EeO38ZmbECnvbg", + "uml-type": "uml:DataType", + "description": [ + "The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure." + ] + }, + "value": { + "id": "value", + "uml-id": "_cbx2gI30EeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "The specific value of the universal id" + ] + }, + "_oGqjf1LNEeO75dO39GbF8Q": { + "id": "OperType", + "uml-id": "_oGqjf1LNEeO75dO39GbF8Q", + "enum": [ + "REVERTIVE", + "NON-REVERTIVE" + ], + "is-read-only": false, + "description": [ + "The operation type associated with the protection mechanism (either non-revertive or revertive)." + ] + }, + "_2WpC8EC7EeWxhL2B6Peg6A": { + "id": "PortDirection", + "uml-id": "_2WpC8EC7EeWxhL2B6Peg6A", + "enum": [ + "BIDIRECTIONAL", + "INPUT", + "OUTPUT", + "UNIDENTIFIED_OR_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "The orientation of flow at the Port of a Forwarding entity" + ] + }, + "_dV67AEC8EeWxhL2B6Peg6A": { + "id": "ForwardingDirection", + "uml-id": "_dV67AEC8EeWxhL2B6Peg6A", + "enum": [ + "BIDIRECTIONAL", + "UNIDIRECTIONAL", + "UNDEFINED_OR_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "The directionality of a Forwarding entity." + ] + }, + "_RWILYEDAEeWQeOKbNUpP9A": { + "id": "TerminationDirection", + "uml-id": "_RWILYEDAEeWQeOKbNUpP9A", + "enum": [ + "BIDIRECTIONAL", + "SINK", + "SOURCE", + "UNDEFINED_OR_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "The directionality of a termination entity" + ] + }, + "_T5GykEDNEeWQeOKbNUpP9A": { + "id": "ExtendedTerminationDirection", + "uml-id": "_T5GykEDNEeWQeOKbNUpP9A", + "enum": [ + "CONTRA_DIRECTION_SINK", + "CONTRA_DIRECTION_SOURCE" + ], + "is-read-only": false, + "description": [ + "Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP??" + ] + }, + "_6anG8GeEEeWmgIwAIZlYKQ": { + "id": "TerminationState", + "uml-id": "_6anG8GeEEeWmgIwAIZlYKQ", + "enum": [ + "LP_CAN_NEVER_TERMINATE", + "LT_NOT_TERMINATED", + "TERMINATED_SERVER_TO_CLIENT_FLOW", + "TERMINATED_CLIENT_TO_SERVER_FLOW", + "TERMINATED_BIDIRECTIONAL", + "LT_PERMENANTLY_TERMINATED", + "TERMINATION_STATE_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated." + ] + }, + "_lNclkLEtEeSZUdYfPSdgew": { + "id": "OperationalState", + "uml-id": "_lNclkLEtEeSZUdYfPSdgew", + "enum": [ + "DISABLED", + "ENABLED" + ], + "is-read-only": false, + "description": [ + "The possible values of the operationalState." + ] + }, + "_KSKOYLEuEeSZUdYfPSdgew": { + "id": "AdministrativeState", + "uml-id": "_KSKOYLEuEeSZUdYfPSdgew", + "enum": [ + "LOCKED", + "UNLOCKED" + ], + "is-read-only": false, + "description": [ + "The possible values of the administrativeState." + ] + }, + "_-xPeALEvEeSZUdYfPSdgew": { + "id": "AdministrativeControl", + "uml-id": "_-xPeALEvEeSZUdYfPSdgew", + "enum": [ + "UNLOCK", + "LOCK_PASSIVE", + "LOCK_ACTIVE", + "LOCK_IMMEDIATE" + ], + "is-read-only": false, + "description": [ + "The possible values of the current target administrative state." + ] + }, + "_McyhcGgeEeWmgIwAIZlYKQ": { + "id": "ExtendedAdminState", + "uml-id": "_McyhcGgeEeWmgIwAIZlYKQ", + "enum": [ + "SHUTTING_DOWN_ACTIVE", + "SHUTTING_DOWN_PASSIVE" + ], + "is-read-only": false, + "description": [ + "Possible extentions to AdministrativeState" + ] + }, + "_YSsboGgiEeWmgIwAIZlYKQ": { + "id": "LifecycleState", + "uml-id": "_YSsboGgiEeWmgIwAIZlYKQ", + "enum": [ + "PLANNED", + "POTENTIAL", + "INSTALLED", + "PENDING_REMOVAL" + ], + "is-read-only": false, + "description": [ + "The possible values of the lifecycleState." + ] + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json new file mode 100644 index 000000000..5c5daa757 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json @@ -0,0 +1,546 @@ +{ + "schema-information": { + "OTN_CurrentData": { + "id": "OTN_CurrentData", + "uml-id": "_OxyHAOGJEeGhaeLtr7IxXg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance." + ] + }, + "timestamp": { + "id": "timestamp", + "uml-id": "_bGwfoOGJEeGhaeLtr7IxXg", + "uml-type": "ownedAttribute", + "type": "_X-HZUNwbEeGoneTbGt8X0A", + "order-number": 1, + "is-read-only": false, + "description": [ + "The timestamp associated with when the current data was collected." + ] + }, + "OTN_HistoryData": { + "id": "OTN_HistoryData", + "uml-id": "_dQ2mYOGOEeGhaeLtr7IxXg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited." + ] + }, + "«Q.822»-CurrentData": { + "id": "«Q.822»-CurrentData", + "uml-id": "_M8IDMceIEeSfd5vyUJsimg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "suspectIntervalFlag": { + "id": "suspectIntervalFlag", + "uml-id": "_M8IDNceIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 1, + "is-read-only": false, + "description": [ + "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period." + ] + }, + "elapsedTime": { + "id": "elapsedTime", + "uml-id": "_M8IDOMeIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": false + }, + "«Q.822»-HistoryData": { + "id": "«Q.822»-HistoryData", + "uml-id": "_M8IDVMeIEeSfd5vyUJsimg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "historyDataId": { + "id": "historyDataId", + "uml-id": "_M8IDWMeIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "is-key": 1 + }, + "periodEndTime": { + "id": "periodEndTime", + "uml-id": "_M8IDWceIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": false + }, + "«X.739»-Scanner": { + "id": "«X.739»-Scanner", + "uml-id": "_7wb90ceIEeSfd5vyUJsimg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "scannerId": { + "id": "scannerId", + "uml-id": "_7wb91ceIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "is-key": 1 + }, + "granularityPeriod": { + "id": "granularityPeriod", + "uml-id": "_M8IDWseIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "_Y6WUEEamEeabNPX3o7rjtw", + "order-number": 2, + "is-read-only": false + }, + "administrativeState": { + "id": "administrativeState", + "uml-id": "_7wb92seIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_KSKOYLEuEeSZUdYfPSdgew", + "order-number": 3, + "is-read-only": false + }, + "«X.721»-Top": { + "id": "«X.721»-Top", + "uml-id": "_BMJ0EceTEeS6-cawxfHpnA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types." + ] + }, + "objectClass": { + "id": "objectClass", + "uml-id": "_BMJ0FceTEeS6-cawxfHpnA", + "uml-type": "ownedAttribute", + "type": "_ltGzFMeUEeS6-cawxfHpnA", + "order-number": 1, + "is-read-only": false, + "description": [ + "ObjectClass ::= CHOICE{ globalForm [0] OBJECT IDENTIFIER, localForm [1] INTEGER}" + ] + }, + "nameBinding": { + "id": "nameBinding", + "uml-id": "_BMJ0F8eTEeS6-cawxfHpnA", + "uml-type": "ownedAttribute", + "type": "_ltGzFMeUEeS6-cawxfHpnA", + "order-number": 2, + "is-read-only": false + }, + "DateAndTime": { + "id": "DateAndTime", + "uml-id": "_X-HZUNwbEeGoneTbGt8X0A", + "uml-type": "uml:DataType", + "description": [ + "This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000 .. 9999 year MM 01 .. 12 month dd 01 .. 31 day hh 00 .. 23 hour mm 00 .. 59 minute ss 00 .. 59 second s .0 .. .9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00 .. 23 time zone difference in hours Mm 00 .. 59 time zone difference in minutes." + ] + }, + "_5G6YQOo-EeCjNNLZCc6mew": { + "id": "Directionality", + "uml-id": "_5G6YQOo-EeCjNNLZCc6mew", + "enum": [ + "SINK", + "SOURCE", + "BIDIRECTIONAL" + ], + "is-read-only": false, + "description": [ + "The enumeration with the options for directionality of the termination point." + ] + }, + "_rU8aMOpfEeCjNNLZCc6mew": { + "id": "GccAccess", + "uml-id": "_rU8aMOpfEeCjNNLZCc6mew", + "enum": [ + "GCC1", + "GCC2", + "GCC1_AND_GCC2" + ], + "is-read-only": false, + "description": [ + "This enumeration indicates the GCC access represented by the entity." + ] + }, + "_W7-1oOpiEeCjNNLZCc6mew": { + "id": "OperationalState", + "uml-id": "_W7-1oOpiEeCjNNLZCc6mew", + "enum": [ + "ENABLED", + "DISABLED" + ], + "is-read-only": false, + "description": [ + "The list of valid operational states for the connection." + ] + }, + "_g0zCsOsDEeCjNNLZCc6mew": { + "id": "OperType", + "uml-id": "_g0zCsOsDEeCjNNLZCc6mew", + "enum": [ + "REVERTIVE", + "NON-REVERTIVE" + ], + "is-read-only": [ + "The operation type associated with the protection mechanism (either non-revertive or revertive)." + ] + }, + "_Jl09gOsKEeCjNNLZCc6mew": { + "id": "ExtCmdOperation", + "uml-id": "_Jl09gOsKEeCjNNLZCc6mew", + "enum": [ + "EXERCISE", + "MANUAL_SWITCH", + "FORCED_SWITCH", + "LOCKOUT", + "RELEASE_OF_MANUAL_SWITCH", + "RELEASE_OF_FORCED_SWITCH", + "RELEASE_OF_LOCKOUT" + ], + "is-read-only": false, + "description": [ + "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations." + ] + }, + "_bwxBQOw5EeCjNNLZCc6mew": { + "id": "AdministrativeState", + "uml-id": "_bwxBQOw5EeCjNNLZCc6mew", + "enum": [ + "UNLOCKED", + "LOCKED", + "SHUTTING_DOWN" + ], + "is-read-only": false, + "description": [ + "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100." + ] + }, + "_ChQ5oOw-EeCjNNLZCc6mew": { + "id": "OCTk_NimKBitRate", + "uml-id": "_ChQ5oOw-EeCjNNLZCc6mew", + "enum": [ + "2.5_G", + "10_G", + "40_G", + "100_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ] + }, + "_ZBtyUOw_EeCjNNLZCc6mew": { + "id": "TimDetMo", + "uml-id": "_ZBtyUOw_EeCjNNLZCc6mew", + "enum": [ + "DAPI", + "SAPI", + "BOTH" + ], + "is-read-only": false, + "description": [ + "List of modes for trace identifier mismatch detection." + ] + }, + "_HF864OxAEeCjNNLZCc6mew": { + "id": "OCTk_NimProblemList", + "uml-id": "_HF864OxAEeCjNNLZCc6mew", + "enum": [ + "LOS_P", + "OCI", + "SSF_P", + "SSF_O", + "SSF", + "TIM", + "DEG", + "BDI" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ] + }, + "_WPoNoO3eEeCjNNLZCc6mew": { + "id": "TcmMonitoring", + "uml-id": "_WPoNoO3eEeCjNNLZCc6mew", + "enum": [ + "INTRUSIVE", + "NON-INTRUSIVE" + ], + "is-read-only": false, + "description": [ + "Monitoring types for the tandem connection monitoring function." + ] + }, + "_OI-7wO6QEeCjNNLZCc6mew": { + "id": "TcmMode", + "uml-id": "_OI-7wO6QEeCjNNLZCc6mew", + "enum": [ + "OPERATIONAL", + "TRANSPARENT", + "MONITOR" + ], + "is-read-only": false, + "description": [ + "List of value modes for the sink side of the tandem connection monitoring function." + ] + }, + "_ZnM8cO6ZEeCjNNLZCc6mew": { + "id": "OPSMnk_TtpKBitRate", + "uml-id": "_ZnM8cO6ZEeCjNNLZCc6mew", + "enum": [ + "40_G", + "100_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ] + }, + "_pV-F8O6aEeCjNNLZCc6mew": { + "id": "OPSMnk_TtpProblemList", + "uml-id": "_pV-F8O6aEeCjNNLZCc6mew", + "enum": [ + "LOS", + "LOL" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ] + }, + "_QW1SYO6bEeCjNNLZCc6mew": { + "id": "OPSn_TtpProblemList", + "uml-id": "_QW1SYO6bEeCjNNLZCc6mew", + "enum": [ + "LOS" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ] + }, + "_o-oukO6bEeCjNNLZCc6mew": { + "id": "OTM-n_KBitRates", + "uml-id": "_o-oukO6bEeCjNNLZCc6mew", + "enum": [ + "2.5_G", + "10_G", + "40_G", + "2.5_10_G", + "10_40_G", + "2.5_10_40_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ] + }, + "_KRCG4O6dEeCjNNLZCc6mew": { + "id": "DomainInterface", + "uml-id": "_KRCG4O6dEeCjNNLZCc6mew", + "enum": [ + "INTRA_DOMAIN", + "INTER_DOMAIN" + ], + "is-read-only": false, + "description": [ + "This enumeration provides the options for the interface associated with OTMn." + ] + }, + "_EOPyIO6qEeCjNNLZCc6mew": { + "id": "OTM-n_OpticalReach", + "uml-id": "_EOPyIO6qEeCjNNLZCc6mew", + "enum": [ + "INTRA_OFFICE", + "SHORTHAUL", + "LONGHAUL" + ], + "is-read-only": false, + "description": [ + "The valid options for reach of the optical cable." + ] + }, + "_6Bt3QO6qEeCjNNLZCc6mew": { + "id": "AprStatus", + "uml-id": "_6Bt3QO6qEeCjNNLZCc6mew", + "enum": [ + "ON", + "OFF" + ], + "is-read-only": false, + "description": [ + "The enumeration of the options for the Automatic Power Reduction Status." + ] + }, + "_FLzNQO6vEeCjNNLZCc6mew": { + "id": "OTSn_TtpProblemList", + "uml-id": "_FLzNQO6vEeCjNNLZCc6mew", + "enum": [ + "BDI_P", + "BDI_O", + "BDI", + "TIM", + "LOS_P", + "LOS_O", + "LOS" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ] + }, + "_NAElYO6wEeCjNNLZCc6mew": { + "id": "OTUk_CtpAdaptation", + "uml-id": "_NAElYO6wEeCjNNLZCc6mew", + "enum": [ + "REGULAR", + "NONE", + "VENDOR_SPECIFIC", + "FUNCTIONALLY_STANDARDIZED" + ], + "is-read-only": false, + "description": [ + "The adaptation options for OTUk_ConnectionTermationPoints." + ] + }, + "_wgRHcO6wEeCjNNLZCc6mew": { + "id": "OTUk_CtpKBitRate", + "uml-id": "_wgRHcO6wEeCjNNLZCc6mew", + "enum": [ + "2.5_G", + "10_G", + "40_G", + "100_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ] + }, + "_6Y_gEO6wEeCjNNLZCc6mew": { + "id": "OTUk_CtpProblemList", + "uml-id": "_6Y_gEO6wEeCjNNLZCc6mew", + "enum": [ + "LOF", + "AIS", + "LOM" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ] + }, + "_xHNWMO6xEeCjNNLZCc6mew": { + "id": "OTUk_TtpProblemList", + "uml-id": "_xHNWMO6xEeCjNNLZCc6mew", + "enum": [ + "TIM", + "DEG", + "BDI", + "SSF" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ] + }, + "_KRQ3MK8KEeG_zYhfU3oMYg": { + "id": "MonitoredDirection", + "uml-id": "_KRQ3MK8KEeG_zYhfU3oMYg", + "enum": [ + "SINK", + "SOURCE" + ], + "is-read-only": false, + "description": [ + "The enumeration with the options for directionality for nonintrusive monitoring." + ] + }, + "_qBme4LuYEeGeqZLpdvU3BA": { + "id": "DegThrType", + "uml-id": "_qBme4LuYEeGeqZLpdvU3BA", + "enum": [ + "PERCENTAGE", + "NUMBER_ERRORED_BLOCKS" + ], + "is-read-only": false, + "description": [ + "

The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.

" + ] + }, + "_Parz8NwAEeGoneTbGt8X0A": { + "id": "LinkType", + "uml-id": "_Parz8NwAEeGoneTbGt8X0A", + "enum": [ + "DWDM", + "CWDM", + "NO_WDM" + ], + "is-read-only": false + }, + "_V1TuANwAEeGoneTbGt8X0A": { + "id": "ApplicationIdentifierType", + "uml-id": "_V1TuANwAEeGoneTbGt8X0A", + "enum": [ + "STANDARD", + "PROPRIETARY" + ], + "is-read-only": false + }, + "_yt7S4PzgEeG3u-aQKIiCtg": { + "id": "ApsChannel", + "uml-id": "_yt7S4PzgEeG3u-aQKIiCtg", + "enum": [ + "PATH", + "TCM1", + "TCM2", + "TCM3", + "TCM4", + "TCM5", + "TCM6", + "SECTION" + ], + "is-read-only": false + }, + "_LG3yQOVVEeKyU85eduW_rA": { + "id": "DelayMeasurementRole", + "uml-id": "_LG3yQOVVEeKyU85eduW_rA", + "enum": [ + "CONTROLLER", + "RESPONDER" + ], + "is-read-only": false + }, + "_7fy9sJSCEeOLxKCUIYtzCg": { + "id": "ResizeOperationType", + "uml-id": "_7fy9sJSCEeOLxKCUIYtzCg", + "enum": [ + "INCREASE_BW", + "DECREASE_BW" + ], + "is-read-only": false + }, + "_Y6WUEEamEeabNPX3o7rjtw": { + "id": "GranularityPeriodType", + "uml-id": "_Y6WUEEamEeabNPX3o7rjtw", + "enum": [ + "UNKNOWN", + "PERIOD_15MIN", + "PERIOD_24HOURS" + ], + "is-read-only": false, + "description": [ + "The enumeration with the options for granularity period of the performance data." + ] + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json new file mode 100755 index 000000000..2aeb80f95 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json @@ -0,0 +1,45 @@ +{ + "module": { + "name": "MicrowaveModel-ObjectClasses-AirInterface", + "MicrowaveModel-ObjectClasses-AirInterface": { + "MW_AirInterface_Pac": { + "type": "list", + "key": "layerProtocol", + "airInterfaceCapability": { + "name": "airInterfaceCapability", + "local-name": "capability", + "type": "container" + }, + "airInterfaceConfiguration": { + "name": "airInterfaceConfiguration", + "local-name": "configuration", + "type": "container" + }, + "airInterfaceStatus": { + "name": "airInterfaceStatus", + "local-name": "status", + "type": "container" + }, + "airInterfaceCurrentProblems": { + "name": "airInterfaceCurrentProblems", + "local-name": "current-problems", + "type": "container" + }, + "airInterfaceCurrentPerformance": { + "name": "airInterfaceCurrentPerformance", + "local-name": "current-performance", + "type": "container" + }, + "airInterfaceHistoricalPerformances": { + "name": "airInterfaceHistoricalPerformances", + "local-name": "historical-performances", + "type": "container" + } + }, + "CoChannelGroup": { + "type": "list", + "key": "coChannelGroupId" + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json new file mode 100755 index 000000000..2af4d50da --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json @@ -0,0 +1,41 @@ +{ + "module": { + "name": "MicrowaveModel-ObjectClasses-EthernetContainer", + "MicrowaveModel-ObjectClasses-EthernetContainer": { + "MW_EthernetContainer_Pac": { + "type": "list", + "key": "layerProtocol", + "ethernetContainerCapability": { + "name": "ethernetContainerCapability", + "local-name": "capability", + "type": "container" + }, + "ethernetContainerConfiguration": { + "name": "ethernetContainerConfiguration", + "local-name": "configuration", + "type": "container" + }, + "ethernetContainerStatus": { + "name": "ethernetContainerStatus", + "local-name": "status", + "type": "container" + }, + "ethernetContainerCurrentProblems": { + "name": "ethernetContainerCurrentProblems", + "local-name": "current-problems", + "type": "container" + }, + "ethernetContainerCurrentPerformance": { + "name": "ethernetContainerCurrentPerformance", + "local-name": "current-performance", + "type": "container" + }, + "ethernetContainerHistoricalPerformances": { + "name": "ethernetContainerHistoricalPerformances", + "local-name": "historical-performances", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json new file mode 100755 index 000000000..20726f879 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json @@ -0,0 +1,41 @@ +{ + "module": { + "name": "MicrowaveModel-ObjectClasses-PureEthernetStructure", + "MicrowaveModel-ObjectClasses-PureEthernetStructure": { + "MW_PureEthernetStructure_Pac": { + "type": "list", + "key": "layerProtocol", + "pureEthernetStructureCapability": { + "name": "pureEthernetStructureCapability", + "local-name": "capability", + "type": "container" + }, + "pureEthernetStructureConfiguration": { + "name": "pureEthernetStructureConfiguration", + "local-name": "configuration", + "type": "container" + }, + "pureEthernetStructureStatus": { + "name": "pureEthernetStructureStatus", + "local-name": "status", + "type": "container" + }, + "pureEthernetStructureCurrentProblems": { + "name": "pureEthernetStructureCurrentProblems", + "local-name": "current-problems", + "type": "container" + }, + "pureEthernetStructureCurrentPerformance": { + "name": "pureEthernetStructureCurrentPerformance", + "local-name": "current-performance", + "type": "container" + }, + "pureEthernetStructureHistoricalPerformances": { + "name": "pureEthernetStructureHistoricalPerformances", + "local-name": "historical-performances", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json new file mode 100644 index 000000000..34d0503ad --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json @@ -0,0 +1,2940 @@ +{ + "schema-information": { + "MW_AirInterface_Pac": { + "id": "MW_AirInterface_Pac", + "uml-id": "__1kQ0Hf4EeW-M8kopGJqEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "LTP(MWPS-TTP)" + ] + }, + "airInterfaceCapability": { + "id": "airInterfaceCapability", + "uml-id": "_Dr1uMIekEeWaZYk7gpuOtw", + "uml-type": "ownedAttribute", + "type": "_-LlKoIejEeWaZYk7gpuOtw", + "order-number": 2, + "is-read-only": true + }, + "airInterfaceConfiguration": { + "id": "airInterfaceConfiguration", + "uml-id": "_AEmSAIe1EeWnUdmvl3PBkw", + "uml-type": "ownedAttribute", + "type": "_KOcsUIe0EeWnUdmvl3PBkw", + "order-number": 3, + "is-read-only": false + }, + "airInterfaceStatus": { + "id": "airInterfaceStatus", + "uml-id": "_Vp35cnmgEeWsUsDOj_Trdg", + "uml-type": "ownedAttribute", + "type": "_iCTioHmIEeWRAfnL3fvovg", + "order-number": 4, + "is-read-only": true + }, + "airInterfaceCurrentProblems": { + "id": "airInterfaceCurrentProblems", + "uml-id": "_ZeRYInmgEeWsUsDOj_Trdg", + "uml-type": "ownedAttribute", + "type": "_UF8VcHmIEeWRAfnL3fvovg", + "order-number": 5, + "is-read-only": true + }, + "airInterfaceCurrentPerformance": { + "id": "airInterfaceCurrentPerformance", + "uml-id": "_65_4M6S6EeWyu_jasKgNwA", + "uml-type": "ownedAttribute", + "type": "_CX-iIKS6EeWyu_jasKgNwA", + "order-number": 6, + "is-read-only": true + }, + "airInterfaceHistoricalPerformances": { + "id": "airInterfaceHistoricalPerformances", + "uml-id": "__8icYJHfEeWKxoYCXp1XkQ", + "uml-type": "ownedAttribute", + "type": "_fChNMHmHEeWRAfnL3fvovg", + "order-number": 7, + "is-read-only": true + }, + "AirInterfaceCapability": { + "id": "AirInterfaceCapability", + "uml-id": "_-LlKoIejEeWaZYk7gpuOtw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes." + ] + }, + "typeOfEquipment": { + "id": "typeOfEquipment", + "uml-id": "_gK4jMJUBEeWIaZzoaYJ6_A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "description": [ + "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware." + ] + }, + "txFrequencyMin": { + "id": "txFrequencyMin", + "uml-id": "_90Xe0HfcEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the minimum transmit frequency tunable at the air interface." + ] + }, + "txFrequencyMax": { + "id": "txFrequencyMax", + "uml-id": "_-1ztsHfcEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the maximum transmit frequency tunable at the air interface." + ] + }, + "rxFrequencyMin": { + "id": "rxFrequencyMin", + "uml-id": "_BLqx0HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the minimum receive frequency tunable at the air interface." + ] + }, + "rxFrequencyMax": { + "id": "rxFrequencyMax", + "uml-id": "_CSBV4HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the maximum receive frequency tunable at the air interface." + ] + }, + "adaptiveModulationIsAvail": { + "id": "adaptiveModulationIsAvail", + "uml-id": "_ClmuUHffEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": true, + "description": [ + "In case the device is capable of adaptive modulation, this field shall contain a 'true'." + ] + }, + "mimoIsAvail": { + "id": "mimoIsAvail", + "uml-id": "_qXBrkH2eEeWaPP5xsIT8pQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": true, + "description": [ + "In case the device is capable of MIMO, this field shall contain a 'true'." + ] + }, + "mimoChannels": { + "id": "mimoChannels", + "uml-id": "_qysT4H2eEeWaPP5xsIT8pQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 8, + "is-read-only": true, + "unit": "channels", + "description": [ + "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration." + ] + }, + "alicIsAvail": { + "id": "alicIsAvail", + "uml-id": "_a3HgMIL9EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": true, + "description": [ + "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'." + ] + }, + "atpcIsAvail": { + "id": "atpcIsAvail", + "uml-id": "_iRRtgHftEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": true, + "description": [ + "In case the microwave radio is capable of ATPC, this field shall contain a 'true'." + ] + }, + "atpcRange": { + "id": "atpcRange", + "uml-id": "_ErwNYHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 11, + "is-read-only": true, + "unit": "dB", + "description": [ + "Extent of the ATPC range." + ] + }, + "loopBackIsAvail": { + "id": "loopBackIsAvail", + "uml-id": "_UxjEkIMHEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 13, + "is-read-only": true, + "description": [ + "In case the radio is capable of looping back header information of the air interface, this field shall contain a 'true'." + ] + }, + "maintenanceTimerRange": { + "id": "maintenanceTimerRange", + "uml-id": "_I1FYsMWZEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 14, + "is-read-only": true, + "unit": "s", + "description": [ + "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')." + ] + }, + "supportedChannelPlanList": { + "id": "supportedChannelPlanList", + "uml-id": "_zUKUgPXVEeW9zIqh2WHHww", + "uml-type": "ownedAttribute", + "type": "_oQf6IPXSEeW9zIqh2WHHww", + "order-number": 16, + "is-read-only": true, + "description": [ + "List of channel spacing that are supported by the device." + ] + }, + "AirInterfaceConfiguration": { + "id": "AirInterfaceConfiguration", + "uml-id": "_KOcsUIe0EeWnUdmvl3PBkw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Configuration of the radio link." + ] + }, + "airInterfaceName": { + "id": "airInterfaceName", + "uml-id": "_XMDggIL5EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "Operator specific microwave link ID (often used for coding area, type of element and sequential number)." + ] + }, + "radioSignalID": { + "id": "radioSignalID", + "uml-id": "_QY9KoHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": false, + "description": [ + "The value zero might be used to make the microwave to disable the link ID check." + ] + }, + "txFrequency": { + "id": "txFrequency", + "uml-id": "_UNE8gHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable." + ] + }, + "rxFrequency": { + "id": "rxFrequency", + "uml-id": "_W7ayEHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Center frequency of the receive channel." + ] + }, + "txChannelBandwidth": { + "id": "txChannelBandwidth", + "uml-id": "_bhAdIHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;" + ] + }, + "rxChannelBandwidth": { + "id": "rxChannelBandwidth", + "uml-id": "_eKIbgHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 6, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;" + ] + }, + "polarization": { + "id": "polarization", + "uml-id": "_bVebEI99EeWFluv9KLLl5A", + "uml-type": "ownedAttribute", + "type": "_e85NsI99EeWFluv9KLLl5A", + "order-number": 7, + "is-read-only": false, + "description": [ + "Allows documenting the polarization of the air interface." + ] + }, + "powerIsOn": { + "id": "powerIsOn", + "uml-id": "_p4eR8Hf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": false, + "description": [ + "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'." + ] + }, + "transmitterIsOn": { + "id": "transmitterIsOn", + "uml-id": "_uYVvgHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": false, + "description": [ + "Activation of the transmitter inside the radio shall be expressed as a 'true'." + ] + }, + "receiverIsOn": { + "id": "receiverIsOn", + "uml-id": "_q_XcwEgnEeathrAE0htMiA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": false, + "description": [ + "Maintenance Feature" + ] + }, + "txPower": { + "id": "txPower", + "uml-id": "_ZEXmIHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 11, + "is-read-only": false, + "unit": "dBm", + "description": [ + "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC." + ] + }, + "adaptiveModulationIsOn": { + "id": "adaptiveModulationIsOn", + "uml-id": "_0jhfYHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 12, + "is-read-only": false, + "description": [ + "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'." + ] + }, + "modulationMin": { + "id": "modulationMin", + "uml-id": "_dM_BUHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 13, + "is-read-only": false, + "unit": "symbols", + "description": [ + "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme." + ] + }, + "modulationMax": { + "id": "modulationMax", + "uml-id": "_gAHQQHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 14, + "is-read-only": false, + "unit": "symbols", + "description": [ + "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme." + ] + }, + "xpicIsOn": { + "id": "xpicIsOn", + "uml-id": "_4hi0IHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 15, + "is-read-only": false, + "description": [ + "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'." + ] + }, + "mimoIsOn": { + "id": "mimoIsOn", + "uml-id": "_7t4fIH2dEeWaPP5xsIT8pQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 16, + "is-read-only": false, + "description": [ + "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'." + ] + }, + "alicIsOn": { + "id": "alicIsOn", + "uml-id": "_FmWHMHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 17, + "is-read-only": false, + "description": [ + "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'." + ] + }, + "atpcIsOn": { + "id": "atpcIsOn", + "uml-id": "_9Hz0oHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 18, + "is-read-only": false, + "description": [ + "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'." + ] + }, + "atpcThreshUpper": { + "id": "atpcThreshUpper", + "uml-id": "_pR7yMHgAEeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 19, + "is-read-only": false, + "unit": "dBm", + "description": [ + "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power." + ] + }, + "atpcThreshLower": { + "id": "atpcThreshLower", + "uml-id": "_sIlPMHgAEeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 20, + "is-read-only": false, + "unit": "dBm", + "description": [ + "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power." + ] + }, + "autoFreqSelectIsOn": { + "id": "autoFreqSelectIsOn", + "uml-id": "_dG5VAIL-EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 21, + "is-read-only": false, + "description": [ + "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'." + ] + }, + "autoFreqSelectRange": { + "id": "autoFreqSelectRange", + "uml-id": "_yH9XMIMCEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 22, + "is-read-only": false, + "unit": "channels", + "description": [ + "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen." + ] + }, + "modulationIsOn": { + "id": "modulationIsOn", + "uml-id": "_kxXzwIMGEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 23, + "is-read-only": false, + "description": [ + "Maintenance Feature" + ] + }, + "loopBackIsOn": { + "id": "loopBackIsOn", + "uml-id": "_PyRvsHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 26, + "is-read-only": false, + "description": [ + "Maintenance Feature" + ] + }, + "maintenanceTimer": { + "id": "maintenanceTimer", + "uml-id": "_7-oTwCd5EeaJA6AVLNrv_w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 27, + "is-read-only": false, + "unit": "s", + "description": [ + "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange." + ] + }, + "AirInterfaceStatus": { + "id": "AirInterfaceStatus", + "uml-id": "_iCTioHmIEeWRAfnL3fvovg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Measurements of current values on the air interface and operational status of the device." + ] + }, + "txFrequencyCur": { + "id": "txFrequencyCur", + "uml-id": "_YZq7gK4tEeWXs6m-9H3KvA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Center frequency of the currently operated transmit channel." + ] + }, + "rxFrequencyCur": { + "id": "rxFrequencyCur", + "uml-id": "_33IdUIL-EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Center frequency of the currently operated receive channel." + ] + }, + "txLevelCur": { + "id": "txLevelCur", + "uml-id": "_L3B5wHgIEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 3, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Current transmit level." + ] + }, + "rxLevelCur": { + "id": "rxLevelCur", + "uml-id": "_OHN9AHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 4, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Current receive level." + ] + }, + "modulationCur": { + "id": "modulationCur", + "uml-id": "_RBMa0HizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 5, + "is-read-only": true, + "unit": "symbols", + "description": [ + "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme." + ] + }, + "informationRateCur": { + "id": "informationRateCur", + "uml-id": "_UYyBsHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 6, + "is-read-only": true, + "unit": "%", + "description": [ + "Information rate of the currently operated coding scheme." + ] + }, + "xpdCur": { + "id": "xpdCur", + "uml-id": "_Z7NvgHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 8, + "is-read-only": true, + "unit": "dB", + "description": [ + "Currently measured cross polarization discrimination." + ] + }, + "rfTempCur": { + "id": "rfTempCur", + "uml-id": "_d6wuQHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 9, + "is-read-only": true, + "unit": "Celsius", + "description": [ + "Current temperature (in degree Celsius) of the radio module inside the outdoor unit." + ] + }, + "radioPowerIsUp": { + "id": "radioPowerIsUp", + "uml-id": "_sFKXcHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 11, + "is-read-only": true, + "description": [ + "If the radio unit has power and is switched on, this shall be expressed as a 'true'." + ] + }, + "linkIsUp": { + "id": "linkIsUp", + "uml-id": "_5JBPUHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 12, + "is-read-only": true, + "description": [ + "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'." + ] + }, + "xpicIsUp": { + "id": "xpicIsUp", + "uml-id": "_ESRbsHi0EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 13, + "is-read-only": true, + "description": [ + "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'." + ] + }, + "mimoIsUp": { + "id": "mimoIsUp", + "uml-id": "_DVaQwIL6EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 14, + "is-read-only": true, + "description": [ + "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'." + ] + }, + "alicIsUp": { + "id": "alicIsUp", + "uml-id": "_Hte-UHi0EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 15, + "is-read-only": true, + "description": [ + "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'." + ] + }, + "atpcIsUp": { + "id": "atpcIsUp", + "uml-id": "_VimCgMjNEeWYRsWW_rqpgw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 16, + "is-read-only": true, + "description": [ + "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'." + ] + }, + "autoFreqSelectIsUp": { + "id": "autoFreqSelectIsUp", + "uml-id": "_-PXKsIL-EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 17, + "is-read-only": true, + "description": [ + "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'." + ] + }, + "loopBackIsUp": { + "id": "loopBackIsUp", + "uml-id": "_S9prAHi0EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 18, + "is-read-only": true, + "description": [ + "If loop back of the air interface header is currently active (not just configured), this shall be expressed as a 'true'." + ] + }, + "localEndPointId": { + "id": "localEndPointId", + "uml-id": "_pEsgcFQHEeaCXY7nSBqs6w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 19, + "is-read-only": true, + "description": [ + "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link." + ] + }, + "remoteEndPointId": { + "id": "remoteEndPointId", + "uml-id": "_r3cU4FQHEeaCXY7nSBqs6w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 20, + "is-read-only": true, + "description": [ + "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link." + ] + }, + "AirInterfaceCurrentProblems": { + "id": "AirInterfaceCurrentProblems", + "uml-id": "_UF8VcHmIEeWRAfnL3fvovg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "AirInterfaceCurrentPerformance": { + "id": "AirInterfaceCurrentPerformance", + "uml-id": "_CX-iIKS6EeWyu_jasKgNwA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface at a particular moment." + ] + }, + "AirInterfaceHistoricalPerformances": { + "id": "AirInterfaceHistoricalPerformances", + "uml-id": "_fChNMHmHEeWRAfnL3fvovg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface for a pre-defined measurement interval." + ] + }, + "CoChannelGroup": { + "id": "CoChannelGroup", + "uml-id": "_XBs2YJQrEeWOu_cDl8dd7w", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Required for configuring XPIC, MIMO and ALIC." + ] + }, + "coChannelGroupId": { + "id": "coChannelGroupId", + "uml-id": "_pIjBgEy7EeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "is-key": 1 + }, + "airInterfaceList": { + "id": "airInterfaceList", + "uml-id": "_tIadUCJeEeaCUo1MUtSuEg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group." + ] + }, + "sortOfCoChannelGroup": { + "id": "sortOfCoChannelGroup", + "uml-id": "_ZrjZcJRrEeWIaZzoaYJ6_A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 3, + "is-read-only": false, + "description": [ + "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';" + ] + }, + "MW_AirInterfaceHsbEndPoint_Pac": { + "id": "MW_AirInterfaceHsbEndPoint_Pac", + "uml-id": "_CXKgMJRbEeWMYJZn43K_Aw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point." + ] + }, + "role": { + "id": "role", + "uml-id": "_CXKgNpRbEeWMYJZn43K_Aw", + "uml-type": "ownedAttribute", + "type": "_01_dYJReEeWxIPEwZQ_gmw", + "order-number": 1, + "is-read-only": false + }, + "endpoint": { + "id": "endpoint", + "uml-id": "_dglVQLYgEeWOio-Gg6Q2sw", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_b_lUAFYgEeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "is-key": 1 + }, + "MW_AirInterfaceHsbFcSwitch_Pac": { + "id": "MW_AirInterfaceHsbFcSwitch_Pac", + "uml-id": "_CXNjgJRbEeWMYJZn43K_Aw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state." + ] + }, + "protType": { + "id": "protType", + "uml-id": "_CXNjiJRbEeWMYJZn43K_Aw", + "uml-type": "ownedAttribute", + "type": "_DaB5IJRgEeWxIPEwZQ_gmw", + "order-number": 1, + "is-read-only": false, + "description": [ + "Indicates the protection scheme that is used for the ProtectionGroup." + ] + }, + "airInterfaceHsbConfigurationIsFaultySeverity": { + "id": "airInterfaceHsbConfigurationIsFaultySeverity", + "uml-id": "_80BlAJ2gEeWSuvrh9KcclQ", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 2, + "is-read-only": false, + "description": [ + "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration." + ] + }, + "airInterfaceHsbIsPartlyDownSeverity": { + "id": "airInterfaceHsbIsPartlyDownSeverity", + "uml-id": "_r382sJ2mEeWSuvrh9KcclQ", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 3, + "is-read-only": false, + "description": [ + "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration." + ] + }, + "airInterfaceHsbIsDownSeverity": { + "id": "airInterfaceHsbIsDownSeverity", + "uml-id": "_sRGWgJ2mEeWSuvrh9KcclQ", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 4, + "is-read-only": false, + "description": [ + "The level of severity of the total HSB configuration being down shall be chosen from an enumeration." + ] + }, + "fcswitch": { + "id": "fcswitch", + "uml-id": "_FS83ILYhEeWOio-Gg6Q2sw", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_a97NQFYhEeOVGaP4lO41SQ", + "order-number": 5, + "is-read-only": false, + "is-key": 1 + }, + "MW_AirInterfaceDiversity_Pac": { + "id": "MW_AirInterfaceDiversity_Pac", + "uml-id": "_WbgFcHgFEeWfutScSwFT9A", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "LTP(MWS-CTP-xD)" + ] + }, + "airInterfaceDiversityCapability": { + "id": "airInterfaceDiversityCapability", + "uml-id": "_mQ_9YJICEeWUdbnmmNiTAA", + "uml-type": "ownedAttribute", + "type": "_vxH2wIekEeWaZYk7gpuOtw", + "order-number": 2, + "is-read-only": true + }, + "airInterfaceDiversityConfiguration": { + "id": "airInterfaceDiversityConfiguration", + "uml-id": "_wXazw5ICEeWUdbnmmNiTAA", + "uml-type": "ownedAttribute", + "type": "_43RTMIe1EeWnUdmvl3PBkw", + "order-number": 3, + "is-read-only": false + }, + "airInterfaceDiversityCurrentProblems": { + "id": "airInterfaceDiversityCurrentProblems", + "uml-id": "_zA4JU5ICEeWUdbnmmNiTAA", + "uml-type": "ownedAttribute", + "type": "_CAvhEHvtEeWzooKF5kx0aw", + "order-number": 5, + "is-read-only": true + }, + "airInterfaceDiversityCurrentPerformance": { + "id": "airInterfaceDiversityCurrentPerformance", + "uml-id": "_XpGjA6jDEeWlgMiFXLmCIQ", + "uml-type": "ownedAttribute", + "type": "_GIsAQKjDEeWlgMiFXLmCIQ", + "order-number": 6, + "is-read-only": true + }, + "airInterfaceDiversityHistoricalPerformances": { + "id": "airInterfaceDiversityHistoricalPerformances", + "uml-id": "_z8F0Y5ICEeWUdbnmmNiTAA", + "uml-type": "ownedAttribute", + "type": "_8IIu8HvsEeWzooKF5kx0aw", + "order-number": 7, + "is-read-only": true + }, + "AirInterfaceDiversityCapability": { + "id": "AirInterfaceDiversityCapability", + "uml-id": "_vxH2wIekEeWaZYk7gpuOtw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Describes the capabilities in implementing different types of air interface diversity." + ] + }, + "availableKindsOfDiversity": { + "id": "availableKindsOfDiversity", + "uml-id": "_luAGENyVEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "_pTliINyUEeW-SfXlFFFI0Q", + "order-number": 1, + "is-read-only": true, + "description": [ + "Available types of diversity to be listed." + ] + }, + "AirInterfaceDiversityConfiguration": { + "id": "AirInterfaceDiversityConfiguration", + "uml-id": "_43RTMIe1EeWnUdmvl3PBkw", + "uml-type": "uml:Class", + "is-read-only": false + }, + "airInterfaceDiversity": { + "id": "airInterfaceDiversity", + "uml-id": "_hynTIHi_EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "_pTliINyUEeW-SfXlFFFI0Q", + "order-number": 1, + "is-read-only": false, + "description": [ + "Type of air interface diversity configured at the link." + ] + }, + "airInterfaceLtpList": { + "id": "airInterfaceLtpList", + "uml-id": "_xRMKgNyXEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax" + ] + }, + "AirInterfaceDiversityStatus": { + "id": "AirInterfaceDiversityStatus", + "uml-id": "_-O9RgHvsEeWzooKF5kx0aw", + "uml-type": "uml:Class", + "is-read-only": false + }, + "snirCur": { + "id": "snirCur", + "uml-id": "_B7G0AEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 1, + "is-read-only": true, + "unit": "dB", + "description": [ + "Currently measured signal to (noise+interference) ratio of the combined signals." + ] + }, + "airInterfaceDiversityStatus": { + "id": "airInterfaceDiversityStatus", + "uml-id": "_EKZYcJOXEeWz-6sqLzUedw", + "uml-type": "ownedAttribute", + "type": "_DUJs8JOXEeWz-6sqLzUedw", + "order-number": 2, + "is-read-only": true, + "description": [ + "Status of the air interface bundle." + ] + }, + "AirInterfaceDiversityCurrentProblems": { + "id": "AirInterfaceDiversityCurrentProblems", + "uml-id": "_CAvhEHvtEeWzooKF5kx0aw", + "uml-type": "uml:Class", + "is-read-only": false + }, + "AirInterfaceDiversityCurrentPerformance": { + "id": "AirInterfaceDiversityCurrentPerformance", + "uml-id": "_GIsAQKjDEeWlgMiFXLmCIQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface diversity configuration at a particular moment." + ] + }, + "AirInterfaceDiversityHistoricalPerformances": { + "id": "AirInterfaceDiversityHistoricalPerformances", + "uml-id": "_8IIu8HvsEeWzooKF5kx0aw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval." + ] + }, + "MW_PureEthernetStructure_Pac": { + "id": "MW_PureEthernetStructure_Pac", + "uml-id": "__OTQ0UaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only." + ] + }, + "pureEthernetStructureCapability": { + "id": "pureEthernetStructureCapability", + "uml-id": "_dJcm0VAfEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "__OTQ4EaeEeas2eqI3oKNtg", + "order-number": 2, + "is-read-only": true + }, + "pureEthernetStructureConfiguration": { + "id": "pureEthernetStructureConfiguration", + "uml-id": "_kHaeglAfEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "__OTQ8UaeEeas2eqI3oKNtg", + "order-number": 3, + "is-read-only": false + }, + "pureEthernetStructureStatus": { + "id": "pureEthernetStructureStatus", + "uml-id": "_lsNSEFAfEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "__OTQ_UaeEeas2eqI3oKNtg", + "order-number": 4, + "is-read-only": true + }, + "pureEthernetStructureCurrentProblems": { + "id": "pureEthernetStructureCurrentProblems", + "uml-id": "_nCtK8lAfEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "__OTRCUaeEeas2eqI3oKNtg", + "order-number": 5, + "is-read-only": true + }, + "pureEthernetStructureCurrentPerformance": { + "id": "pureEthernetStructureCurrentPerformance", + "uml-id": "_ocuR4VAfEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "__OTRD0aeEeas2eqI3oKNtg", + "order-number": 6, + "is-read-only": true + }, + "pureEthernetStructureHistoricalPerformances": { + "id": "pureEthernetStructureHistoricalPerformances", + "uml-id": "_Xb6U4FAiEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "__OTRE0aeEeas2eqI3oKNtg", + "order-number": 7, + "is-read-only": true + }, + "PureEthernetStructureCapability": { + "id": "PureEthernetStructureCapability", + "uml-id": "__OTQ4EaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "No TDM transport." + ] + }, + "PureEthernetStructureConfiguration": { + "id": "PureEthernetStructureConfiguration", + "uml-id": "__OTQ8UaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "PureEthernetStructureStatus": { + "id": "PureEthernetStructureStatus", + "uml-id": "__OTQ_UaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "PureEthernetStructureCurrentProblems": { + "id": "PureEthernetStructureCurrentProblems", + "uml-id": "__OTRCUaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "PureEthernetStructureCurrentPerformance": { + "id": "PureEthernetStructureCurrentPerformance", + "uml-id": "__OTRD0aeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment." + ] + }, + "PureEthernetStructureHistoricalPerformances": { + "id": "PureEthernetStructureHistoricalPerformances", + "uml-id": "__OTRE0aeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval." + ] + }, + "MW_HybridMwStructure_Pac": { + "id": "MW_HybridMwStructure_Pac", + "uml-id": "_Bzxo0UagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic." + ] + }, + "hybridMwStructureCapability": { + "id": "hybridMwStructureCapability", + "uml-id": "_2nQhIFAjEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_Bzxo4EagEeas2eqI3oKNtg", + "order-number": 2, + "is-read-only": true + }, + "hybridMwStructureConfiguration": { + "id": "hybridMwStructureConfiguration", + "uml-id": "_3-63oVAjEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_Bzxo8UagEeas2eqI3oKNtg", + "order-number": 3, + "is-read-only": false + }, + "hybridMwStructureStatus": { + "id": "hybridMwStructureStatus", + "uml-id": "_5fWvolAjEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_Bzxo_UagEeas2eqI3oKNtg", + "order-number": 4, + "is-read-only": true + }, + "hybridMwStructureCurrentProblems": { + "id": "hybridMwStructureCurrentProblems", + "uml-id": "_6ZbLMlAjEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_BzxpCUagEeas2eqI3oKNtg", + "order-number": 5, + "is-read-only": true + }, + "hybridMwStructureCurrentPerformance": { + "id": "hybridMwStructureCurrentPerformance", + "uml-id": "_7FMFAFAjEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_BzxpD0agEeas2eqI3oKNtg", + "order-number": 6, + "is-read-only": true + }, + "hybridMwStructureHistoricalPerformances": { + "id": "hybridMwStructureHistoricalPerformances", + "uml-id": "_8CWQ0VAjEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_BzxpE0agEeas2eqI3oKNtg", + "order-number": 7, + "is-read-only": true + }, + "HybridMwStructureCapability": { + "id": "HybridMwStructureCapability", + "uml-id": "_Bzxo4EagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "TDM transport is available." + ] + }, + "structureId": { + "id": "structureId", + "uml-id": "_Bzxo5EagEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Identifies the Structure for bundling and container." + ] + }, + "supportedTdmStructureTypesList": { + "id": "supportedTdmStructureTypesList", + "uml-id": "_tA-uQEduEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_jRAQsEdoEeax2rWez10Siw", + "order-number": 2, + "is-read-only": true, + "description": [ + "Lists the TDM frame types that are supported." + ] + }, + "HybridMwStructureConfiguration": { + "id": "HybridMwStructureConfiguration", + "uml-id": "_Bzxo8UagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "structureType": { + "id": "structureType", + "uml-id": "_cduh4EdvEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_jRAQsEdoEeax2rWez10Siw", + "order-number": 1, + "is-read-only": false, + "description": [ + "TDM frame to be applied." + ] + }, + "numberOfTdmSegmentsToBeReserved": { + "id": "numberOfTdmSegmentsToBeReserved", + "uml-id": "_Bzxo9EagEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 2, + "is-read-only": false, + "description": [ + "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType" + ] + }, + "HybridMwStructureStatus": { + "id": "HybridMwStructureStatus", + "uml-id": "_Bzxo_UagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "segmentStatusList": { + "id": "segmentStatusList", + "uml-id": "_BzxpAEagEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_KwZVcMUCEeW3xsRKtpCLuA", + "order-number": 1, + "is-read-only": true, + "description": [ + "Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1" + ] + }, + "HybridMwStructureCurrentProblems": { + "id": "HybridMwStructureCurrentProblems", + "uml-id": "_BzxpCUagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "HybridMwStructureCurrentPerformance": { + "id": "HybridMwStructureCurrentPerformance", + "uml-id": "_BzxpD0agEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of a hybrid microwave at a particular moment." + ] + }, + "HybridMwStructureHistoricalPerformances": { + "id": "HybridMwStructureHistoricalPerformances", + "uml-id": "_BzxpE0agEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval." + ] + }, + "MW_EthernetContainer_Pac": { + "id": "MW_EthernetContainer_Pac", + "uml-id": "_4uEBgUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "LTP(Client)" + ] + }, + "ethernetContainerCapability": { + "id": "ethernetContainerCapability", + "uml-id": "_vWwdEVAlEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_4uEBmEafEeas2eqI3oKNtg", + "order-number": 2, + "is-read-only": true + }, + "ethernetContainerConfiguration": { + "id": "ethernetContainerConfiguration", + "uml-id": "_v8JCEFAlEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_4uEBwUafEeas2eqI3oKNtg", + "order-number": 3, + "is-read-only": false + }, + "ethernetContainerStatus": { + "id": "ethernetContainerStatus", + "uml-id": "_wvtNAVAlEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_4uECAUafEeas2eqI3oKNtg", + "order-number": 4, + "is-read-only": true + }, + "ethernetContainerCurrentProblems": { + "id": "ethernetContainerCurrentProblems", + "uml-id": "_xUWyMlAlEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_4uECDUafEeas2eqI3oKNtg", + "order-number": 5, + "is-read-only": true + }, + "ethernetContainerCurrentPerformance": { + "id": "ethernetContainerCurrentPerformance", + "uml-id": "_x7K6kFAlEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_4uECE0afEeas2eqI3oKNtg", + "order-number": 6, + "is-read-only": true + }, + "ethernetContainerHistoricalPerformances": { + "id": "ethernetContainerHistoricalPerformances", + "uml-id": "_ynDJIFAlEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_4uECF0afEeas2eqI3oKNtg", + "order-number": 7, + "is-read-only": true + }, + "EthernetContainerCapability": { + "id": "EthernetContainerCapability", + "uml-id": "_4uEBmEafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "bundlingIsAvail": { + "id": "bundlingIsAvail", + "uml-id": "_96g-oEanEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 1, + "is-read-only": true, + "description": [ + "This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container." + ] + }, + "packetCompressionIsAvail": { + "id": "packetCompressionIsAvail", + "uml-id": "_4uEBp0afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": true, + "description": [ + "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans." + ] + }, + "layer2CompressionIsAvail": { + "id": "layer2CompressionIsAvail", + "uml-id": "_4uEBqkafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 3, + "is-read-only": true, + "description": [ + "Packet compression on layer 2 available at the device." + ] + }, + "vlanCompressionIsAvail": { + "id": "vlanCompressionIsAvail", + "uml-id": "_4uEBrUafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": true, + "description": [ + "Packet compression on VLAN layer available at the device." + ] + }, + "qInQCompressionIsAvail": { + "id": "qInQCompressionIsAvail", + "uml-id": "_4uEBsEafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 5, + "is-read-only": true, + "description": [ + "Packet compression on layer of a second VLAN available at the device." + ] + }, + "mplsCompressionIsAvail": { + "id": "mplsCompressionIsAvail", + "uml-id": "_4uEBs0afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": true, + "description": [ + "Packet compression on mpls layer available at the device." + ] + }, + "ipv4CompressionIsAvail": { + "id": "ipv4CompressionIsAvail", + "uml-id": "_4uEBtkafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": true, + "description": [ + "Packet compression on layer 3 for IPv4 available at the device." + ] + }, + "ipv6CompressionIsAvail": { + "id": "ipv6CompressionIsAvail", + "uml-id": "_4uEBuUafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": true, + "description": [ + "Packet compression on layer 3 for IPv6 available at the device." + ] + }, + "layer4CompressionIsAvail": { + "id": "layer4CompressionIsAvail", + "uml-id": "_4uEBvEafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": true, + "description": [ + "Packet compression on layer 4 (TCP and UDP header) available at the device." + ] + }, + "encryptionIsAvail": { + "id": "encryptionIsAvail", + "uml-id": "_4uPM8E58EeaCk6G-lyG1OQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": true, + "description": [ + "Shall be marked 'true', if Ethernet payload encryption is available." + ] + }, + "EthernetContainerConfiguration": { + "id": "EthernetContainerConfiguration", + "uml-id": "_4uEBwUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "segmentsIDList": { + "id": "segmentsIDList", + "uml-id": "_4uEBy0afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_Nd1F4MKuEeWwLJhHQlOGSQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list." + ] + }, + "packetCompressionIsOn": { + "id": "packetCompressionIsOn", + "uml-id": "_4uEB1UafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 3, + "is-read-only": false, + "description": [ + "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum." + ] + }, + "layer2CompressionIsOn": { + "id": "layer2CompressionIsOn", + "uml-id": "_4uEB2kafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": false, + "description": [ + "Packet compression on layer 2 configured at the device." + ] + }, + "vlanCompressionIsOn": { + "id": "vlanCompressionIsOn", + "uml-id": "_4uEB30afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 5, + "is-read-only": false, + "description": [ + "Packet compression on VLAN layer configured at the device." + ] + }, + "qInQCompressionIsOn": { + "id": "qInQCompressionIsOn", + "uml-id": "_4uEB5EafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": false, + "description": [ + "Packet compression on layer of a second VLAN configured at the device." + ] + }, + "mplsCompressionIsOn": { + "id": "mplsCompressionIsOn", + "uml-id": "_4uEB6UafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": false, + "description": [ + "Packet compression on MPLS layer configured at the device." + ] + }, + "ipv4CompressionIsOn": { + "id": "ipv4CompressionIsOn", + "uml-id": "_4uEB7kafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": false, + "description": [ + "Packet compression on layer 3 for IPv4 configured at the device." + ] + }, + "ipv6CompressionIsOn": { + "id": "ipv6CompressionIsOn", + "uml-id": "_4uEB80afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": false, + "description": [ + "Packet compression on layer 3 for IPv6 configured at the device." + ] + }, + "layer4CompressionIsOn": { + "id": "layer4CompressionIsOn", + "uml-id": "_4uEB-EafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": false, + "description": [ + "Packet compression on layer 4 (TCP and UDP header) configured at the device." + ] + }, + "encryptionIsOn": { + "id": "encryptionIsOn", + "uml-id": "_uI7bIE58EeaCk6G-lyG1OQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 11, + "is-read-only": false, + "description": [ + "Activates encryption of the Ethernet payload." + ] + }, + "cryptographicKey": { + "id": "cryptographicKey", + "uml-id": "_psRpoE58EeaCk6G-lyG1OQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 12, + "is-read-only": false, + "description": [ + "Key for transforming plaintext into cipher text data." + ] + }, + "EthernetContainerStatus": { + "id": "EthernetContainerStatus", + "uml-id": "_4uECAUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "EthernetContainerCurrentProblems": { + "id": "EthernetContainerCurrentProblems", + "uml-id": "_4uECDUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "EthernetContainerCurrentPerformance": { + "id": "EthernetContainerCurrentPerformance", + "uml-id": "_4uECE0afEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the Ethernet container at a particular moment." + ] + }, + "EthernetContainerHistoricalPerformances": { + "id": "EthernetContainerHistoricalPerformances", + "uml-id": "_4uECF0afEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the Ethernet container for a pre-defined measurement interval." + ] + }, + "MW_TdmContainer_Pac": { + "id": "MW_TdmContainer_Pac", + "uml-id": "_ecCeMUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "LTP(Client)" + ] + }, + "layerProtocol": { + "id": "layerProtocol", + "uml-id": "_m_QIglpKEeax66gMnmfzpQ", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid" + ] + }, + "tdmContainerCapability": { + "id": "tdmContainerCapability", + "uml-id": "_-bytElAmEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_ecCeSEaqEeas2eqI3oKNtg", + "order-number": 2, + "is-read-only": true + }, + "tdmContainerConfiguration": { + "id": "tdmContainerConfiguration", + "uml-id": "__LKUglAmEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_ecCecUaqEeas2eqI3oKNtg", + "order-number": 3, + "is-read-only": false + }, + "tdmContainerStatus": { + "id": "tdmContainerStatus", + "uml-id": "__vOq4lAmEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_ecCesUaqEeas2eqI3oKNtg", + "order-number": 4, + "is-read-only": true + }, + "tdmContainerCurrentProblems": { + "id": "tdmContainerCurrentProblems", + "uml-id": "_AWdqAlAnEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_ecCevUaqEeas2eqI3oKNtg", + "order-number": 5, + "is-read-only": true + }, + "tdmContainerCurrentPerformance": { + "id": "tdmContainerCurrentPerformance", + "uml-id": "_AzXoclAnEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_ecCew0aqEeas2eqI3oKNtg", + "order-number": 6, + "is-read-only": true + }, + "tdmContainerHistoricalPerformances": { + "id": "tdmContainerHistoricalPerformances", + "uml-id": "_BXIc0lAnEea9Wek8ROfqag", + "uml-type": "ownedAttribute", + "type": "_ecCex0aqEeas2eqI3oKNtg", + "order-number": 7, + "is-read-only": true + }, + "TdmContainerCapability": { + "id": "TdmContainerCapability", + "uml-id": "_ecCeSEaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Bundling is not available." + ] + }, + "supportedTdmContainerTypesList": { + "id": "supportedTdmContainerTypesList", + "uml-id": "_R5hG0EdwEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_rgbigEdjEeax2rWez10Siw", + "order-number": 1, + "is-read-only": true, + "description": [ + "Lists the TDM containers that are supported." + ] + }, + "supportedAlarms": { + "id": "supportedAlarms", + "uml-id": "_ecCeb0aqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 92, + "is-read-only": true, + "description": [ + "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device." + ] + }, + "TdmContainerConfiguration": { + "id": "TdmContainerConfiguration", + "uml-id": "_ecCecUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "containerID": { + "id": "containerID", + "uml-id": "_ecCeS0aqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller." + ] + }, + "containerType": { + "id": "containerType", + "uml-id": "_o_-2oEdxEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_rgbigEdjEeax2rWez10Siw", + "order-number": 2, + "is-read-only": false, + "description": [ + "Type of TDM container." + ] + }, + "segmentID": { + "id": "segmentID", + "uml-id": "_ecCee0aqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_Nd1F4MKuEeWwLJhHQlOGSQ", + "order-number": 3, + "is-read-only": false, + "description": [ + "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;" + ] + }, + "problemKindSeverityList": { + "id": "problemKindSeverityList", + "uml-id": "_ecCerUaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_OMPgwGz0Eeaf-__BRLM84g", + "order-number": 94, + "is-read-only": false, + "description": [ + "Severity of the problem to be configured." + ] + }, + "TdmContainerStatus": { + "id": "TdmContainerStatus", + "uml-id": "_ecCesUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "lastStatusChange": { + "id": "lastStatusChange", + "uml-id": "_ecCetEaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q", + "order-number": 1, + "is-read-only": true, + "description": [ + "_format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes." + ] + }, + "TdmContainerCurrentProblems": { + "id": "TdmContainerCurrentProblems", + "uml-id": "_ecCevUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false + }, + "currentProblemList": { + "id": "currentProblemList", + "uml-id": "_ecCewEaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "__h1n4MXpEeWJ6KZuc0h_vw", + "order-number": 1, + "is-read-only": true + }, + "TdmContainerCurrentPerformance": { + "id": "TdmContainerCurrentPerformance", + "uml-id": "_ecCew0aqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the TDM container at a particular moment." + ] + }, + "currentPerformanceDataList": { + "id": "currentPerformanceDataList", + "uml-id": "_ecCexkaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_pA5AQGz6Eeaf-__BRLM84g", + "order-number": 1, + "is-read-only": true, + "description": [ + "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too." + ] + }, + "TdmContainerHistoricalPerformances": { + "id": "TdmContainerHistoricalPerformances", + "uml-id": "_ecCex0aqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the TDM container for a pre-defined measurement interval." + ] + }, + "historicalPerformanceDataList": { + "id": "historicalPerformanceDataList", + "uml-id": "_ecCeykaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_pTaToGz6Eeaf-__BRLM84g", + "order-number": 1, + "is-read-only": true + }, + "MwCurrentProblem": { + "id": "MwCurrentProblem", + "uml-id": "_LKRM4JNQEeWuAeXkr703BA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "According to ITU-T G.874.1?" + ] + }, + "sequenceNumber": { + "id": "sequenceNumber", + "uml-id": "_YadH4CJbEeaHpPYk5sscIg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Unique sequence number of the current problem object." + ] + }, + "timeStamp": { + "id": "timeStamp", + "uml-id": "_lB4EQJN1EeWuAeXkr703BA", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": true, + "description": [ + "_format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes." + ] + }, + "channelPlanType": { + "id": "channelPlanType", + "uml-id": "_oQf6IPXSEeW9zIqh2WHHww", + "uml-type": "uml:DataType" + }, + "supportedChannelPlan": { + "id": "supportedChannelPlan", + "uml-id": "_8gpNIHfcEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Unique name (e.g. CEPT/ERC/REC (01) 04 Annex 5) of an international agreement that describe allocations of frequency channels, to which this air interface complies. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in the controller/application attached database." + ] + }, + "duplexDistanceIsVariable": { + "id": "duplexDistanceIsVariable", + "uml-id": "_OPxkQK42EeWxIavXll_b0A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": true, + "description": [ + "To be set on 'true', if the distance between transmitted and received frequency is variable." + ] + }, + "duplexDistance": { + "id": "duplexDistance", + "uml-id": "_BEr_wIMEEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Distance between transmitted and received frequency." + ] + }, + "autoFreqSelectIsAvail": { + "id": "autoFreqSelectIsAvail", + "uml-id": "_te6XMIL8EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": true, + "description": [ + "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'." + ] + }, + "transmissionModeList": { + "id": "transmissionModeList", + "uml-id": "_nwbvcPXREeW9zIqh2WHHww", + "uml-type": "ownedAttribute", + "type": "_zG34sPXQEeW9zIqh2WHHww", + "order-number": 5, + "is-read-only": true + }, + "transmissionModeType": { + "id": "transmissionModeType", + "uml-id": "_zG34sPXQEeW9zIqh2WHHww", + "uml-type": "uml:DataType" + }, + "transmissionModeId": { + "id": "transmissionModeId", + "uml-id": "_afdYoNumEeWHIeLurhMv0A", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Indentifies the transmissionMode for internal reference." + ] + }, + "channelBandwidth": { + "id": "channelBandwidth", + "uml-id": "_FteJEHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;" + ] + }, + "modulationScheme": { + "id": "modulationScheme", + "uml-id": "_G4H-UHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 3, + "is-read-only": true, + "unit": "symbols", + "description": [ + "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256')." + ] + }, + "informationRate": { + "id": "informationRate", + "uml-id": "_jE7-EHf4EeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 4, + "is-read-only": true, + "unit": "%", + "description": [ + "Information rate of the coding scheme in %." + ] + }, + "txPowerMin": { + "id": "txPowerMin", + "uml-id": "_I3nJ0HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 5, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the minimum transmit power the modem can operate in dBm." + ] + }, + "txPowerMax": { + "id": "txPowerMax", + "uml-id": "_KB7A0HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 6, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the maximum transmit power the modem can operate in dBm." + ] + }, + "rxThreshold": { + "id": "rxThreshold", + "uml-id": "_LCr6QHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 7, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less." + ] + }, + "amUpshiftLevel": { + "id": "amUpshiftLevel", + "uml-id": "_MGguwHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 8, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the receive level that has to be exceeded to shift into a higher modulation scheme." + ] + }, + "amDownshiftLevel": { + "id": "amDownshiftLevel", + "uml-id": "_NIvAwHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 9, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme." + ] + }, + "xpicIsAvail": { + "id": "xpicIsAvail", + "uml-id": "_QHd9kHfvEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": true, + "description": [ + "In case the Air Interface Port is capable of XPIC, this field shall contain a 'true'." + ] + }, + "airInterfaceProblemSeverityType": { + "id": "airInterfaceProblemSeverityType", + "uml-id": "_ZKdWgGnuEeaZwMagYjVCHQ", + "uml-type": "uml:DataType" + }, + "airInterfaceCurrentProblemType": { + "id": "airInterfaceCurrentProblemType", + "uml-id": "_umuZUMXjEeW3xsRKtpCLuA", + "uml-type": "uml:DataType" + }, + "airInterfacePerformanceType": { + "id": "airInterfacePerformanceType", + "uml-id": "_OvFYwEQbEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the air interface." + ] + }, + "es": { + "id": "es", + "uml-id": "_DbVzpUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "s", + "description": [ + "Number of errored seconds." + ] + }, + "ses": { + "id": "ses", + "uml-id": "_DbVzqUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "s", + "description": [ + "Number of severely errored seconds." + ] + }, + "cses": { + "id": "cses", + "uml-id": "_DbVzrUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "s", + "description": [ + "Number of consecutive severely errored seconds." + ] + }, + "unavailability": { + "id": "unavailability", + "uml-id": "_DbVzsUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "s", + "description": [ + "Total time of unavailability in seconds." + ] + }, + "txLevelMin": { + "id": "txLevelMin", + "uml-id": "_DbVztUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 5, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Minimum transmit power. Signed integers are required." + ] + }, + "txLevelMax": { + "id": "txLevelMax", + "uml-id": "_DbVzuUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 6, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Maximum transmit power. Signed integers are required." + ] + }, + "txLevelAvg": { + "id": "txLevelAvg", + "uml-id": "_DbVzvUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 7, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Averaged transmit power. Signed integers are required." + ] + }, + "rxLevelMin": { + "id": "rxLevelMin", + "uml-id": "_DbVzwUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 8, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Minimum receive level. Signed integers are required." + ] + }, + "rxLevelMax": { + "id": "rxLevelMax", + "uml-id": "_DbVzxUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 9, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Maximum receive level. Signed integers are required." + ] + }, + "rxLevelAvg": { + "id": "rxLevelAvg", + "uml-id": "_DbVzyUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 10, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Averaged receive level. Signed integers are required." + ] + }, + "time2Symbols": { + "id": "time2Symbols", + "uml-id": "_DbVzzUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 11, + "is-read-only": true, + "unit": "s" + }, + "time4SymbolsS": { + "id": "time4SymbolsS", + "uml-id": "_DbVz0kQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 12, + "is-read-only": true, + "unit": "s", + "description": [ + "Sum of all seconds the transmitter operated in e.g. 4QAM strong." + ] + }, + "time4Symbols": { + "id": "time4Symbols", + "uml-id": "_DbVz2EQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 13, + "is-read-only": true, + "unit": "s" + }, + "time8Symbols": { + "id": "time8Symbols", + "uml-id": "_DbVz3UQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 14, + "is-read-only": true, + "unit": "s" + }, + "time16SymbolsS": { + "id": "time16SymbolsS", + "uml-id": "_DbVz4kQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 15, + "is-read-only": true, + "unit": "s" + }, + "time16Symbols": { + "id": "time16Symbols", + "uml-id": "_DbVz50QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 16, + "is-read-only": true, + "unit": "s" + }, + "time32Symbols": { + "id": "time32Symbols", + "uml-id": "_DbVz7EQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 17, + "is-read-only": true, + "unit": "s" + }, + "time64Symbols": { + "id": "time64Symbols", + "uml-id": "_DbVz8UQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 18, + "is-read-only": true, + "unit": "s" + }, + "time128Symbols": { + "id": "time128Symbols", + "uml-id": "_DbVz9kQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 19, + "is-read-only": true, + "unit": "s" + }, + "time256Symbols": { + "id": "time256Symbols", + "uml-id": "_DbVz-0QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 20, + "is-read-only": true, + "unit": "s" + }, + "time512Symbols": { + "id": "time512Symbols", + "uml-id": "_DbV0AEQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 21, + "is-read-only": true, + "unit": "s" + }, + "time512SymbolsL": { + "id": "time512SymbolsL", + "uml-id": "_DbV0BUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 22, + "is-read-only": true, + "unit": "s" + }, + "time1024Symbols": { + "id": "time1024Symbols", + "uml-id": "_DbV0CkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 23, + "is-read-only": true, + "unit": "s" + }, + "time1024SymbolsL": { + "id": "time1024SymbolsL", + "uml-id": "_DbV0D0QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 24, + "is-read-only": true, + "unit": "s" + }, + "time2048Symbols": { + "id": "time2048Symbols", + "uml-id": "_DbV0FEQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 25, + "is-read-only": true, + "unit": "s" + }, + "time2048SymbolsL": { + "id": "time2048SymbolsL", + "uml-id": "_DbV0GUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 26, + "is-read-only": true, + "unit": "s" + }, + "time4096Symbols": { + "id": "time4096Symbols", + "uml-id": "_DbV0HkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 27, + "is-read-only": true, + "unit": "s" + }, + "time4096SymbolsL": { + "id": "time4096SymbolsL", + "uml-id": "_DbV0I0QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 28, + "is-read-only": true, + "unit": "s" + }, + "time8192Symbols": { + "id": "time8192Symbols", + "uml-id": "_DbV0KEQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 29, + "is-read-only": true, + "unit": "s" + }, + "time8192SymbolsL": { + "id": "time8192SymbolsL", + "uml-id": "_DbV0LUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 30, + "is-read-only": true, + "unit": "s" + }, + "xpdMin": { + "id": "xpdMin", + "uml-id": "_DbV0PkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 34, + "is-read-only": true, + "unit": "dB", + "description": [ + "Minimum cross polarization discrimination." + ] + }, + "xpdMax": { + "id": "xpdMax", + "uml-id": "_DbV0QkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 35, + "is-read-only": true, + "unit": "dB", + "description": [ + "Maximum cross polarization discrimination." + ] + }, + "xpdAvg": { + "id": "xpdAvg", + "uml-id": "_DbV0RkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 36, + "is-read-only": true, + "unit": "dB", + "description": [ + "Averaged cross polarization discrimination." + ] + }, + "rfTempMin": { + "id": "rfTempMin", + "uml-id": "_DbV0SkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 37, + "is-read-only": true, + "unit": "C", + "description": [ + "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit." + ] + }, + "rfTempMax": { + "id": "rfTempMax", + "uml-id": "_DbV0TkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 38, + "is-read-only": true, + "unit": "C", + "description": [ + "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit." + ] + }, + "rfTempAvg": { + "id": "rfTempAvg", + "uml-id": "_DbV0UkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 39, + "is-read-only": true, + "unit": "C", + "description": [ + "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit." + ] + }, + "defectBlocksSum": { + "id": "defectBlocksSum", + "uml-id": "_DbV0VkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 40, + "is-read-only": true, + "unit": "blocks", + "description": [ + "Total number of blocks that were defect after receiving and could not be corrected by the FEC." + ] + }, + "airInterfaceCurrentPerformanceType": { + "id": "airInterfaceCurrentPerformanceType", + "uml-id": "_pQ_y4GoHEeaZwMagYjVCHQ", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ] + }, + "airInterfaceHistoricalPerformanceType": { + "id": "airInterfaceHistoricalPerformanceType", + "uml-id": "_t18kwGoHEeaZwMagYjVCHQ", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ] + }, + "diversityType": { + "id": "diversityType", + "uml-id": "_pTliINyUEeW-SfXlFFFI0Q", + "uml-type": "uml:DataType" + }, + "diversityName": { + "id": "diversityName", + "uml-id": "_uYhboNyUEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'" + ] + }, + "numberOfAirInterfacesMax": { + "id": "numberOfAirInterfacesMax", + "uml-id": "_wKDDoNyUEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 2, + "is-read-only": true, + "unit": "air interfaces", + "description": [ + "Maximum number of air interfaces that could be part of this kind of diversity." + ] + }, + "airInterfaceDiversityProblemSeverityType": { + "id": "airInterfaceDiversityProblemSeverityType", + "uml-id": "_2kMRYGzzEeaf-__BRLM84g", + "uml-type": "uml:DataType" + }, + "airInterfaceDiversityCurrentProblemType": { + "id": "airInterfaceDiversityCurrentProblemType", + "uml-id": "_z1XWgMXlEeWJ6KZuc0h_vw", + "uml-type": "uml:DataType" + }, + "airInterfaceDiversityPerformanceType": { + "id": "airInterfaceDiversityPerformanceType", + "uml-id": "_EH3QgEQdEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the air interface diversity group." + ] + }, + "snirMin": { + "id": "snirMin", + "uml-id": "_nG-NsEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 1, + "is-read-only": true, + "unit": "dB", + "description": [ + "Minimum signal to (noise+interference) ratio of the combined signals." + ] + }, + "snirMax": { + "id": "snirMax", + "uml-id": "_n_OEUEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 2, + "is-read-only": true, + "unit": "dB", + "description": [ + "Maximum signal to (noise+interference) ratio of the combined signals." + ] + }, + "snirAvg": { + "id": "snirAvg", + "uml-id": "_oU3kMEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 3, + "is-read-only": true, + "unit": "dB", + "description": [ + "Average signal to (noise+interference) ratio of the combined signals." + ] + }, + "airInterfaceDiversityCurrentPerformanceType": { + "id": "airInterfaceDiversityCurrentPerformanceType", + "uml-id": "_n4wTgGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ] + }, + "airInterfaceDiversityHistoricalPerformanceType": { + "id": "airInterfaceDiversityHistoricalPerformanceType", + "uml-id": "_pG0pIGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ] + }, + "tdmStructureType": { + "id": "tdmStructureType", + "uml-id": "_jRAQsEdoEeax2rWez10Siw", + "uml-type": "uml:DataType" + }, + "tdmStructureName": { + "id": "tdmStructureName", + "uml-id": "_1bJF4EdoEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'" + ] + }, + "tdmSegmentSize": { + "id": "tdmSegmentSize", + "uml-id": "_hPq1oEdpEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kbit/s", + "description": [ + "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;" + ] + }, + "maxNumberOfSegmentsReservable": { + "id": "maxNumberOfSegmentsReservable", + "uml-id": "_EJnsgEdpEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte", + "order-number": 3, + "is-read-only": true, + "unit": "segments", + "description": [ + "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface." + ] + }, + "structureProblemSeverityType": { + "id": "structureProblemSeverityType", + "uml-id": "_LPgp4Gz0Eeaf-__BRLM84g", + "uml-type": "uml:DataType" + }, + "structureCurrentProblemType": { + "id": "structureCurrentProblemType", + "uml-id": "_UC0gAMXnEeWJ6KZuc0h_vw", + "uml-type": "uml:DataType" + }, + "structurePerformanceType": { + "id": "structurePerformanceType", + "uml-id": "_kzEicEQdEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the Structure." + ] + }, + "structureCurrentPerformanceType": { + "id": "structureCurrentPerformanceType", + "uml-id": "_o7jNQGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ] + }, + "structureHistoricalPerformanceType": { + "id": "structureHistoricalPerformanceType", + "uml-id": "_pNAJoGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ] + }, + "tdmContainerType": { + "id": "tdmContainerType", + "uml-id": "_rgbigEdjEeax2rWez10Siw", + "uml-type": "uml:DataType" + }, + "tdmContainerName": { + "id": "tdmContainerName", + "uml-id": "_rgbigkdjEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'" + ] + }, + "tdmContainerSize": { + "id": "tdmContainerSize", + "uml-id": "_rgbihEdjEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kbit/s", + "description": [ + "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;" + ] + }, + "segmentIDType": { + "id": "segmentIDType", + "uml-id": "_Nd1F4MKuEeWwLJhHQlOGSQ", + "uml-type": "uml:DataType", + "description": [ + "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once." + ] + }, + "structureIdRef": { + "id": "structureIdRef", + "uml-id": "_N4GKkMKvEeWwLJhHQlOGSQ", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "is-key": 1 + }, + "segmentIdRef": { + "id": "segmentIdRef", + "uml-id": "_nVubgMKvEeWwLJhHQlOGSQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 2, + "is-read-only": false, + "is-key": 2 + }, + "segmentStatusType": { + "id": "segmentStatusType", + "uml-id": "_KwZVcMUCEeW3xsRKtpCLuA", + "uml-type": "uml:DataType" + }, + "segmentStatusTypeId": { + "id": "segmentStatusTypeId", + "uml-id": "_7JBAYOLbEeWM2vUDE3Xqhw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort", + "order-number": 1, + "is-read-only": true, + "is-key": 1 + }, + "segmentIsReservedForTdm": { + "id": "segmentIsReservedForTdm", + "uml-id": "__1DMwMUCEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": true, + "description": [ + "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm." + ] + }, + "operationalStatus": { + "id": "operationalStatus", + "uml-id": "_ZA94EMUCEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_lNclkLEtEeSZUdYfPSdgew", + "order-number": 3, + "is-read-only": true, + "description": [ + "Current operational status of each segment." + ] + }, + "containerProblemSeverityType": { + "id": "containerProblemSeverityType", + "uml-id": "_OMPgwGz0Eeaf-__BRLM84g", + "uml-type": "uml:DataType" + }, + "problemKindName": { + "id": "problemKindName", + "uml-id": "_OMQH0Gz0Eeaf-__BRLM84g", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "Name of the alarm according to Container::ContainerCapability::supportedAlarms" + ] + }, + "problemKindSeverity": { + "id": "problemKindSeverity", + "uml-id": "_OMQH02z0Eeaf-__BRLM84g", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 2, + "is-read-only": false, + "description": [ + "Severity of this type of alarm." + ] + }, + "containerCurrentProblemType": { + "id": "containerCurrentProblemType", + "uml-id": "__h1n4MXpEeWJ6KZuc0h_vw", + "uml-type": "uml:DataType" + }, + "problemName": { + "id": "problemName", + "uml-id": "__h1n4cXpEeWJ6KZuc0h_vw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "description": [ + "Name of the alarm according to Container::ContainerCapability::supportedAlarms" + ] + }, + "problemSeverity": { + "id": "problemSeverity", + "uml-id": "__h1n48XpEeWJ6KZuc0h_vw", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 2, + "is-read-only": false, + "description": [ + "Severity of the alarm." + ] + }, + "containerPerformanceType": { + "id": "containerPerformanceType", + "uml-id": "_U9tW0EQeEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the Container." + ] + }, + "txEthernetBytesMaxS": { + "id": "txEthernetBytesMaxS", + "uml-id": "_MaHB8H1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "Bytes/s", + "description": [ + "Required data volume = 31bit" + ] + }, + "txEthernetBytesMaxM": { + "id": "txEthernetBytesMaxM", + "uml-id": "_M3NNoH1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong", + "order-number": 2, + "is-read-only": true, + "unit": "Bytes/min", + "description": [ + "Required data volume = 37bit" + ] + }, + "txEthernetBytesSum": { + "id": "txEthernetBytesSum", + "uml-id": "_NWtNEH1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong", + "order-number": 3, + "is-read-only": true, + "unit": "Bytes", + "description": [ + "Required data volume = 47bit" + ] + }, + "timePeriod": { + "id": "timePeriod", + "uml-id": "_Nyme4H1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "s", + "description": [ + "Required data volume = 17bit" + ] + }, + "containerCurrentPerformanceType": { + "id": "containerCurrentPerformanceType", + "uml-id": "_pA5AQGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ] + }, + "containerHistoricalPerformanceType": { + "id": "containerHistoricalPerformanceType", + "uml-id": "_pTaToGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ] + }, + "performanceData": { + "id": "performanceData", + "uml-id": "_i5STYGz7Eeaf-__BRLM84g", + "uml-type": "ownedAttribute", + "type": "_U9tW0EQeEea3g-FxAUaYRg", + "order-number": 1, + "is-read-only": true + }, + "_eIml0JH1EeWUdbnmmNiTAA": { + "id": "severityType", + "uml-id": "_eIml0JH1EeWUdbnmmNiTAA", + "enum": [ + "non-alarmed", + "warning", + "minor", + "major", + "critical" + ], + "is-read-only": false, + "description": [ + "According to ITU-T M.3160" + ] + }, + "_e85NsI99EeWFluv9KLLl5A": { + "id": "polarizationType", + "uml-id": "_e85NsI99EeWFluv9KLLl5A", + "enum": [ + "not-specified", + "horizontal", + "vertical" + ], + "is-read-only": false + }, + "_DaB5IJRgEeWxIPEwZQ_gmw": { + "id": "protectionType", + "uml-id": "_DaB5IJRgEeWxIPEwZQ_gmw", + "enum": [ + "hsb" + ], + "is-read-only": false + }, + "_01_dYJReEeWxIPEwZQ_gmw": { + "id": "roleType", + "uml-id": "_01_dYJReEeWxIPEwZQ_gmw", + "enum": [ + "working", + "protection", + "protected" + ], + "is-read-only": false + }, + "_DUJs8JOXEeWz-6sqLzUedw": { + "id": "airInterfaceDiversityStatusType", + "uml-id": "_DUJs8JOXEeWz-6sqLzUedw", + "enum": [ + "groupDown", + "notAllAiActive", + "allAiActive" + ], + "is-read-only": false + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json new file mode 100644 index 000000000..fd957f315 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json @@ -0,0 +1,2296 @@ +{ + "schema-information": { + "forwarding-domain": { + "id": "forwarding-domain", + "uml-id": "_oGql-FLNEeO75dO39GbF8Q", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The ForwardingDomain (FD) class models the topological component that represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model. The FD object provides the context for and constrains the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. The LTPs available are those defined at the boundary of the FD. At a lower level of recursion an FD could represent a fabric (switch matrix) in a Network Element (NE). An NE can encompass more than one switch matrix and hence more than one FD. The FD representing a switch matrix can be further partitioned. The FD corresponds to a subnetwork [ITU-T G.800], FlowDomain [TMF 612] and a MultiLayerSubNetwork (MLSN) [TMF 612]. As in the TMF concept of MLSN and unlike the ITU-T concet of subnetwork model the FD can support more than one layer-protocol." + ], + "uml-name": "ForwardingDomain" + }, + "layer-protocol-name": { + "id": "layer-protocol-name", + "uml-id": "_P-Hp8MD4EeSoNOrYOfaryg", + "uml-type": "uml:DataType", + "description": [ + "Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)" + ], + "uml-name": "LayerProtocolName" + }, + "lower-level-fd": { + "id": "lower-level-fd", + "uml-id": "_oGqmBVLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGql-FLNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": false, + "description": [ + "The FD class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning). The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD. Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition)." + ], + "uml-name": "_lowerLevelFd" + }, + "fc": { + "id": "fc", + "uml-id": "_oGql_1LNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGqmC1LNEeO75dO39GbF8Q", + "order-number": 3, + "is-read-only": false, + "description": [ + "An FD aggregares one or more FCs. A aggregated FC connects LTPs that bound the FD." + ], + "uml-name": "_fc" + }, + "ltp": { + "id": "ltp", + "uml-id": "_8SXNrD-HEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 1, + "is-read-only": false, + "uml-name": "_ltp" + }, + "lower-level-link": { + "id": "lower-level-link", + "uml-id": "_dm_ngBiQEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "_oGqnjVLNEeO75dO39GbF8Q", + "order-number": 5, + "is-read-only": false, + "description": [ + "The FD encompasses Links that interconnect lower level FDs and collect links that are wholly within the bounds of the FD. See also _lowerLevelFd." + ], + "uml-name": "_lowerLevelLink" + }, + "forwarding-construct": { + "id": "forwarding-construct", + "uml-id": "_oGqmC1LNEeO75dO39GbF8Q", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The ForwardingConstruct (FC) class models enabled constrained potential for forwarding between two or more LTPs at a particular specific layerProtocol. Like the LTP, the FC supports any transport protocol including all circuit and packet forms. It is used to effect forwarding of transport characteristic (layer protocol) information. An FC can be in only one FD. The ForwardingConstruct is a Forwarding entity. At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances. The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structures for linear, ring or mesh protection schemes." + ], + "uml-name": "ForwardingConstruct" + }, + "lower-level-fc": { + "id": "lower-level-fc", + "uml-id": "_i7UzkFYfEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_oGqmC1LNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": false, + "description": [ + "An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning). Aggregation is used as for the FD to allow changes in hierarchy. FC aggregation reflects FD aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning." + ], + "uml-name": "_lowerLevelFc" + }, + "fc-route": { + "id": "fc-route", + "uml-id": "_A8SFwFYgEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_9UVusFYfEeOVGaP4lO41SQ", + "order-number": 3, + "is-read-only": false, + "description": [ + "An FC object can have zero or more routes, each of which is defined as a list of lower level FC objects describing the flow across the network." + ], + "uml-name": "_fcRoute" + }, + "fc-port": { + "id": "fc-port", + "uml-id": "_b_lUAFYgEeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The association of the FC to LTPs is made via FcPorts. The FcPort class models the access to the FC function. The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience, the FcPort may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The FcPort replaces the Protection Unit of a traditional protection model. The ForwardingConstruct can be considered as a component and the FcPort as a Port on that component." + ], + "uml-name": "FcPort" + }, + "fc-switch": { + "id": "fc-switch", + "uml-id": "_a97NQFYhEeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The FcSwitch class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is open ). The ability for a Switch to be high impedance allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict." + ], + "uml-name": "FcSwitch" + }, + "forwarding-direction": { + "id": "forwarding-direction", + "uml-id": "_9_yMUEDAEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_dV67AEC8EeWxhL2B6Peg6A", + "order-number": 6, + "is-read-only": false, + "description": [ + "The directionality of the ForwardingConstruct. Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). Is not present in more complex cases." + ], + "uml-name": "forwardingDirection", + "controlType": [ + "bidirectional", + "unidirectional", + "undefined-or-unknown" + ] + }, + "is-protection-lock-out": { + "id": "is-protection-lock-out", + "uml-id": "_ls-wcMN9EeWwZ527PhfFSA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": false, + "description": [ + "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme." + ], + "uml-name": "isProtectionLockOut", + "controlType": "checkbox" + }, + "service-priority": { + "id": "service-priority", + "uml-id": "_3co20MOCEeWwZ527PhfFSA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 8, + "is-read-only": false, + "description": [ + "Relevant where service FCs are competing for server resources. Used to determine which signal FC is allocated resource. The priority of the service with respect to other services . Lower numeric value means higher priority. Covers cases such as preemptable." + ], + "uml-name": "servicePriority", + "controlType": "number" + }, + "supported-link": { + "id": "supported-link", + "uml-id": "_0172EFHnEeaDuo8VlVeg_g", + "uml-type": "ownedAttribute", + "type": "_oGqnjVLNEeO75dO39GbF8Q", + "order-number": 9, + "is-read-only": false, + "description": [ + "An FC that spans between LTPs that terminate the LayerProtocol usually supports one or more links in the client layer." + ], + "uml-name": "_supportedLink" + }, + "network-element": { + "id": "network-element", + "uml-id": "_oGqnr1LNEeO75dO39GbF8Q", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The Network Element (NE) class represents a network element (traditional NE) in the data plane. A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a single management-control port. In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element. NE is really a product bundling or some view of management scope, management access, session. The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links)." + ], + "uml-name": "NetworkElement" + }, + "fd": { + "id": "fd", + "uml-id": "_oGqnslLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGql-FLNEeO75dO39GbF8Q", + "order-number": 1, + "is-read-only": false, + "description": [ + "Represents the FD that is completely within the boundary of the NE. At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned. Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association." + ], + "uml-name": "_fd" + }, + "role": { + "id": "role", + "uml-id": "_Ykm6QFeGEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_DUU_sGZ_EeWrX_JIGzXlSg", + "order-number": 2, + "is-read-only": false, + "description": [ + "Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function." + ], + "uml-name": "role" + }, + "fc-port-direction": { + "id": "fc-port-direction", + "uml-id": "_1HbEgEDAEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_2WpC8EC7EeWxhL2B6Peg6A", + "order-number": 3, + "is-read-only": false, + "description": [ + "The orientation of defined flow at the FcPort." + ], + "uml-name": "fcPortDirection", + "controlType": [ + "bidirectional", + "input", + "output", + "unidentified-or-unknown" + ] + }, + "selection-priority": { + "id": "selection-priority", + "uml-id": "_02awkMOEEeWwZ527PhfFSA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": false, + "description": [ + "The preference priority of the resource in the protection scheme for a particular FC. The lower the value the higher the priority. A lower value of selection priority is preferred If two resources have the same value they are of equal priory. There is no preference between equal priorities. If a resource with the lowest value selection priority fails then the next lowest value available (may be the same value) is picked. Hence on failure of the current resource the next best available will be selected. If there are several equal values the choice is essentially arbitrary). If the scheme is revertive then when a resource of higher priority than the currently selected resource recovers it will be selected. This is equivalent to working/protection but allows for all static scheme types with n:m capability. In simple schemes 0 = working and 1 = protecting." + ], + "uml-name": "selectionPriority", + "controlType": "number" + }, + "is-internal-port": { + "id": "is-internal-port", + "uml-id": "_CSlIwNViEeWhfIeymCGl5Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": true, + "description": [ + "The FcPort is not exposed and cannot have associated LTPs. This form of FcPort is used to enable chaining of FcSwitches or FcRoutes in complex network protection scenarios." + ], + "uml-name": "isInternalPort", + "controlType": "checkbox" + }, + "fc-route-feeds-fc-port-egress": { + "id": "fc-route-feeds-fc-port-egress", + "uml-id": "_xbsp8TLREea40e5DA9KE3w", + "uml-type": "ownedAttribute", + "type": "_9UVusFYfEeOVGaP4lO41SQ", + "order-number": 7, + "is-read-only": false, + "description": [ + "Identifies which route(s) currently actively forward to the FcPort to exit the FC to an LTP (or for an internal FcPort to propagate to the next internal switch/route)." + ], + "uml-name": "_fcRouteFeedsFcPortEgress" + }, + "layer-protocol": { + "id": "layer-protocol", + "uml-id": "_gROecFYXEeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The projection of an LTP into each transport layer is represented by a LayerProtocol (LP) instance. A LayerProtocol instances can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where there is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP." + ], + "uml-name": "LayerProtocol" + }, + "configured-client-capacity": { + "id": "configured-client-capacity", + "uml-id": "_CUJD4BicEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2swpathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": false, + "visible": false, + "description": [ + "Provides a summarized view of the client capacity that is configurable for use. Note the client LTP association should provide all necessary detail hence this attribute is questionable." + ], + "uml-name": "configuredClientCapacity" + }, + "lp-direction": { + "id": "lp-direction", + "uml-id": "_GuuSYEDBEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_RWILYEDAEeWQeOKbNUpP9A", + "order-number": 3, + "is-read-only": false, + "description": [ + "The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flows. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows" + ], + "uml-name": "lpDirection", + "controlType": [ + "bidirectional", + "sink", + "source", + "undefined-or-unknown" + ] + }, + "termination-state": { + "id": "termination-state", + "uml-id": "_p2YfoGeEEeWmgIwAIZlYKQ", + "uml-type": "ownedAttribute", + "type": "_6anG8GeEEeWmgIwAIZlYKQpathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": false, + "description": [ + "Indicates whether the layer is terminated and if so how." + ], + "uml-name": "terminationState" + }, + "config-and-switch-controller": { + "id": "config-and-switch-controller", + "uml-id": "_d6vwsMQhEeWlWIVxswb46A", + "uml-type": "ownedAttribute", + "type": "_k1gHQJo5EeOyHKqw-cQ_eg", + "order-number": 5, + "is-read-only": false, + "description": [ + "A switch controller external to the LayerProtocol. The controller will coordinate one or more switches in one or more FCs related to the LayerProtocol" + ], + "uml-name": "_configAndSwitchController" + }, + "fc-blocks-signal-to-lp": { + "id": "fc-blocks-signal-to-lp", + "uml-id": "_OW-PsMjVEeWSlYzRfsq8lQ", + "uml-type": "ownedAttribute", + "type": "_zMwrsMjVEeWSlYzRfsq8lQ", + "order-number": 7, + "is-read-only": false, + "visible":false, + "uml-name": "fcBlocksSignalToLp" + }, + "logical-termination-point": { + "id": "logical-termination-point", + "uml-id": "_eEpDMFX4EeOVGaP4lO41SQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The LogicalTerminationPoint (LTP) class encapsulates the termination and adaptation functions of one or more transport layers represented by instances of LayerProtocol. The encapsulated transport layers have a simple fixed 1:1 client-server relationship defined by association end ordering. The structure of LTP supports all transport protocols including circuit and packet forms." + ], + "uml-name": "LogicalTerminationPoint" + }, + "server-ltp": { + "id": "server-ltp", + "uml-id": "_D4N9IFX5EeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 1, + "is-read-only": false, + "description": [ + "References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT)." + ], + "uml-name": "_serverLtp" + }, + "client-ltp": { + "id": "client-ltp", + "uml-id": "_3Y4zAFYWEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing." + ], + "uml-name": "_clientLtp" + }, + "lp": { + "id": "lp", + "uml-id": "_lvFOQFYXEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_gROecFYXEeOVGaP4lO41SQ", + "order-number": 3, + "is-read-only": false, + "description": [ + "Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical)." + ], + "uml-name": "_lp" + }, + "connected-ltp": { + "id": "connected-ltp", + "uml-id": "_CHM6YFYYEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 4, + "is-read-only": false, + "description": [ + "Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding. Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts." + ], + "uml-name": "_connectedLtp" + }, + "peer-ltp": { + "id": "peer-ltp", + "uml-id": "_TkuhMFYYEeOVGaP4lO41SQ", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 5, + "is-read-only": false, + "description": [ + "References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP." + ], + "uml-name": "_peerLtp" + }, + "physical-port-reference": { + "id": "physical-port-reference", + "uml-id": "_RLDi4BieEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 6, + "is-read-only": false, + "description": [ + "One or more text labels for the unmodelled physical port associated with the LTP. In many cases there is no associated physical port." + ], + "uml-name": "physicalPortReference", + "controlType": "text" + }, + "ltp-in-other-view": { + "id": "ltp-in-other-view", + "uml-id": "_vq1NIBigEeSh8KVgZCMyDw", + "uml-type": "ownedAttribute", + "type": "_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 7, + "is-read-only": false, + "description": [ + "References one or more LTPs in other views that represent this LTP. The referencing LTP is the provider of capability." + ], + "uml-name": "_ltpInOtherView" + }, + "ltp-direction": { + "id": "ltp-direction", + "uml-id": "_S811EEDBEeWQeOKbNUpP9A", + "uml-type": "ownedAttribute", + "type": "_RWILYEDAEeWQeOKbNUpP9A", + "order-number": 8, + "is-read-only": false, + "description": [ + "The overall directionality of the LTP. - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs. - A SINK LTP can only contain SINK LPs - A SOURCE LTP can only contain SOURCE LPs" + ], + "uml-name": "ltpDirection", + "controlType": [ + "bidirectional", + "sink", + "source", + "undefined-or-unknown" + ] + }, + "configuration-and-switch-controller": { + "id": "configuration-and-switch-controller", + "uml-id": "_k1gHQJo5EeOyHKqw-cQ_eg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme." + ], + "uml-name": "ConfigurationAndSwitchController" + }, + "switch-rule": { + "id": "switch-rule", + "uml-id": "_oxb_EJo-EeOyHKqw-cQ_eg", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "description": [ + "A sketch of the presence of complex rules governing the switch behavior." + ], + "uml-name": "switchRule" + }, + "control-parameters": { + "id": "control-parameters", + "uml-id": "_k40wIVJKEeaDuo8VlVeg_g", + "uml-type": "ownedAttribute", + "type": "_T5-osJ4HEeOO3om500DFKg", + "order-number": 10, + "is-read-only": false, + "uml-name": "_controlParameters" + }, + "profile-proxy": { + "id": "profile-proxy", + "uml-id": "_DEWvsJozEeOyHKqw-cQ_eg", + "uml-type": "ownedAttribute", + "type": "_rgdnkJoyEeOyHKqw-cQ_eg", + "order-number": 5, + "is-read-only": false, + "description": [ + "Provides a set of predefined values for switch control in place of the direct values available via the FcSwitch or via _configurationAndSwitchControl." + ], + "uml-name": "_profileProxy" + }, + "local-pac": { + "id": "local-pac", + "uml-id": "_JOA30MOxEeWwZ527PhfFSA", + "uml-type": "uml:DataType", + "description": [ + "Provides the properties of a LocalClass via composition." + ], + "uml-name": "Local_Pac" + }, + "global-pac": { + "id": "global-pac", + "uml-id": "_iBsM0MOxEeWwZ527PhfFSA", + "uml-type": "uml:DataType", + "description": [ + "Provides the properties of a GlobalClass via composition." + ], + "uml-name": "Global_Pac" + }, + "is-frozen": { + "id": "is-frozen", + "uml-id": "_Xt2wEMOyEeWwZ527PhfFSA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": false, + "description": [ + "Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected." + ], + "uml-name": "isFrozen", + "controlType": "checkbox" + }, + "is-coordinated-switching-both-ends": { + "id": "is-coordinated-switching-both-ends", + "uml-id": "_QuZt0MO2EeWwZ527PhfFSA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": false, + "description": [ + "The C&SC is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends." + ], + "uml-name": "isCoordinatedSwitchingBothEnds", + "controlType": "checkbox" + }, + "subordinate-controller": { + "id": "subordinate-controller", + "uml-id": "_OjA04MQlEeWlWIVxswb46A", + "uml-type": "ownedAttribute", + "type": "_k1gHQJo5EeOyHKqw-cQ_eg", + "order-number": 9, + "is-read-only": false, + "description": [ + "A C&SC that is fully or partially subordinate this C&SC. A peer is considered as partially subordinate in that the peer will respond to requests for action from this C&SC but will also make requests for action to be carried out by this C&SC. Where there is a peer relationship each controller in the peering will see the other controller as subordinate." + ], + "uml-name": "_subordinateController" + }, + "control-parameters-pac": { + "id": "control-parameters-pac", + "uml-id": "_T5-osJ4HEeOO3om500DFKg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A list of control parameters to apply to a switch." + ], + "uml-name": "ControlParameters_Pac" + }, + "reversion-mode": { + "id": "reversion-mode", + "uml-id": "_oGqn41LNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_oGqjf1LNEeO75dO39GbF8Q", + "order-number": 3, + "is-read-only": false, + "description": [ + "Moved to ControlParameter_Pac... This attribute whether or not the protection scheme is revertive or non-revertive." + ], + "uml-name": "reversionMode", + "controlType": [ + "revertive", + "non-revertive" + ] + }, + "wait-to-revert-time": { + "id": "wait-to-revert-time", + "uml-id": "_eSxzEJ4IEeOO3om500DFKg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": false, + "description": [ + "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource." + ], + "uml-name": "waitToRevertTime", + "controlType": "number" + }, + "prot-type": { + "id": "prot-type", + "uml-id": "_oGqn6lLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "_c3Hu8Gb3EeWrX_JIGzXlSg", + "order-number": 2, + "is-read-only": false, + "description": [ + "Indicates the protection scheme that is used for the ProtectionGroup." + ], + "uml-name": "protType" + }, + "hold-off-time": { + "id": "hold-off-time", + "uml-id": "_oGqn6FLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": false, + "description": [ + "Moved to ControlParameter_Pac... This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm." + ], + "uml-name": "holdOffTime", + "controlType": "number" + }, + "network-scheme-specification": { + "id": "network-scheme-specification", + "uml-id": "_doxoIDLIEea40e5DA9KE3w", + "uml-type": "ownedAttribute", + "type": "_w-HB8DLEEea40e5DA9KE3w", + "order-number": 5, + "is-read-only": false, + "uml-name": "_networkSchemeSpecification" + }, + "selected-fc-port": { + "id": "selected-fc-port", + "uml-id": "_2PdiYI8lEeOw_ste-s6RrA", + "uml-type": "ownedAttribute", + "type": "_b_lUAFYgEeOVGaP4lO41SQ", + "order-number": 4, + "is-read-only": false, + "description": [ + "Indicates which points are selected by the switch. Depending on the switch spec (via Fcspec) - more than one FcPort can be selected at any one time (e.g. egress switch, ingress packet switch) - zero FcPorts can be selected. For an ingress switch this indicates that the switch common (egress) is high impedance ." + ], + "uml-name": "_selectedFcPort" + }, + "internal-configuration-and-switch-control": { + "id": "internal-configuration-and-switch-control", + "uml-id": "_tbetAJ4HEeOO3om500DFKg", + "uml-type": "ownedAttribute", + "type": "_k1gHQJo5EeOyHKqw-cQ_eg", + "order-number": 6, + "is-read-only": false, + "description": [ + "A switch controller encapsulated in the FcSwitch." + ], + "uml-name": "_internalConfigurationAndSwitchControl" + }, + "switch-control": { + "id": "switch-control", + "uml-id": "_LSnbYMOGEeWwZ527PhfFSA", + "uml-type": "ownedAttribute", + "type": "_e-7DYMOFEeWwZ527PhfFSA", + "order-number": 7, + "is-read-only": false, + "description": [ + "Degree of administrative control applied to the switch selection." + ], + "uml-name": "switchControl", + "controlType": [ + "normal", + "manual", + "forced" + ] + }, + "switch-selects-ports": { + "id": "switch-selects-ports", + "uml-id": "_FBaoAMQTEeWlWIVxswb46A", + "uml-type": "ownedAttribute", + "type": "_2WpC8EC7EeWxhL2B6Peg6A", + "order-number": 8, + "is-read-only": false, + "description": [ + "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both." + ], + "uml-name": "switchSelectsPorts", + "controlType": [ + "bidirectional", + "input", + "output", + "unidentified-or-unknown" + ] + }, + "switch-selection-reason": { + "id": "switch-selection-reason", + "uml-id": "_XjsGkCi_EeaGGvAxxSe1uA", + "uml-type": "ownedAttribute", + "type": "_zRKlICi9EeaGGvAxxSe1uA", + "order-number": 9, + "is-read-only": true, + "description": [ + "The reason for the current switch selection." + ], + "uml-name": "switchSelectionReason", + "controlType": [] + }, + "wait-to-restore-time": { + "id": "wait-to-restore-time", + "uml-id": "_oGqn5lLNEeO75dO39GbF8Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 11, + "is-read-only": false, + "description": [ + "Moved to ControlParameter_Pac and changed to waitToRevert... If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operation (e.g. a fault has cleared) before restoring traffic to that preferred FcPort." + ], + "uml-name": "waitToRestoreTime", + "controlType": "number" + }, + "name": { + "id": "name", + "uml-id": "_YCL8kMDZEeWbqPZwR-Ot6A", + "uml-type": "ownedAttribute", + "type": "_XUarEMDuEeWbqPZwR-Ot6A", + "order-number": 4, + "is-read-only": false, + "description": [ + "If the element is a name." + ], + "uml-name": "name" + }, + "global-class": { + "id": "global-class", + "uml-id": "_iVJ1kI2wEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others). Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context. (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature)." + ], + "uml-name": "GlobalClass" + }, + "local-id": { + "id": "local-id", + "uml-id": "_cq2mQMDYEeWbqPZwR-Ot6A", + "uml-type": "ownedAttribute", + "type": "_dCdzAMDuEeWbqPZwR-Ot6A", + "order-number": 2, + "is-read-only": false, + "description": [ + "If the element is a localId (where the element above in the hierarchy must be the context in which the specific localId is relevant)." + ], + "uml-name": "localId" + }, + "uuid": { + "id": "uuid", + "uml-id": "_KeLlAMDZEeWbqPZwR-Ot6A", + "uml-type": "ownedAttribute", + "type": "_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 3, + "is-read-only": false, + "description": [ + "If the element is a uuid (where this element could be the top of a hierarchy but may also be at some level in the hierarchy where address navigation is considered necessary to assist in location of the UUID)." + ], + "uml-name": "uuid" + }, + "local-class": { + "id": "local-class", + "uml-id": "_k5nWYI2wEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.. Feature of an Entity: An inseparable, externally distinguishable part of an entity. The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable. (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)" + ], + "uml-name": "LocalClass" + }, + "label": { + "id": "label", + "uml-id": "_olrqYI2uEeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_y7oy8I3tEeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "description": [ + "List of labels." + ], + "uml-name": "label" + }, + "extension": { + "id": "extension", + "uml-id": "_uQqu4I28EeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "_y7oy8I3tEeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "description": [ + "List of simple name-value extensions." + ], + "uml-name": "extension" + }, + "universal-id-authority": { + "id": "universal-id-authority", + "uml-id": "_StA-4I23EeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the authority that controls the allocation of UUIDs." + ], + "uml-name": "UniversalIdAuthority" + }, + "name-and-value-authority": { + "id": "name-and-value-authority", + "uml-id": "_ulDtsI3AEeO38ZmbECnvbg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the authority that controls the legal values for the names and values of a name/value attribute." + ], + "uml-name": "NameAndValueAuthority" + }, + "conditional-package": { + "id": "conditional-package", + "uml-id": "_-ZWVQJP0EeOqfpp-ZJSmaA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The base class for conditional packages." + ], + "uml-name": "ConditionalPackage" + }, + "state-pac": { + "id": "state-pac", + "uml-id": "_RG6VILEtEeSZUdYfPSdgew", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Provides general state attributes." + ], + "uml-name": "State_Pac" + }, + "operational-state": { + "id": "operational-state", + "uml-id": "_dO6owLEtEeSZUdYfPSdgew", + "uml-type": "ownedAttribute", + "type": "_lNclkLEtEeSZUdYfPSdgew", + "order-number": 1, + "is-read-only": true, + "description": [ + "The operational state is used to indicate whether or not the resource is installed and working." + ], + "uml-name": "operationalState", + "controlType": [ + "disabled", + "enabled" + ] + }, + "administrative-control": { + "id": "administrative-control", + "uml-id": "_7gqwALEtEeSZUdYfPSdgew", + "uml-type": "ownedAttribute", + "type": "_-xPeALEvEeSZUdYfPSdgew", + "order-number": 2, + "is-read-only": false, + "description": [ + "The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources. The value is the current control target. The actual administrativeState may or may not be at target." + ], + "uml-name": "administrativeControl", + "controlType": [ + "unlock", + "lock-passive", + "lock-active", + "lock-immediate" + ] + }, + "adminisatratve-state": { + "id": "adminisatratve-state", + "uml-id": "_AjGvILEuEeSZUdYfPSdgew", + "uml-type": "ownedAttribute", + "type": "_KSKOYLEuEeSZUdYfPSdgew", + "order-number": 3, + "is-read-only": true, + "description": [ + "Shows whether or not the client has permission to use or has a prohibition against using the resource. The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources." + ], + "uml-name": "adminisatratveState", + "controlType": [ + "locked", + "unlocked" + ] + }, + "lifecycle-state": { + "id": "lifecycle-state", + "uml-id": "_PzqZ0GgiEeWmgIwAIZlYKQ", + "uml-type": "ownedAttribute", + "type": "_YSsboGgiEeWmgIwAIZlYKQ", + "order-number": 4, + "is-read-only": false, + "description": [ + "Used to track the planned deployment, allocation to clients and withdrawal of resources." + ], + "uml-name": "lifecycleState", + "controlType": [ + "planned", + "potential", + "installed", + "pending-removal" + ] + }, + "general-directives": { + "id": "general-directives", + "uml-id": "_9hyUwD0TEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "GeneralDirectives" + }, + "necessary-initial-condition-constraints": { + "id": "necessary-initial-condition-constraints", + "uml-id": "_J_v_YD0WEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "NecessaryInitialConditionConstraints" + }, + "is-not": { + "id": "is-not", + "uml-id": "_pzNRQD3XEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 1, + "is-read-only": false, + "uml-name": "IsNot", + "controlType": "checkbox" + }, + "operation-details": { + "id": "operation-details", + "uml-id": "_J5Hc0T0fEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_g1SeoD0UEeaRI-H69PghuA", + "order-number": 7, + "is-read-only": false, + "uml-name": "_operationDetails" + }, + "action-verb": { + "id": "action-verb", + "uml-id": "_93jegD0VEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_ljUl4D3WEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "actionVerb", + "controlType": [ + "create-post-add", + "set-update-put-modify-write-add", + "get-read", + "delete-remove" + ] + }, + "necessary-initialcondition-constraints": { + "id": "necessary-initialcondition-constraints", + "uml-id": "_Kc7UgD0fEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_J_v_YD0WEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "_necessaryInitialconditionConstraints" + }, + "operation-envelope": { + "id": "operation-envelope", + "uml-id": "_52IiYD0TEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "OperationEnvelope" + }, + "operation-set": { + "id": "operation-set", + "uml-id": "_c9yBkD0UEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "OperationSet" + }, + "generaldirectives": { + "id": "generaldirectives", + "uml-id": "_Ios90j0fEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_9hyUwD0TEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "generaldirectives" + }, + "operationidentifiers": { + "id": "operationidentifiers", + "uml-id": "_JQNpwT0fEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_AZx1kD0UEeaRI-H69PghuA", + "order-number": 3, + "is-read-only": false, + "uml-name": "operationidentifiers" + }, + "operation-identifiers": { + "id": "operation-identifiers", + "uml-id": "_AZx1kD0UEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "OperationIdentifiers" + }, + "after-operation-set": { + "id": "after-operation-set", + "uml-id": "_olu8ID0UEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_c9yBkD0UEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "_afterOperationSet" + }, + "before-operation-set": { + "id": "before-operation-set", + "uml-id": "_xIFXsj0UEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_c9yBkD0UEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "_beforeOperationSet" + }, + "effort-and-action": { + "id": "effort-and-action", + "uml-id": "_GWLtID0VEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_L4Y9QE2DEeaGxdXEiNf4tA", + "order-number": 3, + "is-read-only": false, + "uml-name": "effortAndAction", + "controlType": [ + "best-effort", + "exact-match" + ] + }, + "pause-resume-rule": { + "id": "pause-resume-rule", + "uml-id": "_ObfAUD0VEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_ndXVME2DEeaGxdXEiNf4tA", + "order-number": 4, + "is-read-only": false, + "uml-name": "pauseResumeRule", + "controlType": [ + "no-pause-possible" + ] + }, + "operationset": { + "id": "operationset", + "uml-id": "_hsSioj0VEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_c9yBkD0UEeaRI-H69PghuA", + "order-number": 5, + "is-read-only": false, + "uml-name": "operationset" + }, + "is-short-lived": { + "id": "is-short-lived", + "uml-id": "_mdwtkD0VEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": false, + "uml-name": "isShortLived", + "controlType": "checkbox" + }, + "conector-in-holder": { + "id": "conector-in-holder", + "uml-id": "_-zMBkkO-EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_o366YEONEeasL6dcjI1vEA", + "order-number": 1, + "is-read-only": false, + "uml-name": "conectorInHolder" + }, + "connector-on-equipment-for-holder": { + "id": "connector-on-equipment-for-holder", + "uml-id": "_s5FpwEONEeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A rule class (an abstract specialization of Connector) that represents a connector on an equipment that is intended to mate with a connector in a holder." + ], + "uml-name": "ConnectorOnEquipmentForHolder" + }, + "connector-cable-end": { + "id": "connector-cable-end", + "uml-id": "_KCS_IkOPEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_6hyUEEONEeasL6dcjI1vEA", + "order-number": 1, + "is-read-only": false, + "uml-name": "connectorCableEnd" + }, + "connector-on-equipment-for-cable": { + "id": "connector-on-equipment-for-cable", + "uml-id": "_1OKeUEONEeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A rule class (an abstract specialization of Connector) that represents a connector exposed on an equipment such that a cable may be plugged in." + ], + "uml-name": "ConnectorOnEquipmentForCable" + }, + "function-enablers": { + "id": "function-enablers", + "uml-id": "_1vzsYERJEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_N-qJ8EQyEeasL6dcjI1vEA", + "order-number": 8, + "is-read-only": false, + "uml-name": "_functionEnablers" + }, + "power-state": { + "id": "power-state", + "uml-id": "_Q9fSkEQyEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "powerState" + }, + "mechanical-functions": { + "id": "mechanical-functions", + "uml-id": "_KxkFYEQ-EeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the dynamic aspects of the mechanical functions of the equipment." + ], + "uml-name": "MechanicalFunctions" + }, + "rotation-speed": { + "id": "rotation-speed", + "uml-id": "_M1XJIEQ-EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "rotationSpeed" + }, + "physical-properties": { + "id": "physical-properties", + "uml-id": "_t0pzs0RJEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_QloVwEQ-EeasL6dcjI1vEA", + "order-number": 7, + "is-read-only": false, + "uml-name": "_physicalProperties" + }, + "temperature": { + "id": "temperature", + "uml-id": "_Vlnd0EQ-EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "temperature" + }, + "holder-monitors": { + "id": "holder-monitors", + "uml-id": "_6K62skRSEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_5vdx8EQfEeasL6dcjI1vEA", + "order-number": 4, + "is-read-only": false, + "uml-name": "_holderMonitors" + }, + "is-active": { + "id": "is-active", + "uml-id": "_KFzmEERTEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 1, + "is-read-only": false, + "uml-name": "isActive", + "controlType": "checkbox" + }, + "is-actual-mismatch-with-expected": { + "id": "is-actual-mismatch-with-expected", + "uml-id": "_XRKNEERTEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": false, + "uml-name": "isActualMismatchWithExpected", + "controlType": "checkbox" + }, + "aggregate-function": { + "id": "aggregate-function", + "uml-id": "_VHOWskglEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_8SXNZT-HEeaRI-H69PghuA", + "order-number": 3, + "is-read-only": false, + "uml-name": "_aggregateFunction" + }, + "location": { + "id": "location", + "uml-id": "_lNf7kHpKEeaVjtpstJMDXA", + "uml-type": "ownedAttribute", + "type": "_bh_VAHpJEeaVjtpstJMDXA", + "order-number": 18, + "is-read-only": false, + "uml-name": "_location" + }, + "equipment-location": { + "id": "equipment-location", + "uml-id": "_RUXMYEQwEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_A15msMDaEeWbqPZwR-Ot6A", + "order-number": 1, + "is-read-only": false, + "uml-name": "equipmentLocation" + }, + "geographical-location": { + "id": "geographical-location", + "uml-id": "_XOQ_AEQwEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_A15msMDaEeWbqPZwR-Ot6A", + "order-number": 2, + "is-read-only": false, + "uml-name": "geographicalLocation" + }, + "category": { + "id": "category", + "uml-id": "_jbGZ8Ec-EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_WCZv8Ec9EeasL6dcjI1vEA", + "order-number": 12, + "is-read-only": false, + "uml-name": "_category" + }, + "equipment-instance": { + "id": "equipment-instance", + "uml-id": "_CE4sUkRCEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_UB7QwEQuEeasL6dcjI1vEA", + "order-number": 3, + "is-read-only": false, + "uml-name": "_equipmentInstance" + }, + "manufacture-date": { + "id": "manufacture-date", + "uml-id": "_YrPlQEQuEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "manufactureDate" + }, + "serial-number": { + "id": "serial-number", + "uml-id": "_cpqioEQuEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "serialNumber" + }, + "asset-instance-identifier": { + "id": "asset-instance-identifier", + "uml-id": "_yWCIcEQuEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 3, + "is-read-only": false, + "uml-name": "assetInstanceIdentifier" + }, + "equipment-type": { + "id": "equipment-type", + "uml-id": "_1KggkERBEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_BP8YcEQuEeasL6dcjI1vEA", + "order-number": 2, + "is-read-only": false, + "uml-name": "_equipmentType" + }, + "description": { + "id": "description", + "uml-id": "_-5svQEQsEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "description" + }, + "model-identifier": { + "id": "model-identifier", + "uml-id": "_oUmxsEQsEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "modelIdentifier" + }, + "part-type-identifier": { + "id": "part-type-identifier", + "uml-id": "_3ypNAEQsEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 3, + "is-read-only": false, + "uml-name": "partTypeIdentifier" + }, + "type-name": { + "id": "type-name", + "uml-id": "_j105QEQsEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 4, + "is-read-only": false, + "uml-name": "typeName" + }, + "version": { + "id": "version", + "uml-id": "_mig3EEQuEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 5, + "is-read-only": false, + "uml-name": "version" + }, + "holder-structure": { + "id": "holder-structure", + "uml-id": "_U93mQEc8EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_0U3TwEc7EeasL6dcjI1vEA", + "order-number": 7, + "is-read-only": false, + "uml-name": "_holderStructure" + }, + "holder-category": { + "id": "holder-category", + "uml-id": "_r240kERLEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_0K-KoERLEeasL6dcjI1vEA", + "order-number": 1, + "is-read-only": false, + "uml-name": "holderCategory", + "controlType": [ + "slot" + ] + }, + "is-captive": { + "id": "is-captive", + "uml-id": "_4XbukERMEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": false, + "uml-name": "isCaptive", + "controlType": "checkbox" + }, + "is-guided": { + "id": "is-guided", + "uml-id": "_-1CEIERMEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 3, + "is-read-only": false, + "uml-name": "isGuided", + "controlType": "checkbox" + }, + "is-quantised-space": { + "id": "is-quantised-space", + "uml-id": "_Lj7_sERNEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": false, + "uml-name": "isQuantisedSpace", + "controlType": "checkbox" + }, + "manufactured-thing": { + "id": "manufactured-thing", + "uml-id": "_XtDuokRCEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_GgBQUERBEeasL6dcjI1vEA", + "order-number": 4, + "is-read-only": false, + "uml-name": "_manufacturedThing" + }, + "manufacturer-properties": { + "id": "manufacturer-properties", + "uml-id": "_gdoY8EQtEeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the properties of the manufacturer." + ], + "uml-name": "ManufacturerProperties" + }, + "operator-augmented-equipment-type": { + "id": "operator-augmented-equipment-type", + "uml-id": "_Yw99EEc_EeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents the invariant properties of the equipment asset allocated by the operator that define and characterise the type." + ], + "uml-name": "OperatorAugmentedEquipmentType" + }, + "manufacturer-identifier": { + "id": "manufacturer-identifier", + "uml-id": "_VTQLMEQtEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "manufacturerIdentifier" + }, + "manufacturer-name": { + "id": "manufacturer-name", + "uml-id": "_cC-A8EQsEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "manufacturerName" + }, + "mechanical-features": { + "id": "mechanical-features", + "uml-id": "_X1TkUkRFEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_qZGr8EQfEeasL6dcjI1vEA", + "order-number": 6, + "is-read-only": false, + "uml-name": "_mechanicalFeatures" + }, + "asset-type-identifier": { + "id": "asset-type-identifier", + "uml-id": "_uHNXkEQuEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_G1gboD4AEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "assetTypeIdentifier" + }, + "physical-characteristics": { + "id": "physical-characteristics", + "uml-id": "_Kiw98URKEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_TsDsQEQfEeasL6dcjI1vEA", + "order-number": 10, + "is-read-only": false, + "uml-name": "_physicalCharacteristics" + }, + "weight-characeristics": { + "id": "weight-characeristics", + "uml-id": "_87dRMEQ9EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "weightCharaceristics" + }, + "fire-characteristics": { + "id": "fire-characteristics", + "uml-id": "__oPnkEQ9EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 2, + "is-read-only": false, + "uml-name": "fireCharacteristics" + }, + "materials": { + "id": "materials", + "uml-id": "_BoTa0EQ-EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 3, + "is-read-only": false, + "uml-name": "materials" + }, + "physical-rating": { + "id": "physical-rating", + "uml-id": "_EjPzoUdMEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_SRtkMEdLEeasL6dcjI1vEA", + "order-number": 8, + "is-read-only": false, + "uml-name": "_physicalRating" + }, + "thermal-rating": { + "id": "thermal-rating", + "uml-id": "_fDkGEEdLEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "thermalRating" + }, + "power-rating": { + "id": "power-rating", + "uml-id": "_i-N9wEdLEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 2, + "is-read-only": false, + "uml-name": "powerRating" + }, + "position": { + "id": "position", + "uml-id": "_4DkhskddEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_FWDLAERWEeasL6dcjI1vEA", + "order-number": 1, + "is-read-only": false, + "uml-name": "_position" + }, + "relative-position": { + "id": "relative-position", + "uml-id": "_U_6mYERXEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "relativePosition" + }, + "spatial-properties-of-type": { + "id": "spatial-properties-of-type", + "uml-id": "_bAAS0kRSEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_LAvh8EQfEeasL6dcjI1vEA", + "order-number": 3, + "is-read-only": false, + "uml-name": "_spatialPropertiesOfType" + }, + "height": { + "id": "height", + "uml-id": "_k_CVUEQyEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 1, + "is-read-only": false, + "uml-name": "height" + }, + "width": { + "id": "width", + "uml-id": "_n6nVoEQyEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 2, + "is-read-only": false, + "uml-name": "width" + }, + "length": { + "id": "length", + "uml-id": "_uIPVgEQyEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 3, + "is-read-only": false, + "uml-name": "length" + }, + "swapability": { + "id": "swapability", + "uml-id": "_wwGXEUc8EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_kr_E8Ec8EeasL6dcjI1vEA", + "order-number": 11, + "is-read-only": false, + "uml-name": "_swapability" + }, + "is-hot-swappable": { + "id": "is-hot-swappable", + "uml-id": "_yb3zEEQgEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 1, + "is-read-only": false, + "uml-name": "isHotSwappable", + "controlType": "checkbox" + }, + "cable": { + "id": "cable", + "uml-id": "_8SXNbD-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Basic model representing a cable with connectors fitted where the cable is short (e.g. patch cord, in-station cabling). This is intentionally a very basic representation of a cable. In a more sophisticated representation cable ends might be represented that then associate to the attached connector. At this point it is assumed that the basic model is sufficient." + ], + "uml-name": "Cable" + }, + "connector": { + "id": "connector", + "uml-id": "_8SXNcD-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents a connector that may be fully exposed (e.g. to plug in a cable or on the end of a cable) or partially exposed (e.g. backplane to plug in another piece of equipment such as a module)." + ], + "uml-name": "Connector" + }, + "pin": { + "id": "pin", + "uml-id": "_8SXNnT-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "An individual physical connection point (male or female). May be capable of carrying electrical or optical signals. A pin may have more than one wire/fiber attached but is such that all attached things get exactly the same signal set." + ], + "uml-name": "Pin" + }, + "orientation": { + "id": "orientation", + "uml-id": "_DKSfwGpCEeaBUOurxzA2sw", + "uml-type": "ownedAttribute", + "type": "_y2WM8EQ-EeasL6dcjI1vEA", + "order-number": 2, + "is-read-only": false, + "uml-name": "orientation", + "controlType": [ + "male", + "female", + "symmetric-neutral" + ] + }, + "pin-layout": { + "id": "pin-layout", + "uml-id": "_Fzd-QEQ_EeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The structuring of pins in a connector." + ], + "uml-name": "PinLayout" + }, + "connector-type": { + "id": "connector-type", + "uml-id": "_NBXLMEgXEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_aL8EoGnNEeaBUOurxzA2sw", + "order-number": 8, + "is-read-only": false, + "uml-name": "connectorType" + }, + "equipment": { + "id": "equipment", + "uml-id": "_8SXNej-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents any relevant physical thing. Can be either field replaceable or not field replaceable. Note: The model is currently constrained to inside plant." + ], + "uml-name": "Equipment" + }, + "contained-holder": { + "id": "contained-holder", + "uml-id": "_ayDQMj-NEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_8SXNjj-HEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "_containedHolder" + }, + "exposed-cable": { + "id": "exposed-cable", + "uml-id": "_Fy4CYj-fEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_8SXNbD-HEeaRI-H69PghuA", + "order-number": 3, + "is-read-only": false, + "uml-name": "_exposedCable" + }, + "mechanicall-functions": { + "id": "mechanicall-functions", + "uml-id": "_-Ci-o0RJEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_KxkFYEQ-EeasL6dcjI1vEA", + "order-number": 9, + "is-read-only": false, + "uml-name": "_mechanicallFunctions" + }, + "is-field-replaceable": { + "id": "is-field-replaceable", + "uml-id": "_f1p94D-WEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 14, + "is-read-only": true, + "description": [ + "Indicates whether or not the equipment can be removed and replaced in the field (i.e. in a deployment) by normal operations personnel." + ], + "uml-name": "isFieldReplaceable", + "controlType": "checkbox" + }, + "function-block": { + "id": "function-block", + "uml-id": "_8SXNfj-HEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_8SXNiz-HEeaRI-H69PghuA", + "order-number": 15, + "is-read-only": false, + "uml-name": "_functionBlock" + }, + "expected-equipment": { + "id": "expected-equipment", + "uml-id": "_8SXNfz-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular place . The expected equipment will state the type and may constrain any other invariant properties. It may also provide desired ranges for dynami properties." + ], + "uml-name": "ExpectedEquipment" + }, + "actual-equipment": { + "id": "actual-equipment", + "uml-id": "_8SXNZD-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The equipment that is actually present in the physical network. It will expose all dynamic properties and some critical static properties." + ], + "uml-name": "ActualEquipment" + }, + "holder": { + "id": "holder", + "uml-id": "_8SXNjj-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents a space in an equipment in which another equipment can be fitted in the field." + ], + "uml-name": "Holder" + }, + "occupying-fru": { + "id": "occupying-fru", + "uml-id": "_X1q3Qj-QEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_8SXNej-HEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "description": [ + "The FRU that is occupying the holder. A holder may be unoccupied. An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here)." + ], + "uml-name": "_occupyingFru" + }, + "holder-location": { + "id": "holder-location", + "uml-id": "_l6LE4ERTEeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_A15msMDaEeWbqPZwR-Ot6A", + "order-number": 5, + "is-read-only": false, + "uml-name": "holderLocation" + }, + "supported-equipment": { + "id": "supported-equipment", + "uml-id": "_RKzmokg0EeasL6dcjI1vEA", + "uml-type": "ownedAttribute", + "type": "_Ghvk8EguEeasL6dcjI1vEA", + "order-number": 9, + "is-read-only": false, + "uml-name": "_supportedEquipment" + }, + "expected-holder": { + "id": "expected-holder", + "uml-id": "_MEUpIEmhEeaDccCv6BIgdg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment." + ], + "uml-name": "ExpectedHolder" + }, + "actual-holder": { + "id": "actual-holder", + "uml-id": "_NwJ40EmhEeaDccCv6BIgdg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A holder in the ActualEquipment." + ], + "uml-name": "ActualHolder" + }, + "pin-group": { + "id": "pin-group", + "uml-id": "_8SXNrj-HEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_8SXNnj-HEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "uml-name": "_pinGroup" + }, + "port": { + "id": "port", + "uml-id": "_8SXNpD-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A conceptual access point for a group of signals (where that group of signals cannot be separated)." + ], + "uml-name": "Port" + }, + "signal-ref-pt": { + "id": "signal-ref-pt", + "uml-id": "_8SXNrz-HEeaRI-H69PghuA", + "uml-type": "ownedAttribute", + "type": "_8SXNqz-HEeaRI-H69PghuA", + "order-number": 2, + "is-read-only": false, + "uml-name": "_signalRefPt" + }, + "elemental-signals": { + "id": "elemental-signals", + "uml-id": "_B4oXwEddEeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The elemental (sub-atomic) parts of an indivisible signal where processing in the LTP is required to extract the elemental signals." + ], + "uml-name": "ElementalSignals" + }, + "signal-ref-pt-group": { + "id": "signal-ref-pt-group", + "uml-id": "_8SXNrT-HEeaRI-H69PghuA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A physical indivisible group of signals." + ], + "uml-name": "SignalRefPtGroup" + }, + "group-of-pins": { + "id": "group-of-pins", + "uml-id": "_uMSwAEdcEeasL6dcjI1vEA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "A group of pins from one or more connectors relevant for some purpose." + ], + "uml-name": "GroupOfPins" + }, + "port-role": { + "id": "port-role", + "uml-id": "_DUU_sGZ_EeWrX_JIGzXlSg", + "uml-type": "uml:DataType", + "description": [ + "The role of a port in the context of the function of the forwarding entity that it bounds." + ], + "uml-name": "PortRole" + }, + "protection-type": { + "id": "protection-type", + "uml-id": "_c3Hu8Gb3EeWrX_JIGzXlSg", + "uml-type": "uml:DataType", + "description": [ + "Identifies the type of protection of an FcSwitch." + ], + "uml-name": "ProtectionType" + }, + "date-and-time": { + "id": "date-and-time", + "uml-id": "_oGqi1lLNEeO75dO39GbF8Q", + "uml-type": "uml:DataType", + "description": [ + "This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000 .. 9999 year MM 01 .. 12 month dd 01 .. 31 day hh 00 .. 23 hour mm 00 .. 59 minute ss 00 .. 59 second s .0 .. .9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00 .. 23 time zone difference in hours Mm 00 .. 59 time zone difference in minutes." + ], + "uml-name": "DateAndTime" + }, + "to-be-defined": { + "id": "to-be-defined", + "uml-id": "_aL8EoGnNEeaBUOurxzA2sw", + "uml-type": "uml:DataType", + "description": [ + "This type is used when the actual type of the attrbute is expected to be complex but where the type has not yet been developed. This type should only be used for attributes that are experimental." + ], + "uml-name": "ToBeDefined" + }, + "name-and-value": { + "id": "name-and-value", + "uml-id": "_y7oy8I3tEeO38ZmbECnvbg", + "uml-type": "uml:DataType", + "description": [ + "A scoped name-value pair." + ], + "uml-name": "NameAndValue" + }, + "value-name": { + "id": "value-name", + "uml-id": "_77PyQI3tEeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "The name of the value. The value need not have a name." + ], + "uml-name": "valueName", + "controlType": "text" + }, + "value": { + "id": "value", + "uml-id": "_cbx2gI30EeO38ZmbECnvbg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "The specific value of the universal id." + ], + "uml-name": "value", + "controlType": "text" + }, + "universal-id": { + "id": "universal-id", + "uml-id": "_SU3Q4I30EeO38ZmbECnvbg", + "uml-type": "uml:DataType", + "description": [ + "The universal ID value where the mechanism for generation is defined by some authority not directly referenced in the structure. A example structure is [IETF RFC4122]." + ], + "uml-name": "UniversalId" + }, + "address": { + "id": "address", + "uml-id": "_A15msMDaEeWbqPZwR-Ot6A", + "uml-type": "uml:DataType", + "description": [ + "A description of location via a hierarchy of narrowing contexts." + ], + "uml-name": "Address" + }, + "address-name": { + "id": "address-name", + "uml-id": "_W76bkMDaEeWbqPZwR-Ot6A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "The name of the address (to allow the specific hierarchy to be distinguished from others for the same entity)." + ], + "uml-name": "addressName", + "controlType": "text" + }, + "address-element": { + "id": "address-element", + "uml-id": "_M_WWsMDYEeWbqPZwR-Ot6A", + "uml-type": "uml:DataType", + "description": [ + "One element of a hierarchy of elements. Note that the element must have one and only one value chosen from a list of potential value types." + ], + "uml-name": "AddressElement" + }, + "local-id-and-class": { + "id": "local-id-and-class", + "uml-id": "_dCdzAMDuEeWbqPZwR-Ot6A", + "uml-type": "uml:DataType", + "description": [ + "The localId and the class of entity that it identifies." + ], + "uml-name": "LocalIdAndClass" + }, + "class-of-instance": { + "id": "class-of-instance", + "uml-id": "_NBaUwMDvEeWbqPZwR-Ot6A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "The class to which the name refers." + ], + "uml-name": "classOfInstance", + "controlType": "text" + }, + "name-and-class": { + "id": "name-and-class", + "uml-id": "_XUarEMDuEeWbqPZwR-Ot6A", + "uml-type": "uml:DataType", + "description": [ + "The name and the class of entity that it names." + ], + "uml-name": "NameAndClass" + }, + "address-element-name": { + "id": "address-element-name", + "uml-id": "_3mdl0MpUEeWSlYzRfsq8lQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "The name of the address element (e.g. shelf as an element of a shelf/slot/port addressing scheme). The remainder of the structure has the reference for the shelf." + ], + "uml-name": "addressElementName", + "controlType": "text" + }, + "arbitrary-element": { + "id": "arbitrary-element", + "uml-id": "_nPsCsMDzEeWbqPZwR-Ot6A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 5, + "is-read-only": false, + "description": [ + "Where the element is from some external model that is not formally represented in this model." + ], + "uml-name": "arbitraryElement", + "controlType": "text" + }, + "2-wp-c8-ec7-ee-wxh-l2-b6-peg6-a": { + "id": "2-wp-c8-ec7-ee-wxh-l2-b6-peg6-a", + "uml-id": "_2WpC8EC7EeWxhL2B6Peg6A", + "enum": [ + "BIDIRECTIONAL", + "INPUT", + "OUTPUT", + "UNIDENTIFIED_OR_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "The orientation of flow at the Port of a Forwarding entity" + ], + "uml-name": "_2WpC8EC7EeWxhL2B6Peg6A" + }, + "d-v67-aec8-ee-wxh-l2-b6-peg6-a": { + "id": "d-v67-aec8-ee-wxh-l2-b6-peg6-a", + "uml-id": "_dV67AEC8EeWxhL2B6Peg6A", + "enum": [ + "BIDIRECTIONAL", + "UNIDIRECTIONAL", + "UNDEFINED_OR_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "The directionality of a Forwarding entity." + ], + "uml-name": "_dV67AEC8EeWxhL2B6Peg6A" + }, + "rwilyeda-ee-w-qe-o-kb-n-up-p9-a": { + "id": "rwilyeda-ee-w-qe-o-kb-n-up-p9-a", + "uml-id": "_RWILYEDAEeWQeOKbNUpP9A", + "enum": [ + "BIDIRECTIONAL", + "SINK", + "SOURCE", + "UNDEFINED_OR_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "The directionality of a termination entity." + ], + "uml-name": "_RWILYEDAEeWQeOKbNUpP9A" + }, + "t5-gyk-edn-ee-w-qe-o-kb-n-up-p9-a": { + "id": "t5-gyk-edn-ee-w-qe-o-kb-n-up-p9-a", + "uml-id": "_T5GykEDNEeWQeOKbNUpP9A", + "enum": [ + "CONTRA_DIRECTION_SINK", + "CONTRA_DIRECTION_SOURCE" + ], + "is-read-only": false, + "description": [ + "Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP." + ], + "uml-name": "_T5GykEDNEeWQeOKbNUpP9A" + }, + "6-an-g8-ge-e-ee-wmg-iw-ai-zl-ykq": { + "id": "6-an-g8-ge-e-ee-wmg-iw-ai-zl-ykq", + "uml-id": "_6anG8GeEEeWmgIwAIZlYKQ", + "enum": [ + "LP_CAN_NEVER_TERMINATE", + "LT_NOT_TERMINATED", + "TERMINATED_SERVER_TO_CLIENT_FLOW", + "TERMINATED_CLIENT_TO_SERVER_FLOW", + "TERMINATED_BIDIRECTIONAL", + "LT_PERMENANTLY_TERMINATED", + "TERMINATION_STATE_UNKNOWN" + ], + "is-read-only": false, + "description": [ + "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated." + ], + "uml-name": "_6anG8GeEEeWmgIwAIZlYKQ" + }, + "sthcg-ci-eea-g-gv-axx-se1-u-a": { + "id": "sthcg-ci-eea-g-gv-axx-se1-u-a", + "uml-id": "_sthcgCi-EeaGGvAxxSe1uA", + "enum": [ + "WAIT_TO_REVERT", + "SIGNAL_DEGRADE", + "SIGNAL_FAIL" + ], + "is-read-only": false, + "description": [ + "The cause of the current protection state." + ], + "uml-name": "_sthcgCi-EeaGGvAxxSe1uA" + }, + "y-i-kvs-mog-ee-ww-z527-phf-fsa": { + "id": "y-i-kvs-mog-ee-ww-z527-phf-fsa", + "uml-id": "_yIKvsMOGEeWwZ527PhfFSA", + "enum": [ + "LOCK_OUT" + ], + "is-read-only": false, + "description": [ + "Possible degrees of administrative control applied to the Route selection." + ], + "uml-name": "_yIKvsMOGEeWwZ527PhfFSA" + }, + "csw-hk-ci-eea-g-gv-axx-se1-u-a": { + "id": "csw-hk-ci-eea-g-gv-axx-se1-u-a", + "uml-id": "_cswHkCi-EeaGGvAxxSe1uA", + "enum": [], + "is-read-only": false, + "description": [ + "The cause of the current route selection." + ], + "uml-name": "_cswHkCi-EeaGGvAxxSe1uA" + }, + "e-7-dymof-ee-ww-z527-phf-fsa": { + "id": "e-7-dymof-ee-ww-z527-phf-fsa", + "uml-id": "_e-7DYMOFEeWwZ527PhfFSA", + "enum": [ + "NORMAL", + "MANUAL", + "FORCED" + ], + "is-read-only": false, + "uml-name": "_e-7DYMOFEeWwZ527PhfFSA" + }, + "z-r-kl-i-ci9-eea-g-gv-axx-se1-u-a": { + "id": "z-r-kl-i-ci9-eea-g-gv-axx-se1-u-a", + "uml-id": "_zRKlICi9EeaGGvAxxSe1uA", + "enum": [], + "is-read-only": false, + "description": [ + "Explains the reason for the current switch state." + ], + "uml-name": "_zRKlICi9EeaGGvAxxSe1uA" + }, + "o-gqjf1-ln-ee-o75-d-o39-gb-f8-q": { + "id": "o-gqjf1-ln-ee-o75-d-o39-gb-f8-q", + "uml-id": "_oGqjf1LNEeO75dO39GbF8Q", + "enum": [ + "REVERTIVE", + "NON-REVERTIVE" + ], + "is-read-only": false, + "description": [ + "The reversion mode associated with protection." + ], + "uml-name": "_oGqjf1LNEeO75dO39GbF8Q" + }, + "l-nclk-l-et-ee-sz-ud-yf-p-sdgew": { + "id": "l-nclk-l-et-ee-sz-ud-yf-p-sdgew", + "uml-id": "_lNclkLEtEeSZUdYfPSdgew", + "enum": [ + "DISABLED", + "ENABLED" + ], + "is-read-only": false, + "description": [ + "The possible values of the operationalState." + ], + "uml-name": "_lNclkLEtEeSZUdYfPSdgew" + }, + "kskoyl-eu-ee-sz-ud-yf-p-sdgew": { + "id": "kskoyl-eu-ee-sz-ud-yf-p-sdgew", + "uml-id": "_KSKOYLEuEeSZUdYfPSdgew", + "enum": [ + "LOCKED", + "UNLOCKED" + ], + "is-read-only": false, + "description": [ + "The possible values of the administrativeState." + ], + "uml-name": "_KSKOYLEuEeSZUdYfPSdgew" + }, + "-x-pe-al-ev-ee-sz-ud-yf-p-sdgew": { + "id": "-x-pe-al-ev-ee-sz-ud-yf-p-sdgew", + "uml-id": "_-xPeALEvEeSZUdYfPSdgew", + "enum": [ + "UNLOCK", + "LOCK_PASSIVE", + "LOCK_ACTIVE", + "LOCK_IMMEDIATE" + ], + "is-read-only": false, + "description": [ + "The possible values of the current target administrative state.", + "Reflects the current control action when the entity is not in the desired state." + ], + "uml-name": "_-xPeALEvEeSZUdYfPSdgew" + }, + "mcyhc-gge-ee-wmg-iw-ai-zl-ykq": { + "id": "mcyhc-gge-ee-wmg-iw-ai-zl-ykq", + "uml-id": "_McyhcGgeEeWmgIwAIZlYKQ", + "enum": [ + "SHUTTING_DOWN_ACTIVE", + "SHUTTING_DOWN_PASSIVE" + ], + "is-read-only": false, + "description": [ + "Possible extensions to AdministrativeState." + ], + "uml-name": "_McyhcGgeEeWmgIwAIZlYKQ" + }, + "y-ssbo-ggi-ee-wmg-iw-ai-zl-ykq": { + "id": "y-ssbo-ggi-ee-wmg-iw-ai-zl-ykq", + "uml-id": "_YSsboGgiEeWmgIwAIZlYKQ", + "enum": [ + "PLANNED", + "POTENTIAL", + "INSTALLED", + "PENDING_REMOVAL" + ], + "is-read-only": false, + "description": [ + "The possible values of the lifecycleState." + ], + "uml-name": "_YSsboGgiEeWmgIwAIZlYKQ" + }, + "lj-ul4-d3-w-eea-ri-h69-pghu-a": { + "id": "lj-ul4-d3-w-eea-ri-h69-pghu-a", + "uml-id": "_ljUl4D3WEeaRI-H69PghuA", + "enum": [ + "CREATE_POST_ADD", + "SET_UPDATE_PUT_MODIFY_WRITE_ADD", + "GET_READ", + "DELETE_REMOVE" + ], + "is-read-only": false, + "uml-name": "_ljUl4D3WEeaRI-H69PghuA" + }, + "iyt74-d3-k-eea-ri-h69-pghu-a": { + "id": "iyt74-d3-k-eea-ri-h69-pghu-a", + "uml-id": "_IYT74D3kEeaRI-H69PghuA", + "enum": [ + "STRUCTURE_IS_NOT", + "NEW_STRUCTURE_AND_VALUES", + "INCREMENTAL_STRUCTURE_AND_VALUES", + "ONLY_VALUES_IN_EXISTING_STRUCTURE", + "DEFINED_BY_VERB" + ], + "is-read-only": false, + "uml-name": "_IYT74D3kEeaRI-H69PghuA" + }, + "l4-y9-qe2-d-eea-gxd-x-ei-nf4-t-a": { + "id": "l4-y9-qe2-d-eea-gxd-x-ei-nf4-t-a", + "uml-id": "_L4Y9QE2DEeaGxdXEiNf4tA", + "enum": [ + "BEST_EFFORT", + "EXACT_MATCH" + ], + "is-read-only": false, + "uml-name": "_L4Y9QE2DEeaGxdXEiNf4tA" + }, + "nd-xvme2-d-eea-gxd-x-ei-nf4-t-a": { + "id": "nd-xvme2-d-eea-gxd-x-ei-nf4-t-a", + "uml-id": "_ndXVME2DEeaGxdXEiNf4tA", + "enum": [ + "NO_PAUSE_POSSIBLE" + ], + "is-read-only": false, + "uml-name": "_ndXVME2DEeaGxdXEiNf4tA" + }, + "y2-wm8-eq-eeas-l6-dcj-i1-v-ea": { + "id": "y2-wm8-eq-eeas-l6-dcj-i1-v-ea", + "uml-id": "_y2WM8EQ-EeasL6dcjI1vEA", + "enum": [ + "MALE", + "FEMALE", + "SYMMETRIC_NEUTRAL" + ], + "is-read-only": false, + "description": [ + "Most connector schems are asymmetric such that there are two orientations of the connector where a mating is only possible between two connectors of different orientations. A multi-pin connector may have a mix of pin orientations. In this case it is expected that the dominant orientation of pin is chosen for the connector orientation." + ], + "uml-name": "_y2WM8EQ-EeasL6dcjI1vEA" + }, + "m-mo-bg-e-qv-eeas-l6-dcj-i1-v-ea": { + "id": "m-mo-bg-e-qv-eeas-l6-dcj-i1-v-ea", + "uml-id": "_mMOBgEQvEeasL6dcjI1vEA", + "enum": [ + "SUBRACK", + "CIRCUIT_PACK", + "SMALL_FORMFACTOR_PLUGGABLE", + "STAND_ALONE_UNIT", + "RACK" + ], + "is-read-only": false, + "description": [ + "The form of equipment." + ], + "uml-name": "_mMOBgEQvEeasL6dcjI1vEA" + }, + "0-k-ko-erl-eeas-l6-dcj-i1-v-ea": { + "id": "0-k-ko-erl-eeas-l6-dcj-i1-v-ea", + "uml-id": "_0K-KoERLEeasL6dcjI1vEA", + "enum": [ + "SLOT" + ], + "is-read-only": false, + "description": [ + "The form of holder." + ], + "uml-name": "_0K-KoERLEeasL6dcjI1vEA" + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json new file mode 100644 index 000000000..b8e4d4ab6 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json @@ -0,0 +1,602 @@ +{ + "schema-information": { + "otn-current-data": { + "id": "otn-current-data", + "uml-id": "_OxyHAOGJEeGhaeLtr7IxXg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance." + ], + "uml-name": "OTN_CurrentData" + }, + "timestamp": { + "id": "timestamp", + "uml-id": "_bGwfoOGJEeGhaeLtr7IxXg", + "uml-type": "ownedAttribute", + "type": "_X-HZUNwbEeGoneTbGt8X0A", + "order-number": 1, + "is-read-only": false, + "description": [ + "The timestamp associated with when the current data was collected." + ], + "uml-name": "timestamp" + }, + "otn-history-data": { + "id": "otn-history-data", + "uml-id": "_dQ2mYOGOEeGhaeLtr7IxXg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited." + ], + "uml-name": "OTN_HistoryData" + }, + "suspect-interval-flag": { + "id": "suspect-interval-flag", + "uml-id": "_M8IDNceIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 1, + "is-read-only": false, + "description": [ + "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period." + ], + "uml-name": "suspectIntervalFlag", + "controlType": "checkbox" + }, + "«q.822»-current-data": { + "id": "«q.822»-current-data", + "uml-id": "_M8IDMceIEeSfd5vyUJsimg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "«Q.822»-CurrentData" + }, + "elapsed-time": { + "id": "elapsed-time", + "uml-id": "_M8IDOMeIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": false, + "uml-name": "elapsedTime", + "controlType": "number" + }, + "«q.822»-history-data": { + "id": "«q.822»-history-data", + "uml-id": "_M8IDVMeIEeSfd5vyUJsimg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "«Q.822»-HistoryData" + }, + "history-data-id": { + "id": "history-data-id", + "uml-id": "_M8IDWMeIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "uml-name": "historyDataId", + "controlType": "text" + }, + "period-end-time": { + "id": "period-end-time", + "uml-id": "_M8IDWceIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": false, + "uml-name": "periodEndTime" + }, + "granularity-period": { + "id": "granularity-period", + "uml-id": "_M8IDWseIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "_Y6WUEEamEeabNPX3o7rjtw", + "order-number": 2, + "is-read-only": false, + "uml-name": "granularityPeriod", + "controlType": [ + "unknown", + "period-15-min", + "period-24-hours" + ] + }, + "«x.739»-scanner": { + "id": "«x.739»-scanner", + "uml-id": "_7wb90ceIEeSfd5vyUJsimg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "«X.739»-Scanner" + }, + "scanner-id": { + "id": "scanner-id", + "uml-id": "_7wb91ceIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "uml-name": "scannerId", + "controlType": "text" + }, + "administrative-state": { + "id": "administrative-state", + "uml-id": "_7wb92seIEeSfd5vyUJsimg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_KSKOYLEuEeSZUdYfPSdgew", + "order-number": 3, + "is-read-only": false, + "uml-name": "administrativeState" + }, + "«x.721»-top": { + "id": "«x.721»-top", + "uml-id": "_BMJ0EceTEeS6-cawxfHpnA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types." + ], + "uml-name": "«X.721»-Top" + }, + "object-class": { + "id": "object-class", + "uml-id": "_BMJ0FceTEeS6-cawxfHpnA", + "uml-type": "ownedAttribute", + "type": "_ltGzFMeUEeS6-cawxfHpnA", + "order-number": 1, + "is-read-only": false, + "description": [ + "ObjectClass ::= CHOICE{ globalForm [0] OBJECT IDENTIFIER, localForm [1] INTEGER}" + ], + "uml-name": "objectClass" + }, + "name-binding": { + "id": "name-binding", + "uml-id": "_BMJ0F8eTEeS6-cawxfHpnA", + "uml-type": "ownedAttribute", + "type": "_ltGzFMeUEeS6-cawxfHpnA", + "order-number": 2, + "is-read-only": false, + "uml-name": "nameBinding" + }, + "date-and-time": { + "id": "date-and-time", + "uml-id": "_X-HZUNwbEeGoneTbGt8X0A", + "uml-type": "uml:DataType", + "description": [ + "This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000 .. 9999 year MM 01 .. 12 month dd 01 .. 31 day hh 00 .. 23 hour mm 00 .. 59 minute ss 00 .. 59 second s .0 .. .9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00 .. 23 time zone difference in hours Mm 00 .. 59 time zone difference in minutes." + ], + "uml-name": "DateAndTime" + }, + "5-g6-yq-oo-ee-cj-nnlz-cc6-mew": { + "id": "5-g6-yq-oo-ee-cj-nnlz-cc6-mew", + "uml-id": "_5G6YQOo-EeCjNNLZCc6mew", + "enum": [ + "SINK", + "SOURCE", + "BIDIRECTIONAL" + ], + "is-read-only": false, + "description": [ + "The enumeration with the options for directionality of the termination point." + ], + "uml-name": "_5G6YQOo-EeCjNNLZCc6mew" + }, + "r-u8-a-m-opf-ee-cj-nnlz-cc6-mew": { + "id": "r-u8-a-m-opf-ee-cj-nnlz-cc6-mew", + "uml-id": "_rU8aMOpfEeCjNNLZCc6mew", + "enum": [ + "GCC1", + "GCC2", + "GCC1_AND_GCC2" + ], + "is-read-only": false, + "description": [ + "This enumeration indicates the GCC access represented by the entity." + ], + "uml-name": "_rU8aMOpfEeCjNNLZCc6mew" + }, + "w7-1-o-opi-ee-cj-nnlz-cc6-mew": { + "id": "w7-1-o-opi-ee-cj-nnlz-cc6-mew", + "uml-id": "_W7-1oOpiEeCjNNLZCc6mew", + "enum": [ + "ENABLED", + "DISABLED" + ], + "is-read-only": false, + "description": [ + "The list of valid operational states for the connection." + ], + "uml-name": "_W7-1oOpiEeCjNNLZCc6mew" + }, + "g0-z-cs-os-d-ee-cj-nnlz-cc6-mew": { + "id": "g0-z-cs-os-d-ee-cj-nnlz-cc6-mew", + "uml-id": "_g0zCsOsDEeCjNNLZCc6mew", + "enum": [ + "REVERTIVE", + "NON-REVERTIVE" + ], + "is-read-only": false, + "description": [ + "The operation type associated with the protection mechanism (either non-revertive or revertive)." + ], + "uml-name": "_g0zCsOsDEeCjNNLZCc6mew" + }, + "jl09-g-os-k-ee-cj-nnlz-cc6-mew": { + "id": "jl09-g-os-k-ee-cj-nnlz-cc6-mew", + "uml-id": "_Jl09gOsKEeCjNNLZCc6mew", + "enum": [ + "EXERCISE", + "MANUAL_SWITCH", + "FORCED_SWITCH", + "LOCKOUT", + "RELEASE_OF_MANUAL_SWITCH", + "RELEASE_OF_FORCED_SWITCH", + "RELEASE_OF_LOCKOUT" + ], + "is-read-only": false, + "description": [ + "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations." + ], + "uml-name": "_Jl09gOsKEeCjNNLZCc6mew" + }, + "bwx-bq-ow5-ee-cj-nnlz-cc6-mew": { + "id": "bwx-bq-ow5-ee-cj-nnlz-cc6-mew", + "uml-id": "_bwxBQOw5EeCjNNLZCc6mew", + "enum": [ + "UNLOCKED", + "LOCKED", + "SHUTTING_DOWN" + ], + "is-read-only": false, + "description": [ + "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100." + ], + "uml-name": "_bwxBQOw5EeCjNNLZCc6mew" + }, + "ch-q5-o-ow-ee-cj-nnlz-cc6-mew": { + "id": "ch-q5-o-ow-ee-cj-nnlz-cc6-mew", + "uml-id": "_ChQ5oOw-EeCjNNLZCc6mew", + "enum": [ + "2.5_G", + "10_G", + "40_G", + "100_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ], + "uml-name": "_ChQ5oOw-EeCjNNLZCc6mew" + }, + "z-bty-u-ow-ee-cj-nnlz-cc6-mew": { + "id": "z-bty-u-ow-ee-cj-nnlz-cc6-mew", + "uml-id": "_ZBtyUOw_EeCjNNLZCc6mew", + "enum": [ + "DAPI", + "SAPI", + "BOTH" + ], + "is-read-only": false, + "description": [ + "List of modes for trace identifier mismatch detection." + ], + "uml-name": "_ZBtyUOw_EeCjNNLZCc6mew" + }, + "hf864-ox-a-ee-cj-nnlz-cc6-mew": { + "id": "hf864-ox-a-ee-cj-nnlz-cc6-mew", + "uml-id": "_HF864OxAEeCjNNLZCc6mew", + "enum": [ + "LOS_P", + "OCI", + "SSF_P", + "SSF_O", + "SSF", + "TIM", + "DEG", + "BDI" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ], + "uml-name": "_HF864OxAEeCjNNLZCc6mew" + }, + "w-po-no-o3-e-ee-cj-nnlz-cc6-mew": { + "id": "w-po-no-o3-e-ee-cj-nnlz-cc6-mew", + "uml-id": "_WPoNoO3eEeCjNNLZCc6mew", + "enum": [ + "INTRUSIVE", + "NON-INTRUSIVE" + ], + "is-read-only": false, + "description": [ + "Monitoring types for the tandem connection monitoring function." + ], + "uml-name": "_WPoNoO3eEeCjNNLZCc6mew" + }, + "oi-7-w-o6-q-ee-cj-nnlz-cc6-mew": { + "id": "oi-7-w-o6-q-ee-cj-nnlz-cc6-mew", + "uml-id": "_OI-7wO6QEeCjNNLZCc6mew", + "enum": [ + "OPERATIONAL", + "TRANSPARENT", + "MONITOR" + ], + "is-read-only": false, + "description": [ + "List of value modes for the sink side of the tandem connection monitoring function." + ], + "uml-name": "_OI-7wO6QEeCjNNLZCc6mew" + }, + "zn-m8-c-o6-z-ee-cj-nnlz-cc6-mew": { + "id": "zn-m8-c-o6-z-ee-cj-nnlz-cc6-mew", + "uml-id": "_ZnM8cO6ZEeCjNNLZCc6mew", + "enum": [ + "40_G", + "100_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ], + "uml-name": "_ZnM8cO6ZEeCjNNLZCc6mew" + }, + "p-v-f8-o6-a-ee-cj-nnlz-cc6-mew": { + "id": "p-v-f8-o6-a-ee-cj-nnlz-cc6-mew", + "uml-id": "_pV-F8O6aEeCjNNLZCc6mew", + "enum": [ + "LOS", + "LOL" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ], + "uml-name": "_pV-F8O6aEeCjNNLZCc6mew" + }, + "qw1-syo6-b-ee-cj-nnlz-cc6-mew": { + "id": "qw1-syo6-b-ee-cj-nnlz-cc6-mew", + "uml-id": "_QW1SYO6bEeCjNNLZCc6mew", + "enum": [ + "LOS" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ], + "uml-name": "_QW1SYO6bEeCjNNLZCc6mew" + }, + "o-ouk-o6-b-ee-cj-nnlz-cc6-mew": { + "id": "o-ouk-o6-b-ee-cj-nnlz-cc6-mew", + "uml-id": "_o-oukO6bEeCjNNLZCc6mew", + "enum": [ + "2.5_G", + "10_G", + "40_G", + "2.5_10_G", + "10_40_G", + "2.5_10_40_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ], + "uml-name": "_o-oukO6bEeCjNNLZCc6mew" + }, + "krcg4-o6-d-ee-cj-nnlz-cc6-mew": { + "id": "krcg4-o6-d-ee-cj-nnlz-cc6-mew", + "uml-id": "_KRCG4O6dEeCjNNLZCc6mew", + "enum": [ + "INTRA_DOMAIN", + "INTER_DOMAIN" + ], + "is-read-only": false, + "description": [ + "This enumeration provides the options for the interface associated with OTMn." + ], + "uml-name": "_KRCG4O6dEeCjNNLZCc6mew" + }, + "eo-py-io6-q-ee-cj-nnlz-cc6-mew": { + "id": "eo-py-io6-q-ee-cj-nnlz-cc6-mew", + "uml-id": "_EOPyIO6qEeCjNNLZCc6mew", + "enum": [ + "INTRA_OFFICE", + "SHORTHAUL", + "LONGHAUL" + ], + "is-read-only": false, + "description": [ + "The valid options for reach of the optical cable." + ], + "uml-name": "_EOPyIO6qEeCjNNLZCc6mew" + }, + "6-bt3-qo6-q-ee-cj-nnlz-cc6-mew": { + "id": "6-bt3-qo6-q-ee-cj-nnlz-cc6-mew", + "uml-id": "_6Bt3QO6qEeCjNNLZCc6mew", + "enum": [ + "ON", + "OFF" + ], + "is-read-only": false, + "description": [ + "The enumeration of the options for the Automatic Power Reduction Status." + ], + "uml-name": "_6Bt3QO6qEeCjNNLZCc6mew" + }, + "f-lz-nqo6-v-ee-cj-nnlz-cc6-mew": { + "id": "f-lz-nqo6-v-ee-cj-nnlz-cc6-mew", + "uml-id": "_FLzNQO6vEeCjNNLZCc6mew", + "enum": [ + "BDI_P", + "BDI_O", + "BDI", + "TIM", + "LOS_P", + "LOS_O", + "LOS" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ], + "uml-name": "_FLzNQO6vEeCjNNLZCc6mew" + }, + "na-el-yo6-w-ee-cj-nnlz-cc6-mew": { + "id": "na-el-yo6-w-ee-cj-nnlz-cc6-mew", + "uml-id": "_NAElYO6wEeCjNNLZCc6mew", + "enum": [ + "REGULAR", + "NONE", + "VENDOR_SPECIFIC", + "FUNCTIONALLY_STANDARDIZED" + ], + "is-read-only": false, + "description": [ + "The adaptation options for OTUk_ConnectionTermationPoints." + ], + "uml-name": "_NAElYO6wEeCjNNLZCc6mew" + }, + "wg-r-hc-o6-w-ee-cj-nnlz-cc6-mew": { + "id": "wg-r-hc-o6-w-ee-cj-nnlz-cc6-mew", + "uml-id": "_wgRHcO6wEeCjNNLZCc6mew", + "enum": [ + "2.5_G", + "10_G", + "40_G", + "100_G" + ], + "is-read-only": false, + "description": [ + "Provides an enumeration with the meaning of each k value." + ], + "uml-name": "_wgRHcO6wEeCjNNLZCc6mew" + }, + "6-y-g-eo6-w-ee-cj-nnlz-cc6-mew": { + "id": "6-y-g-eo6-w-ee-cj-nnlz-cc6-mew", + "uml-id": "_6Y_gEO6wEeCjNNLZCc6mew", + "enum": [ + "LOF", + "AIS", + "LOM" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ], + "uml-name": "_6Y_gEO6wEeCjNNLZCc6mew" + }, + "x-hnwmo6-x-ee-cj-nnlz-cc6-mew": { + "id": "x-hnwmo6-x-ee-cj-nnlz-cc6-mew", + "uml-id": "_xHNWMO6xEeCjNNLZCc6mew", + "enum": [ + "TIM", + "DEG", + "BDI", + "SSF" + ], + "is-read-only": false, + "description": [ + "The valid list of problems for the entity." + ], + "uml-name": "_xHNWMO6xEeCjNNLZCc6mew" + }, + "krq3-mk8-k-ee-g-z-yhf-u3-o-m-yg": { + "id": "krq3-mk8-k-ee-g-z-yhf-u3-o-m-yg", + "uml-id": "_KRQ3MK8KEeG_zYhfU3oMYg", + "enum": [ + "SINK", + "SOURCE" + ], + "is-read-only": false, + "description": [ + "The enumeration with the options for directionality for nonintrusive monitoring." + ], + "uml-name": "_KRQ3MK8KEeG_zYhfU3oMYg" + }, + "q-bme4-lu-y-ee-geq-z-lpdv-u3-ba": { + "id": "q-bme4-lu-y-ee-geq-z-lpdv-u3-ba", + "uml-id": "_qBme4LuYEeGeqZLpdvU3BA", + "enum": [ + "PERCENTAGE", + "NUMBER_ERRORED_BLOCKS" + ], + "is-read-only": false, + "description": [ + "

The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.

" + ], + "uml-name": "_qBme4LuYEeGeqZLpdvU3BA" + }, + "parz8-nw-a-ee-gone-tb-gt8-x0-a": { + "id": "parz8-nw-a-ee-gone-tb-gt8-x0-a", + "uml-id": "_Parz8NwAEeGoneTbGt8X0A", + "enum": [ + "DWDM", + "CWDM", + "NO_WDM" + ], + "is-read-only": false, + "uml-name": "_Parz8NwAEeGoneTbGt8X0A" + }, + "v1-tu-a-nw-a-ee-gone-tb-gt8-x0-a": { + "id": "v1-tu-a-nw-a-ee-gone-tb-gt8-x0-a", + "uml-id": "_V1TuANwAEeGoneTbGt8X0A", + "enum": [ + "STANDARD", + "PROPRIETARY" + ], + "is-read-only": false, + "uml-name": "_V1TuANwAEeGoneTbGt8X0A" + }, + "yt7-s4-pzg-ee-g3-u-a-qk-ii-ctg": { + "id": "yt7-s4-pzg-ee-g3-u-a-qk-ii-ctg", + "uml-id": "_yt7S4PzgEeG3u-aQKIiCtg", + "enum": [ + "PATH", + "TCM1", + "TCM2", + "TCM3", + "TCM4", + "TCM5", + "TCM6", + "SECTION" + ], + "is-read-only": false, + "uml-name": "_yt7S4PzgEeG3u-aQKIiCtg" + }, + "lg3-y-qovv-ee-ky-u85-edu-w-r-a": { + "id": "lg3-y-qovv-ee-ky-u85-edu-w-r-a", + "uml-id": "_LG3yQOVVEeKyU85eduW_rA", + "enum": [ + "CONTROLLER", + "RESPONDER" + ], + "is-read-only": false, + "uml-name": "_LG3yQOVVEeKyU85eduW_rA" + }, + "7-fy9-s-jsc-ee-o-lx-kcui-ytz-cg": { + "id": "7-fy9-s-jsc-ee-o-lx-kcui-ytz-cg", + "uml-id": "_7fy9sJSCEeOLxKCUIYtzCg", + "enum": [ + "INCREASE_BW", + "DECREASE_BW" + ], + "is-read-only": false, + "uml-name": "_7fy9sJSCEeOLxKCUIYtzCg" + }, + "y6-wue-eam-eeab-npx3-o7-rjtw": { + "id": "y6-wue-eam-eeab-npx3-o7-rjtw", + "uml-id": "_Y6WUEEamEeabNPX3o7rjtw", + "enum": [ + "UNKNOWN", + "PERIOD_15MIN", + "PERIOD_24HOURS" + ], + "is-read-only": false, + "description": [ + "The enumeration with the options for granularity period of the performance data." + ], + "uml-name": "_Y6WUEEamEeabNPX3o7rjtw" + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json new file mode 100644 index 000000000..3d0a41424 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json @@ -0,0 +1,22 @@ +{ + "maintenancemode": { + "DragonWave-Z3":{ + "node":"DragonWave-Z3", + "filter": [{ + "definition":{}, + "description":"", + "start":"2018-01-01T10:00+00:00", + "end":"2018-10-10T10:00+00:00" + }] + }, + "MaintenanceMode":{ + "node":"MaintenanceMode", + "filter": [{ + "definition":{}, + "description":"", + "start":"2018-01-01T10:00+00:00", + "end":"2018-10-10T10:00+00:00" + }] + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json new file mode 100644 index 000000000..656863480 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json @@ -0,0 +1,3161 @@ +{ + "schema-information": { + "mw-air-interface-pac": { + "id": "mw-air-interface-pac", + "uml-id": "__1kQ0Hf4EeW-M8kopGJqEA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "MW_AirInterface_Pac" + }, + "layer-protocol": { + "id": "layer-protocol", + "uml-id": "_m_QIglpKEeax66gMnmfzpQ", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid" + ], + "uml-name": "_layerProtocol" + }, + "air-interface-capability-list": { + "id": "air-interface-capability-list", + "uml-id": "_-LlKoIejEeWaZYk7gpuOtw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes." + ], + "uml-name": "AirInterfaceCapability" + }, + "air-interface-configuration": { + "id": "air-interface-configuration", + "uml-id": "_KOcsUIe0EeWnUdmvl3PBkw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Configuration of the radio link." + ], + "uml-name": "AirInterfaceConfiguration" + }, + "air-interface-status": { + "id": "air-interface-status", + "uml-id": "_iCTioHmIEeWRAfnL3fvovg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Measurements of current values on the air interface and operational status of the device." + ], + "uml-name": "AirInterfaceStatus" + }, + "air-interface-current-problems": { + "id": "air-interface-current-problems", + "uml-id": "_UF8VcHmIEeWRAfnL3fvovg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "AirInterfaceCurrentProblems" + }, + "air-interface-current-performance": { + "id": "air-interface-current-performance", + "uml-id": "_CX-iIKS6EeWyu_jasKgNwA", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface at a particular moment." + ], + "uml-name": "AirInterfaceCurrentPerformance" + }, + "air-interface-historical-performances": { + "id": "air-interface-historical-performances", + "uml-id": "_fChNMHmHEeWRAfnL3fvovg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface for a pre-defined measurement interval." + ], + "uml-name": "AirInterfaceHistoricalPerformances" + }, + "type-of-equipment": { + "id": "type-of-equipment", + "uml-id": "_gK4jMJUBEeWIaZzoaYJ6_A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "description": [ + "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware." + ], + "uml-name": "typeOfEquipment", + "controlType": "text" + }, + "tx-frequency-min": { + "id": "tx-frequency-min", + "uml-id": "_90Xe0HfcEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the minimum transmit frequency tunable at the air interface." + ], + "uml-name": "txFrequencyMin", + "controlType": "number" + }, + "tx-frequency-max": { + "id": "tx-frequency-max", + "uml-id": "_-1ztsHfcEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the maximum transmit frequency tunable at the air interface." + ], + "uml-name": "txFrequencyMax", + "controlType": "number" + }, + "rx-frequency-min": { + "id": "rx-frequency-min", + "uml-id": "_BLqx0HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the minimum receive frequency tunable at the air interface." + ], + "uml-name": "rxFrequencyMin", + "controlType": "number" + }, + "rx-frequency-max": { + "id": "rx-frequency-max", + "uml-id": "_CSBV4HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Value of the maximum receive frequency tunable at the air interface." + ], + "uml-name": "rxFrequencyMax", + "controlType": "number" + }, + "adaptive-modulation-is-avail": { + "id": "adaptive-modulation-is-avail", + "uml-id": "_ClmuUHffEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": true, + "description": [ + "In case the device is capable of adaptive modulation, this field shall contain a 'true'." + ], + "uml-name": "adaptiveModulationIsAvail", + "controlType": "checkbox" + }, + "mimo-is-avail": { + "id": "mimo-is-avail", + "uml-id": "_qXBrkH2eEeWaPP5xsIT8pQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": true, + "description": [ + "In case the device is capable of MIMO, this field shall contain a 'true'." + ], + "uml-name": "mimoIsAvail", + "controlType": "checkbox" + }, + "mimo-channels": { + "id": "mimo-channels", + "uml-id": "_qysT4H2eEeWaPP5xsIT8pQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 8, + "is-read-only": true, + "unit": "channels", + "description": [ + "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration." + ], + "uml-name": "mimoChannels", + "controlType": "number" + }, + "alic-is-avail": { + "id": "alic-is-avail", + "uml-id": "_a3HgMIL9EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": true, + "description": [ + "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'." + ], + "uml-name": "alicIsAvail", + "controlType": "checkbox" + }, + "atpc-is-avail": { + "id": "atpc-is-avail", + "uml-id": "_iRRtgHftEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": true, + "description": [ + "In case the microwave radio is capable of ATPC, this field shall contain a 'true'." + ], + "uml-name": "atpcIsAvail", + "controlType": "checkbox" + }, + "atpc-range": { + "id": "atpc-range", + "uml-id": "_ErwNYHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 11, + "is-read-only": true, + "unit": "dB", + "description": [ + "Extent of the ATPC range." + ], + "uml-name": "atpcRange", + "controlType": "number" + }, + "encryption-is-avail": { + "id": "encryption-is-avail", + "uml-id": "_4uPM8E58EeaCk6G-lyG1OQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": true, + "description": [ + "Shall be marked 'true', if Ethernet payload encryption is available." + ], + "uml-name": "encryptionIsAvail", + "controlType": "checkbox" + }, + "transmission-mode-list": { + "id": "transmission-mode-list", + "uml-id": "_nwbvcPXREeW9zIqh2WHHww", + "uml-type": "ownedAttribute", + "type": "_zG34sPXQEeW9zIqh2WHHww", + "order-number": 5, + "is-read-only": true, + "uml-name": "transmissionModeList" + }, + "maintenance-timer-range": { + "id": "maintenance-timer-range", + "uml-id": "_I1FYsMWZEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 14, + "is-read-only": true, + "unit": "s", + "description": [ + "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')." + ], + "uml-name": "maintenanceTimerRange", + "controlType": "text" + }, + "supported-alarms": { + "id": "supported-alarms", + "uml-id": "_ecCeb0aqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": true, + "description": [ + "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device." + ], + "uml-name": "supportedAlarms", + "controlType": "text" + }, + "supported-channel-plan-list": { + "id": "supported-channel-plan-list", + "uml-id": "_8gpNIHfcEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database." + ], + "uml-name": "supportedChannelPlan", + "controlType": "text" + }, + "air-interface-name": { + "id": "air-interface-name", + "uml-id": "_XMDggIL5EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "Operator specific microwave link ID (often used for coding area, type of element and sequential number)." + ], + "uml-name": "airInterfaceName", + "controlType": "text" + }, + "radio-signal-id": { + "id": "radio-signal-id", + "uml-id": "_QY9KoHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": false, + "description": [ + "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check." + ], + "uml-name": "radioSignalID", + "controlType": "text" + }, + "tx-frequency": { + "id": "tx-frequency", + "uml-id": "_UNE8gHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable." + ], + "uml-name": "txFrequency", + "controlType": "number" + }, + "rx-frequency": { + "id": "rx-frequency", + "uml-id": "_W7ayEHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Center frequency of the receive channel." + ], + "uml-name": "rxFrequency", + "controlType": "number" + }, + "tx-channel-bandwidth": { + "id": "tx-channel-bandwidth", + "uml-id": "_bhAdIHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;" + ], + "uml-name": "txChannelBandwidth", + "controlType": "number" + }, + "rx-channel-bandwidth": { + "id": "rx-channel-bandwidth", + "uml-id": "_eKIbgHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 6, + "is-read-only": false, + "unit": "kHz", + "description": [ + "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;" + ], + "uml-name": "rxChannelBandwidth", + "controlType": "number" + }, + "polarization": { + "id": "polarization", + "uml-id": "_bVebEI99EeWFluv9KLLl5A", + "uml-type": "ownedAttribute", + "type": "_e85NsI99EeWFluv9KLLl5A", + "order-number": 7, + "is-read-only": false, + "description": [ + "Allows documenting the polarization of the air interface." + ], + "uml-name": "polarization", + "controlType": [ + "not-specified", + "horizontal", + "vertical" + ] + }, + "power-is-on": { + "id": "power-is-on", + "uml-id": "_p4eR8Hf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": false, + "description": [ + "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'." + ], + "uml-name": "powerIsOn", + "controlType": "checkbox" + }, + "transmitter-is-on": { + "id": "transmitter-is-on", + "uml-id": "_uYVvgHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": false, + "description": [ + "Activation of the transmitter inside the radio shall be expressed as a 'true'." + ], + "uml-name": "transmitterIsOn", + "controlType": "checkbox" + }, + "receiver-is-on": { + "id": "receiver-is-on", + "uml-id": "_q_XcwEgnEeathrAE0htMiA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": false, + "description": [ + "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations." + ], + "uml-name": "receiverIsOn", + "controlType": "checkbox" + }, + "tx-power": { + "id": "tx-power", + "uml-id": "_ZEXmIHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 11, + "is-read-only": false, + "unit": "dBm", + "description": [ + "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC." + ], + "uml-name": "txPower", + "controlType": "number" + }, + "adaptive-modulation-is-on": { + "id": "adaptive-modulation-is-on", + "uml-id": "_0jhfYHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 12, + "is-read-only": false, + "description": [ + "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'." + ], + "uml-name": "adaptiveModulationIsOn", + "controlType": "checkbox" + }, + "modulation-min": { + "id": "modulation-min", + "uml-id": "_dM_BUHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 13, + "is-read-only": false, + "unit": "symbols", + "description": [ + "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme." + ], + "uml-name": "modulationMin", + "controlType": "number" + }, + "modulation-max": { + "id": "modulation-max", + "uml-id": "_gAHQQHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 14, + "is-read-only": false, + "unit": "symbols", + "description": [ + "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme." + ], + "uml-name": "modulationMax", + "controlType": "number" + }, + "xpic-is-on": { + "id": "xpic-is-on", + "uml-id": "_4hi0IHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 15, + "is-read-only": false, + "description": [ + "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'." + ], + "uml-name": "xpicIsOn", + "controlType": "checkbox" + }, + "mimo-is-on": { + "id": "mimo-is-on", + "uml-id": "_7t4fIH2dEeWaPP5xsIT8pQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 16, + "is-read-only": false, + "description": [ + "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'." + ], + "uml-name": "mimoIsOn", + "controlType": "checkbox" + }, + "alic-is-on": { + "id": "alic-is-on", + "uml-id": "_FmWHMHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 17, + "is-read-only": false, + "description": [ + "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'." + ], + "uml-name": "alicIsOn", + "controlType": "checkbox" + }, + "atpc-is-on": { + "id": "atpc-is-on", + "uml-id": "_9Hz0oHf5EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 18, + "is-read-only": false, + "description": [ + "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'." + ], + "uml-name": "atpcIsOn", + "controlType": "checkbox" + }, + "atpc-thresh-upper": { + "id": "atpc-thresh-upper", + "uml-id": "_pR7yMHgAEeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 19, + "is-read-only": false, + "unit": "dBm", + "description": [ + "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power." + ], + "uml-name": "atpcThreshUpper", + "controlType": "number" + }, + "atpc-thresh-lower": { + "id": "atpc-thresh-lower", + "uml-id": "_sIlPMHgAEeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 20, + "is-read-only": false, + "unit": "dBm", + "description": [ + "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power." + ], + "uml-name": "atpcThreshLower", + "controlType": "number" + }, + "auto-freq-select-is-on": { + "id": "auto-freq-select-is-on", + "uml-id": "_dG5VAIL-EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 21, + "is-read-only": false, + "description": [ + "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'." + ], + "uml-name": "autoFreqSelectIsOn", + "controlType": "checkbox" + }, + "auto-freq-select-range": { + "id": "auto-freq-select-range", + "uml-id": "_yH9XMIMCEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 22, + "is-read-only": false, + "unit": "channels", + "description": [ + "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen." + ], + "uml-name": "autoFreqSelectRange", + "controlType": "number" + }, + "modulation-is-on": { + "id": "modulation-is-on", + "uml-id": "_kxXzwIMGEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 23, + "is-read-only": false, + "description": [ + "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'." + ], + "uml-name": "modulationIsOn", + "controlType": "checkbox" + }, + "encryption-is-on": { + "id": "encryption-is-on", + "uml-id": "_uI7bIE58EeaCk6G-lyG1OQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 11, + "is-read-only": false, + "description": [ + "Activates encryption of the Ethernet payload." + ], + "uml-name": "encryptionIsOn", + "controlType": "checkbox" + }, + "cryptographic-key": { + "id": "cryptographic-key", + "uml-id": "_psRpoE58EeaCk6G-lyG1OQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 12, + "is-read-only": false, + "description": [ + "Key for transforming plaintext into cipher text data." + ], + "uml-name": "cryptographicKey", + "controlType": "text" + }, + "loop-back-kind-on": { + "id": "loop-back-kind-on", + "uml-id": "_PyRvsHf6EeW-M8kopGJqEA", + "uml-type": "ownedAttribute", + "type": "_3CZ3UIsDEead4ersMrOjBQ", + "order-number": 26, + "is-read-only": false, + "description": [ + "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site." + ], + "uml-name": "loopBackKindOn", + "controlType": [ + "none", + "if", + "rf" + ] + }, + "maintenance-timer": { + "id": "maintenance-timer", + "uml-id": "_7-oTwCd5EeaJA6AVLNrv_w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 27, + "is-read-only": false, + "unit": "s", + "description": [ + "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange." + ], + "uml-name": "maintenanceTimer", + "controlType": "number" + }, + "problem-kind-severity-list": { + "id": "problem-kind-severity-list", + "uml-id": "_OMQH02z0Eeaf-__BRLM84g", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 2, + "is-read-only": false, + "description": [ + "Severity of this type of alarm." + ], + "uml-name": "problemKindSeverity", + "controlType": [ + "non-alarmed", + "warning", + "minor", + "major", + "critical" + ] + }, + "tx-frequency-cur": { + "id": "tx-frequency-cur", + "uml-id": "_YZq7gK4tEeWXs6m-9H3KvA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Center frequency of the currently operated transmit channel." + ], + "uml-name": "txFrequencyCur", + "controlType": "number" + }, + "rx-frequency-cur": { + "id": "rx-frequency-cur", + "uml-id": "_33IdUIL-EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Center frequency of the currently operated receive channel." + ], + "uml-name": "rxFrequencyCur", + "controlType": "number" + }, + "tx-level-cur": { + "id": "tx-level-cur", + "uml-id": "_L3B5wHgIEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Current transmit level." + ], + "uml-name": "txLevelCur", + "controlType": "number" + }, + "rx-level-cur": { + "id": "rx-level-cur", + "uml-id": "_OHN9AHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Current receive level." + ], + "uml-name": "rxLevelCur", + "controlType": "number" + }, + "modulation-cur": { + "id": "modulation-cur", + "uml-id": "_RBMa0HizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": true, + "unit": "symbols", + "description": [ + "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme." + ], + "uml-name": "modulationCur", + "controlType": "number" + }, + "code-rate-cur": { + "id": "code-rate-cur", + "uml-id": "_UYyBsHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 6, + "is-read-only": true, + "unit": "%", + "description": [ + "Code rate of the currently operated coding scheme (Net bit rate ≤ Gross bit rate · code rate)." + ], + "uml-name": "codeRateCur", + "controlType": "number" + }, + "snir-cur": { + "id": "snir-cur", + "uml-id": "_B7G0AEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "dB", + "description": [ + "Currently measured signal to (noise+interference) ratio of the combined signals." + ], + "uml-name": "snirCur", + "controlType": "number" + }, + "xpd-cur": { + "id": "xpd-cur", + "uml-id": "_Z7NvgHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 8, + "is-read-only": true, + "unit": "dB", + "description": [ + "Currently measured cross polarization discrimination." + ], + "uml-name": "xpdCur", + "controlType": "number" + }, + "rf-temp-cur": { + "id": "rf-temp-cur", + "uml-id": "_d6wuQHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 9, + "is-read-only": true, + "unit": "Celsius", + "description": [ + "Current temperature (in degree Celsius) of the radio module inside the outdoor unit." + ], + "uml-name": "rfTempCur", + "controlType": "number" + }, + "last-status-change": { + "id": "last-status-change", + "uml-id": "_ecCetEaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q", + "order-number": 1, + "is-read-only": true, + "description": [ + "Time the Container entered its current operational status. _format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes." + ], + "uml-name": "lastStatusChange" + }, + "radio-power-is-up": { + "id": "radio-power-is-up", + "uml-id": "_sFKXcHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 11, + "is-read-only": true, + "description": [ + "If the radio unit has power and is switched on, this shall be expressed as a 'true'." + ], + "uml-name": "radioPowerIsUp", + "controlType": "checkbox" + }, + "link-is-up": { + "id": "link-is-up", + "uml-id": "_5JBPUHizEeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 12, + "is-read-only": true, + "description": [ + "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'." + ], + "uml-name": "linkIsUp", + "controlType": "checkbox" + }, + "xpic-is-up": { + "id": "xpic-is-up", + "uml-id": "_ESRbsHi0EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 13, + "is-read-only": true, + "description": [ + "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'." + ], + "uml-name": "xpicIsUp", + "controlType": "checkbox" + }, + "mimo-is-up": { + "id": "mimo-is-up", + "uml-id": "_DVaQwIL6EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 14, + "is-read-only": true, + "description": [ + "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'." + ], + "uml-name": "mimoIsUp", + "controlType": "checkbox" + }, + "alic-is-up": { + "id": "alic-is-up", + "uml-id": "_Hte-UHi0EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 15, + "is-read-only": true, + "description": [ + "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'." + ], + "uml-name": "alicIsUp", + "controlType": "checkbox" + }, + "atpc-is-up": { + "id": "atpc-is-up", + "uml-id": "_VimCgMjNEeWYRsWW_rqpgw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 16, + "is-read-only": true, + "description": [ + "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'." + ], + "uml-name": "atpcIsUp", + "controlType": "checkbox" + }, + "auto-freq-select-is-up": { + "id": "auto-freq-select-is-up", + "uml-id": "_-PXKsIL-EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 17, + "is-read-only": true, + "description": [ + "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'." + ], + "uml-name": "autoFreqSelectIsUp", + "controlType": "checkbox" + }, + "loop-back-kind-up": { + "id": "loop-back-kind-up", + "uml-id": "_S9prAHi0EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "_3CZ3UIsDEead4ersMrOjBQ", + "order-number": 18, + "is-read-only": true, + "description": [ + "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site." + ], + "uml-name": "loopBackKindUp", + "controlType": [ + "none", + "if", + "rf" + ] + }, + "local-end-point-id": { + "id": "local-end-point-id", + "uml-id": "_pEsgcFQHEeaCXY7nSBqs6w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 19, + "is-read-only": true, + "description": [ + "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link." + ], + "uml-name": "localEndPointId", + "controlType": "text" + }, + "remote-end-point-id": { + "id": "remote-end-point-id", + "uml-id": "_r3cU4FQHEeaCXY7nSBqs6w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 20, + "is-read-only": true, + "description": [ + "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link." + ], + "uml-name": "remoteEndPointId", + "controlType": "text" + }, + "current-problem-list": { + "id": "current-problem-list", + "uml-id": "_ecCewEaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "__h1n4MXpEeWJ6KZuc0h_vw", + "order-number": 1, + "is-read-only": true, + "uml-name": "currentProblemList" + }, + "current-performance-data-list": { + "id": "current-performance-data-list", + "uml-id": "_ecCexkaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_pA5AQGz6Eeaf-__BRLM84g", + "order-number": 1, + "is-read-only": true, + "description": [ + "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too." + ], + "uml-name": "currentPerformanceDataList" + }, + "historical-performance-data-list": { + "id": "historical-performance-data-list", + "uml-id": "_ecCeykaqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_pTaToGz6Eeaf-__BRLM84g", + "order-number": 1, + "is-read-only": true, + "uml-name": "historicalPerformanceDataList" + }, + "co-channel-group": { + "id": "co-channel-group", + "uml-id": "_XBs2YJQrEeWOu_cDl8dd7w", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Required for configuring XPIC, MIMO and ALIC." + ], + "uml-name": "CoChannelGroup" + }, + "co-channel-group-id": { + "id": "co-channel-group-id", + "uml-id": "_pIjBgEy7EeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "uml-name": "coChannelGroupId" + }, + "air-interface-list": { + "id": "air-interface-list", + "uml-id": "_tIadUCJeEeaCUo1MUtSuEg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group." + ], + "uml-name": "_airInterfaceList" + }, + "sort-of-co-channel-group": { + "id": "sort-of-co-channel-group", + "uml-id": "_ZrjZcJRrEeWIaZzoaYJ6_A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 3, + "is-read-only": false, + "description": [ + "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';" + ], + "uml-name": "sortOfCoChannelGroup", + "controlType": "text" + }, + "logical-termination-point": { + "id": "logical-termination-point", + "uml-id": "_8QgfIKwZEeaK38AermeaCw", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 4, + "is-read-only": false, + "uml-name": "_logicalTerminationPoint" + }, + "mw-air-interface-hsb-end-point-pac": { + "id": "mw-air-interface-hsb-end-point-pac", + "uml-id": "_CXKgMJRbEeWMYJZn43K_Aw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point." + ], + "uml-name": "MW_AirInterfaceHsbEndPoint_Pac" + }, + "role": { + "id": "role", + "uml-id": "_CXKgNpRbEeWMYJZn43K_Aw", + "uml-type": "ownedAttribute", + "type": "_01_dYJReEeWxIPEwZQ_gmw", + "order-number": 1, + "is-read-only": false, + "uml-name": "role", + "controlType": [ + "working", + "protection", + "protected" + ] + }, + "endpoint": { + "id": "endpoint", + "uml-id": "_dglVQLYgEeWOio-Gg6Q2sw", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_b_lUAFYgEeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "is-key": 1, + "uml-name": "_endpoint" + }, + "mw-air-interface-hsb-fc-switch-pac": { + "id": "mw-air-interface-hsb-fc-switch-pac", + "uml-id": "_CXNjgJRbEeWMYJZn43K_Aw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state." + ], + "uml-name": "MW_AirInterfaceHsbFcSwitch_Pac" + }, + "prot-type": { + "id": "prot-type", + "uml-id": "_CXNjiJRbEeWMYJZn43K_Aw", + "uml-type": "ownedAttribute", + "type": "_DaB5IJRgEeWxIPEwZQ_gmw", + "order-number": 1, + "is-read-only": false, + "description": [ + "Indicates the protection scheme that is used for the ProtectionGroup." + ], + "uml-name": "protType", + "controlType": [ + "hsb" + ] + }, + "air-interface-hsb-configuration-is-faulty-severity": { + "id": "air-interface-hsb-configuration-is-faulty-severity", + "uml-id": "_80BlAJ2gEeWSuvrh9KcclQ", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 2, + "is-read-only": false, + "description": [ + "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration." + ], + "uml-name": "airInterfaceHsbConfigurationIsFaultySeverity", + "controlType": [ + "non-alarmed", + "warning", + "minor", + "major", + "critical" + ] + }, + "air-interface-hsb-is-partly-down-severity": { + "id": "air-interface-hsb-is-partly-down-severity", + "uml-id": "_r382sJ2mEeWSuvrh9KcclQ", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 3, + "is-read-only": false, + "description": [ + "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration." + ], + "uml-name": "airInterfaceHsbIsPartlyDownSeverity", + "controlType": [ + "non-alarmed", + "warning", + "minor", + "major", + "critical" + ] + }, + "air-interface-hsb-is-down-severity": { + "id": "air-interface-hsb-is-down-severity", + "uml-id": "_sRGWgJ2mEeWSuvrh9KcclQ", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 4, + "is-read-only": false, + "description": [ + "The level of severity of the total HSB configuration being down shall be chosen from an enumeration." + ], + "uml-name": "airInterfaceHsbIsDownSeverity", + "controlType": [ + "non-alarmed", + "warning", + "minor", + "major", + "critical" + ] + }, + "fcswitch": { + "id": "fcswitch", + "uml-id": "_FS83ILYhEeWOio-Gg6Q2sw", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_a97NQFYhEeOVGaP4lO41SQ", + "order-number": 5, + "is-read-only": false, + "is-key": 1, + "uml-name": "_fcswitch" + }, + "mw-air-interface-diversity-pac": { + "id": "mw-air-interface-diversity-pac", + "uml-id": "_WbgFcHgFEeWfutScSwFT9A", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "MW_AirInterfaceDiversity_Pac" + }, + "air-interface-diversity-capability": { + "id": "air-interface-diversity-capability", + "uml-id": "_vxH2wIekEeWaZYk7gpuOtw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Describes the capabilities in implementing different types of air interface diversity." + ], + "uml-name": "AirInterfaceDiversityCapability" + }, + "air-interface-diversity-configuration": { + "id": "air-interface-diversity-configuration", + "uml-id": "_43RTMIe1EeWnUdmvl3PBkw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "AirInterfaceDiversityConfiguration" + }, + "air-interface-diversity-status": { + "id": "air-interface-diversity-status", + "uml-id": "_EKZYcJOXEeWz-6sqLzUedw", + "uml-type": "ownedAttribute", + "type": "_DUJs8JOXEeWz-6sqLzUedw", + "order-number": 2, + "is-read-only": true, + "description": [ + "Status of the air interface bundle." + ], + "uml-name": "airInterfaceDiversityStatus", + "controlType": [ + "group-down", + "not-all-ai-active", + "all-ai-active" + ] + }, + "air-interface-diversity-current-problems": { + "id": "air-interface-diversity-current-problems", + "uml-id": "_CAvhEHvtEeWzooKF5kx0aw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "AirInterfaceDiversityCurrentProblems" + }, + "air-interface-diversity-current-performance": { + "id": "air-interface-diversity-current-performance", + "uml-id": "_GIsAQKjDEeWlgMiFXLmCIQ", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface diversity configuration at a particular moment." + ], + "uml-name": "AirInterfaceDiversityCurrentPerformance" + }, + "air-interface-diversity-historical-performances": { + "id": "air-interface-diversity-historical-performances", + "uml-id": "_8IIu8HvsEeWzooKF5kx0aw", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval." + ], + "uml-name": "AirInterfaceDiversityHistoricalPerformances" + }, + "available-kinds-of-diversity": { + "id": "available-kinds-of-diversity", + "uml-id": "_luAGENyVEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "_pTliINyUEeW-SfXlFFFI0Q", + "order-number": 1, + "is-read-only": true, + "description": [ + "Available types of diversity to be listed." + ], + "uml-name": "availableKindsOfDiversity" + }, + "air-interface-diversity": { + "id": "air-interface-diversity", + "uml-id": "_hynTIHi_EeWfutScSwFT9A", + "uml-type": "ownedAttribute", + "type": "_pTliINyUEeW-SfXlFFFI0Q", + "order-number": 1, + "is-read-only": false, + "description": [ + "Type of air interface diversity configured at the link." + ], + "uml-name": "airInterfaceDiversity" + }, + "air-interface-ltp-list": { + "id": "air-interface-ltp-list", + "uml-id": "_xRMKgNyXEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax" + ], + "uml-name": "_airInterfaceLtpList" + }, + "mw-pure-ethernet-structure-pac": { + "id": "mw-pure-ethernet-structure-pac", + "uml-id": "__OTQ0UaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only." + ], + "uml-name": "MW_PureEthernetStructure_Pac" + }, + "pure-ethernet-structure-capability-list": { + "id": "pure-ethernet-structure-capability-list", + "uml-id": "__OTQ4EaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport." + ], + "uml-name": "PureEthernetStructureCapability" + }, + "pure-ethernet-structure-configuration": { + "id": "pure-ethernet-structure-configuration", + "uml-id": "__OTQ8UaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "PureEthernetStructureConfiguration" + }, + "pure-ethernet-structure-status": { + "id": "pure-ethernet-structure-status", + "uml-id": "__OTQ_UaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "PureEthernetStructureStatus" + }, + "pure-ethernet-structure-current-problems": { + "id": "pure-ethernet-structure-current-problems", + "uml-id": "__OTRCUaeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "PureEthernetStructureCurrentProblems" + }, + "pure-ethernet-structure-current-performance": { + "id": "pure-ethernet-structure-current-performance", + "uml-id": "__OTRD0aeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment." + ], + "uml-name": "PureEthernetStructureCurrentPerformance" + }, + "pure-ethernet-structure-historical-performances": { + "id": "pure-ethernet-structure-historical-performances", + "uml-id": "__OTRE0aeEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval." + ], + "uml-name": "PureEthernetStructureHistoricalPerformances" + }, + "structure-id": { + "id": "structure-id", + "uml-id": "_Bzxo5EagEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Identifies the Structure for bundling and container." + ], + "uml-name": "structureId" + }, + "segment-status-list": { + "id": "segment-status-list", + "uml-id": "_BzxpAEagEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_KwZVcMUCEeW3xsRKtpCLuA", + "order-number": 1, + "is-read-only": true, + "description": [ + "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1" + ], + "uml-name": "segmentStatusList" + }, + "mw-hybrid-mw-structure-pac": { + "id": "mw-hybrid-mw-structure-pac", + "uml-id": "_Bzxo0UagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic." + ], + "uml-name": "MW_HybridMwStructure_Pac" + }, + "hybrid-mw-structure-capability": { + "id": "hybrid-mw-structure-capability", + "uml-id": "_Bzxo4EagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available." + ], + "uml-name": "HybridMwStructureCapability" + }, + "hybrid-mw-structure-configuration": { + "id": "hybrid-mw-structure-configuration", + "uml-id": "_Bzxo8UagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HybridMwStructureConfiguration" + }, + "hybrid-mw-structure-status": { + "id": "hybrid-mw-structure-status", + "uml-id": "_Bzxo_UagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HybridMwStructureStatus" + }, + "hybrid-mw-structure-current-problems": { + "id": "hybrid-mw-structure-current-problems", + "uml-id": "_BzxpCUagEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HybridMwStructureCurrentProblems" + }, + "hybrid-mw-structure-current-performance": { + "id": "hybrid-mw-structure-current-performance", + "uml-id": "_BzxpD0agEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of a hybrid microwave at a particular moment." + ], + "uml-name": "HybridMwStructureCurrentPerformance" + }, + "hybrid-mw-structure-historical-performances": { + "id": "hybrid-mw-structure-historical-performances", + "uml-id": "_BzxpE0agEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval." + ], + "uml-name": "HybridMwStructureHistoricalPerformances" + }, + "supported-tdm-structure-types-list": { + "id": "supported-tdm-structure-types-list", + "uml-id": "_tA-uQEduEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_jRAQsEdoEeax2rWez10Siw", + "order-number": 2, + "is-read-only": true, + "description": [ + "Lists the TDM frame types that are supported." + ], + "uml-name": "supportedTdmStructureTypesList" + }, + "structure-type": { + "id": "structure-type", + "uml-id": "_cduh4EdvEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_jRAQsEdoEeax2rWez10Siw", + "order-number": 1, + "is-read-only": false, + "description": [ + "TDM frame to be applied." + ], + "uml-name": "structureType" + }, + "number-of-tdm-segments-to-be-reserved": { + "id": "number-of-tdm-segments-to-be-reserved", + "uml-id": "_Bzxo9EagEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": false, + "description": [ + "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType" + ], + "uml-name": "numberOfTdmSegmentsToBeReserved", + "controlType": "number" + }, + "mw-ethernet-container-pac": { + "id": "mw-ethernet-container-pac", + "uml-id": "_4uEBgUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "MW_EthernetContainer_Pac" + }, + "ethernet-container-capability": { + "id": "ethernet-container-capability", + "uml-id": "_4uEBmEafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetContainerCapability" + }, + "ethernet-container-configuration": { + "id": "ethernet-container-configuration", + "uml-id": "_4uEBwUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetContainerConfiguration" + }, + "ethernet-container-status": { + "id": "ethernet-container-status", + "uml-id": "_4uECAUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetContainerStatus" + }, + "ethernet-container-current-problems": { + "id": "ethernet-container-current-problems", + "uml-id": "_4uECDUafEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetContainerCurrentProblems" + }, + "ethernet-container-current-performance": { + "id": "ethernet-container-current-performance", + "uml-id": "_4uECE0afEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the Ethernet container at a particular moment." + ], + "uml-name": "EthernetContainerCurrentPerformance" + }, + "ethernet-container-historical-performances": { + "id": "ethernet-container-historical-performances", + "uml-id": "_4uECF0afEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the Ethernet container for a pre-defined measurement interval." + ], + "uml-name": "EthernetContainerHistoricalPerformances" + }, + "bundling-is-avail": { + "id": "bundling-is-avail", + "uml-id": "_IzCGMNyCEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": true, + "description": [ + "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'." + ], + "uml-name": "bundlingIsAvail", + "controlType": "checkbox" + }, + "packet-compression-is-avail": { + "id": "packet-compression-is-avail", + "uml-id": "_4uEBp0afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": true, + "description": [ + "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans." + ], + "uml-name": "packetCompressionIsAvail", + "controlType": "checkbox" + }, + "layer2-compression-is-avail": { + "id": "layer2-compression-is-avail", + "uml-id": "_4uEBqkafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 3, + "is-read-only": true, + "description": [ + "Packet compression on layer 2 available at the device." + ], + "uml-name": "layer2CompressionIsAvail", + "controlType": "checkbox" + }, + "vlan-compression-is-avail": { + "id": "vlan-compression-is-avail", + "uml-id": "_4uEBrUafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": true, + "description": [ + "Packet compression on VLAN layer available at the device." + ], + "uml-name": "vlanCompressionIsAvail", + "controlType": "checkbox" + }, + "q-in-q-compression-is-avail": { + "id": "q-in-q-compression-is-avail", + "uml-id": "_4uEBsEafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 5, + "is-read-only": true, + "description": [ + "Packet compression on layer of a second VLAN available at the device." + ], + "uml-name": "qInQCompressionIsAvail", + "controlType": "checkbox" + }, + "mpls-compression-is-avail": { + "id": "mpls-compression-is-avail", + "uml-id": "_4uEBs0afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": true, + "description": [ + "Packet compression on mpls layer available at the device." + ], + "uml-name": "mplsCompressionIsAvail", + "controlType": "checkbox" + }, + "ipv4-compression-is-avail": { + "id": "ipv4-compression-is-avail", + "uml-id": "_4uEBtkafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": true, + "description": [ + "Packet compression on layer 3 for IPv4 available at the device." + ], + "uml-name": "ipv4CompressionIsAvail", + "controlType": "checkbox" + }, + "ipv6-compression-is-avail": { + "id": "ipv6-compression-is-avail", + "uml-id": "_4uEBuUafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": true, + "description": [ + "Packet compression on layer 3 for IPv6 available at the device." + ], + "uml-name": "ipv6CompressionIsAvail", + "controlType": "checkbox" + }, + "layer4-compression-is-avail": { + "id": "layer4-compression-is-avail", + "uml-id": "_4uEBvEafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": true, + "description": [ + "Packet compression on layer 4 (TCP and UDP header) available at the device." + ], + "uml-name": "layer4CompressionIsAvail", + "controlType": "checkbox" + }, + "container-id": { + "id": "container-id", + "uml-id": "_ecCeS0aqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller." + ], + "uml-name": "containerID", + "controlType": "text" + }, + "segments-id-list": { + "id": "segments-id-list", + "uml-id": "_4uEBy0afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_Nd1F4MKuEeWwLJhHQlOGSQ", + "order-number": 2, + "is-read-only": false, + "description": [ + "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list." + ], + "uml-name": "segmentsIdList" + }, + "packet-compression-is-on": { + "id": "packet-compression-is-on", + "uml-id": "_4uEB1UafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 3, + "is-read-only": false, + "description": [ + "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum." + ], + "uml-name": "packetCompressionIsOn", + "controlType": "checkbox" + }, + "layer2-compression-is-on": { + "id": "layer2-compression-is-on", + "uml-id": "_4uEB2kafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": false, + "description": [ + "Packet compression on layer 2 configured at the device." + ], + "uml-name": "layer2CompressionIsOn", + "controlType": "checkbox" + }, + "vlan-compression-is-on": { + "id": "vlan-compression-is-on", + "uml-id": "_4uEB30afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 5, + "is-read-only": false, + "description": [ + "Packet compression on VLAN layer configured at the device." + ], + "uml-name": "vlanCompressionIsOn", + "controlType": "checkbox" + }, + "q-in-q-compression-is-on": { + "id": "q-in-q-compression-is-on", + "uml-id": "_4uEB5EafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 6, + "is-read-only": false, + "description": [ + "Packet compression on layer of a second VLAN configured at the device." + ], + "uml-name": "qInQCompressionIsOn", + "controlType": "checkbox" + }, + "mpls-compression-is-on": { + "id": "mpls-compression-is-on", + "uml-id": "_4uEB6UafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 7, + "is-read-only": false, + "description": [ + "Packet compression on MPLS layer configured at the device." + ], + "uml-name": "mplsCompressionIsOn", + "controlType": "checkbox" + }, + "ipv4-compression-is-on": { + "id": "ipv4-compression-is-on", + "uml-id": "_4uEB7kafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 8, + "is-read-only": false, + "description": [ + "Packet compression on layer 3 for IPv4 configured at the device." + ], + "uml-name": "ipv4CompressionIsOn", + "controlType": "checkbox" + }, + "ipv6-compression-is-on": { + "id": "ipv6-compression-is-on", + "uml-id": "_4uEB80afEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 9, + "is-read-only": false, + "description": [ + "Packet compression on layer 3 for IPv6 configured at the device." + ], + "uml-name": "ipv6CompressionIsOn", + "controlType": "checkbox" + }, + "layer4-compression-is-on": { + "id": "layer4-compression-is-on", + "uml-id": "_4uEB-EafEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": false, + "description": [ + "Packet compression on layer 4 (TCP and UDP header) configured at the device." + ], + "uml-name": "layer4CompressionIsOn", + "controlType": "checkbox" + }, + "mw-tdm-container-pac": { + "id": "mw-tdm-container-pac", + "uml-id": "_ecCeMUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "MW_TdmContainer_Pac" + }, + "tdm-container-capability": { + "id": "tdm-container-capability", + "uml-id": "_ecCeSEaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Bundling is not available." + ], + "uml-name": "TdmContainerCapability" + }, + "tdm-container-configuration": { + "id": "tdm-container-configuration", + "uml-id": "_ecCecUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "TdmContainerConfiguration" + }, + "tdm-container-status": { + "id": "tdm-container-status", + "uml-id": "_ecCesUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "TdmContainerStatus" + }, + "tdm-container-current-problems": { + "id": "tdm-container-current-problems", + "uml-id": "_ecCevUaqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "TdmContainerCurrentProblems" + }, + "tdm-container-current-performance": { + "id": "tdm-container-current-performance", + "uml-id": "_ecCew0aqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the TDM container at a particular moment." + ], + "uml-name": "TdmContainerCurrentPerformance" + }, + "tdm-container-historical-performances": { + "id": "tdm-container-historical-performances", + "uml-id": "_ecCex0aqEeas2eqI3oKNtg", + "uml-type": "uml:Class", + "is-read-only": false, + "description": [ + "Aggregated performance information of the TDM container for a pre-defined measurement interval." + ], + "uml-name": "TdmContainerHistoricalPerformances" + }, + "supported-tdm-container-types-list": { + "id": "supported-tdm-container-types-list", + "uml-id": "_R5hG0EdwEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "_rgbigEdjEeax2rWez10Siw", + "order-number": 1, + "is-read-only": true, + "description": [ + "Lists the TDM containers that are supported." + ], + "uml-name": "supportedTdmContainerTypesList" + }, + "container-type": { + "id": "container-type", + "uml-id": "_be7AoMWkEeW3xsRKtpCLuA", + "uml-type": "uml:DataType", + "uml-name": "ContainerType" + }, + "segment-id": { + "id": "segment-id", + "uml-id": "_ecCee0aqEeas2eqI3oKNtg", + "uml-type": "ownedAttribute", + "type": "_Nd1F4MKuEeWwLJhHQlOGSQ", + "order-number": 3, + "is-read-only": false, + "description": [ + "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;" + ], + "uml-name": "segmentID" + }, + "mw-current-problem": { + "id": "mw-current-problem", + "uml-id": "_LKRM4JNQEeWuAeXkr703BA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "MwCurrentProblem" + }, + "sequence-number": { + "id": "sequence-number", + "uml-id": "_YadH4CJbEeaHpPYk5sscIg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Unique sequence number of the current problem object." + ], + "uml-name": "sequenceNumber", + "controlType": "number" + }, + "time-stamp": { + "id": "time-stamp", + "uml-id": "_lB4EQJN1EeWuAeXkr703BA", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q", + "order-number": 2, + "is-read-only": true, + "description": [ + "Time and date of the problem. _format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes." + ], + "uml-name": "timeStamp" + }, + "problem-severity": { + "id": "problem-severity", + "uml-id": "_qInZ8KT4EeapooeghKN-dA", + "uml-type": "ownedAttribute", + "type": "_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 3, + "is-read-only": true, + "description": [ + "Severity of the alarm." + ], + "uml-name": "problemSeverity", + "controlType": [ + "non-alarmed", + "warning", + "minor", + "major", + "critical" + ] + }, + "channel-plan-type": { + "id": "channel-plan-type", + "uml-id": "_oQf6IPXSEeW9zIqh2WHHww", + "uml-type": "uml:DataType", + "uml-name": "ChannelPlanType" + }, + "duplex-distance-is-variable": { + "id": "duplex-distance-is-variable", + "uml-id": "_OPxkQK42EeWxIavXll_b0A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": true, + "description": [ + "To be set on 'true', if the distance between transmitted and received frequency is variable." + ], + "uml-name": "duplexDistanceIsVariable", + "controlType": "checkbox" + }, + "duplex-distance": { + "id": "duplex-distance", + "uml-id": "_BEr_wIMEEeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Distance between transmitted and received frequency." + ], + "uml-name": "duplexDistance", + "controlType": "number" + }, + "auto-freq-select-is-avail": { + "id": "auto-freq-select-is-avail", + "uml-id": "_te6XMIL8EeWMcJAvkeTn2w", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 4, + "is-read-only": true, + "description": [ + "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'." + ], + "uml-name": "autoFreqSelectIsAvail", + "controlType": "checkbox" + }, + "transmission-mode-type": { + "id": "transmission-mode-type", + "uml-id": "_zG34sPXQEeW9zIqh2WHHww", + "uml-type": "uml:DataType", + "uml-name": "TransmissionModeType" + }, + "transmission-mode-id": { + "id": "transmission-mode-id", + "uml-id": "_afdYoNumEeWHIeLurhMv0A", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Indentifies the transmissionMode for internal reference." + ], + "uml-name": "transmissionModeId" + }, + "channel-bandwidth": { + "id": "channel-bandwidth", + "uml-id": "_FteJEHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kHz", + "description": [ + "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;" + ], + "uml-name": "channelBandwidth", + "controlType": "number" + }, + "modulation-scheme": { + "id": "modulation-scheme", + "uml-id": "_G4H-UHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "symbols", + "description": [ + "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')." + ], + "uml-name": "modulationScheme", + "controlType": "number" + }, + "code-rate": { + "id": "code-rate", + "uml-id": "_jE7-EHf4EeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "%", + "description": [ + "Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)." + ], + "uml-name": "codeRate", + "controlType": "number" + }, + "tx-power-min": { + "id": "tx-power-min", + "uml-id": "_I3nJ0HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the minimum transmit power the modem can operate in dBm." + ], + "uml-name": "txPowerMin", + "controlType": "number" + }, + "tx-power-max": { + "id": "tx-power-max", + "uml-id": "_KB7A0HfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 6, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the maximum transmit power the modem can operate in dBm." + ], + "uml-name": "txPowerMax", + "controlType": "number" + }, + "rx-threshold": { + "id": "rx-threshold", + "uml-id": "_LCr6QHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 7, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less." + ], + "uml-name": "rxThreshold", + "controlType": "number" + }, + "am-upshift-level": { + "id": "am-upshift-level", + "uml-id": "_MGguwHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 8, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the receive level that has to be exceeded to shift into a higher modulation scheme." + ], + "uml-name": "amUpshiftLevel", + "controlType": "number" + }, + "am-downshift-level": { + "id": "am-downshift-level", + "uml-id": "_NIvAwHfdEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 9, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme." + ], + "uml-name": "amDownshiftLevel", + "controlType": "number" + }, + "xpic-is-avail": { + "id": "xpic-is-avail", + "uml-id": "_QHd9kHfvEeW-h9gN8LYm4Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 10, + "is-read-only": true, + "description": [ + "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case." + ], + "uml-name": "xpicIsAvail", + "controlType": "checkbox" + }, + "air-interface-problem-severity-type": { + "id": "air-interface-problem-severity-type", + "uml-id": "_ZKdWgGnuEeaZwMagYjVCHQ", + "uml-type": "uml:DataType", + "uml-name": "AirInterfaceProblemSeverityType" + }, + "problem-kind-name": { + "id": "problem-kind-name", + "uml-id": "_OMQH0Gz0Eeaf-__BRLM84g", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "Name of the alarm according to Container::ContainerCapability::supportedAlarms" + ], + "uml-name": "problemKindName", + "controlType": "text" + }, + "air-interface-current-problem-type": { + "id": "air-interface-current-problem-type", + "uml-id": "_umuZUMXjEeW3xsRKtpCLuA", + "uml-type": "uml:DataType", + "uml-name": "AirInterfaceCurrentProblemType" + }, + "problem-name": { + "id": "problem-name", + "uml-id": "__h1n4cXpEeWJ6KZuc0h_vw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "description": [ + "Name of the alarm according to Container::ContainerCapability::supportedAlarms" + ], + "uml-name": "problemName", + "controlType": "text" + }, + "air-interface-performance-type": { + "id": "air-interface-performance-type", + "uml-id": "_OvFYwEQbEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the air interface." + ], + "uml-name": "AirInterfacePerformanceType" + }, + "es": { + "id": "es", + "uml-id": "_DbVzpUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "s", + "description": [ + "Number of errored seconds." + ], + "uml-name": "es", + "controlType": "number" + }, + "ses": { + "id": "ses", + "uml-id": "_DbVzqUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "s", + "description": [ + "Number of severely errored seconds." + ], + "uml-name": "ses", + "controlType": "number" + }, + "cses": { + "id": "cses", + "uml-id": "_DbVzrUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "s", + "description": [ + "Number of consecutive severely errored seconds." + ], + "uml-name": "cses", + "controlType": "number" + }, + "unavailability": { + "id": "unavailability", + "uml-id": "_DbVzsUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "s", + "description": [ + "Total time of unavailability in seconds." + ], + "uml-name": "unavailability", + "controlType": "number" + }, + "tx-level-min": { + "id": "tx-level-min", + "uml-id": "_DbVztUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Minimum transmit power. Signed integers are required." + ], + "uml-name": "txLevelMin", + "controlType": "number" + }, + "tx-level-max": { + "id": "tx-level-max", + "uml-id": "_DbVzuUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 6, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Maximum transmit power. Signed integers are required." + ], + "uml-name": "txLevelMax", + "controlType": "number" + }, + "tx-level-avg": { + "id": "tx-level-avg", + "uml-id": "_DbVzvUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 7, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Averaged transmit power. Signed integers are required." + ], + "uml-name": "txLevelAvg", + "controlType": "number" + }, + "rx-level-min": { + "id": "rx-level-min", + "uml-id": "_DbVzwUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 8, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Minimum receive level. Signed integers are required." + ], + "uml-name": "rxLevelMin", + "controlType": "number" + }, + "rx-level-max": { + "id": "rx-level-max", + "uml-id": "_DbVzxUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 9, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Maximum receive level. Signed integers are required." + ], + "uml-name": "rxLevelMax", + "controlType": "number" + }, + "rx-level-avg": { + "id": "rx-level-avg", + "uml-id": "_DbVzyUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 10, + "is-read-only": true, + "unit": "dBm", + "description": [ + "Averaged receive level. Signed integers are required." + ], + "uml-name": "rxLevelAvg", + "controlType": "number" + }, + "time2-states": { + "id": "time2-states", + "uml-id": "_DbVzzUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 11, + "is-read-only": true, + "unit": "s", + "description": [ + "Sum of all seconds the transmitter operated in e.g. BPSK." + ], + "uml-name": "time2States", + "controlType": "number" + }, + "time4-states-s": { + "id": "time4-states-s", + "uml-id": "_DbVz0kQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 12, + "is-read-only": true, + "unit": "s", + "uml-name": "time4StatesS", + "controlType": "number" + }, + "time4-states": { + "id": "time4-states", + "uml-id": "_DbVz2EQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 13, + "is-read-only": true, + "unit": "s", + "uml-name": "time4States", + "controlType": "number" + }, + "time8-states": { + "id": "time8-states", + "uml-id": "_DbVz3UQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 14, + "is-read-only": true, + "unit": "s", + "uml-name": "time8States", + "controlType": "number" + }, + "time16-states-s": { + "id": "time16-states-s", + "uml-id": "_DbVz4kQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 15, + "is-read-only": true, + "unit": "s", + "uml-name": "time16StatesS", + "controlType": "number" + }, + "time16-states": { + "id": "time16-states", + "uml-id": "_DbVz50QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 16, + "is-read-only": true, + "unit": "s", + "uml-name": "time16States", + "controlType": "number" + }, + "time32-states": { + "id": "time32-states", + "uml-id": "_DbVz7EQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 17, + "is-read-only": true, + "unit": "s", + "uml-name": "time32States", + "controlType": "number" + }, + "time64-states": { + "id": "time64-states", + "uml-id": "_DbVz8UQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 18, + "is-read-only": true, + "unit": "s", + "uml-name": "time64States", + "controlType": "number" + }, + "time128-states": { + "id": "time128-states", + "uml-id": "_DbVz9kQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 19, + "is-read-only": true, + "unit": "s", + "uml-name": "time128States", + "controlType": "number" + }, + "time256-states": { + "id": "time256-states", + "uml-id": "_DbVz-0QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 20, + "is-read-only": true, + "unit": "s", + "uml-name": "time256States", + "controlType": "number" + }, + "time512-states": { + "id": "time512-states", + "uml-id": "_DbV0AEQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 21, + "is-read-only": true, + "unit": "s", + "uml-name": "time512States", + "controlType": "number" + }, + "time512-states-l": { + "id": "time512-states-l", + "uml-id": "_DbV0BUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 22, + "is-read-only": true, + "unit": "s", + "uml-name": "time512StatesL", + "controlType": "number" + }, + "time1024-states": { + "id": "time1024-states", + "uml-id": "_DbV0CkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 23, + "is-read-only": true, + "unit": "s", + "uml-name": "time1024States", + "controlType": "number" + }, + "time1024-states-l": { + "id": "time1024-states-l", + "uml-id": "_DbV0D0QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 24, + "is-read-only": true, + "unit": "s", + "uml-name": "time1024StatesL", + "controlType": "number" + }, + "time2048-states": { + "id": "time2048-states", + "uml-id": "_DbV0FEQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 25, + "is-read-only": true, + "unit": "s", + "uml-name": "time2048States", + "controlType": "number" + }, + "time2048-states-l": { + "id": "time2048-states-l", + "uml-id": "_DbV0GUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 26, + "is-read-only": true, + "unit": "s", + "uml-name": "time2048StatesL", + "controlType": "number" + }, + "time4096-states": { + "id": "time4096-states", + "uml-id": "_DbV0HkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 27, + "is-read-only": true, + "unit": "s", + "uml-name": "time4096States", + "controlType": "number" + }, + "time4096-states-l": { + "id": "time4096-states-l", + "uml-id": "_DbV0I0QbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 28, + "is-read-only": true, + "unit": "s", + "uml-name": "time4096StatesL", + "controlType": "number" + }, + "time8192-states": { + "id": "time8192-states", + "uml-id": "_DbV0KEQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 29, + "is-read-only": true, + "unit": "s", + "uml-name": "time8192States", + "controlType": "number" + }, + "time8192-states-l": { + "id": "time8192-states-l", + "uml-id": "_DbV0LUQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 30, + "is-read-only": true, + "unit": "s", + "uml-name": "time8192StatesL", + "controlType": "number" + }, + "snir-min": { + "id": "snir-min", + "uml-id": "_nG-NsEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "dB", + "description": [ + "Minimum signal to (noise+interference) ratio of the combined signals." + ], + "uml-name": "snirMin", + "controlType": "number" + }, + "snir-max": { + "id": "snir-max", + "uml-id": "_n_OEUEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "dB", + "description": [ + "Maximum signal to (noise+interference) ratio of the combined signals." + ], + "uml-name": "snirMax", + "controlType": "number" + }, + "snir-avg": { + "id": "snir-avg", + "uml-id": "_oU3kMEzvEeaRytIQfQ43Wg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "dB", + "description": [ + "Average signal to (noise+interference) ratio of the combined signals." + ], + "uml-name": "snirAvg", + "controlType": "number" + }, + "xpd-min": { + "id": "xpd-min", + "uml-id": "_DbV0PkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 34, + "is-read-only": true, + "unit": "dB", + "description": [ + "Minimum cross polarization discrimination." + ], + "uml-name": "xpdMin", + "controlType": "number" + }, + "xpd-max": { + "id": "xpd-max", + "uml-id": "_DbV0QkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 35, + "is-read-only": true, + "unit": "dB", + "description": [ + "Maximum cross polarization discrimination." + ], + "uml-name": "xpdMax", + "controlType": "number" + }, + "xpd-avg": { + "id": "xpd-avg", + "uml-id": "_DbV0RkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 36, + "is-read-only": true, + "unit": "dB", + "description": [ + "Averaged cross polarization discrimination." + ], + "uml-name": "xpdAvg", + "controlType": "number" + }, + "rf-temp-min": { + "id": "rf-temp-min", + "uml-id": "_DbV0SkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 37, + "is-read-only": true, + "unit": "C", + "description": [ + "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit." + ], + "uml-name": "rfTempMin", + "controlType": "number" + }, + "rf-temp-max": { + "id": "rf-temp-max", + "uml-id": "_DbV0TkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 38, + "is-read-only": true, + "unit": "C", + "description": [ + "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit." + ], + "uml-name": "rfTempMax", + "controlType": "number" + }, + "rf-temp-avg": { + "id": "rf-temp-avg", + "uml-id": "_DbV0UkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 39, + "is-read-only": true, + "unit": "C", + "description": [ + "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit." + ], + "uml-name": "rfTempAvg", + "controlType": "number" + }, + "defect-blocks-sum": { + "id": "defect-blocks-sum", + "uml-id": "_DbV0VkQbEea3g-FxAUaYRg", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 40, + "is-read-only": true, + "unit": "blocks", + "description": [ + "Total number of blocks that were defect after receiving and could not be corrected by the FEC." + ], + "uml-name": "defectBlocksSum", + "controlType": "number" + }, + "time-period": { + "id": "time-period", + "uml-id": "_Nyme4H1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "unit": "s", + "description": [ + "Total length of the measurement period in seconds." + ], + "uml-name": "timePeriod", + "controlType": "number" + }, + "air-interface-current-performance-type": { + "id": "air-interface-current-performance-type", + "uml-id": "_pQ_y4GoHEeaZwMagYjVCHQ", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ], + "uml-name": "AirInterfaceCurrentPerformanceType" + }, + "performance-data": { + "id": "performance-data", + "uml-id": "_i5STYGz7Eeaf-__BRLM84g", + "uml-type": "ownedAttribute", + "type": "_U9tW0EQeEea3g-FxAUaYRg", + "order-number": 1, + "is-read-only": true, + "uml-name": "performanceData" + }, + "air-interface-historical-performance-type": { + "id": "air-interface-historical-performance-type", + "uml-id": "_t18kwGoHEeaZwMagYjVCHQ", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ], + "uml-name": "AirInterfaceHistoricalPerformanceType" + }, + "diversity-type": { + "id": "diversity-type", + "uml-id": "_pTliINyUEeW-SfXlFFFI0Q", + "uml-type": "uml:DataType", + "uml-name": "DiversityType" + }, + "diversity-name": { + "id": "diversity-name", + "uml-id": "_uYhboNyUEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'" + ], + "uml-name": "diversityName", + "controlType": "text" + }, + "number-of-air-interfaces-max": { + "id": "number-of-air-interfaces-max", + "uml-id": "_wKDDoNyUEeW-SfXlFFFI0Q", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "air interfaces", + "description": [ + "Maximum number of air interfaces that could be part of this kind of diversity." + ], + "uml-name": "numberOfAirInterfacesMax", + "controlType": "number" + }, + "air-interface-diversity-problem-severity-type": { + "id": "air-interface-diversity-problem-severity-type", + "uml-id": "_2kMRYGzzEeaf-__BRLM84g", + "uml-type": "uml:DataType", + "uml-name": "AirInterfaceDiversityProblemSeverityType" + }, + "air-interface-diversity-current-problem-type": { + "id": "air-interface-diversity-current-problem-type", + "uml-id": "_z1XWgMXlEeWJ6KZuc0h_vw", + "uml-type": "uml:DataType", + "uml-name": "AirInterfaceDiversityCurrentProblemType" + }, + "air-interface-diversity-performance-type": { + "id": "air-interface-diversity-performance-type", + "uml-id": "_EH3QgEQdEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the air interface diversity group." + ], + "uml-name": "AirInterfaceDiversityPerformanceType" + }, + "air-interface-diversity-current-performance-type": { + "id": "air-interface-diversity-current-performance-type", + "uml-id": "_n4wTgGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ], + "uml-name": "AirInterfaceDiversityCurrentPerformanceType" + }, + "air-interface-diversity-historical-performance-type": { + "id": "air-interface-diversity-historical-performance-type", + "uml-id": "_pG0pIGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ], + "uml-name": "AirInterfaceDiversityHistoricalPerformanceType" + }, + "tdm-structure-type": { + "id": "tdm-structure-type", + "uml-id": "_jRAQsEdoEeax2rWez10Siw", + "uml-type": "uml:DataType", + "uml-name": "TdmStructureType" + }, + "tdm-structure-name": { + "id": "tdm-structure-name", + "uml-id": "_1bJF4EdoEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'" + ], + "uml-name": "tdmStructureName", + "controlType": "text" + }, + "tdm-segment-size": { + "id": "tdm-segment-size", + "uml-id": "_hPq1oEdpEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kbit/s", + "description": [ + "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;" + ], + "uml-name": "tdmSegmentSize", + "controlType": "number" + }, + "max-number-of-segments-reservable": { + "id": "max-number-of-segments-reservable", + "uml-id": "_EJnsgEdpEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "segments", + "description": [ + "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface." + ], + "uml-name": "maxNumberOfSegmentsReservable", + "controlType": "number" + }, + "structure-problem-severity-type": { + "id": "structure-problem-severity-type", + "uml-id": "_LPgp4Gz0Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "uml-name": "StructureProblemSeverityType" + }, + "structure-current-problem-type": { + "id": "structure-current-problem-type", + "uml-id": "_UC0gAMXnEeWJ6KZuc0h_vw", + "uml-type": "uml:DataType", + "uml-name": "StructureCurrentProblemType" + }, + "structure-performance-type": { + "id": "structure-performance-type", + "uml-id": "_kzEicEQdEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the Structure." + ], + "uml-name": "StructurePerformanceType" + }, + "structure-current-performance-type": { + "id": "structure-current-performance-type", + "uml-id": "_o7jNQGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ], + "uml-name": "StructureCurrentPerformanceType" + }, + "structure-historical-performance-type": { + "id": "structure-historical-performance-type", + "uml-id": "_pNAJoGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ], + "uml-name": "StructureHistoricalPerformanceType" + }, + "container-name": { + "id": "container-name", + "uml-id": "_o0IuQMWkEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'" + ], + "uml-name": "containerName", + "controlType": "text" + }, + "number-of-time-slots-required": { + "id": "number-of-time-slots-required", + "uml-id": "_sZ82MMXXEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "timeslots", + "description": [ + "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated." + ], + "uml-name": "numberOfTimeSlotsRequired", + "controlType": "number" + }, + "tdm-time-slots-is-required": { + "id": "tdm-time-slots-is-required", + "uml-id": "_hIagINrWEeWcA7plcJPZ7A", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 3, + "is-read-only": true, + "description": [ + "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport." + ], + "uml-name": "tdmTimeSlotsIsRequired", + "controlType": "checkbox" + }, + "tdm-container-type": { + "id": "tdm-container-type", + "uml-id": "_rgbigEdjEeax2rWez10Siw", + "uml-type": "uml:DataType", + "uml-name": "TdmContainerType" + }, + "tdm-container-name": { + "id": "tdm-container-name", + "uml-id": "_rgbigkdjEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "description": [ + "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'" + ], + "uml-name": "tdmContainerName", + "controlType": "text" + }, + "tdm-container-size": { + "id": "tdm-container-size", + "uml-id": "_rgbihEdjEeax2rWez10Siw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "kbit/s", + "description": [ + "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;" + ], + "uml-name": "tdmContainerSize", + "controlType": "number" + }, + "segment-id-type": { + "id": "segment-id-type", + "uml-id": "_Nd1F4MKuEeWwLJhHQlOGSQ", + "uml-type": "uml:DataType", + "description": [ + "Identifies the segments, which are used to transport the container." + ], + "uml-name": "SegmentIDType" + }, + "structure-id-ref": { + "id": "structure-id-ref", + "uml-id": "_N4GKkMKvEeWwLJhHQlOGSQ", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "uml-name": "structureIdRef" + }, + "segment-id-ref": { + "id": "segment-id-ref", + "uml-id": "_nVubgMKvEeWwLJhHQlOGSQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": false, + "is-key": 2, + "description": [ + "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once." + ], + "uml-name": "segmentIdRef", + "controlType": "number" + }, + "segment-status-type": { + "id": "segment-status-type", + "uml-id": "_KwZVcMUCEeW3xsRKtpCLuA", + "uml-type": "uml:DataType", + "uml-name": "SegmentStatusType" + }, + "segment-status-type-id": { + "id": "segment-status-type-id", + "uml-id": "_7JBAYOLbEeWM2vUDE3Xqhw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "is-key": 1, + "uml-name": "segmentStatusTypeId", + "controlType": "number" + }, + "segment-is-reserved-for-tdm": { + "id": "segment-is-reserved-for-tdm", + "uml-id": "__1DMwMUCEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": true, + "description": [ + "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm." + ], + "uml-name": "segmentIsReservedForTdm", + "controlType": "checkbox" + }, + "operational-status": { + "id": "operational-status", + "uml-id": "_ZA94EMUCEeW3xsRKtpCLuA", + "uml-type": "ownedAttribute", + "type": "../OnfModel-CoreModel/CoreModel.uml#_lNclkLEtEeSZUdYfPSdgew", + "order-number": 3, + "is-read-only": true, + "description": [ + "Current operational status of each segment." + ], + "uml-name": "operationalStatus" + }, + "obsolete-priority-class": { + "id": "obsolete-priority-class", + "uml-id": "_ebslwMnAEeWYRsWW_rqpgw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 4, + "is-read-only": true, + "description": [ + "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank." + ], + "uml-name": "obsoletePriorityClass", + "controlType": "number" + }, + "obsolete-drop-order-rank": { + "id": "obsolete-drop-order-rank", + "uml-id": "_DbJpMMnDEeWYRsWW_rqpgw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 5, + "is-read-only": true, + "description": [ + "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList" + ], + "uml-name": "obsoleteDropOrderRank", + "controlType": "number" + }, + "container-problem-severity-type": { + "id": "container-problem-severity-type", + "uml-id": "_OMPgwGz0Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "uml-name": "ContainerProblemSeverityType" + }, + "container-current-problem-type": { + "id": "container-current-problem-type", + "uml-id": "__h1n4MXpEeWJ6KZuc0h_vw", + "uml-type": "uml:DataType", + "uml-name": "ContainerCurrentProblemType" + }, + "container-performance-type": { + "id": "container-performance-type", + "uml-id": "_U9tW0EQeEea3g-FxAUaYRg", + "uml-type": "uml:DataType", + "description": [ + "Consolidated performance information of the Container." + ], + "uml-name": "ContainerPerformanceType" + }, + "tx-ethernet-bytes-max-s": { + "id": "tx-ethernet-bytes-max-s", + "uml-id": "_MaHB8H1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": true, + "unit": "Bytes/s", + "description": [ + "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers." + ], + "uml-name": "txEthernetBytesMaxS", + "controlType": "number" + }, + "tx-ethernet-bytes-max-m": { + "id": "tx-ethernet-bytes-max-m", + "uml-id": "_M3NNoH1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 2, + "is-read-only": true, + "unit": "Bytes/min", + "description": [ + "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers." + ], + "uml-name": "txEthernetBytesMaxM", + "controlType": "number" + }, + "tx-ethernet-bytes-sum": { + "id": "tx-ethernet-bytes-sum", + "uml-id": "_NWtNEH1IEeWHjMaYlqnBcw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 3, + "is-read-only": true, + "unit": "Bytes", + "description": [ + "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers." + ], + "uml-name": "txEthernetBytesSum", + "controlType": "number" + }, + "container-current-performance-type": { + "id": "container-current-performance-type", + "uml-id": "_pA5AQGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into current performance information by inheriting from OTN_CurrentData." + ], + "uml-name": "ContainerCurrentPerformanceType" + }, + "container-historical-performance-type": { + "id": "container-historical-performance-type", + "uml-id": "_pTaToGz6Eeaf-__BRLM84g", + "uml-type": "uml:DataType", + "description": [ + "Turns performance information into historical performance information by inheriting from OTN_HistoryData." + ], + "uml-name": "ContainerHistoricalPerformanceType" + }, + "3-cz3-u-is-d-eead4-ers-mr-oj-bq": { + "id": "3-cz3-u-is-d-eead4-ers-mr-oj-bq", + "uml-id": "_3CZ3UIsDEead4ersMrOjBQ", + "enum": [ + "NON", + "IF", + "RF" + ], + "is-read-only": false, + "uml-name": "_3CZ3UIsDEead4ersMrOjBQ" + }, + "e-iml0-jh1-ee-w-udbnmm-ni-taa": { + "id": "e-iml0-jh1-ee-w-udbnmm-ni-taa", + "uml-id": "_eIml0JH1EeWUdbnmmNiTAA", + "enum": [ + "NON_ALARMED", + "WARNING", + "MINOR", + "MAJOR", + "CRITICAL" + ], + "is-read-only": false, + "description": [ + "According to ITU-T M.3160" + ], + "uml-name": "_eIml0JH1EeWUdbnmmNiTAA" + }, + "e85-ns-i99-ee-w-fluv9-kl-ll5-a": { + "id": "e85-ns-i99-ee-w-fluv9-kl-ll5-a", + "uml-id": "_e85NsI99EeWFluv9KLLl5A", + "enum": [ + "NOT_SPECIFIED", + "HORIZONTAL", + "VERTICAL" + ], + "is-read-only": false, + "uml-name": "_e85NsI99EeWFluv9KLLl5A" + }, + "da-b5-ij-rg-ee-wx-ip-ew-zq-gmw": { + "id": "da-b5-ij-rg-ee-wx-ip-ew-zq-gmw", + "uml-id": "_DaB5IJRgEeWxIPEwZQ_gmw", + "enum": [ + "HSB" + ], + "is-read-only": false, + "uml-name": "_DaB5IJRgEeWxIPEwZQ_gmw" + }, + "01-d-yj-re-ee-wx-ip-ew-zq-gmw": { + "id": "01-d-yj-re-ee-wx-ip-ew-zq-gmw", + "uml-id": "_01_dYJReEeWxIPEwZQ_gmw", + "enum": [ + "WORKING", + "PROTECTION", + "PROTECTED" + ], + "is-read-only": false, + "uml-name": "_01_dYJReEeWxIPEwZQ_gmw" + }, + "du-js8-jox-ee-wz-6-sq-lz-uedw": { + "id": "du-js8-jox-ee-wz-6-sq-lz-uedw", + "uml-id": "_DUJs8JOXEeWz-6sqLzUedw", + "enum": [ + "GROUP_DOWN", + "NOT_ALL_AI_ACTIVE", + "ALL_AI_ACTIVE" + ], + "is-read-only": false, + "uml-name": "_DUJs8JOXEeWz-6sqLzUedw" + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json new file mode 100755 index 000000000..06013245b --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json @@ -0,0 +1,257 @@ +{ + "module": { + "name": "microwave-model", + "microwave-model": { + "wire-interface-pac": { + "type": "list", + "key": "layer-protocol", + "wirebased-interface-capability": { + "name": "wirebased-interface-capability", + "local-name": "capability", + "type": "container" + }, + "wirebased-interface-configuration": { + "name": "wirebased-interface-configuration", + "local-name": "configuration", + "type": "container" + }, + "wirebased-interface-status": { + "name": "wirebased-interface-status", + "local-name": "status", + "type": "container" + }, + "wirebased-interface-current-problems": { + "name": "wirebased-interface-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "wirebased-interface-current-performance": { + "name": "wirebased-interface-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "wirebased-interface-historical-performances": { + "name": "wirebased-interface-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "mw-air-interface-pac": { + "type": "list", + "key": "layer-protocol", + "air-interface-capability": { + "name": "air-interface-capability", + "local-name": "capability", + "type": "container" + }, + "air-interface-configuration": { + "name": "air-interface-configuration", + "local-name": "configuration", + "type": "container" + }, + "air-interface-status": { + "name": "air-interface-status", + "local-name": "status", + "type": "container" + }, + "air-interface-current-problems": { + "name": "air-interface-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "air-interface-current-performance": { + "name": "air-interface-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "air-interface-historical-performances": { + "name": "air-interface-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "co-channel-group": { + "type": "list", + "key": "co-channel-group-id" + }, + "mw-air-interface-hsb-end-point-pac": { + "type": "list", + "key": "endpoint" + }, + "mw-air-interface-hsb-fc-switch-pac": { + "type": "list", + "key": "fcswitch" + }, + "mw-air-interface-diversity-pac": { + "type": "list", + "key": "layer-protocol", + "air-interface-diversity-capability": { + "name": "air-interface-diversity-capability", + "local-name": "capability", + "type": "container" + }, + "air-interface-diversity-configuration": { + "name": "air-interface-diversity-configuration", + "local-name": "configuration", + "type": "container" + }, + "air-interface-diversity-status": { + "name": "air-interface-diversity-status", + "local-name": "status", + "type": "container" + }, + "air-interface-diversity-current-problems": { + "name": "air-interface-diversity-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "air-interface-diversity-current-performance": { + "name": "air-interface-diversity-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "air-interface-diversity-historical-performances": { + "name": "air-interface-diversity-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "mw-pure-ethernet-structure-pac": { + "type": "list", + "key": "layer-protocol", + "pure-ethernet-structure-capability": { + "name": "pure-ethernet-structure-capability", + "local-name": "capability", + "type": "container" + }, + "pure-ethernet-structure-configuration": { + "name": "pure-ethernet-structure-configuration", + "local-name": "configuration", + "type": "container" + }, + "pure-ethernet-structure-status": { + "name": "pure-ethernet-structure-status", + "local-name": "status", + "type": "container" + }, + "pure-ethernet-structure-current-problems": { + "name": "pure-ethernet-structure-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "pure-ethernet-structure-current-performance": { + "name": "pure-ethernet-structure-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "pure-ethernet-structure-historical-performances": { + "name": "pure-ethernet-structure-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "mw-hybrid-mw-structure-pac": { + "type": "list", + "key": "layer-protocol", + "hybrid-mw-structure-capability": { + "name": "hybrid-mw-structure-capability", + "local-name": "capability", + "type": "container" + }, + "hybrid-mw-structure-configuration": { + "name": "hybrid-mw-structure-configuration", + "local-name": "configuration", + "type": "container" + }, + "hybrid-mw-structure-status": { + "name": "hybrid-mw-structure-status", + "local-name": "status", + "type": "container" + }, + "hybrid-mw-structure-current-problems": { + "name": "hybrid-mw-structure-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "hybrid-mw-structure-current-performance": { + "name": "hybrid-mw-structure-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "hybrid-mw-structure-historical-performances": { + "name": "hybrid-mw-structure-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "mw-ethernet-container-pac": { + "type": "list", + "key": "layer-protocol", + "ethernet-container-capability": { + "name": "ethernet-container-capability", + "local-name": "capability", + "type": "container" + }, + "ethernet-container-configuration": { + "name": "ethernet-container-configuration", + "local-name": "configuration", + "type": "container" + }, + "ethernet-container-status": { + "name": "ethernet-container-status", + "local-name": "status", + "type": "container" + }, + "ethernet-container-current-problems": { + "name": "ethernet-container-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "ethernet-container-current-performance": { + "name": "ethernet-container-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "ethernet-container-historical-performances": { + "name": "ethernet-container-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "mw-tdm-container-pac": { + "type": "list", + "key": "layer-protocol", + "tdm-container-capability": { + "name": "tdm-container-capability", + "local-name": "capability", + "type": "container" + }, + "tdm-container-configuration": { + "name": "tdm-container-configuration", + "local-name": "configuration", + "type": "container" + }, + "tdm-container-status": { + "name": "tdm-container-status", + "local-name": "status", + "type": "container" + }, + "tdm-container-current-problems": { + "name": "tdm-container-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "tdm-container-current-performance": { + "name": "tdm-container-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "tdm-container-historical-performances": { + "name": "tdm-container-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json new file mode 100644 index 000000000..9b6be2915 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json @@ -0,0 +1,3548 @@ +{ "schema-information": { + +"microwave-model": { +"id": "microwave-model", +"is-read-only": false, +"description": ["This module contains a collection of YANG definitions for managing wireless networks. This model is for vendor agnostic management of wireless network elements."] +}, +"rf-to-remote": { +"id": "rf-to-remote", +"is-read-only": false, +"description": ["Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units."] +}, +"rf-to-local": { +"id": "rf-to-local", +"is-read-only": false, +"description": ["Returning the header information of the local site back to the local site on the radio interface between both outdoor units."] +}, +"if-to-remote": { +"id": "if-to-remote", +"is-read-only": false, +"description": ["Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit."] +}, +"if-to-local": { +"id": "if-to-local", +"is-read-only": false, +"description": ["Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit."] +}, +"none": { +"id": "none", +"is-read-only": false, +"description": ["none"] +}, +"if": { +"id": "if", +"is-read-only": false, +"description": ["Intermediate Frequency on the interface between indoor and outdoor unit."] +}, +"rf": { +"id": "rf", +"is-read-only": false, +"description": ["Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site."] +}, +"loop-back-type": { +"id": "loop-back-type", +"is-read-only": false, +"description": ["none"] +}, +"non-alarmed": { +"id": "non-alarmed", +"is-read-only": false, +"description": ["none"] +}, +"warning": { +"id": "warning", +"is-read-only": false, +"description": ["none"] +}, +"minor": { +"id": "minor", +"is-read-only": false, +"description": ["none"] +}, +"major": { +"id": "major", +"is-read-only": false, +"description": ["none"] +}, +"critical": { +"id": "critical", +"is-read-only": false, +"description": ["none"] +}, +"severity-type": { +"id": "severity-type", +"is-read-only": false, +"description": ["According to ITU-T M.3160"] +}, +"supported-channel-plan": { +"id": "supported-channel-plan", +"is-read-only": false, +"description": ["Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database."] +}, +"duplex-distance-is-variable": { +"id": "duplex-distance-is-variable", +"is-read-only": false, +"description": ["To be set on 'true', if the distance between transmitted and received frequency is variable."] +}, +"duplex-distance-list": { +"id": "duplex-distance-list", +"is-read-only": false, +"description": ["Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable."] +}, +"duplex-distance": { +"id": "duplex-distance", +"is-read-only": false, +"description": ["Distance between transmitted and received frequency."] +}, +"auto-freq-select-is-avail": { +"id": "auto-freq-select-is-avail", +"is-read-only": false, +"description": ["In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."] +}, +"transmission-mode-list": { +"id": "transmission-mode-list", +"is-read-only": false, +"description": ["none"] +}, +"channel-plan-type-g": { +"id": "channel-plan-type-g", +"is-read-only": false, +"description": ["none"] +}, +"transmission-mode-id": { +"id": "transmission-mode-id", +"is-read-only": false, +"description": ["Indentifies the transmissionMode for internal reference."] +}, +"transmission-mode-name": { +"id": "transmission-mode-name", +"is-read-only": false, +"description": ["Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 028-4QAM-188/204-1"] +}, +"channel-bandwidth": { +"id": "channel-bandwidth", +"is-read-only": false, +"description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"] +}, +"modulation-scheme": { +"id": "modulation-scheme", +"is-read-only": false, +"description": ["Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')."] +}, +"code-rate": { +"id": "code-rate", +"is-read-only": false, +"description": ["Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)."] +}, +"symbol-rate-reduction-factor": { +"id": "symbol-rate-reduction-factor", +"is-read-only": false, +"description": ["Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK."] +}, +"tx-power-min": { +"id": "tx-power-min", +"is-read-only": false, +"description": ["Value of the minimum transmit power the modem can operate in dBm."] +}, +"tx-power-max": { +"id": "tx-power-max", +"is-read-only": false, +"description": ["Value of the maximum transmit power the modem can operate in dBm."] +}, +"rx-threshold": { +"id": "rx-threshold", +"is-read-only": false, +"description": ["Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."] +}, +"am-upshift-level": { +"id": "am-upshift-level", +"is-read-only": false, +"description": ["Value of the receive level that has to be exceeded to shift into a higher modulation scheme."] +}, +"am-downshift-level": { +"id": "am-downshift-level", +"is-read-only": false, +"description": ["Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."] +}, +"xpic-is-avail": { +"id": "xpic-is-avail", +"is-read-only": false, +"description": ["In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case."] +}, +"transmission-mode-type-g": { +"id": "transmission-mode-type-g", +"is-read-only": false, +"description": ["none"] +}, +"not-specified": { +"id": "not-specified", +"is-read-only": false, +"description": ["none"] +}, +"horizontal": { +"id": "horizontal", +"is-read-only": false, +"description": ["none"] +}, +"vertical": { +"id": "vertical", +"is-read-only": false, +"description": ["none"] +}, +"polarization-type": { +"id": "polarization-type", +"is-read-only": false, +"description": ["none"] +}, +"es": { +"id": "es", +"is-read-only": false, +"description": ["Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es ."] +}, +"ses": { +"id": "ses", +"is-read-only": false, +"description": ["Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses ."] +}, +"cses": { +"id": "cses", +"is-read-only": false, +"description": ["Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses ."] +}, +"not-specified": { +"id": "not-specified", +"is-read-only": false, +"description": ["none"] +}, +"g826-type": { +"id": "g826-type", +"is-read-only": false, +"description": ["none"] +}, +"g826-value-kind": { +"id": "g826-value-kind", +"is-read-only": false, +"description": ["Kind of performance value that shall be equipped with a threshold alarm."] +}, +"granularity-period": { +"id": "granularity-period", +"is-read-only": false, +"description": ["Period of the performance data collection."] +}, +"alarm-raising-threshold": { +"id": "alarm-raising-threshold", +"is-read-only": false, +"description": ["Number of events required for raising the threshold cross alarm."] +}, +"alarm-clearing-threshold": { +"id": "alarm-clearing-threshold", +"is-read-only": false, +"description": ["Number of events required for clearing the threshold cross alarm."] +}, +"threshold-cross-alarm-type-g": { +"id": "threshold-cross-alarm-type-g", +"is-read-only": false, +"description": ["Allows defining a threshold cross alarm."] +}, +"problem-kind-name": { +"id": "problem-kind-name", +"is-read-only": false, +"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"] +}, +"problem-kind-severity": { +"id": "problem-kind-severity", +"is-read-only": false, +"description": ["Severity of this type of alarm."] +}, +"air-interface-problem-severity-type-g": { +"id": "air-interface-problem-severity-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-name": { +"id": "problem-name", +"is-read-only": false, +"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"] +}, +"air-interface-current-problem-type-g": { +"id": "air-interface-current-problem-type-g", +"is-read-only": false, +"description": ["none"] +}, +"transmission-mode": { +"id": "transmission-mode", +"is-read-only": false, +"description": ["Operated transmission mode."] +}, +"time": { +"id": "time", +"is-read-only": false, +"description": ["Sum of all seconds the transmitter operated the transmission mode."] +}, +"time-x-states-type-g": { +"id": "time-x-states-type-g", +"is-read-only": false, +"description": ["none"] +}, +"es": { +"id": "es", +"is-read-only": false, +"description": ["Number of errored seconds."] +}, +"ses": { +"id": "ses", +"is-read-only": false, +"description": ["Number of severely errored seconds."] +}, +"cses": { +"id": "cses", +"is-read-only": false, +"description": ["Number of consecutive severely errored seconds."] +}, +"unavailability": { +"id": "unavailability", +"is-read-only": false, +"description": ["Total time of unavailability in seconds."] +}, +"tx-level-min": { +"id": "tx-level-min", +"is-read-only": false, +"description": ["Minimum transmit power. Signed integers are required."] +}, +"tx-level-max": { +"id": "tx-level-max", +"is-read-only": false, +"description": ["Maximum transmit power. Signed integers are required."] +}, +"tx-level-avg": { +"id": "tx-level-avg", +"is-read-only": false, +"description": ["Averaged transmit power. Signed integers are required."] +}, +"rx-level-min": { +"id": "rx-level-min", +"is-read-only": false, +"description": ["Minimum receive level. Signed integers are required."] +}, +"rx-level-max": { +"id": "rx-level-max", +"is-read-only": false, +"description": ["Maximum receive level. Signed integers are required."] +}, +"rx-level-avg": { +"id": "rx-level-avg", +"is-read-only": false, +"description": ["Averaged receive level. Signed integers are required."] +}, +"time-x-states-list": { +"id": "time-x-states-list", +"is-read-only": false, +"description": ["Time period the transmitter operated in the respective transmission mode."] +}, +"time2-states": { +"id": "time2-states", +"is-read-only": false, +"description": ["Sum of all seconds the transmitter operated in e.g. BPSK."] +}, +"time4-states-s": { +"id": "time4-states-s", +"is-read-only": false, +"description": ["none"] +}, +"time4-states": { +"id": "time4-states", +"is-read-only": false, +"description": ["none"] +}, +"time8-states": { +"id": "time8-states", +"is-read-only": false, +"description": ["none"] +}, +"time16-states-s": { +"id": "time16-states-s", +"is-read-only": false, +"description": ["none"] +}, +"time16-states": { +"id": "time16-states", +"is-read-only": false, +"description": ["none"] +}, +"time32-states": { +"id": "time32-states", +"is-read-only": false, +"description": ["none"] +}, +"time64-states": { +"id": "time64-states", +"is-read-only": false, +"description": ["none"] +}, +"time128-states": { +"id": "time128-states", +"is-read-only": false, +"description": ["none"] +}, +"time256-states": { +"id": "time256-states", +"is-read-only": false, +"description": ["none"] +}, +"time512-states": { +"id": "time512-states", +"is-read-only": false, +"description": ["none"] +}, +"time512-states-l": { +"id": "time512-states-l", +"is-read-only": false, +"description": ["none"] +}, +"time1024-states": { +"id": "time1024-states", +"is-read-only": false, +"description": ["none"] +}, +"time1024-states-l": { +"id": "time1024-states-l", +"is-read-only": false, +"description": ["none"] +}, +"time2048-states": { +"id": "time2048-states", +"is-read-only": false, +"description": ["none"] +}, +"time2048-states-l": { +"id": "time2048-states-l", +"is-read-only": false, +"description": ["none"] +}, +"time4096-states": { +"id": "time4096-states", +"is-read-only": false, +"description": ["none"] +}, +"time4096-states-l": { +"id": "time4096-states-l", +"is-read-only": false, +"description": ["none"] +}, +"time8192-states": { +"id": "time8192-states", +"is-read-only": false, +"description": ["none"] +}, +"time8192-states-l": { +"id": "time8192-states-l", +"is-read-only": false, +"description": ["none"] +}, +"snir-min": { +"id": "snir-min", +"is-read-only": false, +"description": ["Minimum signal to (noise+interference) ratio."] +}, +"snir-max": { +"id": "snir-max", +"is-read-only": false, +"description": ["Maximum signal to (noise+interference) ratio."] +}, +"snir-avg": { +"id": "snir-avg", +"is-read-only": false, +"description": ["Averaged signal to (noise+interference) ratio."] +}, +"xpd-min": { +"id": "xpd-min", +"is-read-only": false, +"description": ["Minimum cross polarization discrimination."] +}, +"xpd-max": { +"id": "xpd-max", +"is-read-only": false, +"description": ["Maximum cross polarization discrimination."] +}, +"xpd-avg": { +"id": "xpd-avg", +"is-read-only": false, +"description": ["Averaged cross polarization discrimination."] +}, +"rf-temp-min": { +"id": "rf-temp-min", +"is-read-only": false, +"description": ["Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."] +}, +"rf-temp-max": { +"id": "rf-temp-max", +"is-read-only": false, +"description": ["Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."] +}, +"rf-temp-avg": { +"id": "rf-temp-avg", +"is-read-only": false, +"description": ["Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."] +}, +"defect-blocks-sum": { +"id": "defect-blocks-sum", +"is-read-only": false, +"description": ["Total number of blocks that were defect after receiving and could not be corrected by the FEC."] +}, +"time-period": { +"id": "time-period", +"is-read-only": false, +"description": ["Total length of the measurement period."] +}, +"air-interface-performance-type-g": { +"id": "air-interface-performance-type-g", +"is-read-only": false, +"description": ["Consolidated performance information of the air interface."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-current-performance-type-g": { +"id": "air-interface-current-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-historical-performance-type-g": { +"id": "air-interface-historical-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] +}, +"hsb": { +"id": "hsb", +"is-read-only": false, +"description": ["none"] +}, +"protection-type": { +"id": "protection-type", +"is-read-only": false, +"description": ["none"] +}, +"working": { +"id": "working", +"is-read-only": false, +"description": ["none"] +}, +"protection": { +"id": "protection", +"is-read-only": false, +"description": ["none"] +}, +"protected": { +"id": "protected", +"is-read-only": false, +"description": ["none"] +}, +"role-type": { +"id": "role-type", +"is-read-only": false, +"description": ["none"] +}, +"diversity-name": { +"id": "diversity-name", +"is-read-only": false, +"description": ["Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"] +}, +"number-of-air-interfaces-max": { +"id": "number-of-air-interfaces-max", +"is-read-only": false, +"description": ["Maximum number of air interfaces that could be part of this kind of diversity."] +}, +"diversity-type-g": { +"id": "diversity-type-g", +"is-read-only": false, +"description": ["none"] +}, +"group-down": { +"id": "group-down", +"is-read-only": false, +"description": ["All air interfaces that are members of the diversity configuration are down."] +}, +"not-all-ai-active": { +"id": "not-all-ai-active", +"is-read-only": false, +"description": ["At least one, but not all of the air interfaces that are part of the diversity configuration is not working."] +}, +"all-ai-active": { +"id": "all-ai-active", +"is-read-only": false, +"description": ["All air interfaces that are part of the diversity configuration are working."] +}, +"air-interface-diversity-status-type": { +"id": "air-interface-diversity-status-type", +"is-read-only": false, +"description": ["none"] +}, +"problem-kind-name": { +"id": "problem-kind-name", +"is-read-only": false, +"description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"] +}, +"problem-kind-severity": { +"id": "problem-kind-severity", +"is-read-only": false, +"description": ["Severity of this type of alarm."] +}, +"air-interface-diversity-problem-severity-type-g": { +"id": "air-interface-diversity-problem-severity-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-name": { +"id": "problem-name", +"is-read-only": false, +"description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"] +}, +"air-interface-diversity-current-problem-type-g": { +"id": "air-interface-diversity-current-problem-type-g", +"is-read-only": false, +"description": ["none"] +}, +"snir-min": { +"id": "snir-min", +"is-read-only": false, +"description": ["Minimum signal to (noise+interference) ratio of the combined signals."] +}, +"snir-max": { +"id": "snir-max", +"is-read-only": false, +"description": ["Maximum signal to (noise+interference) ratio of the combined signals."] +}, +"snir-avg": { +"id": "snir-avg", +"is-read-only": false, +"description": ["Average signal to (noise+interference) ratio of the combined signals."] +}, +"air-interface-diversity-performance-type-g": { +"id": "air-interface-diversity-performance-type-g", +"is-read-only": false, +"description": ["Consolidated performance information of the air interface diversity group."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-current-performance-type-g": { +"id": "air-interface-diversity-current-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-historical-performance-type-g": { +"id": "air-interface-diversity-historical-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] +}, +"tdm-structure-name": { +"id": "tdm-structure-name", +"is-read-only": false, +"description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"] +}, +"tdm-segment-size": { +"id": "tdm-segment-size", +"is-read-only": false, +"description": ["Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"] +}, +"max-number-of-segments-reservable": { +"id": "max-number-of-segments-reservable", +"is-read-only": false, +"description": ["Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."] +}, +"tdm-structure-type-g": { +"id": "tdm-structure-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-kind-name": { +"id": "problem-kind-name", +"is-read-only": false, +"description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"] +}, +"problem-kind-severity": { +"id": "problem-kind-severity", +"is-read-only": false, +"description": ["Severity of this type of alarm."] +}, +"structure-problem-severity-type-g": { +"id": "structure-problem-severity-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-name": { +"id": "problem-name", +"is-read-only": false, +"description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"] +}, +"structure-current-problem-type-g": { +"id": "structure-current-problem-type-g", +"is-read-only": false, +"description": ["none"] +}, +"time-period": { +"id": "time-period", +"is-read-only": false, +"description": ["Total length of the measurement period in seconds."] +}, +"es": { +"id": "es", +"is-read-only": false, +"description": ["Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] +}, +"ses": { +"id": "ses", +"is-read-only": false, +"description": ["Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] +}, +"cses": { +"id": "cses", +"is-read-only": false, +"description": ["Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] +}, +"unavailability": { +"id": "unavailability", +"is-read-only": false, +"description": ["Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."] +}, +"rx-level-min": { +"id": "rx-level-min", +"is-read-only": false, +"description": ["Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."] +}, +"rx-level-max": { +"id": "rx-level-max", +"is-read-only": false, +"description": ["Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."] +}, +"rx-level-avg": { +"id": "rx-level-avg", +"is-read-only": false, +"description": ["Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."] +}, +"structure-performance-type-g": { +"id": "structure-performance-type-g", +"is-read-only": false, +"description": ["Consolidated performance information of the Structure."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"structure-current-performance-type-g": { +"id": "structure-current-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"structure-historical-performance-type-g": { +"id": "structure-historical-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] +}, +"container-name": { +"id": "container-name", +"is-read-only": false, +"description": ["Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"] +}, +"number-of-time-slots-required": { +"id": "number-of-time-slots-required", +"is-read-only": false, +"description": ["Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated."] +}, +"tdm-time-slots-is-required": { +"id": "tdm-time-slots-is-required", +"is-read-only": false, +"description": ["Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport."] +}, +"bundling-is-avail": { +"id": "bundling-is-avail", +"is-read-only": false, +"description": ["If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'."] +}, +"container-type-g": { +"id": "container-type-g", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-name": { +"id": "tdm-container-name", +"is-read-only": false, +"description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"] +}, +"tdm-container-size": { +"id": "tdm-container-size", +"is-read-only": false, +"description": ["Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"] +}, +"tdm-container-type-g": { +"id": "tdm-container-type-g", +"is-read-only": false, +"description": ["none"] +}, +"structure-id-ref": { +"id": "structure-id-ref", +"is-read-only": false, +"description": ["none"] +}, +"segment-id-ref": { +"id": "segment-id-ref", +"is-read-only": false, +"description": ["Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."] +}, +"segment-id-type-g": { +"id": "segment-id-type-g", +"is-read-only": false, +"description": ["Identifies the segments, which are used to transport the container."] +}, +"segment-status-type-id": { +"id": "segment-status-type-id", +"is-read-only": false, +"description": ["none"] +}, +"segment-is-reserved-for-tdm": { +"id": "segment-is-reserved-for-tdm", +"is-read-only": false, +"description": ["The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."] +}, +"operational-status": { +"id": "operational-status", +"is-read-only": false, +"description": ["Current operational status of each segment."] +}, +"obsolete-priority-class": { +"id": "obsolete-priority-class", +"is-read-only": false, +"description": ["PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank."] +}, +"obsolete-drop-order-rank": { +"id": "obsolete-drop-order-rank", +"is-read-only": false, +"description": ["In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList"] +}, +"segment-status-type-g": { +"id": "segment-status-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-kind-name": { +"id": "problem-kind-name", +"is-read-only": false, +"description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"] +}, +"problem-kind-severity": { +"id": "problem-kind-severity", +"is-read-only": false, +"description": ["Severity of this type of alarm."] +}, +"container-problem-severity-type-g": { +"id": "container-problem-severity-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-name": { +"id": "problem-name", +"is-read-only": false, +"description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"] +}, +"container-current-problem-type-g": { +"id": "container-current-problem-type-g", +"is-read-only": false, +"description": ["none"] +}, +"tx-ethernet-bytes-max-s": { +"id": "tx-ethernet-bytes-max-s", +"is-read-only": false, +"description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."] +}, +"tx-ethernet-bytes-max-m": { +"id": "tx-ethernet-bytes-max-m", +"is-read-only": false, +"description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."] +}, +"tx-ethernet-bytes-sum": { +"id": "tx-ethernet-bytes-sum", +"is-read-only": false, +"description": ["Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."] +}, +"time-period": { +"id": "time-period", +"is-read-only": false, +"description": ["Total length of the measurement period in seconds."] +}, +"container-performance-type-g": { +"id": "container-performance-type-g", +"is-read-only": false, +"description": ["Consolidated performance information of the Container."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"container-current-performance-type-g": { +"id": "container-current-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"container-historical-performance-type-g": { +"id": "container-historical-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] +}, +"gbic": { +"id": "gbic", +"is-read-only": false, +"description": ["none"] +}, +"soldered-connector": { +"id": "soldered-connector", +"is-read-only": false, +"description": ["none"] +}, +"sfp-sfp-plus-sfp28": { +"id": "sfp-sfp-plus-sfp28", +"is-read-only": false, +"description": ["none"] +}, +"xbi-300-pin": { +"id": "xbi-300-pin", +"is-read-only": false, +"description": ["none"] +}, +"xenpak": { +"id": "xenpak", +"is-read-only": false, +"description": ["none"] +}, +"xfp": { +"id": "xfp", +"is-read-only": false, +"description": ["none"] +}, +"xfp-e": { +"id": "xfp-e", +"is-read-only": false, +"description": ["none"] +}, +"xpak": { +"id": "xpak", +"is-read-only": false, +"description": ["none"] +}, +"x2": { +"id": "x2", +"is-read-only": false, +"description": ["none"] +}, +"dwdm-sfp-sfp-plus": { +"id": "dwdm-sfp-sfp-plus", +"is-read-only": false, +"description": ["none"] +}, +"qsfp": { +"id": "qsfp", +"is-read-only": false, +"description": ["none"] +}, +"qsfp-plus": { +"id": "qsfp-plus", +"is-read-only": false, +"description": ["none"] +}, +"cxp": { +"id": "cxp", +"is-read-only": false, +"description": ["none"] +}, +"shielded-mini-multilane-hd-4-x": { +"id": "shielded-mini-multilane-hd-4-x", +"is-read-only": false, +"description": ["none"] +}, +"shielded-mini-multilane-hd-8-x": { +"id": "shielded-mini-multilane-hd-8-x", +"is-read-only": false, +"description": ["none"] +}, +"qsfp28": { +"id": "qsfp28", +"is-read-only": false, +"description": ["none"] +}, +"cxp2": { +"id": "cxp2", +"is-read-only": false, +"description": ["none"] +}, +"cdfp-style1-style2": { +"id": "cdfp-style1-style2", +"is-read-only": false, +"description": ["none"] +}, +"shielded-mini-multilane-hd-4-x-fan-out": { +"id": "shielded-mini-multilane-hd-4-x-fan-out", +"is-read-only": false, +"description": ["none"] +}, +"shielded-mini-multilane-hd-8-x-fan-out": { +"id": "shielded-mini-multilane-hd-8-x-fan-out", +"is-read-only": false, +"description": ["none"] +}, +"cdfp-style3": { +"id": "cdfp-style3", +"is-read-only": false, +"description": ["none"] +}, +"qsfp-micro": { +"id": "qsfp-micro", +"is-read-only": false, +"description": ["none"] +}, +"qsfp-dd": { +"id": "qsfp-dd", +"is-read-only": false, +"description": ["none"] +}, +"qsfp-plus-rate-select-v1": { +"id": "qsfp-plus-rate-select-v1", +"is-read-only": false, +"description": ["none"] +}, +"qsfp-plus-rate-select-v2": { +"id": "qsfp-plus-rate-select-v2", +"is-read-only": false, +"description": ["none"] +}, +"not-yet-defined": { +"id": "not-yet-defined", +"is-read-only": false, +"description": ["none"] +}, +"mii-kind-type": { +"id": "mii-kind-type", +"is-read-only": false, +"description": ["none"] +}, +"sc": { +"id": "sc", +"is-read-only": false, +"description": ["Subscriber Connector"] +}, +"fibre-channel-style-1": { +"id": "fibre-channel-style-1", +"is-read-only": false, +"description": ["Copper connector"] +}, +"fibre-channel-style-2": { +"id": "fibre-channel-style-2", +"is-read-only": false, +"description": ["Copper connector"] +}, +"bnc-tnc": { +"id": "bnc-tnc", +"is-read-only": false, +"description": ["Bayonet/Threaded Neill-Concelman"] +}, +"fc": { +"id": "fc", +"is-read-only": false, +"description": ["Fibre Channel coax headers"] +}, +"fiber-jack": { +"id": "fiber-jack", +"is-read-only": false, +"description": ["none"] +}, +"lc": { +"id": "lc", +"is-read-only": false, +"description": ["Lucent Connector"] +}, +"mt-rj": { +"id": "mt-rj", +"is-read-only": false, +"description": ["Mechanical Transfer - Registered Jack"] +}, +"mu": { +"id": "mu", +"is-read-only": false, +"description": ["Multiple Optical"] +}, +"sg": { +"id": "sg", +"is-read-only": false, +"description": ["none"] +}, +"optical-pigtail": { +"id": "optical-pigtail", +"is-read-only": false, +"description": ["none"] +}, +"mpo1-x12": { +"id": "mpo1-x12", +"is-read-only": false, +"description": ["Multifiber Parallel Optic"] +}, +"mpo2-x16": { +"id": "mpo2-x16", +"is-read-only": false, +"description": ["Multifiber Parallel Optic"] +}, +"hssdc-ii": { +"id": "hssdc-ii", +"is-read-only": false, +"description": ["High Speed Serial Data Connector"] +}, +"copper-pigtail": { +"id": "copper-pigtail", +"is-read-only": false, +"description": ["none"] +}, +"rj45": { +"id": "rj45", +"is-read-only": false, +"description": ["8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7"] +}, +"no-seperable-connector": { +"id": "no-seperable-connector", +"is-read-only": false, +"description": ["none"] +}, +"mxc2-x16": { +"id": "mxc2-x16", +"is-read-only": false, +"description": ["none"] +}, +"st": { +"id": "st", +"is-read-only": false, +"description": ["according to IEC 60874-10:1992, also often called BFOC/2.5"] +}, +"not-yet-defined": { +"id": "not-yet-defined", +"is-read-only": false, +"description": ["none"] +}, +"mdi-kind-type": { +"id": "mdi-kind-type", +"is-read-only": false, +"description": ["none"] +}, +"tp-cat3": { +"id": "tp-cat3", +"is-read-only": false, +"description": ["none"] +}, +"tp-cat5": { +"id": "tp-cat5", +"is-read-only": false, +"description": ["none"] +}, +"tp-cat6": { +"id": "tp-cat6", +"is-read-only": false, +"description": ["none"] +}, +"tp-cat8": { +"id": "tp-cat8", +"is-read-only": false, +"description": ["none"] +}, +"single-mode": { +"id": "single-mode", +"is-read-only": false, +"description": ["none"] +}, +"multi-mode": { +"id": "multi-mode", +"is-read-only": false, +"description": ["none"] +}, +"not-yet-defined": { +"id": "not-yet-defined", +"is-read-only": false, +"description": ["none"] +}, +"medium-kind-type": { +"id": "medium-kind-type", +"is-read-only": false, +"description": ["none"] +}, +"10-base5": { +"id": "10-base5", +"is-read-only": false, +"description": ["Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8"] +}, +"foirl": { +"id": "foirl", +"is-read-only": false, +"description": ["FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9"] +}, +"10-base2": { +"id": "10-base2", +"is-read-only": false, +"description": ["Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10"] +}, +"10-broad36": { +"id": "10-broad36", +"is-read-only": false, +"description": ["Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11"] +}, +"10-base-t": { +"id": "10-base-t", +"is-read-only": false, +"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown"] +}, +"10-base-thd": { +"id": "10-base-thd", +"is-read-only": false, +"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode"] +}, +"10-base-tfd": { +"id": "10-base-tfd", +"is-read-only": false, +"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode"] +}, +"10-base-fp": { +"id": "10-base-fp", +"is-read-only": false, +"description": ["Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16"] +}, +"10-base-fb": { +"id": "10-base-fb", +"is-read-only": false, +"description": ["Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17"] +}, +"10-base-fl": { +"id": "10-base-fl", +"is-read-only": false, +"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown"] +}, +"10-base-flhd": { +"id": "10-base-flhd", +"is-read-only": false, +"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode"] +}, +"10-base-flfd": { +"id": "10-base-flfd", +"is-read-only": false, +"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode"] +}, +"100-base-t4": { +"id": "100-base-t4", +"is-read-only": false, +"description": ["Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23"] +}, +"100-base-tx": { +"id": "100-base-tx", +"is-read-only": false, +"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown"] +}, +"100-base-txhd": { +"id": "100-base-txhd", +"is-read-only": false, +"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode"] +}, +"100-base-txfd": { +"id": "100-base-txfd", +"is-read-only": false, +"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode"] +}, +"100-base-bx10-d": { +"id": "100-base-bx10-d", +"is-read-only": false, +"description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58"] +}, +"100-base-bx10-u": { +"id": "100-base-bx10-u", +"is-read-only": false, +"description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58"] +}, +"100-base-fx": { +"id": "100-base-fx", +"is-read-only": false, +"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown"] +}, +"100-base-fxhd": { +"id": "100-base-fxhd", +"is-read-only": false, +"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode"] +}, +"100-base-fxfd": { +"id": "100-base-fxfd", +"is-read-only": false, +"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode"] +}, +"100-base-lx10": { +"id": "100-base-lx10", +"is-read-only": false, +"description": ["Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58"] +}, +"100-base-t2": { +"id": "100-base-t2", +"is-read-only": false, +"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown"] +}, +"100-base-t2-hd": { +"id": "100-base-t2-hd", +"is-read-only": false, +"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode"] +}, +"100-base-t2-fd": { +"id": "100-base-t2-fd", +"is-read-only": false, +"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode"] +}, +"1000-base-x": { +"id": "1000-base-x", +"is-read-only": false, +"description": ["X as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown"] +}, +"1000-base-bx10-d": { +"id": "1000-base-bx10-d", +"is-read-only": false, +"description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59"] +}, +"1000-base-bx10-u": { +"id": "1000-base-bx10-u", +"is-read-only": false, +"description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59"] +}, +"1000-base-xhd": { +"id": "1000-base-xhd", +"is-read-only": false, +"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown"] +}, +"1000-base-xfd": { +"id": "1000-base-xfd", +"is-read-only": false, +"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown"] +}, +"1000-base-lx": { +"id": "1000-base-lx", +"is-read-only": false, +"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"] +}, +"1000-base-lxhd": { +"id": "1000-base-lxhd", +"is-read-only": false, +"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"] +}, +"1000-base-lxfd": { +"id": "1000-base-lxfd", +"is-read-only": false, +"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"] +}, +"1000-base-lx10": { +"id": "1000-base-lx10", +"is-read-only": false, +"description": ["Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59"] +}, +"1000-base-sx": { +"id": "1000-base-sx", +"is-read-only": false, +"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"] +}, +"1000-base-sxhd": { +"id": "1000-base-sxhd", +"is-read-only": false, +"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"] +}, +"1000-base-sxfd": { +"id": "1000-base-sxfd", +"is-read-only": false, +"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"] +}, +"1000-base-cx": { +"id": "1000-base-cx", +"is-read-only": false, +"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown"] +}, +"1000-base-cxhd": { +"id": "1000-base-cxhd", +"is-read-only": false, +"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode"] +}, +"1000-base-cxfd": { +"id": "1000-base-cxfd", +"is-read-only": false, +"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode"] +}, +"1000-base-kx": { +"id": "1000-base-kx", +"is-read-only": false, +"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70"] +}, +"1000-base-t": { +"id": "1000-base-t", +"is-read-only": false, +"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown"] +}, +"1000-base-thd": { +"id": "1000-base-thd", +"is-read-only": false, +"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode"] +}, +"1000-base-tfd": { +"id": "1000-base-tfd", +"is-read-only": false, +"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode"] +}, +"10-gbase-x": { +"id": "10-gbase-x", +"is-read-only": false, +"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] +}, +"10-gbase-lx4": { +"id": "10-gbase-lx4", +"is-read-only": false, +"description": ["X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53"] +}, +"10-gbase-cx4": { +"id": "10-gbase-cx4", +"is-read-only": false, +"description": ["X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54"] +}, +"10-gbase-kx4": { +"id": "10-gbase-kx4", +"is-read-only": false, +"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71"] +}, +"10-gbase-r": { +"id": "10-gbase-r", +"is-read-only": false, +"description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] +}, +"10-gbase-er": { +"id": "10-gbase-er", +"is-read-only": false, +"description": ["R fiber over 1550nm optics as specified in 802.3 Clause 52"] +}, +"10-gbase-lr": { +"id": "10-gbase-lr", +"is-read-only": false, +"description": ["R fiber over 1310nm optics as specified in 802.3 Clause 52"] +}, +"10-gbase-sr": { +"id": "10-gbase-sr", +"is-read-only": false, +"description": ["R fiber over 850nm optics as specified in 802.3 Clause 52"] +}, +"10-gbase-lrm": { +"id": "10-gbase-lrm", +"is-read-only": false, +"description": ["R fiber over 1310 nm optics as specified in 802.3 Clause 68"] +}, +"10-gbase-kr": { +"id": "10-gbase-kr", +"is-read-only": false, +"description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72"] +}, +"10-gbase-t": { +"id": "10-gbase-t", +"is-read-only": false, +"description": ["Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55"] +}, +"10-gbase-pr-d1": { +"id": "10-gbase-pr-d1", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-d2": { +"id": "10-gbase-pr-d2", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-d3": { +"id": "10-gbase-pr-d3", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-d4": { +"id": "10-gbase-pr-d4", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-u1": { +"id": "10-gbase-pr-u1", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-u2": { +"id": "10-gbase-pr-u2", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-u3": { +"id": "10-gbase-pr-u3", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"10-gbase-pr-u4": { +"id": "10-gbase-pr-u4", +"is-read-only": false, +"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"] +}, +"40-gbase-r": { +"id": "40-gbase-r", +"is-read-only": false, +"description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] +}, +"40-gbase-kr4": { +"id": "40-gbase-kr4", +"is-read-only": false, +"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84"] +}, +"40-gbase-cr4": { +"id": "40-gbase-cr4", +"is-read-only": false, +"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"] +}, +"40-gbase-sr4": { +"id": "40-gbase-sr4", +"is-read-only": false, +"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"] +}, +"4-x10-gbase-sr": { +"id": "4-x10-gbase-sr", +"is-read-only": false, +"description": ["4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber"] +}, +"40-gbase-lr4": { +"id": "40-gbase-lr4", +"is-read-only": false, +"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87"] +}, +"40-gbase-er4": { +"id": "40-gbase-er4", +"is-read-only": false, +"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87"] +}, +"40-gbase-fr": { +"id": "40-gbase-fr", +"is-read-only": false, +"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89"] +}, +"100-gbase-r": { +"id": "100-gbase-r", +"is-read-only": false, +"description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"] +}, +"100-gbase-cr4": { +"id": "100-gbase-cr4", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92"] +}, +"100-gbase-kr4": { +"id": "100-gbase-kr4", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93"] +}, +"100-gbase-kp4": { +"id": "100-gbase-kp4", +"is-read-only": false, +"description": ["100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94"] +}, +"100-gbase-cr10": { +"id": "100-gbase-cr10", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"] +}, +"100-gbase-sr4": { +"id": "100-gbase-sr4", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95"] +}, +"100-gbase-sr10": { +"id": "100-gbase-sr10", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"] +}, +"2-x40-gbase-sr": { +"id": "2-x40-gbase-sr", +"is-read-only": false, +"description": ["2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber"] +}, +"10-x10-gbase-sr": { +"id": "10-x10-gbase-sr", +"is-read-only": false, +"description": ["10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber"] +}, +"12-x10-gbase-sr": { +"id": "12-x10-gbase-sr", +"is-read-only": false, +"description": ["12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber"] +}, +"100-gbase-lr4": { +"id": "100-gbase-lr4", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88"] +}, +"100-gbase-er4": { +"id": "100-gbase-er4", +"is-read-only": false, +"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88"] +}, +"not-yet-defined": { +"id": "not-yet-defined", +"is-read-only": false, +"description": ["none"] +}, +"pmd-name-type": { +"id": "pmd-name-type", +"is-read-only": false, +"description": ["none"] +}, +"signal-ordering-kind-name": { +"id": "signal-ordering-kind-name", +"is-read-only": false, +"description": ["To be filled according to TR-541. Must be unique for referencing during configuration of the interface."] +}, +"signal-list": { +"id": "signal-list", +"is-read-only": false, +"description": ["Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4"] +}, +"signal-ordering-type-g": { +"id": "signal-ordering-type-g", +"is-read-only": false, +"description": ["none"] +}, +"mau-id": { +"id": "mau-id", +"is-read-only": false, +"description": ["802.3 according to 30.5.1.1.1 aMAUID Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device"] +}, +"mii-kind": { +"id": "mii-kind", +"is-read-only": false, +"description": ["SFF8472_SFF8636 Kind of Medium Independent Interface (MII) provided by this Medium Attachment Unit (MAU) (e.g. SFP, moldered port)"] +}, +"mdi-kind": { +"id": "mdi-kind", +"is-read-only": false, +"description": ["Kind of Medium Dependent Interface (MDI) provided by this Medium Attachment Unit (MAU)"] +}, +"required-medium-kind": { +"id": "required-medium-kind", +"is-read-only": false, +"description": ["Kind of medium required for operating this Medium Attachment Unit (MAU), more like an information field"] +}, +"wavelength-min": { +"id": "wavelength-min", +"is-read-only": false, +"description": ["SFF-8690 Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5"] +}, +"wavelength-max": { +"id": "wavelength-max", +"is-read-only": false, +"description": ["Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"] +}, +"wavelength-grid-min": { +"id": "wavelength-grid-min", +"is-read-only": false, +"description": ["Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known SFF-8690"] +}, +"link-length-max": { +"id": "link-length-max", +"is-read-only": false, +"description": ["Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind."] +}, +"vendor-name": { +"id": "vendor-name", +"is-read-only": false, +"description": ["Name of the vendor of the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName"] +}, +"vendor-oui": { +"id": "vendor-oui", +"is-read-only": false, +"description": ["Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier"] +}, +"part-number": { +"id": "part-number", +"is-read-only": false, +"description": ["802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number Uniquely identifies the transceiver in the vendor's product lists Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier"] +}, +"revision-number": { +"id": "revision-number", +"is-read-only": false, +"description": ["Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version"] +}, +"serial-number": { +"id": "serial-number", +"is-read-only": false, +"description": ["Vendor's serial number for the transceiver. 0 = not applicable Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber"] +}, +"date-code": { +"id": "date-code", +"is-read-only": false, +"description": ["Vendor's date code for the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate"] +}, +"pmd-list": { +"id": "pmd-list", +"is-read-only": false, +"description": ["List of Physical Medium Dependent (PMD) that can be operated *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***"] +}, +"signal-ordering-list": { +"id": "signal-ordering-list", +"is-read-only": false, +"description": ["Describes the different (e.g. MDI, MDI-X) ways of ordering the signals on the physical medium"] +}, +"auto-signal-ordering-is-avail": { +"id": "auto-signal-ordering-is-avail", +"is-read-only": false, +"description": ["1 = there is a mechanism for automatically crossing over tx and rx implemented"] +}, +"short-reach-mode-is-avail": { +"id": "short-reach-mode-is-avail", +"is-read-only": false, +"description": ["1 = Indicates that Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64 is available"] +}, +"eee-is-avail": { +"id": "eee-is-avail", +"is-read-only": false, +"description": ["1 = Indicates that Energy-Efficient Ethernet (EEE) is available at the device."] +}, +"unidirectional-operation-is-avail": { +"id": "unidirectional-operation-is-avail", +"is-read-only": false, +"description": ["1 = Medium Attachment Unit (MAU) able to transmit from Media Independent Interface (MII) regardless of whether the MAU has determined that a valid link has been established, 0 = MAU able to transmit from MII only when the MAU has determined that a valid link has been established 802.3"] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["MW IM Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."] +}, +"mau-type-g": { +"id": "mau-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-kind-name": { +"id": "problem-kind-name", +"is-read-only": false, +"description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"] +}, +"problem-kind-severity": { +"id": "problem-kind-severity", +"is-read-only": false, +"description": ["Severity of this type of alarm."] +}, +"wire-interface-problem-severity-type-g": { +"id": "wire-interface-problem-severity-type-g", +"is-read-only": false, +"description": ["none"] +}, +"problem-name": { +"id": "problem-name", +"is-read-only": false, +"description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"] +}, +"wire-interface-current-problem-type-g": { +"id": "wire-interface-current-problem-type-g", +"is-read-only": false, +"description": ["none"] +}, +"es": { +"id": "es", +"is-read-only": false, +"description": ["802.3 30.8.1.1.13 aLineESs Number of errored seconds"] +}, +"ses": { +"id": "ses", +"is-read-only": false, +"description": ["802.3 30.8.1.1.12 aLineSESs Number of severely errored seconds"] +}, +"symbol-error-during-carrier": { +"id": "symbol-error-during-carrier", +"is-read-only": false, +"description": ["802.3 according to 30.3.2.1.5 aSymbolErrorDuringCarrier Number of times when valid carrier was present and an invalid data symbol occured."] +}, +"low-power-idle-transmitter-ms": { +"id": "low-power-idle-transmitter-ms", +"is-read-only": false, +"description": ["802.3 similar to 30.3.2.1.8 aTransmitLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the transmitter was in power save mode"] +}, +"low-power-idle-receiver-ms": { +"id": "low-power-idle-receiver-ms", +"is-read-only": false, +"description": ["802.3 similar to 30.3.2.1.9 aReceiveLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the receiver was in power save mode"] +}, +"wire-interface-performance-type-g": { +"id": "wire-interface-performance-type-g", +"is-read-only": false, +"description": ["none"] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"wire-interface-current-performance-type-g": { +"id": "wire-interface-current-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"wire-interface-historical-performance-type-g": { +"id": "wire-interface-historical-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"air-interface-capability": { +"id": "air-interface-capability", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-configuration": { +"id": "air-interface-configuration", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-status": { +"id": "air-interface-status", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-current-problems": { +"id": "air-interface-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-current-performance": { +"id": "air-interface-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-historical-performances": { +"id": "air-interface-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"mw-air-interface-pac": { +"id": "mw-air-interface-pac", +"is-read-only": false, +"description": ["none"] +}, +"type-of-equipment": { +"id": "type-of-equipment", +"is-read-only": false, +"description": ["This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."] +}, +"tx-frequency-min": { +"id": "tx-frequency-min", +"is-read-only": false, +"description": ["Value of the minimum transmit frequency tunable at the air interface."] +}, +"tx-frequency-max": { +"id": "tx-frequency-max", +"is-read-only": false, +"description": ["Value of the maximum transmit frequency tunable at the air interface."] +}, +"rx-frequency-min": { +"id": "rx-frequency-min", +"is-read-only": false, +"description": ["Value of the minimum receive frequency tunable at the air interface."] +}, +"rx-frequency-max": { +"id": "rx-frequency-max", +"is-read-only": false, +"description": ["Value of the maximum receive frequency tunable at the air interface."] +}, +"adaptive-modulation-is-avail": { +"id": "adaptive-modulation-is-avail", +"is-read-only": false, +"description": ["In case the device is capable of adaptive modulation, this field shall contain a 'true'."] +}, +"mimo-is-avail": { +"id": "mimo-is-avail", +"is-read-only": false, +"description": ["In case the device is capable of MIMO, this field shall contain a 'true'."] +}, +"mimo-channels": { +"id": "mimo-channels", +"is-read-only": false, +"description": ["Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."] +}, +"alic-is-avail": { +"id": "alic-is-avail", +"is-read-only": false, +"description": ["In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."] +}, +"atpc-is-avail": { +"id": "atpc-is-avail", +"is-read-only": false, +"description": ["In case the microwave radio is capable of ATPC, this field shall contain a 'true'."] +}, +"atpc-range": { +"id": "atpc-range", +"is-read-only": false, +"description": ["Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin)."] +}, +"encryption-is-avail": { +"id": "encryption-is-avail", +"is-read-only": false, +"description": ["Shall be marked 'true', if payload encryption is available."] +}, +"supported-loop-back-kind-list": { +"id": "supported-loop-back-kind-list", +"is-read-only": false, +"description": ["List of supported kinds of looping back of header information to the remote site."] +}, +"maintenance-timer-range": { +"id": "maintenance-timer-range", +"is-read-only": false, +"description": ["Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor."] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas."] +}, +"supported-channel-plan-list": { +"id": "supported-channel-plan-list", +"is-read-only": false, +"description": ["List of channel spacing that are supported by the device."] +}, +"air-interface-capability-g": { +"id": "air-interface-capability-g", +"is-read-only": false, +"description": ["Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."] +}, +"air-interface-name": { +"id": "air-interface-name", +"is-read-only": false, +"description": ["Operator specific microwave link ID (often used for coding area, type of element and sequential number)."] +}, +"remote-air-interface-name": { +"id": "remote-air-interface-name", +"is-read-only": false, +"description": ["Name of the air interface, which belongs to the same link, at the remote site."] +}, +"expected-signal-id": { +"id": "expected-signal-id", +"is-read-only": false, +"description": ["If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID."] +}, +"transmitted-signal-id": { +"id": "transmitted-signal-id", +"is-read-only": false, +"description": ["Transmitted radio signal ID for synchronizing the receiver."] +}, +"radio-signal-id": { +"id": "radio-signal-id", +"is-read-only": false, +"description": ["The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check."] +}, +"tx-frequency": { +"id": "tx-frequency", +"is-read-only": false, +"description": ["Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."] +}, +"rx-frequency": { +"id": "rx-frequency", +"is-read-only": false, +"description": ["Center frequency of the receive channel."] +}, +"transmission-mode-min": { +"id": "transmission-mode-min", +"is-read-only": false, +"description": ["Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode)."] +}, +"transmission-mode-max": { +"id": "transmission-mode-max", +"is-read-only": false, +"description": ["Maximum transmission mode to be configured."] +}, +"tx-channel-bandwidth": { +"id": "tx-channel-bandwidth", +"is-read-only": false, +"description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"] +}, +"rx-channel-bandwidth": { +"id": "rx-channel-bandwidth", +"is-read-only": false, +"description": ["Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"] +}, +"polarization": { +"id": "polarization", +"is-read-only": false, +"description": ["Allows documenting the polarization of the air interface."] +}, +"power-is-on": { +"id": "power-is-on", +"is-read-only": false, +"description": ["Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."] +}, +"transmitter-is-on": { +"id": "transmitter-is-on", +"is-read-only": false, +"description": ["Activation of the transmitter inside the radio shall be expressed as a 'true'."] +}, +"receiver-is-on": { +"id": "receiver-is-on", +"is-read-only": false, +"description": ["Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations."] +}, +"tx-power": { +"id": "tx-power", +"is-read-only": false, +"description": ["Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."] +}, +"adaptive-modulation-is-on": { +"id": "adaptive-modulation-is-on", +"is-read-only": false, +"description": ["Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."] +}, +"modulation-min": { +"id": "modulation-min", +"is-read-only": false, +"description": ["Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."] +}, +"modulation-max": { +"id": "modulation-max", +"is-read-only": false, +"description": ["Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."] +}, +"xpic-is-on": { +"id": "xpic-is-on", +"is-read-only": false, +"description": ["Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."] +}, +"mimo-is-on": { +"id": "mimo-is-on", +"is-read-only": false, +"description": ["Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."] +}, +"alic-is-on": { +"id": "alic-is-on", +"is-read-only": false, +"description": ["Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."] +}, +"atpc-is-on": { +"id": "atpc-is-on", +"is-read-only": false, +"description": ["ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."] +}, +"atpc-thresh-upper": { +"id": "atpc-thresh-upper", +"is-read-only": false, +"description": ["If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."] +}, +"atpc-thresh-lower": { +"id": "atpc-thresh-lower", +"is-read-only": false, +"description": ["If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."] +}, +"atpc-tx-power-min": { +"id": "atpc-tx-power-min", +"is-read-only": false, +"description": ["Transmit power, which is not to be undercut, while operating ATPC."] +}, +"auto-freq-select-is-on": { +"id": "auto-freq-select-is-on", +"is-read-only": false, +"description": ["Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."] +}, +"auto-freq-select-range": { +"id": "auto-freq-select-range", +"is-read-only": false, +"description": ["Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."] +}, +"modulation-is-on": { +"id": "modulation-is-on", +"is-read-only": false, +"description": ["Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'."] +}, +"encryption-is-on": { +"id": "encryption-is-on", +"is-read-only": false, +"description": ["Activates encryption of the payload."] +}, +"cryptographic-key": { +"id": "cryptographic-key", +"is-read-only": false, +"description": ["Key for transforming plaintext into ciphertext data."] +}, +"performance-monitoring-collection-is-on": { +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, +"description": ["Enables measurement, collection, storage and access to performance data."] +}, +"threshold-cross-alarm-list": { +"id": "threshold-cross-alarm-list", +"is-read-only": false, +"description": ["List of threshold cross alarms to be configured."] +}, +"loop-back-kind-on": { +"id": "loop-back-kind-on", +"is-read-only": false, +"description": ["Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."] +}, +"maintenance-timer": { +"id": "maintenance-timer", +"is-read-only": false, +"description": ["Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the problem to be configured."] +}, +"air-interface-configuration-g": { +"id": "air-interface-configuration-g", +"is-read-only": false, +"description": ["Configuration of the radio link."] +}, +"tx-frequency-cur": { +"id": "tx-frequency-cur", +"is-read-only": false, +"description": ["Center frequency of the currently operated transmit channel."] +}, +"rx-frequency-cur": { +"id": "rx-frequency-cur", +"is-read-only": false, +"description": ["Center frequency of the currently operated receive channel."] +}, +"tx-level-cur": { +"id": "tx-level-cur", +"is-read-only": false, +"description": ["Current transmit level."] +}, +"rx-level-cur": { +"id": "rx-level-cur", +"is-read-only": false, +"description": ["Current receive level."] +}, +"transmission-mode-cur": { +"id": "transmission-mode-cur", +"is-read-only": false, +"description": ["Currently operated transmission mode according to definitions in Capabilities."] +}, +"modulation-cur": { +"id": "modulation-cur", +"is-read-only": false, +"description": ["Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."] +}, +"code-rate-cur": { +"id": "code-rate-cur", +"is-read-only": false, +"description": ["Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate)."] +}, +"received-signal-id": { +"id": "received-signal-id", +"is-read-only": false, +"description": ["ID of the signal, which the receiver is currently synchronized on."] +}, +"snir-cur": { +"id": "snir-cur", +"is-read-only": false, +"description": ["Currently measured signal to (noise+interference) ratio."] +}, +"xpd-cur": { +"id": "xpd-cur", +"is-read-only": false, +"description": ["Currently measured cross polarization discrimination."] +}, +"rf-temp-cur": { +"id": "rf-temp-cur", +"is-read-only": false, +"description": ["Current temperature (in degree Celsius) of the radio module inside the outdoor unit."] +}, +"last-status-change": { +"id": "last-status-change", +"is-read-only": false, +"description": ["Time the Air Interface entered its current operational status."] +}, +"radio-power-is-up": { +"id": "radio-power-is-up", +"is-read-only": false, +"description": ["If the radio unit has power and is switched on, this shall be expressed as a 'true'."] +}, +"link-is-up": { +"id": "link-is-up", +"is-read-only": false, +"description": ["If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."] +}, +"xpic-is-up": { +"id": "xpic-is-up", +"is-read-only": false, +"description": ["If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."] +}, +"mimo-is-up": { +"id": "mimo-is-up", +"is-read-only": false, +"description": ["If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."] +}, +"alic-is-up": { +"id": "alic-is-up", +"is-read-only": false, +"description": ["If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."] +}, +"atpc-is-up": { +"id": "atpc-is-up", +"is-read-only": false, +"description": ["If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."] +}, +"auto-freq-select-is-up": { +"id": "auto-freq-select-is-up", +"is-read-only": false, +"description": ["If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."] +}, +"loop-back-kind-up": { +"id": "loop-back-kind-up", +"is-read-only": false, +"description": ["The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."] +}, +"local-end-point-id": { +"id": "local-end-point-id", +"is-read-only": false, +"description": ["The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."] +}, +"remote-end-point-id": { +"id": "remote-end-point-id", +"is-read-only": false, +"description": ["The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."] +}, +"air-interface-status-g": { +"id": "air-interface-status-g", +"is-read-only": false, +"description": ["Measurements of current values on the air interface and operational status of the device."] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-current-problems-g": { +"id": "air-interface-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"air-interface-current-performance-g": { +"id": "air-interface-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-historical-performances-g": { +"id": "air-interface-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."] +}, +"co-channel-group": { +"id": "co-channel-group", +"is-read-only": false, +"description": ["none"] +}, +"co-channel-group-id": { +"id": "co-channel-group-id", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-list": { +"id": "air-interface-list", +"is-read-only": false, +"description": ["List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."] +}, +"sort-of-co-channel-group": { +"id": "sort-of-co-channel-group", +"is-read-only": false, +"description": ["Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"] +}, +"logical-termination-point": { +"id": "logical-termination-point", +"is-read-only": false, +"description": ["none"] +}, +"co-channel-group-g": { +"id": "co-channel-group-g", +"is-read-only": false, +"description": ["Required for configuring XPIC, MIMO and ALIC."] +}, +"role": { +"id": "role", +"is-read-only": false, +"description": ["none"] +}, +"endpoint": { +"id": "endpoint", +"is-read-only": false, +"description": ["none"] +}, +"mw-air-interface-hsb-end-point-pac": { +"id": "mw-air-interface-hsb-end-point-pac", +"is-read-only": false, +"description": ["The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."] +}, +"prot-type": { +"id": "prot-type", +"is-read-only": false, +"description": ["Indicates the protection scheme that is used for the ProtectionGroup."] +}, +"air-interface-hsb-configuration-is-faulty-severity": { +"id": "air-interface-hsb-configuration-is-faulty-severity", +"is-read-only": false, +"description": ["The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."] +}, +"air-interface-hsb-is-partly-down-severity": { +"id": "air-interface-hsb-is-partly-down-severity", +"is-read-only": false, +"description": ["The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."] +}, +"air-interface-hsb-is-down-severity": { +"id": "air-interface-hsb-is-down-severity", +"is-read-only": false, +"description": ["The level of severity of the total HSB configuration being down shall be chosen from an enumeration."] +}, +"fcswitch": { +"id": "fcswitch", +"is-read-only": false, +"description": ["none"] +}, +"mw-air-interface-hsb-fc-switch-pac": { +"id": "mw-air-interface-hsb-fc-switch-pac", +"is-read-only": false, +"description": ["Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"air-interface-diversity-capability": { +"id": "air-interface-diversity-capability", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-configuration": { +"id": "air-interface-diversity-configuration", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-status": { +"id": "air-interface-diversity-status", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-current-problems": { +"id": "air-interface-diversity-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-current-performance": { +"id": "air-interface-diversity-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-historical-performances": { +"id": "air-interface-diversity-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"mw-air-interface-diversity-pac": { +"id": "mw-air-interface-diversity-pac", +"is-read-only": false, +"description": ["none"] +}, +"available-kinds-of-diversity": { +"id": "available-kinds-of-diversity", +"is-read-only": false, +"description": ["Available types of diversity to be listed."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor."] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas."] +}, +"air-interface-diversity-capability-g": { +"id": "air-interface-diversity-capability-g", +"is-read-only": false, +"description": ["Describes the capabilities in implementing different types of air interface diversity."] +}, +"air-interface-diversity": { +"id": "air-interface-diversity", +"is-read-only": false, +"description": ["Type of air interface diversity configured at the link."] +}, +"air-interface-ltp-list": { +"id": "air-interface-ltp-list", +"is-read-only": false, +"description": ["_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"] +}, +"performance-monitoring-collection-is-on": { +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, +"description": ["Enables measurement, collection, storage and access to performance data."] +}, +"threshold-cross-alarm-list": { +"id": "threshold-cross-alarm-list", +"is-read-only": false, +"description": ["List of threshold cross alarms to be configured."] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the problem to be configured."] +}, +"air-interface-diversity-configuration-g": { +"id": "air-interface-diversity-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"snir-cur": { +"id": "snir-cur", +"is-read-only": false, +"description": ["Currently measured signal to (noise+interference) ratio of the combined signals."] +}, +"air-interface-diversity-status": { +"id": "air-interface-diversity-status", +"is-read-only": false, +"description": ["Status of the air interface bundle."] +}, +"last-status-change": { +"id": "last-status-change", +"is-read-only": false, +"description": ["Time the Diversity Group entered its current operational status."] +}, +"air-interface-diversity-status-g": { +"id": "air-interface-diversity-status-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-current-problems-g": { +"id": "air-interface-diversity-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"air-interface-diversity-current-performance-g": { +"id": "air-interface-diversity-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface diversity configuration at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"air-interface-diversity-historical-performances-g": { +"id": "air-interface-diversity-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"pure-ethernet-structure-capability": { +"id": "pure-ethernet-structure-capability", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-configuration": { +"id": "pure-ethernet-structure-configuration", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-status": { +"id": "pure-ethernet-structure-status", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-current-problems": { +"id": "pure-ethernet-structure-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-current-performance": { +"id": "pure-ethernet-structure-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-historical-performances": { +"id": "pure-ethernet-structure-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"mw-pure-ethernet-structure-pac": { +"id": "mw-pure-ethernet-structure-pac", +"is-read-only": false, +"description": ["The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."] +}, +"structure-id": { +"id": "structure-id", +"is-read-only": false, +"description": ["Identifies the Structure for bundling and container."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."] +}, +"pure-ethernet-structure-capability-g": { +"id": "pure-ethernet-structure-capability-g", +"is-read-only": false, +"description": ["Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport."] +}, +"performance-monitoring-collection-is-on": { +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, +"description": ["Enables measurement, collection, storage and access to performance data."] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the type of problem to be configured."] +}, +"pure-ethernet-structure-configuration-g": { +"id": "pure-ethernet-structure-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"segment-status-list": { +"id": "segment-status-list", +"is-read-only": false, +"description": ["Status of the Ethernet transport segment. Always just one segment."] +}, +"last-status-change": { +"id": "last-status-change", +"is-read-only": false, +"description": ["Time and date of the last update of the status information."] +}, +"pure-ethernet-structure-status-g": { +"id": "pure-ethernet-structure-status-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-current-problems-g": { +"id": "pure-ethernet-structure-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"pure-ethernet-structure-current-performance-g": { +"id": "pure-ethernet-structure-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"pure-ethernet-structure-historical-performances-g": { +"id": "pure-ethernet-structure-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."] +}, +"pure-ethernet": { +"id": "pure-ethernet", +"is-read-only": false, +"description": ["Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"hybrid-mw-structure-capability": { +"id": "hybrid-mw-structure-capability", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-configuration": { +"id": "hybrid-mw-structure-configuration", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-status": { +"id": "hybrid-mw-structure-status", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-current-problems": { +"id": "hybrid-mw-structure-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-current-performance": { +"id": "hybrid-mw-structure-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-historical-performances": { +"id": "hybrid-mw-structure-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"mw-hybrid-mw-structure-pac": { +"id": "mw-hybrid-mw-structure-pac", +"is-read-only": false, +"description": ["The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."] +}, +"structure-id": { +"id": "structure-id", +"is-read-only": false, +"description": ["Identifies the Structure for bundling and container."] +}, +"supported-tdm-structure-types-list": { +"id": "supported-tdm-structure-types-list", +"is-read-only": false, +"description": ["Lists the TDM frame types that are supported."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."] +}, +"hybrid-mw-structure-capability-g": { +"id": "hybrid-mw-structure-capability-g", +"is-read-only": false, +"description": ["Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available."] +}, +"structure-kind": { +"id": "structure-kind", +"is-read-only": false, +"description": ["TDM frame to be applied."] +}, +"structure-type": { +"id": "structure-type", +"is-read-only": false, +"description": ["TDM frame to be applied."] +}, +"number-of-tdm-segments-to-be-reserved": { +"id": "number-of-tdm-segments-to-be-reserved", +"is-read-only": false, +"description": ["Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"] +}, +"performance-monitoring-collection-is-on": { +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, +"description": ["Enables measurement, collection, storage and access to performance data."] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the type of problem to be configured."] +}, +"hybrid-mw-structure-configuration-g": { +"id": "hybrid-mw-structure-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"segment-status-list": { +"id": "segment-status-list", +"is-read-only": false, +"description": ["Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"] +}, +"last-status-change": { +"id": "last-status-change", +"is-read-only": false, +"description": ["Time and date of the last update of the status information."] +}, +"hybrid-mw-structure-status-g": { +"id": "hybrid-mw-structure-status-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-current-problems-g": { +"id": "hybrid-mw-structure-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"hybrid-mw-structure-current-performance-g": { +"id": "hybrid-mw-structure-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the structure of a hybrid microwave at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"hybrid-mw-structure-historical-performances-g": { +"id": "hybrid-mw-structure-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."] +}, +"hybrid-microwave": { +"id": "hybrid-microwave", +"is-read-only": false, +"description": ["Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"ethernet-container-capability": { +"id": "ethernet-container-capability", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-configuration": { +"id": "ethernet-container-configuration", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-status": { +"id": "ethernet-container-status", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-current-problems": { +"id": "ethernet-container-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-current-performance": { +"id": "ethernet-container-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-historical-performances": { +"id": "ethernet-container-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"mw-ethernet-container-pac": { +"id": "mw-ethernet-container-pac", +"is-read-only": false, +"description": ["none"] +}, +"bundling-is-avail": { +"id": "bundling-is-avail", +"is-read-only": false, +"description": ["This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container."] +}, +"packet-compression-is-avail": { +"id": "packet-compression-is-avail", +"is-read-only": false, +"description": ["In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."] +}, +"layer2-compression-is-avail": { +"id": "layer2-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on layer 2 available at the device."] +}, +"vlan-compression-is-avail": { +"id": "vlan-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on VLAN layer available at the device."] +}, +"q-in-q-compression-is-avail": { +"id": "q-in-q-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on layer of a second VLAN available at the device."] +}, +"mpls-compression-is-avail": { +"id": "mpls-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on mpls layer available at the device."] +}, +"ipv4-compression-is-avail": { +"id": "ipv4-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on layer 3 for IPv4 available at the device."] +}, +"ipv6-compression-is-avail": { +"id": "ipv6-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on layer 3 for IPv6 available at the device."] +}, +"layer4-compression-is-avail": { +"id": "layer4-compression-is-avail", +"is-read-only": false, +"description": ["Packet compression on layer 4 (TCP and UDP header) available at the device."] +}, +"encryption-is-avail": { +"id": "encryption-is-avail", +"is-read-only": false, +"description": ["Shall be marked 'true', if Ethernet payload encryption is available."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."] +}, +"ethernet-container-capability-g": { +"id": "ethernet-container-capability-g", +"is-read-only": false, +"description": ["none"] +}, +"container-id": { +"id": "container-id", +"is-read-only": false, +"description": ["ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller."] +}, +"segments-id-list": { +"id": "segments-id-list", +"is-read-only": false, +"description": ["Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."] +}, +"packet-compression-is-on": { +"id": "packet-compression-is-on", +"is-read-only": false, +"description": ["In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."] +}, +"layer2-compression-is-on": { +"id": "layer2-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on layer 2 configured at the device."] +}, +"vlan-compression-is-on": { +"id": "vlan-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on VLAN layer configured at the device."] +}, +"q-in-q-compression-is-on": { +"id": "q-in-q-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on layer of a second VLAN configured at the device."] +}, +"mpls-compression-is-on": { +"id": "mpls-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on MPLS layer configured at the device."] +}, +"ipv4-compression-is-on": { +"id": "ipv4-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on layer 3 for IPv4 configured at the device."] +}, +"ipv6-compression-is-on": { +"id": "ipv6-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on layer 3 for IPv6 configured at the device."] +}, +"layer4-compression-is-on": { +"id": "layer4-compression-is-on", +"is-read-only": false, +"description": ["Packet compression on layer 4 (TCP and UDP header) configured at the device."] +}, +"encryption-is-on": { +"id": "encryption-is-on", +"is-read-only": false, +"description": ["Activates encryption of the Ethernet payload."] +}, +"cryptographic-key": { +"id": "cryptographic-key", +"is-read-only": false, +"description": ["Key for transforming plaintext into cipher text data."] +}, +"performance-monitoring-collection-is-on": { +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, +"description": ["Enables measurement, collection, storage and access to performance data."] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the problem to be configured."] +}, +"ethernet-container-configuration-g": { +"id": "ethernet-container-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"last-status-change": { +"id": "last-status-change", +"is-read-only": false, +"description": ["Time the Container entered its current operational status."] +}, +"ethernet-container-status-g": { +"id": "ethernet-container-status-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-current-problems-g": { +"id": "ethernet-container-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-current-performance-g": { +"id": "ethernet-container-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the Ethernet container at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"ethernet-container-historical-performances-g": { +"id": "ethernet-container-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the Ethernet container for a pre-defined measurement interval."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"tdm-container-capability": { +"id": "tdm-container-capability", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-configuration": { +"id": "tdm-container-configuration", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-status": { +"id": "tdm-container-status", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-current-problems": { +"id": "tdm-container-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-current-performance": { +"id": "tdm-container-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-historical-performances": { +"id": "tdm-container-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"mw-tdm-container-pac": { +"id": "mw-tdm-container-pac", +"is-read-only": false, +"description": ["The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic."] +}, +"supported-tdm-container-types-list": { +"id": "supported-tdm-container-types-list", +"is-read-only": false, +"description": ["Lists the TDM containers that are supported."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."] +}, +"supported-alarms": { +"id": "supported-alarms", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."] +}, +"tdm-container-capability-g": { +"id": "tdm-container-capability-g", +"is-read-only": false, +"description": ["Bundling is not available."] +}, +"container-id": { +"id": "container-id", +"is-read-only": false, +"description": ["ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller."] +}, +"container-type": { +"id": "container-type", +"is-read-only": false, +"description": ["Type of TDM container."] +}, +"segment-id": { +"id": "segment-id", +"is-read-only": false, +"description": ["Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"] +}, +"performance-monitoring-collection-is-on": { +"id": "performance-monitoring-collection-is-on", +"is-read-only": false, +"description": ["Enables measurement, collection, storage and access to performance data."] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the problem to be configured."] +}, +"tdm-container-configuration-g": { +"id": "tdm-container-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"last-status-change": { +"id": "last-status-change", +"is-read-only": false, +"description": ["Time the Container entered its current operational status."] +}, +"tdm-container-status-g": { +"id": "tdm-container-status-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-current-problems-g": { +"id": "tdm-container-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"tdm-container-current-performance-g": { +"id": "tdm-container-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the TDM container at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"tdm-container-historical-performances-g": { +"id": "tdm-container-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the TDM container for a pre-defined measurement interval."] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"wirebased-interface-capability": { +"id": "wirebased-interface-capability", +"is-read-only": false, +"description": ["none"] +}, +"wirebased-interface-configuration": { +"id": "wirebased-interface-configuration", +"is-read-only": false, +"description": ["none"] +}, +"wirebased-interface-status": { +"id": "wirebased-interface-status", +"is-read-only": false, +"description": ["none"] +}, +"wirebased-interface-current-problems": { +"id": "wirebased-interface-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"wirebased-interface-current-performance": { +"id": "wirebased-interface-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"wirebased-interface-historical-performances": { +"id": "wirebased-interface-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"wire-interface-pac": { +"id": "wire-interface-pac", +"is-read-only": false, +"description": ["none"] +}, +"available-mau-list": { +"id": "available-mau-list", +"is-read-only": false, +"description": ["List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described."] +}, +"auto-pmd-negotiation-is-avail": { +"id": "auto-pmd-negotiation-is-avail", +"is-read-only": false, +"description": ["Parameter 1 = Indicates that device is supporting Auto-negotiation"] +}, +"auto-pmd-negotiation-max-is-avail": { +"id": "auto-pmd-negotiation-max-is-avail", +"is-read-only": false, +"description": ["1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)"] +}, +"supported-loop-back-kind-list": { +"id": "supported-loop-back-kind-list", +"is-read-only": false, +"description": ["List of supported kinds of looping back of header information to the remote site. 802.3 45.2.1.12.1 PMA remote loopback ability"] +}, +"maintenance-timer-range": { +"id": "maintenance-timer-range", +"is-read-only": false, +"description": ["MW IM Available time periods for maintenance configurations (e.g. the loop back) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."] +}, +"supported-alarm-list": { +"id": "supported-alarm-list", +"is-read-only": false, +"description": ["Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."] +}, +"wire-interface-capability-g": { +"id": "wire-interface-capability-g", +"is-read-only": false, +"description": ["none"] +}, +"wire-interface-name": { +"id": "wire-interface-name", +"is-read-only": false, +"description": ["Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network Parameter"] +}, +"remote-wire-interface-name": { +"id": "remote-wire-interface-name", +"is-read-only": false, +"description": ["Learning from MW IM Text field for defining the wire interface this one is connected with. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network"] +}, +"interface-is-on": { +"id": "interface-is-on", +"is-read-only": false, +"description": ["1 = Activation of the interface (it gets powered and can be managed even if the transceiver is not yet transmitting or receiving). In case there is no Medium Attachment Unit (MAU) (e.g. no SFP in the cage) SETting (interfaceIsOn=1) must be ignored and GETing must return (interfaceIsOn=0) 802.3 according 30.3.2.2.1 acPhyAdminControl"] +}, +"transceiver-is-on-list": { +"id": "transceiver-is-on-list", +"is-read-only": false, +"description": ["802.3 22.?.? and additionally 802.3 45.2.1.8 PMD transmit disable register (Register 1.9) 1 = Activation of the transmitter and receiver (e.g. laser) of the PHY; transceiverIsOnList[0]:total interface; transceiverIsOnList[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"] +}, +"auto-pmd-negotiation-is-on": { +"id": "auto-pmd-negotiation-is-on", +"is-read-only": false, +"description": ["Parameter 1 = Auto-negotiation is switched on"] +}, +"fixed-pmd": { +"id": "fixed-pmd", +"is-read-only": false, +"description": ["If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant"] +}, +"auto-pmd-negotiation-max": { +"id": "auto-pmd-negotiation-max", +"is-read-only": false, +"description": ["Parameter If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation"] +}, +"auto-signal-ordering-is-on": { +"id": "auto-signal-ordering-is-on", +"is-read-only": false, +"description": ["1 = e.g. auto-MDI-X is switched on"] +}, +"fixed-signal-ordering": { +"id": "fixed-signal-ordering", +"is-read-only": false, +"description": ["If (autoSignalOrderingIsOn=0) configuration of the concrete kind of signal ordering on the media (e.g. MDI, or MDI-X). If (autoSignalOrderingIsOn=1) value of this field becomes irrelevant"] +}, +"short-reach-mode-is-on": { +"id": "short-reach-mode-is-on", +"is-read-only": false, +"description": ["Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64"] +}, +"unidirectional-operation-is-on": { +"id": "unidirectional-operation-is-on", +"is-read-only": false, +"description": ["If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex): 1 = Enable transmit from media independent interface regardless of whether the PHY has determined that a valid link has been established, 0 = Enable transmit from media independent interface only when the PHY has determined that a valid link has been established 802.3 Parameter"] +}, +"wavelength-list": { +"id": "wavelength-list", +"is-read-only": false, +"description": ["Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"] +}, +"temperature-high-threshold": { +"id": "temperature-high-threshold", +"is-read-only": false, +"description": ["Threshold for alarming high temperature values. Will move to somewhere in the Physical Segment of the Core IM"] +}, +"temperature-low-threshold": { +"id": "temperature-low-threshold", +"is-read-only": false, +"description": ["Threshold for alarming low temperature values. Will move to somewhere in the Physical Segment of the Core IM"] +}, +"rxlevel-high-threshold": { +"id": "rxlevel-high-threshold", +"is-read-only": false, +"description": ["Threshold for alarming high RX levels."] +}, +"rxlevel-low-threshold": { +"id": "rxlevel-low-threshold", +"is-read-only": false, +"description": ["Threshold for alarming low RX levels."] +}, +"loop-back-kind-on": { +"id": "loop-back-kind-on", +"is-read-only": false, +"description": ["Parameter 802.3 according 22.2.4.1.2 Loopback Maintenance Feature. The currently configured type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site. Activation of local loopback mode on physical layer"] +}, +"isolation-is-on": { +"id": "isolation-is-on", +"is-read-only": false, +"description": ["1 = Activation of the separation of the PHY from higher network layers 802.3"] +}, +"restart-pmd-negotiation-is-on": { +"id": "restart-pmd-negotiation-is-on", +"is-read-only": false, +"description": ["Restarts the auto negotiation process 802.3"] +}, +"reset-mau-is-on": { +"id": "reset-mau-is-on", +"is-read-only": false, +"description": ["802.3 Resets the entire Medium Access Unit (MAU)"] +}, +"maintenance-timer": { +"id": "maintenance-timer", +"is-read-only": false, +"description": ["Parameter and MW IM Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange"] +}, +"problem-kind-severity-list": { +"id": "problem-kind-severity-list", +"is-read-only": false, +"description": ["Severity of the problem to be configured."] +}, +"wire-interface-configuration-g": { +"id": "wire-interface-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"interface-is-up": { +"id": "interface-is-up", +"is-read-only": false, +"description": ["802.3 according 30.3.2.1.7 aPhyAdminState 1 = A Physical layer entity (PHY) exists (including Medium Attachment Unit (e.g. SFP) ) and it is powered and can be managed"] +}, +"receive-signal-is-detected": { +"id": "receive-signal-is-detected", +"is-read-only": false, +"description": ["802.3 45.2.1.9 PMD receive signal detect 1 = Receiver (e.g. laser) detects signal; receiveSignalIsDetected[0]:total interface; receiveSignalIsDetected[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"] +}, +"pmd-is-up": { +"id": "pmd-is-up", +"is-read-only": false, +"description": ["Inverse of 802.3 45.2.1.2.3 Fault (1.1.7) If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path"] +}, +"pmd-cur": { +"id": "pmd-cur", +"is-read-only": false, +"description": ["Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface"] +}, +"signal-ordering-kind-cur": { +"id": "signal-ordering-kind-cur", +"is-read-only": false, +"description": ["Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName"] +}, +"eee-is-up": { +"id": "eee-is-up", +"is-read-only": false, +"description": ["1 = Energy Efficient Ethernet is supported at both ends of the link and it is activated"] +}, +"link-is-up": { +"id": "link-is-up", +"is-read-only": false, +"description": ["Parameter 1 = (transceiverIsUp=1) AND communication is established to the remote site"] +}, +"link-is-idle": { +"id": "link-is-idle", +"is-read-only": false, +"description": ["1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0."] +}, +"tx-level-cur": { +"id": "tx-level-cur", +"is-read-only": false, +"description": ["Current transmit power"] +}, +"rx-level-cur": { +"id": "rx-level-cur", +"is-read-only": false, +"description": ["Current receive power; Also used for receive signal power measured at the Medium Dependent Interface (MDI) of 10GBASE-T during training as described in 802.3 55.4.3.1"] +}, +"temp-cur": { +"id": "temp-cur", +"is-read-only": false, +"description": ["Current temperature (in degree Celsius) inside the transceiver To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties"] +}, +"loop-back-kind-up": { +"id": "loop-back-kind-up", +"is-read-only": false, +"description": ["Paramter and MW IM The currently active (not just configured) type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site."] +}, +"wire-interface-status-g": { +"id": "wire-interface-status-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"wire-interface-current-problems-g": { +"id": "wire-interface-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"wire-interface-current-performance-g": { +"id": "wire-interface-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"wire-interface-historical-performances-g": { +"id": "wire-interface-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."] +}, +"sequence-number": { +"id": "sequence-number", +"is-read-only": false, +"description": ["Unique sequence number of the current problem object."] +}, +"time-stamp": { +"id": "time-stamp", +"is-read-only": false, +"description": ["Time and date of the problem."] +}, +"problem-severity": { +"id": "problem-severity", +"is-read-only": false, +"description": ["Severity of the alarm."] +}, +"mw-current-problem-g": { +"id": "mw-current-problem-g", +"is-read-only": false, +"description": ["none"] +}, +"object-creation-notification": { +"id": "object-creation-notification", +"is-read-only": false, +"description": ["none"] +}, +"counter": { +"id": "counter", +"is-read-only": false, +"description": ["Counts object creation notifications."] +}, +"time-stamp": { +"id": "time-stamp", +"is-read-only": false, +"description": ["none"] +}, +"object-id-ref": { +"id": "object-id-ref", +"is-read-only": false, +"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] +}, +"object-type": { +"id": "object-type", +"is-read-only": false, +"description": ["Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'."] +}, +"object-creation-notification-g": { +"id": "object-creation-notification-g", +"is-read-only": false, +"description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller."] +}, +"object-deletion-notification": { +"id": "object-deletion-notification", +"is-read-only": false, +"description": ["none"] +}, +"counter": { +"id": "counter", +"is-read-only": false, +"description": ["Counts object deletion notifications."] +}, +"time-stamp": { +"id": "time-stamp", +"is-read-only": false, +"description": ["none"] +}, +"object-id-ref": { +"id": "object-id-ref", +"is-read-only": false, +"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] +}, +"object-deletion-notification-g": { +"id": "object-deletion-notification-g", +"is-read-only": false, +"description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller."] +}, +"attribute-value-changed-notification": { +"id": "attribute-value-changed-notification", +"is-read-only": false, +"description": ["none"] +}, +"counter": { +"id": "counter", +"is-read-only": false, +"description": ["Counts attribute value changed notifications."] +}, +"time-stamp": { +"id": "time-stamp", +"is-read-only": false, +"description": ["none"] +}, +"object-id-ref": { +"id": "object-id-ref", +"is-read-only": false, +"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] +}, +"attribute-name": { +"id": "attribute-name", +"is-read-only": false, +"description": ["Name of the attribute that has been changed."] +}, +"new-value": { +"id": "new-value", +"is-read-only": false, +"description": ["Attribute value converted to a string (xml, json, ...)"] +}, +"attribute-value-changed-notification-g": { +"id": "attribute-value-changed-notification-g", +"is-read-only": false, +"description": ["To be sent when an attribute has changed and one or more controllers have to update their data."] +}, +"problem-notification": { +"id": "problem-notification", +"is-read-only": false, +"description": ["none"] +}, +"counter": { +"id": "counter", +"is-read-only": false, +"description": ["Counts problem notifications"] +}, +"time-stamp": { +"id": "time-stamp", +"is-read-only": false, +"description": ["none"] +}, +"object-id-ref": { +"id": "object-id-ref", +"is-read-only": false, +"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] +}, +"problem": { +"id": "problem", +"is-read-only": false, +"description": ["Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms."] +}, +"severity": { +"id": "severity", +"is-read-only": false, +"description": ["Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList"] +}, +"problem-notification-g": { +"id": "problem-notification-g", +"is-read-only": false, +"description": ["To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json new file mode 100644 index 000000000..5d3014f9d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json @@ -0,0 +1,337 @@ +{ + "schema-information": { + "network-element-pac": { + "id": "network-element-pac", + "uml-id": "_RamCUPaMEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "NetworkElement_Pac" + }, + "network-element": { + "id": "network-element", + "uml-id": "_5z06cPaNEeaW9u5N6usiTA", + "uml-type": "ownedAttribute", + "type": "../OnfModel/CoreModel.uml#_oGqnr1LNEeO75dO39GbF8Q", + "order-number": 1, + "is-read-only": false, + "uml-name": "_networkElement" + }, + "network-element-capability": { + "id": "network-element-capability", + "uml-id": "_1_TVYPaMEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "NetworkElementCapability" + }, + "network-element-configuration": { + "id": "network-element-configuration", + "uml-id": "_Pu6HIPaNEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "NetworkElementConfiguration" + }, + "network-element-status": { + "id": "network-element-status", + "uml-id": "_g5u0YPaNEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "NetworkElementStatus" + }, + "network-element-current-problems": { + "id": "network-element-current-problems", + "uml-id": "_Pu6HIfaNEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "NetworkElementCurrentProblems" + }, + "supported-alarms": { + "id": "supported-alarms", + "uml-id": "_444DuBd_EeegALpYen9G6g", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "description": [ + "Available alarms to be listed. Names are to be separated by commas." + ], + "uml-name": "supportedAlarms", + "controlType": "text" + }, + "problem-type-severity": { + "id": "problem-type-severity", + "uml-id": "_rvDABPasEeaW9u5N6usiTA", + "uml-type": "ownedAttribute", + "type": "../OnfModel-MicrowaveTransportNetwork/MicrowaveModel.uml#_eIml0JH1EeWUdbnmmNiTAA", + "order-number": 2, + "is-read-only": false, + "description": [ + "Severity of this type of alarm." + ], + "uml-name": "problemTypeSeverity" + }, + "trigger-refresh": { + "id": "trigger-refresh", + "uml-id": "_F6C-8Pm7EeaOH6heSczBpQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean", + "order-number": 2, + "is-read-only": false, + "description": [ + "A trigger to instuct the netconf server to refresh its internal database/cache. It is primary used for alarms status, but could used for anything else too. It is assumed that the refresh mechanismn takes somes time. In order to indictate the process to the controller a refreshStatus attribute is used." + ], + "uml-name": "triggerRefresh", + "controlType": "checkbox" + }, + "refresh-status": { + "id": "refresh-status", + "uml-id": "_w0x8wPm3EeaOH6heSczBpQ", + "uml-type": "ownedAttribute", + "type": "_7HZcEPm3EeaOH6heSczBpQ", + "order-number": 1, + "is-read-only": true, + "uml-name": "refreshStatus", + "controlType": [ + "done", + "processing" + ] + }, + "current-problem-list": { + "id": "current-problem-list", + "uml-id": "_444DwRd_EeegALpYen9G6g", + "uml-type": "ownedAttribute", + "type": "_TBaooPasEeaW9u5N6usiTA", + "order-number": 1, + "is-read-only": true, + "uml-name": "currentProblemList" + }, + "equipment-pac": { + "id": "equipment-pac", + "uml-id": "_VtO8MPaMEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "Equipment_Pac" + }, + "equipment": { + "id": "equipment", + "uml-id": "_92PqMfaREeaW9u5N6usiTA", + "uml-type": "ownedAttribute", + "type": "../OnfModel/CoreModel.uml#_8SXNej-HEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "uml-name": "_equipment" + }, + "equipment-capability": { + "id": "equipment-capability", + "uml-id": "_g5u0YfaNEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EquipmentCapability" + }, + "equipment-configuration": { + "id": "equipment-configuration", + "uml-id": "_OGWN4PaNEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EquipmentConfiguration" + }, + "equipment-status": { + "id": "equipment-status", + "uml-id": "_gJH6APaREeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EquipmentStatus" + }, + "equipment-current-problems": { + "id": "equipment-current-problems", + "uml-id": "_kRHqIPaREeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EquipmentCurrentProblems" + }, + "holder-pac": { + "id": "holder-pac", + "uml-id": "_dECKoPaMEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "Holder_Pac" + }, + "holder": { + "id": "holder", + "uml-id": "_TNk0IfaSEeaW9u5N6usiTA", + "uml-type": "ownedAttribute", + "type": "../OnfModel/CoreModel.uml#_8SXNjj-HEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "uml-name": "_holder" + }, + "holder-capability": { + "id": "holder-capability", + "uml-id": "_gtTvsPaSEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HolderCapability" + }, + "holder-configuration": { + "id": "holder-configuration", + "uml-id": "_g8TN8PaSEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HolderConfiguration" + }, + "holder-status": { + "id": "holder-status", + "uml-id": "_hDSmwPaSEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HolderStatus" + }, + "holder-current-problems": { + "id": "holder-current-problems", + "uml-id": "_hJQE0PaSEeaW9u5N6usiTA", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "HolderCurrentProblems" + }, + "connector-pac": { + "id": "connector-pac", + "uml-id": "_444DsRd_EeegALpYen9G6g", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "Connector_Pac" + }, + "connector": { + "id": "connector", + "uml-id": "_eDZ5QBeDEeegALpYen9G6g", + "uml-type": "ownedAttribute", + "type": "../OnfModel/CoreModel.uml#_8SXNcD-HEeaRI-H69PghuA", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "uml-name": "_connector" + }, + "connector-capability": { + "id": "connector-capability", + "uml-id": "_444Dtxd_EeegALpYen9G6g", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "ConnectorCapability" + }, + "connector-configuration": { + "id": "connector-configuration", + "uml-id": "_444Duhd_EeegALpYen9G6g", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "ConnectorConfiguration" + }, + "connector-status": { + "id": "connector-status", + "uml-id": "_444Dvxd_EeegALpYen9G6g", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "ConnectorStatus" + }, + "connector-current-problems": { + "id": "connector-current-problems", + "uml-id": "_444DwBd_EeegALpYen9G6g", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "ConnectorCurrentProblems" + }, + "remote-end-point": { + "id": "remote-end-point", + "uml-id": "_RDCPsBeCEeegALpYen9G6g", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": false, + "description": [ + "A network wide identifier of the remote connector. The value is used for topology discovery. Please see also ConnectorStatus::localEndPoint." + ], + "uml-name": "remoteEndPoint", + "controlType": "text" + }, + "local-end-point": { + "id": "local-end-point", + "uml-id": "_NZGKABeBEeegALpYen9G6g", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "description": [ + "A network wide global identifier of the this connector, which can be used to discover the physical connectivitiy. The value should contain the network element name, because the network element software can assume that the network element name is unique in the network. The value should be formated: @ Please see also ConnectorConfiguration::remoteEndPoint" + ], + "uml-name": "localEndPoint", + "controlType": "text" + }, + "current-problem-type": { + "id": "current-problem-type", + "uml-id": "_TBaooPasEeaW9u5N6usiTA", + "uml-type": "uml:DataType", + "uml-name": "CurrentProblemType" + }, + "problem-name": { + "id": "problem-name", + "uml-id": "_0XQ-UvmyEeaOH6heSczBpQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": true, + "description": [ + "Name of the alarm according capability::supportedAlarms." + ], + "uml-name": "problemName", + "controlType": "text" + }, + "network-element-current-problem-type": { + "id": "network-element-current-problem-type", + "uml-id": "_0XQ-UPmyEeaOH6heSczBpQ", + "uml-type": "uml:DataType", + "uml-name": "NetworkElementCurrentProblemType" + }, + "object-reference": { + "id": "object-reference", + "uml-id": "_BW8g0PmzEeaOH6heSczBpQ", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 2, + "is-read-only": true, + "description": [ + "An explaining string of the related object class. This is necesseary, because the current problem list of the NetworkElement object class acts as a container for all alarms, where its object classes are not modeled." + ], + "uml-name": "objectReference", + "controlType": "text" + }, + "problem-severity-type": { + "id": "problem-severity-type", + "uml-id": "_rvDAAPasEeaW9u5N6usiTA", + "uml-type": "uml:DataType", + "uml-name": "ProblemSeverityType" + }, + "problem-type-name": { + "id": "problem-type-name", + "uml-id": "_rvDAAfasEeaW9u5N6usiTA", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "description": [ + "Name of the alarm according to Capability::supportedAlarms" + ], + "uml-name": "problemTypeName", + "controlType": "text" + }, + "7-h-zc-e-pm3-eea-oh6-he-scz-bp-q": { + "id": "7-h-zc-e-pm3-eea-oh6-he-scz-bp-q", + "uml-id": "_7HZcEPm3EeaOH6heSczBpQ", + "enum": [ + "DONE", + "PROCESSING" + ], + "is-read-only": false, + "uml-name": "_7HZcEPm3EeaOH6heSczBpQ" + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json new file mode 100755 index 000000000..ae603d518 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json @@ -0,0 +1,79 @@ +{ + "module": { + "name": "onf-core-model-conditional-packages", + "onf-core-model-conditional-packages": { + "equipment-pac": { + "type": "list", + "key": "equipment", + "equipment-capability": { + "name": "equipment-capability", + "local-name": "capability", + "type": "container" + }, + "equipment-configuration": { + "name": "equipment-configuration", + "local-name": "configuration", + "type": "container" + }, + "equipment-status": { + "name": "equipment-status", + "local-name": "status", + "type": "container" + }, + "equipment-current-problems": { + "name": "equipment-current-problems", + "local-name": "current-problems", + "type": "container" + } + }, + "holder-pac": { + "type": "list", + "key": "holder", + "holder-capability": { + "name": "holder-capability", + "local-name": "capability", + "type": "container" + }, + "holder-configuration": { + "name": "holder-configuration", + "local-name": "configuration", + "type": "container" + }, + "holder-status": { + "name": "holder-status", + "local-name": "status", + "type": "container" + }, + "holder-current-problems": { + "name": "holder-current-problems", + "local-name": "current-problems", + "type": "container" + } + }, + "connector-pac": { + "type": "list", + "key": "connector", + "connector-capability": { + "name": "connector-capability", + "local-name": "capability", + "type": "container" + }, + "connector-configuration": { + "name": "connector-configuration", + "local-name": "configuration", + "type": "container" + }, + "connector-status": { + "name": "connector-status", + "local-name": "status", + "type": "container" + }, + "connector-current-problems": { + "name": "connector-current-problems", + "local-name": "current-problems", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json new file mode 100644 index 000000000..50a8d3bac --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json @@ -0,0 +1,76 @@ +{ + "schema-information": { + "ethernet-pac": { + "id": "ethernet-pac", + "uml-id": "_fytUABOvEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "Ethernet_Pac" + }, + "layer-protocol": { + "id": "layer-protocol", + "uml-id": "_D0ijgBOwEeeV4YL-goyoXw", + "uml-type": "ownedAttribute", + "type": "../OnfModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ", + "order-number": 1, + "is-read-only": false, + "is-key": 1, + "uml-name": "_layerProtocol" + }, + "ethernet-capability": { + "id": "ethernet-capability", + "uml-id": "_1ukHUBOvEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetCapability" + }, + "ethernet-configuration": { + "id": "ethernet-configuration", + "uml-id": "_mZ64kBOvEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetConfiguration" + }, + "ethernet-status": { + "id": "ethernet-status", + "uml-id": "_3WQd4BOvEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetStatus" + }, + "ethernet-current-problems": { + "id": "ethernet-current-problems", + "uml-id": "_-VkZYBOvEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetCurrentProblems" + }, + "ethernet-current-performance": { + "id": "ethernet-current-performance", + "uml-id": "_4nyXMBOvEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetCurrentPerformance" + }, + "ethernet-historical-performances": { + "id": "ethernet-historical-performances", + "uml-id": "_A2670BOwEeeV4YL-goyoXw", + "uml-type": "uml:Class", + "is-read-only": false, + "uml-name": "EthernetHistoricalPerformances" + }, + "vlan-id": { + "id": "vlan-id", + "uml-id": "_14axcBOwEeeV4YL-goyoXw", + "uml-type": "ownedAttribute", + "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer", + "order-number": 1, + "is-read-only": false, + "description": [ + "value = 0: frames on ingress must be untagged, frames on egress get untagged; value = any other positive integer < 4096: frames on ingress must be tagged with this VLAN ID, frames on egress either already have or get this VLAN ID attached;" + ], + "uml-name": "vlanId", + "controlType": "number" + } + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json new file mode 100755 index 000000000..67cedf4dc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json @@ -0,0 +1,41 @@ +{ + "module": { + "name": "onf-ethernet-conditional-packages", + "onf-ethernet-conditional-packages": { + "ethernet-pac": { + "type": "list", + "key": "layer-protocol", + "ethernet-capability": { + "name": "ethernet-capability", + "local-name": "capability", + "type": "container" + }, + "ethernet-configuration": { + "name": "ethernet-configuration", + "local-name": "configuration", + "type": "container" + }, + "ethernet-status": { + "name": "ethernet-status", + "local-name": "status", + "type": "container" + }, + "ethernet-current-problems": { + "name": "ethernet-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "ethernet-current-performance": { + "name": "ethernet-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "ethernet-historical-performances": { + "name": "ethernet-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json new file mode 100644 index 000000000..5c6e41a9d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json @@ -0,0 +1,435 @@ +{ + "schema-information": { + "instance-number": { + "id": "instance-number", + "type": "uint16", + "order-number": 1, + "is-read-only": true, + "description": ["There is only one clock per device in the 4th PoC - value 1 should be used as instance-number."] + }, + "two-step-flag": { + "id": "two-step-flag", + "type": "boolean", + "order-number": 80, + "is-read-only": true, + "description": ["Indicates whether PTP clock is a two-step clock"] + }, + "clock-quality": { + "id": "clock-quality", + "type": "", + "order-number": 6, + "is-read-only": true, + "description": [""] + }, + "clock-class": { + "id": "clock-class", + "type": "", + "order-number": 7, + "is-read-only": true, + "description": ["Clock Class acc. to IEEE 1588-2008, 7.6.2.4 and ITU-T G.8275.1, 6.4"] + }, + "clock-accuracy": { + "id": "clock-accuracy", + "type": "", + "order-number": 8, + "is-read-only": true, + "description": ["Clock accuracy acc. to IEEE 1588-2008, 7.6.2.5 and ITU-T G.8275.1, 6.3.5"] + }, + "offset-scaled-log-variance": { + "id": "offset-scaled-log-variance", + "type": "", + "order-number": 9, + "is-read-only": true, + "description": ["Offset of scaled log variance acc. to IEEE 1588-2008, 7.6.3.5 and ITU-T G.8275.1, 6.3.5"] + }, + "priority1": { + "id": "priority1", + "type": "number", + "min": 0, + "max": 255, + "order-number": 10, + "is-read-only": true, + "description": ["Priority 1 acc. to IEEE 1588-2008, 7.6.2.2"] + }, + "priority2": { + "id": "priority2", + "type": "number", + "min": 0, + "max": 255, + "order-number": 11, + "is-read-only": false, + "description": ["Priority 2 acc. to IEEE 1588-2008, 7.6.2.3"] + }, + "domain-number": { + "id": "domain-number", + "type": "number", + "min": 24, + "max": 43, + "order-number": 12, + "is-read-only": false, + "description": ["PTP domain number acc. to IEEE 1588-2008, 7.1. See ptpDS.domainNumber."] + }, + "slave-only": { + "id": "slave-only", + "type": "boolean", + "order-number": 81, + "is-read-only": false, + "description": ["Indicates whether PTP clock may only operate as SC. See IEEE 1588-2008, 9.2."] + }, + "current-ds": { + "id": "current-ds", + "type": "", + "order-number": 14, + "is-read-only": true, + "description": [""] + }, + "steps-removed": { + "id": "steps-removed", + "type": "", + "order-number": 15, + "is-read-only": true, + "description": ["Number of communication paths traversed between local clock and GM"] + }, + "offset-from-master": { + "id": "offset-from-master", + "type": "", + "order-number": 16, + "is-read-only": true, + "unit": "ns*2^16", + "description": ["Time off-set from master"] + }, + "mean-path-delay": { + "id": "mean-path-delay", + "type": "", + "order-number": 17, + "is-read-only": true, + "unit": "ns*2^16", + "description": ["Mean propagation time between master and slave"] + }, + "parrent-ds": { + "id": "parrent-ds", + "type": "", + "order-number": 18, + "is-read-only": true, + "description": [""] + }, + "parent-port-identity": { + "id": "parent-port-identity", + "type": "", + "order-number": 19, + "is-read-only": true, + "description": [""] + }, + "parent-stats": { + "id": "parent-stats", + "type": "", + "order-number": 22, + "is-read-only": true, + "description": ["Indicates whether there are valid parent stats."] + }, + "observed-parent-offset-scaled-log-variance": { + "id": "observed-parent-offset-scaled-log-variance", + "type": "", + "order-number": 23, + "is-read-only": true, + "description": ["Estimate of parent's clock PTP variance as observed by slave clock acc. to IEEE 1588-2008, 7.6.4.4."] + }, + "observed-parent-clock-phase-change-rate": { + "id": "observed-parent-clock-phase-change-rate", + "type": "", + "order-number": 24, + "is-read-only": true, + "description": ["Estimate of parent's clock PTP phase change rate as observed by slave clock acc. to IEEE 1588-2008, 7.6.4.4."] + }, + "grandmaster-identity": { + "id": "grandmaster-identity", + "type": "", + "order-number": 25, + "is-read-only": true, + "description": ["Grandmaster clock ID acc. to IEEE 1588-2008, 7.6.2.1"] + }, + "grandmaster-clock-quality": { + "id": "grandmaster-clock-quality", + "type": "", + "order-number": 26, + "is-read-only": true, + "description": [""] + }, + "grandmaster-priority1": { + "id": "grandmaster-priority1", + "type": "", + "order-number": 30, + "is-read-only": true, + "description": ["Grandmaster's priority 1 acc. to IEEE 1588-2008, 7.6.2.2"] + }, + "grandmaster-priority2": { + "id": "grandmaster-priority2", + "type": "", + "order-number": 31, + "is-read-only": true, + "description": ["Grandmaster's priority 2 acc. to IEEE 1588-2008, 7.6.2.3"] + }, + "time-properties-ds": { + "id": "time-properties-ds", + "type": "", + "order-number": 32, + "is-read-only": true, + "description": [""] + }, + "current-utc-offset-valid": { + "id": "current-utc-offset-valid", + "type": "", + "order-number": 33, + "is-read-only": true, + "description": ["Indicates wheterh current UTC offset is correct."] + }, + "current-utc-offset": { + "id": "current-utc-offset", + "type": "", + "order-number": 34, + "is-read-only": true, + "description": ["Offset between TAI and UTC acc. to IEEE 1588-2008, 7.2.3"] + }, + "leap59": { + "id": "leap59", + "type": "", + "order-number": 35, + "is-read-only": true, + "description": ["Inidcates that last minute of current UTC day has 59 seconds."] + }, + "leap61": { + "id": "leap61", + "type": "", + "order-number": 36, + "is-read-only": true, + "description": ["Inidcates that last minute of current UTC day has 61 seconds."] + }, + "time-tracable": { + "id": "time-tracable", + "type": "", + "order-number": 37, + "is-read-only": true, + "description": ["Indicates that current UTC offset and timescale are traceable to a PRC"] + }, + "frequency-tracable": { + "id": "frequency-tracable", + "type": "", + "order-number": 38, + "is-read-only": true, + "description": ["Indicates that frequency determining timescale is traceable to a PRC"] + }, + "ptp-timescale": { + "id": "ptp-timescale", + "type": "", + "order-number": 39, + "is-read-only": true, + "description": ["Indicates thet timescale of grandmaster clock is PTP."] + }, + "time-source": { + "id": "time-source", + "type": "", + "order-number": 40, + "is-read-only": true, + "description": ["Time source used by grandmaster. See IEEE 1588-2008, 7.6.2.6."] + }, + "port-state": { + "id": "port-state", + "type": "", + "order-number": 45, + "is-read-only": true, + "description": ["State of this local port"] + }, + "log-min-delay-req-interval": { + "id": "log-min-delay-req-interval", + "type": "", + "order-number": 46, + "is-read-only": true, + "description": ["Minimum permitted mean time interval between successive Delay_Req messages"] + }, + "peer-mean-path-delay": { + "id": "peer-mean-path-delay", + "type": "", + "order-number": 47, + "is-read-only": true, + "unit": "ns*2^16", + "description": ["Not applicable with this profile"] + }, + "log-announce-interval": { + "id": "log-announce-interval", + "type": "", + "order-number": 48, + "is-read-only": true, + "description": ["Mean time interval between successive Announce messages"] + }, + "announce-receipt-timeout": { + "id": "announce-receipt-timeout", + "type": "", + "order-number": 49, + "is-read-only": true, + "description": ["Number of announce intervals w/o announce message before timeout acc. to IEEE 1588-2008, 7.7.3.1."] + }, + "log-sync-interval": { + "id": "log-sync-interval", + "type": "", + "order-number": 50, + "is-read-only": true, + "description": ["Mean SyncInterval for multicast messages"] + }, + "delay-mechanism": { + "id": "delay-mechanism", + "type": "string", + "controlType": "text", + "order-number": 51, + "is-read-only": true, + "description": ["Delay mechanism acc. to IEEE 1588-2008, 8.2.5.4.4."] + }, + "version-number": { + "id": "version-number", + "type": "", + "order-number": 53, + "is-read-only": true, + "description": ["PTP version used on this port"] + }, + "transparent-clock-default-ds": { + "id": "transparent-clock-default-ds", + "type": "", + "order-number": 54, + "is-read-only": true, + "description": [""] + }, + "number-ports": { + "id": "number-ports", + "type": "", + "order-number": -6, + "is-read-only": true, + "description": ["Number of ports of the device"] + }, + "primary-domain": { + "id": "primary-domain", + "type": "", + "order-number": 58, + "is-read-only": true, + "description": ["Domain number of primary syntonization domain acc. to IEEE 1588-2008, 10.1"] + }, + "transparent-clock-port-ds-list": { + "id": "transparent-clock-port-ds-list", + "type": "", + "order-number": 59, + "is-read-only": true, + "description": [""] + }, + "log-min-pdelay-req-interval": { + "id": "log-min-pdelay-req-interval", + "type": "", + "order-number": 63, + "is-read-only": true, + "description": ["Not applicable with this profile"] + }, + "faulty-flag": { + "id": "faulty-flag", + "type": "", + "order-number": 64, + "is-read-only": true, + "description": ["Indicates whether port is faulty."] + }, + "default-ds": { + "id": "default-ds", + "type": "", + "order-number": 68, + "is-read-only": true, + "description": [""] + }, + "local-priority": { + "id": "local-priority", + "type": "number", + "min": 1, + "max": 255, + "order-number": 69, + "is-read-only": true, + "description": ["See ITU-T G.8275.1, 6.3.2."] + }, + "max-steps-removed": { + "id": "max-steps-removed", + "type": "number", + "min": 1, + "max": 255, + "order-number": 70, + "is-read-only": true, + "description": ["See ITU-T G.8275.1, 6.3."] + }, + "port-ds-list": { + "id": "port-ds-list", + "type": "", + "order-number": 73, + "is-read-only": true, + "description": [""] + }, + "clock-identity": { + "id": "clock-identity", + "type": "", + "order-number": -10, + "is-read-only": true, + "description": ["ID of the local clock"] + }, + "port-number": { + "id": "port-number", + "type": "", + "order-number": 76, + "is-read-only": true, + "description": ["Port number of this port on the local clock"] + }, + "onf-ptp-dataset:master-only": { + "id": "onf-ptp-dataset:master-only", + "type": "boolean", + "order-number": 83, + "is-read-only": false, + "description": ["Indicates that port can only be a master."] + }, + "onf-ptp-dataset:local-priority": { + "id": "onf-ptp-dataset:local-priority", + "type": "number", + "min":1, + "max":255, + "order-number": -2, + "is-read-only": false, + "description": ["Local priority as used for Alternate BMCA. See ITU-T G.8275.1, 6.3.2."] + }, + "onf-ptp-dataset:designated-enabled": { + "id": "onf-ptp-dataset:designated-enabled", + "type": "boolean", + "order-number": 82, + "is-read-only": false, + "description": ["A PTP Port needs to be enabled by management acc. to IEEE 1588-2008, 9.2."] + }, + "onf-ptp-dataset:delay-asymmetry": { + "id": "onf-ptp-dataset:delay-asymmetry", + "type": "number", + "order-number": 80, + "is-read-only": true, + "description": ["Known path asymmetry in ns acc. to IEEE 1588-2008, 7.4.2."] + }, + "onf-ptp-dataset:logical-termination-point": { + "id": "onf-ptp-dataset:logical-termination-point ", + "type": "string", + "order-number": 81, + "is-read-only": true, + "description": [""] + }, + "onf-ptp-dataset:multicast-mac-address": { + "id": "onf-ptp-dataset:multicast-mac-address", + "type": "", + "order-number": -5, + "is-read-only": true, + "description": ["In 4th PoC the value is fixed."] + }, + "onf-ptp-dataset:max-steps-removed": { + "id": "onf-ptp-dataset:max-steps-removed", + "type": "number", + "min":1, + "max":255, + "order-number": 70, + "is-read-only": false, + "description": ["See ITU-T G.8275.1, 6.3."] + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json new file mode 100644 index 000000000..3091cc0de --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json @@ -0,0 +1,75 @@ +{ + "module": { + "name": "otn-odu-conditional-packages", + "otn-odu-conditional-packages": { + "otn-odu-connection-pac": { + "type": "list", + "key": "layer-protocol", + "otn-odu-connection-capability": { + "name": "otn-odu-connection-capability", + "local-name": "capability", + "type": "container" + }, + "otn-odu-connection-configuration": { + "name": "otn-odu-connection-configuration", + "local-name": "configuration", + "type": "container" + }, + "otn-odu-connection-status": { + "name": "otn-odu-connection-status", + "local-name": "status", + "type": "container" + }, + "otn-odu-connection-current-problems": { + "name": "otn-odu-connection-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "otn-odu-connection-current-performance": { + "name": "otn-odu-connection-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "otn-odu-connection-historical-performances": { + "name": "otn-odu-connection-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + }, + "otn-odu-termination-pac": { + "type": "list", + "key": "layer-protocol", + "otn-odu-termination-capability": { + "name": "otn-odu-termination-capability", + "local-name": "capability", + "type": "container" + }, + "otn-odu-termination-configuration": { + "name": "otn-odu-termination-configuration", + "local-name": "configuration", + "type": "container" + }, + "otn-odu-termination-status": { + "name": "otn-odu-termination-status", + "local-name": "status", + "type": "container" + }, + "otn-odu-termination-current-problems": { + "name": "otn-odu-termination-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "otn-odu-termination-current-performance": { + "name": "otn-odu-termination-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "otn-odu-termination-historical-performances": { + "name": "otn-odu-termination-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json new file mode 100644 index 000000000..6ccdcca7d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json @@ -0,0 +1,168 @@ +{ "schema-information": { + +"photonic-media": { +"id": "photonic-media", +"is-read-only": false, +"description": ["This module contains a collection of YANG definitions for managing Optical networks. This model is for vendor agnostic management of Optical Transport."] +}, +"non-alarmed": { +"id": "non-alarmed", +"is-read-only": false, +"description": ["none"] +}, +"warning": { +"id": "warning", +"is-read-only": false, +"description": ["none"] +}, +"minor": { +"id": "minor", +"is-read-only": false, +"description": ["none"] +}, +"major": { +"id": "major", +"is-read-only": false, +"description": ["none"] +}, +"critical": { +"id": "critical", +"is-read-only": false, +"description": ["none"] +}, +"severity-type": { +"id": "severity-type", +"is-read-only": false, +"description": ["According to ITU-T M.3160"] +}, +"fec-properties-pac": { +"id": "fec-properties-pac", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-performance-type-g": { +"id": "otsi-interface-performance-type-g", +"is-read-only": false, +"description": ["none"] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-current-performance-type-g": { +"id": "otsi-interface-current-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into current performance information by inheriting from TAPI OAM current data."] +}, +"performance-data": { +"id": "performance-data", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-historical-performance-type-g": { +"id": "otsi-interface-historical-performance-type-g", +"is-read-only": false, +"description": ["Turns performance information into historical performance information by inheriting from TAPI OAM History data."] +}, +"current-performance-data-list": { +"id": "current-performance-data-list", +"is-read-only": false, +"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."] +}, +"otsi-interface-current-performance-g": { +"id": "otsi-interface-current-performance-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface at a particular moment."] +}, +"historical-performance-data-list": { +"id": "historical-performance-data-list", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-historical-performances-g": { +"id": "otsi-interface-historical-performances-g", +"is-read-only": false, +"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."] +}, +"problem-name": { +"id": "problem-name", +"is-read-only": false, +"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"] +}, +"otsi-interface-current-problem-type-g": { +"id": "otsi-interface-current-problem-type-g", +"is-read-only": false, +"description": ["none"] +}, +"current-problem-list": { +"id": "current-problem-list", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-current-problems-g": { +"id": "otsi-interface-current-problems-g", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol": { +"id": "layer-protocol", +"is-read-only": false, +"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"] +}, +"otsi-interface-capability": { +"id": "otsi-interface-capability", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-configuration": { +"id": "otsi-interface-configuration", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-status": { +"id": "otsi-interface-status", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-current-problems": { +"id": "otsi-interface-current-problems", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-current-performance": { +"id": "otsi-interface-current-performance", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-historical-performances": { +"id": "otsi-interface-historical-performances", +"is-read-only": false, +"description": ["none"] +}, +"otsi-interface-pac": { +"id": "otsi-interface-pac", +"is-read-only": false, +"description": ["none"] +}, +"sequence-number": { +"id": "sequence-number", +"is-read-only": false, +"description": ["Unique sequence number of the current problem object."] +}, +"time-stamp": { +"id": "time-stamp", +"is-read-only": false, +"description": ["Time and date of the problem."] +}, +"problem-severity": { +"id": "problem-severity", +"is-read-only": false, +"description": ["Severity of the alarm."] +}, +"otsi-current-problem-g": { +"id": "otsi-current-problem-g", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json new file mode 100644 index 000000000..11bf0f11c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json @@ -0,0 +1,41 @@ +{ + "module": { + "name": "photonic-media", + "photonic-media": { + "otsi-interface-pac": { + "type": "list", + "key": "layer-protocol", + "otsi-interface-capability": { + "name": "otsi-interface-capability", + "local-name": "capability", + "type": "container" + }, + "otsi-interface-configuration": { + "name": "otsi-interface-configuration", + "local-name": "configuration", + "type": "container" + }, + "otsi-interface-status": { + "name": "otsi-interface-status", + "local-name": "status", + "type": "container" + }, + "otsi-interface-current-problems": { + "name": "otsi-interface-current-problems", + "local-name": "current-problems", + "type": "container" + }, + "otsi-interface-current-performance": { + "name": "otsi-interface-current-performance", + "local-name": "current-performance", + "type": "container" + }, + "otsi-interface-historical-performances": { + "name": "otsi-interface-historical-performances", + "local-name": "historical-performances", + "type": "container" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json new file mode 100644 index 000000000..576ca3a43 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json @@ -0,0 +1,46 @@ +{"planned-network-elements":{ + +"ADVA-EthSwitch-1":{"id":"ADVA-EthSwitch-1","name":"ADVA-EthSwitch-1","siteRef":"Berlin-north-east","radioType":"FSP 150"}, +"ADVA-EthSwitch-2":{"id":"ADVA-EthSwitch-2","name":"ADVA-EthSwitch-2","siteRef":"Berlin-south","radioType":"FSP 150"}, +"ADVA-ROADM-A":{"id":"ADVA-ROADM-A","name":"ADVA-ROADM-A","siteRef":"Berlin-north-east","radioType":"FSP 3000R7"}, +"ADVA-ROADM-B":{"id":"ADVA-ROADM-B","name":"ADVA-ROADM-B","siteRef":"Berlin-south","radioType":"FSP 3000R7"}, +"ADVA-ROADM-C":{"id":"ADVA-ROADM-C","name":"ADVA-ROADM-C","siteRef":"Berlin-north-west","radioType":"FSP 3000R7"}, +"Nokia-eNodeB-1":{"id":"Nokia-eNodeB-1","name":"Nokia-eNodeB-1","siteRef":"Berlin-south-west","radioType":"Nokia-eNodeB-1"}, + +"ZTE-24":{"id":"ZTE-24","name":"ZTE-24","siteRef":"Bejing","radioType":"ZXMW NR8120A"}, +"ZTE-81":{"id":"ZTE-81","name":"ZTE-81","siteRef":"Tianjin","radioType":"ZXMW NR8120A"}, +"SIAE-S1":{"id":"SIAE-S1","name":"SIAE-S1","siteRef":"Milan","radioType":"AGS-20"}, +"SIAE-S2":{"id":"SIAE-S2","name":"SIAE-S2","siteRef":"Malpensa","radioType":"AGS-20"}, +"DragonWave-A1":{"id":"DragonWave-A1","name":"DragonWave-A1","siteRef":"Ottawa-Center","radioType":"Horizon Compact Plus"}, +"DragonWave-Z1":{"id":"DragonWave-Z1","name":"DragonWave-Z1","siteRef":"Ottawa-Airport","radioType":"Horizon Compact Plus"}, +"DragonWave-A2":{"id":"DragonWave-A2","name":"DragonWave-A2","siteRef":"Ottawa-Airport","radioType":"Horizon Compact Plus"}, +"DragonWave-Z2":{"id":"DragonWave-Z2","name":"DragonWave-Z2","siteRef":"Ottawa-south-west","radioType":"Horizon Compact Plus"}, +"DragonWave-A3":{"id":"DragonWave-A3","name":"DragonWave-A3","siteRef":"Ottawa-south-west","radioType":"Horizon Quantum"}, +"DragonWave-Z3":{"id":"DragonWave-Z3","name":"DragonWave-Z3","siteRef":"Ottawa-Center","radioType":"Horizon Quantum"}, +"Intracom-A":{"id":"Intracom-A","name":"Intracom-A","siteRef":"Peania ","radioType":"OSDR-13H13"}, +"Intracom-Z":{"id":"Intracom-Z","name":"Intracom-Z","siteRef":"Athens","radioType":"OSDR-13H13"}, +"DragonWave-A4":{"id":"DragonWave-A4","name":"DragonWave-A4","siteRef":"Middletown-north","radioType":"Horizon Quantum"}, +"DragonWave-Z4":{"id":"DragonWave-Z4","name":"DragonWave-Z4","siteRef":"Middletown-south-east","radioType":"Horizon Quantum"}, +"Nokia-61":{"id":"Nokia-61","name":"Nokia-61","siteRef":"Middletown-south-east","radioType":"Nokia 7.1"}, +"Nokia-62":{"id":"Nokia-62","name":"Nokia-62","siteRef":"Middletown-south-west","radioType":"Nokia 7.1"}, +"Ericsson-23":{"id":"Ericsson-23","name":"Ericsson-23","siteRef":"Middletown-south-west","radioType":"MINI-LINK 6352"}, +"Ericsson-24":{"id":"Ericsson-24","name":"Ericsson-24","siteRef":"Middletown-north","radioType":"MINI-LINK 6352"}, +"CommScope-DAS":{"id":"CommScope-DAS","name":"CommScope-DAS","siteRef":"owl-north","radioType":"Andrew "}, +"Ericsson-A1":{"id":"Ericsson-A1","name":"Ericsson-A1","siteRef":"owl-north","radioType":"MINI-LINK 6352"}, +"Ericsson-B1":{"id":"Ericsson-B1","name":"Ericsson-B1","siteRef":"owl-north-east","radioType":"MINI-LINK 6352"}, +"Ericsson-A2":{"id":"Ericsson-A2","name":"Ericsson-A2","siteRef":"owl-north-east","radioType":"MINI-LINK 6352"}, +"Ericsson-B2":{"id":"Ericsson-B2","name":"Ericsson-B2","siteRef":"owl-east","radioType":"MINI-LINK 6352"}, +"Ceragon-A1":{"id":"Ceragon-A1","name":"Ceragon-A1","siteRef":"Tel-Aviv","radioType":"Simulator"}, +"Ceragon-Z1":{"id":"Ceragon-Z1","name":"Ceragon-Z1","siteRef":"Tel-Aviv-north","radioType":"Simulator"}, +"Ceragon-A2":{"id":"Ceragon-A2","name":"Ceragon-A2","siteRef":"Bucharest-north","radioType":"Simulator"}, +"Ceragon-Z2":{"id":"Ceragon-Z2","name":"Ceragon-Z2","siteRef":"Politehnica-Bucharest","radioType":"Simulator"}, +"AltioStar-RRH-1":{"id":"AltioStar-RRH-1","name":"AltioStar-RRH-1","siteRef":"Petrol-Bedminster","radioType":"LTE-RRH-44380400"}, +"AltioStar-RRH-2":{"id":"AltioStar-RRH-2","name":"AltioStar-RRH-2","siteRef":"US78/US287","radioType":"LTE-RRH-44380400"}, +"WinLab-RRH-1":{"id":"WinLab-RRH-1","name":"WinLab-RRH-1","siteRef":"owl-south-east","radioType":"WhiteBox"}, +"WinLab-RRH-2":{"id":"WinLab-RRH-2","name":"WinLab-RRH-2","siteRef":"owl-south","radioType":"WhiteBox"}, +"WinLab-RRH-3":{"id":"WinLab-RRH-3","name":"WinLab-RRH-3","siteRef":"owl-south-west","radioType":"WhiteBox"}, +"WinLab-RRH-4":{"id":"WinLab-RRH-4","name":"WinLab-RRH-4","siteRef":"owl-west","radioType":"WhiteBox"}, +"WinLab-RRH-5":{"id":"WinLab-RRH-5","name":"WinLab-RRH-5","siteRef":"owl-north-west","radioType":"WhiteBox"}, +"WinLab-RRH-6":{"id":"WinLab-RRH-6","name":"WinLab-RRH-6","siteRef":"owl-north","radioType":"WhiteBox"} + +}} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json new file mode 100644 index 000000000..c3e8110d9 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json @@ -0,0 +1,73 @@ +{ + "site-link": { +"OWL-DC-Prague-DC":{"id":"OWL-DC-Prague-DC","name":"OWL-DC-Prague-DC","siteA":"OWL-DC","siteZ":"Prague-DC","siteNameA":"OWL-DC","siteNameZ":"Prague-DC","length":"6616.552612","azimuthAZ":"48.118867","azimuthZA":"298.029587","type":"data-center-interconnect"}, +"OWL-DC-Berlin-DC":{"id":"OWL-DC-Berlin-DC","name":"OWL-DC-Berlin-DC","siteA":"OWL-DC","siteZ":"Berlin-DC","siteNameA":"OWL-DC","siteNameZ":"Berlin-DC","length":"6429.038709","azimuthAZ":"45.947698","azimuthZA":"296.078746","type":"data-center-interconnect"}, +"Berlin-DC-Berlin-north-east":{"id":"Berlin-DC-Berlin-north-east","name":"Berlin-DC-Berlin-north-east","siteA":"Berlin-DC","siteZ":"Berlin-north-east","siteNameA":"Berlin-DC","siteNameZ":"Berlin-north-east","length":"3.380233","azimuthAZ":"41.694092","azimuthZA":"221.720463","type":"control"}, +"Berlin-DC-Berlin-south":{"id":"Berlin-DC-Berlin-south","name":"Berlin-DC-Berlin-south","siteA":"Berlin-DC","siteZ":"Berlin-south","siteNameA":"Berlin-DC","siteNameZ":"Berlin-south","length":"4.643667","azimuthAZ":"179.964138","azimuthZA":"359.964172","type":"control"}, +"Berlin-DC-Berlin-north-west":{"id":"Berlin-DC-Berlin-north-west","name":"Berlin-DC-Berlin-north-west","siteA":"Berlin-DC","siteZ":"Berlin-north-west","siteNameA":"Berlin-DC","siteNameZ":"Berlin-north-west","length":"5.138948","azimuthAZ":"313.910582","azimuthZA":"133.867146","type":"control"}, +"Prague-DC-Bejing":{"id":"Prague-DC-Bejing","name":"Prague-DC-Bejing","siteA":"Prague-DC","siteZ":"Bejing","siteNameA":"Prague-DC","siteNameZ":"Bejing","length":"7447.977801","azimuthAZ":"54.538202","azimuthZA":"316.994495","type":"control"}, +"Prague-DC-Tianjin":{"id":"Prague-DC-Tianjin","name":"Prague-DC-Tianjin","siteA":"Prague-DC","siteZ":"Tianjin","siteNameA":"Prague-DC","siteNameZ":"Tianjin","length":"7555.330624","azimuthAZ":"54.770138","azimuthZA":"317.494792","type":"control"}, +"Prague-DC-Milan":{"id":"Prague-DC-Milan","name":"Prague-DC-Milan","siteA":"Prague-DC","siteZ":"Milan","siteNameA":"Prague-DC","siteNameZ":"Milan","length":"644.680616","azimuthAZ":"219.303918","azimuthZA":"35.422554","type":"control"}, +"Prague-DC-Malpensa":{"id":"Prague-DC-Malpensa","name":"Prague-DC-Malpensa","siteA":"Prague-DC","siteZ":"Malpensa","siteNameA":"Prague-DC","siteNameZ":"Malpensa","length":"652.094431","azimuthAZ":"222.787408","azimuthZA":"38.559020","type":"control"}, +"Prague-DC-Ottawa-Center":{"id":"Prague-DC-Ottawa-Center","name":"Prague-DC-Ottawa-Center","siteA":"Prague-DC","siteZ":"Ottawa-Center","siteNameA":"Prague-DC","siteNameZ":"Ottawa-Center","length":"6367.273928","azimuthAZ":"303.185800","azimuthZA":"49.712092","type":"control"}, +"Prague-DC-Ottawa-Airport":{"id":"Prague-DC-Ottawa-Airport","name":"Prague-DC-Ottawa-Airport","siteA":"Prague-DC","siteZ":"Ottawa-Airport","siteNameA":"Prague-DC","siteNameZ":"Ottawa-Airport","length":"6330.919511","azimuthAZ":"302.923958","azimuthZA":"49.965269","type":"control"}, +"Prague-DC-Ottawa-south-west":{"id":"Prague-DC-Ottawa-south-west","name":"Prague-DC-Ottawa-south-west","siteA":"Prague-DC","siteZ":"Ottawa-south-west","siteNameA":"Prague-DC","siteNameZ":"Ottawa-south-west","length":"6350.304846","azimuthAZ":"303.180200","azimuthZA":"49.829862","type":"control"}, +"Bejing-Tianjin":{"id":"Bejing-Tianjin","name":"Bejing-Tianjin","siteA":"Bejing","siteZ":"Tianjin","siteNameA":"Bejing","siteNameZ":"Tianjin","length":"109.963655","azimuthAZ":"149.549553","azimuthZA":"329.960966","type":"traffic"}, +"Berlin-north-east-Berlin-south":{"id":"Berlin-north-east-Berlin-south","name":"Berlin-north-east-Berlin-south","siteA":"Berlin-north-east","siteZ":"Berlin-south","siteNameA":"Berlin-north-east","siteNameZ":"Berlin-south","length":"7.511203","azimuthAZ":"197.420857","azimuthZA":"17.394527","type":"traffic"}, +"Berlin-south-Berlin-north-west":{"id":"Berlin-south-Berlin-north-west","name":"Berlin-south-Berlin-north-west","siteA":"Berlin-south","siteZ":"Berlin-north-west","siteNameA":"Berlin-south","siteNameZ":"Berlin-north-west","length":"9.005241","azimuthAZ":"335.704657","azimuthZA":"155.661200","type":"traffic"}, +"Berlin-north-west-Berlin-north-east":{"id":"Berlin-north-west-Berlin-north-east","name":"Berlin-north-west-Berlin-north-east","siteA":"Berlin-north-west","siteZ":"Berlin-north-east","siteNameA":"Berlin-north-west","siteNameZ":"Berlin-north-east","length":"6.040787","azimuthAZ":"99.870133","azimuthZA":"279.939953","type":"traffic"}, +"Ottawa-Airport-Ottawa-south-west":{"id":"Ottawa-Airport-Ottawa-south-west","name":"Ottawa-Airport-Ottawa-south-west","siteA":"Ottawa-Airport","siteZ":"Ottawa-south-west","siteNameA":"Ottawa-Airport","siteNameZ":"Ottawa-south-west","length":"30.774747","azimuthAZ":"280.991574","azimuthZA":"100.716701","type":"traffic"}, +"Ottawa-Center-Ottawa-Airport":{"id":"Ottawa-Center-Ottawa-Airport","name":"Ottawa-Center-Ottawa-Airport","siteA":"Ottawa-Center","siteZ":"Ottawa-Airport","siteNameA":"Ottawa-Center","siteNameZ":"Ottawa-Airport","length":"43.808751","azimuthAZ":"83.558464","azimuthZA":"263.953862","type":"traffic"}, +"Ottawa-south-west-Ottawa-Center":{"id":"Ottawa-south-west-Ottawa-Center","name":"Ottawa-south-west-Ottawa-Center","siteA":"Ottawa-south-west","siteZ":"Ottawa-Center","siteNameA":"Ottawa-south-west","siteNameZ":"Ottawa-Center","length":"16.977148","azimuthAZ":"231.597684","azimuthZA":"51.476879","type":"traffic"}, +"Milan-Malpensa":{"id":"Milan-Malpensa","name":"Milan-Malpensa","siteA":"Milan","siteZ":"Malpensa","siteNameA":"Milan","siteNameZ":"Malpensa","length":"40.038623","azimuthAZ":"296.489417","azimuthZA":"116.160408","type":"traffic"}, +"Berlin-south-Berlin-south-west":{"id":"Berlin-south-Berlin-south-west","name":"Berlin-south-Berlin-south-west","siteA":"Berlin-south","siteZ":"Berlin-south-west","siteNameA":"Berlin-south","siteNameZ":"Berlin-south-west","length":"2.224253","azimuthAZ":"270.013016","azimuthZA":"89.986984","type":"traffic"}, +"Athens-Peania":{"id":"Athens-Peania","name":"Athens-Peania","siteA":"Athens","siteZ":"Peania","siteNameA":"Athens","siteNameZ":"Peania","length":"15.888460","azimuthAZ":"110.077853","azimuthZA":"290.182549","type":"traffic"}, +"Prague-DC-Peania":{"id":"Prague-DC-Peania","name":"Prague-DC-Peania","siteA":"Prague-DC","siteZ":"Peania","siteNameA":"Prague-DC","siteNameZ":"Peania","length":"1544.391815","azimuthAZ":"147.341741","azimuthZA":"333.955286","type":"control"}, +"Prague-DC-Athens":{"id":"Prague-DC-Athens","name":"Prague-DC-Athens","siteA":"Prague-DC","siteZ":"Athens","siteNameA":"Prague-DC","siteNameZ":"Athens","length":"1532.957557","azimuthAZ":"147.756559","azimuthZA":"334.253368","type":"control"}, +"OWL-DC-AT&T-Labs":{"id":"OWL-DC-AT&T-Labs","name":"OWL-DC-AT&T-Labs","siteA":"OWL-DC","siteZ":"AT&T-Labs","siteNameA":"OWL-DC","siteNameZ":"AT&T-Labs","length":"27.561824","azimuthAZ":"106.456393","azimuthZA":"286.658844","type":"data-center-interconnect"}, +"Tel-Aviv-Tel-Aviv-north":{"id":"Tel-Aviv-Tel-Aviv-north","name":"Tel-Aviv-Tel-Aviv-north","siteA":"Tel-Aviv","siteZ":"Tel-Aviv-north","siteNameA":"Tel-Aviv","siteNameZ":"Tel-Aviv-north","length":"8.563466","azimuthAZ":"33.551029","azimuthZA":"213.577785","type":"traffic"}, +"Prague-DC-Tel-Aviv":{"id":"Prague-DC-Tel-Aviv","name":"Prague-DC-Tel-Aviv","siteA":"Prague-DC","siteZ":"Tel-Aviv","siteNameA":"Prague-DC","siteNameZ":"Tel-Aviv","length":"2612.860322","azimuthAZ":"132.178310","azimuthZA":"325.846592","type":"control"}, +"Prague-DC-Tel-Aviv-north":{"id":"Prague-DC-Tel-Aviv-north","name":"Prague-DC-Tel-Aviv-north","siteA":"Prague-DC","siteZ":"Tel-Aviv-north","siteNameA":"Prague-DC","siteNameZ":"Tel-Aviv-north","length":"2609.622822","azimuthAZ":"131.999388","azimuthZA":"325.709247","type":"control"}, +"Bucharest-north-Politehnica-Bucharest":{"id":"Bucharest-north-Politehnica-Bucharest","name":"Bucharest-north-Politehnica-Bucharest","siteA":"Bucharest-north","siteZ":"Politehnica-Bucharest","siteNameA":"Bucharest-north","siteNameZ":"Politehnica-Bucharest","length":"3.117085","azimuthAZ":"237.672480","azimuthZA":"57.649251","type":"traffic"}, +"Prague-DC-Bucharest-north":{"id":"Prague-DC-Bucharest-north","name":"Prague-DC-Bucharest-north","siteA":"Prague-DC","siteZ":"Bucharest-north","siteNameA":"Prague-DC","siteNameZ":"Bucharest-north","length":"1078.751804","azimuthAZ":"121.021694","azimuthZA":"309.618632","type":"control"}, +"Prague-DC-Politehnica-Bucharest":{"id":"Prague-DC-Politehnica-Bucharest","name":"Prague-DC-Politehnica-Bucharest","siteA":"Prague-DC","siteZ":"Politehnica-Bucharest","siteNameA":"Prague-DC","siteNameZ":"Politehnica-Bucharest","length":"1077.789821","azimuthAZ":"121.179995","azimuthZA":"309.751443","type":"control"}, +"AT&T-Labs-Middletown-north":{"id":"AT&T-Labs-Middletown-north","name":"AT&T-Labs-Middletown-north","siteA":"AT&T-Labs","siteZ":"Middletown-north","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-north","length":"2.902164","azimuthAZ":"27.192037","azimuthZA":"207.202193","type":"control"}, +"AT&T-Labs-Middletown-south-east":{"id":"AT&T-Labs-Middletown-south-east","name":"AT&T-Labs-Middletown-south-east","siteA":"AT&T-Labs","siteZ":"Middletown-south-east","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-south-east","length":"3.988925","azimuthAZ":"90.260555","azimuthZA":"270.291084","type":"control"}, +"AT&T-Labs-Middletown-south-west":{"id":"AT&T-Labs-Middletown-south-west","name":"AT&T-Labs-Middletown-south-west","siteA":"AT&T-Labs","siteZ":"Middletown-south-west","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-south-west","length":".382001","azimuthAZ":"164.604183","azimuthZA":"344.604959","type":"control"}, +"Middletown-south-west-Middletown-north":{"id":"Middletown-south-west-Middletown-north","name":"Middletown-south-west-Middletown-north","siteA":"Middletown-south-west","siteZ":"Middletown-north","siteNameA":"Middletown-south-west","siteNameZ":"Middletown-north","length":"3.193888","azimuthAZ":"22.550318","azimuthZA":"202.559698","type":"traffic"}, +"Middletown-north-Middletown-south-east":{"id":"Middletown-north-Middletown-south-east","name":"Middletown-north-Middletown-south-east","siteA":"Middletown-north","siteZ":"Middletown-south-east","siteNameA":"Middletown-north","siteNameZ":"Middletown-south-east","length":"3.721223","azimuthAZ":"134.323008","azimuthZA":"314.343388","type":"traffic"}, +"Middletown-south-east-Middletown-south-west":{"id":"Middletown-south-east-Middletown-south-west","name":"Middletown-south-east-Middletown-south-west","siteA":"Middletown-south-east","siteZ":"Middletown-south-west","siteNameA":"Middletown-south-east","siteNameZ":"Middletown-south-west","length":"3.903206","azimuthAZ":"264.883660","azimuthZA":"84.853909","type":"traffic"}, +"OWL-DC-owl-north":{"id":"OWL-DC-owl-north","name":"OWL-DC-owl-north","siteA":"OWL-DC","siteZ":"owl-north","siteNameA":"OWL-DC","siteNameZ":"owl-north","length":"1.522605","azimuthAZ":"350.001998","azimuthZA":"169.999969","type":"control"}, +"OWL-DC-owl-north-east":{"id":"OWL-DC-owl-north-east","name":"OWL-DC-owl-north-east","siteA":"OWL-DC","siteZ":"owl-north-east","siteNameA":"OWL-DC","siteNameZ":"owl-north-east","length":"1.522567","azimuthAZ":"34.994401","azimuthZA":"215.001103","type":"control"}, +"OWL-DC-owl-east":{"id":"OWL-DC-owl-east","name":"OWL-DC-owl-east","siteA":"OWL-DC","siteZ":"owl-east","siteNameA":"OWL-DC","siteNameZ":"owl-east","length":"1.522583","azimuthAZ":"79.994074","azimuthZA":"260.005579","type":"control"}, +"owl-north-owl-north-east":{"id":"owl-north-owl-north-east","name":"owl-north-owl-north-east","siteA":"owl-north","siteZ":"owl-north-east","siteNameA":"owl-north","siteNameZ":"owl-north-east","length":"1.165150","azimuthAZ":"102.497861","azimuthZA":"282.506593","type":"traffic"}, +"owl-north-east-owl-east":{"id":"owl-north-east-owl-east","name":"owl-north-east-owl-east","siteA":"owl-north-east","siteZ":"owl-east","siteNameA":"owl-north-east","siteNameZ":"owl-east","length":"1.165321","azimuthAZ":"147.500226","azimuthZA":"327.505031","type":"traffic"}, +"OWL-DC-AT&T-Bedminster":{"id":"OWL-DC-AT&T-Bedminster","name":"OWL-DC-AT&T-Bedminster","siteA":"OWL-DC","siteZ":"AT&T-Bedminster","siteNameA":"OWL-DC","siteNameZ":"AT&T-Bedminster","length":"27.437179","azimuthAZ":"324.485016","azimuthZA":"144.362105","type":"data-center-interconnect"}, +"AT&T-Bedminster-Petrol-Bedminster":{"id":"AT&T-Bedminster-Petrol-Bedminster","name":"AT&T-Bedminster-Petrol-Bedminster","siteA":"AT&T-Bedminster","siteZ":"Petrol-Bedminster","siteNameA":"AT&T-Bedminster","siteNameZ":"Petrol-Bedminster","length":"1.819953","azimuthAZ":"312.782236","azimuthZA":"132.771911","type":"control"}, +"AT&T-Bedminster-US78/US287":{"id":"AT&T-Bedminster-US78/US287","name":"AT&T-Bedminster-US78/US287","siteA":"AT&T-Bedminster","siteZ":"US78/US287","siteNameA":"AT&T-Bedminster","siteNameZ":"US78/US287","length":"2.954947","azimuthAZ":"197.233564","azimuthZA":"17.226804","type":"control"}, +"San-Ramon-DC-sr-east":{"id":"San-Ramon-DC-sr-east","name":"San-Ramon-DC-sr-east","siteA":"San-Ramon-DC","siteZ":"sr-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-east","length":"1.580364","azimuthAZ":"80.363571","azimuthZA":"260.374428","type":"control"}, +"San-Ramon-DC-sr-west":{"id":"San-Ramon-DC-sr-west","name":"San-Ramon-DC-sr-west","siteA":"San-Ramon-DC","siteZ":"sr-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-west","length":"1.580413","azimuthAZ":"260.374731","azimuthZA":"80.363875","type":"control"}, +"San-Ramon-DC-sr-north":{"id":"San-Ramon-DC-sr-north","name":"San-Ramon-DC-sr-north","siteA":"San-Ramon-DC","siteZ":"sr-north","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north","length":"1.524434","azimuthAZ":"349.619184","azimuthZA":"169.617269","type":"control"}, +"San-Ramon-DC-sr-north-east":{"id":"San-Ramon-DC-sr-north-east","name":"San-Ramon-DC-sr-north-east","siteA":"San-Ramon-DC","siteZ":"sr-north-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north-east","length":"1.542411","azimuthAZ":"36.034000","azimuthZA":"216.040324","type":"control"}, +"San-Ramon-DC-sr-north-west":{"id":"San-Ramon-DC-sr-north-west","name":"San-Ramon-DC-sr-north-west","siteA":"San-Ramon-DC","siteZ":"sr-north-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north-west","length":"1.562756","azimuthAZ":"303.980237","azimuthZA":"123.971206","type":"control"}, +"San-Ramon-DC-sr-south":{"id":"San-Ramon-DC-sr-south","name":"San-Ramon-DC-sr-south","siteA":"San-Ramon-DC","siteZ":"sr-south","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south","length":"1.524443","azimuthAZ":"169.615417","azimuthZA":"349.617331","type":"control"}, +"San-Ramon-DC-sr-south-east":{"id":"San-Ramon-DC-sr-south-east","name":"San-Ramon-DC-sr-south-east","siteA":"San-Ramon-DC","siteZ":"sr-south-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south-east","length":"1.562870","azimuthAZ":"123.968387","azimuthZA":"303.977417","type":"control"}, +"San-Ramon-DC-sr-south-west":{"id":"San-Ramon-DC-sr-south-west","name":"San-Ramon-DC-sr-south-west","siteA":"San-Ramon-DC","siteZ":"sr-south-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south-west","length":"1.542492","azimuthAZ":"216.044457","azimuthZA":"36.038135","type":"control"}, +"OWL-DC-San-Ramon-DC":{"id":"OWL-DC-San-Ramon-DC","name":"OWL-DC-San-Ramon-DC","siteA":"OWL-DC","siteZ":"San-Ramon-DC","siteNameA":"OWL-DC","siteNameZ":"San-Ramon-DC","length":"4060.445351","azimuthAZ":"281.575258","azimuthZA":"70.526201","type":"data-center-interconnect"}, +"Telia-Lab-ADVA-R1":{"id":"Telia-Lab-ADVA-R1","name":"Telia-Lab-ADVA-R1","siteA":"Telia-Lab","siteZ":"ADVA-R1","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"90.381269","azimuthAZ":"249.241681","azimuthZA":"67.971555","type":"control"}, +"Telia-Lab-ADVA-R2":{"id":"Telia-Lab-ADVA-R2","name":"Telia-Lab-ADVA-R2","siteA":"Telia-Lab","siteZ":"ADVA-R2","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"56.942201","azimuthAZ":"305.498100","azimuthZA":"124.787029","type":"control"}, +"Telia-Lab-ADVA-R3":{"id":"Telia-Lab-ADVA-R3","name":"Telia-Lab-ADVA-R3","siteA":"Telia-Lab","siteZ":"ADVA-R3","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"49.939534","azimuthAZ":"257.937548","azimuthZA":"77.198580","type":"control"}, +"Telia-Lab-Coriant-R1":{"id":"Telia-Lab-Coriant-R1","name":"Telia-Lab-Coriant-R1","siteA":"Telia-Lab","siteZ":"Coriant-R1","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"59.605946","azimuthAZ":"82.969019","azimuthZA":"263.869082","type":"control"}, +"Telia-Lab-Coriant-R2":{"id":"Telia-Lab-Coriant-R2","name":"Telia-Lab-Coriant-R2","siteA":"Telia-Lab","siteZ":"Coriant-R2","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"32.655947","azimuthAZ":"354.958972","azimuthZA":"174.914963","type":"control"}, +"Telia-Lab-Coriant-R3":{"id":"Telia-Lab-Coriant-R3","name":"Telia-Lab-Coriant-R3","siteA":"Telia-Lab","siteZ":"Coriant-R3","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"11.365269","azimuthAZ":"198.597495","azimuthZA":"18.542652","type":"control"}, +"ADVA-R1-ADVA-R2":{"id":"ADVA-R1-ADVA-R2","name":"ADVA-R1-ADVA-R2","siteA":"ADVA-R1","siteZ":"ADVA-R2","siteNameA":"ADVA-R1","siteNameZ":"ADVA-R2","length":"75.455304","azimuthAZ":"29.104148","azimuthZA":"209.666223","type":"traffic"}, +"ADVA-R2-ADVA-R3":{"id":"ADVA-R2-ADVA-R3","name":"ADVA-R2-ADVA-R3","siteA":"ADVA-R2","siteZ":"ADVA-R3","siteNameA":"ADVA-R2","siteNameZ":"ADVA-R3","length":"43.571339","azimuthAZ":"182.550186","azimuthZA":"2.520807","type":"traffic"}, +"ADVA-R3-ADVA-R1":{"id":"ADVA-R3-ADVA-R1","name":"ADVA-R3-ADVA-R1","siteA":"ADVA-R3","siteZ":"ADVA-R1","siteNameA":"ADVA-R3","siteNameZ":"ADVA-R1","length":"41.704912","azimuthAZ":"238.072776","azimuthZA":"57.541137","type":"traffic"}, +"Coriant-R1-Coriant-R3":{"id":"Coriant-R1-Coriant-R3","name":"Coriant-R1-Coriant-R3","siteA":"Coriant-R1","siteZ":"Coriant-R3","siteNameA":"Coriant-R1","siteNameZ":"Coriant-R3","length":"65.330426","azimuthAZ":"254.844777","azimuthZA":"73.890302","type":"traffic"}, +"Coriant-R2-Coriant-R1":{"id":"Coriant-R2-Coriant-R1","name":"Coriant-R2-Coriant-R1","siteA":"Coriant-R2","siteZ":"Coriant-R1","siteNameA":"Coriant-R2","siteNameZ":"Coriant-R1","length":"66.963183","azimuthAZ":"112.092350","azimuthZA":"293.037795","type":"traffic"}, +"Coriant-R3-Coriant-R2":{"id":"Coriant-R3-Coriant-R2","name":"Coriant-R3-Coriant-R2","siteA":"Coriant-R3","siteZ":"Coriant-R2","siteNameA":"Coriant-R3","siteNameZ":"Coriant-R2","length":"43.308017","azimuthAZ":".944183","azimuthZA":"180.955123","type":"traffic"}, +"ADVA-R2-Coriant-R2":{"id":"ADVA-R2-Coriant-R2","name":"ADVA-R2-Coriant-R2","siteA":"ADVA-R2","siteZ":"Coriant-R2","siteNameA":"ADVA-R2","siteNameZ":"Coriant-R2","length":"43.492285","azimuthAZ":"89.993872","azimuthZA":"270.661932","type":"traffic"}, +"ADVA-R3-Coriant-R3":{"id":"ADVA-R3-Coriant-R3","name":"ADVA-R3-Coriant-R3","siteA":"ADVA-R3","siteZ":"Coriant-R3","siteNameA":"ADVA-R3","siteNameZ":"Coriant-R3","length":"45.213525","azimuthAZ":"89.686360","azimuthZA":"270.370141","type":"traffic"} + + } +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json new file mode 100644 index 000000000..77f12e976 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json @@ -0,0 +1,55 @@ +{ + "site": { +"Bejing":{"id":"Bejing","name":"Bejing","location":{"lat":39.979597,"lon":116.369298},"amsl-ground":55,"type":"physical-network-function","references":{"site-links":["Prague-DC-Bejing","Bejing-Tianjin"],"network-elements":["ZTE-24"]}}, +"Berlin-DC":{"id":"Berlin-DC","name":"Berlin-DC","location":{"lat":52.501305,"lon":13.366917},"amsl-ground":52,"type":"data-center","references":{"site-links":["OWL-DC-Berlin-DC","Berlin-DC-Berlin-north-east","Berlin-DC-Berlin-south","Berlin-DC-Berlin-north-west"],"network-elements":[]}}, +"Berlin-north-east":{"id":"Berlin-north-east","name":"Berlin-north-east","location":{"lat":52.524000,"lon":13.400152},"amsl-ground":60,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-north-east","Berlin-north-east-Berlin-south","Berlin-north-west-Berlin-north-east"],"network-elements":["ADVA-EthSwitch-1","ADVA-ROADM-A"]}}, +"Berlin-north-west":{"id":"Berlin-north-west","name":"Berlin-north-west","location":{"lat":52.533346,"lon":13.312181},"amsl-ground":35,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-north-west","Berlin-south-Berlin-north-west","Berlin-north-west-Berlin-north-east"],"network-elements":["ADVA-ROADM-C"]}}, +"Berlin-south":{"id":"Berlin-south","name":"Berlin-south","location":{"lat":52.459541,"lon":13.366960},"amsl-ground":35,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-south","Berlin-north-east-Berlin-south","Berlin-south-Berlin-north-west","Berlin-south-Berlin-south-west"],"network-elements":["ADVA-EthSwitch-2","ADVA-ROADM-B"]}}, +"Berlin-south-west":{"id":"Berlin-south-west","name":"Berlin-south-west","location":{"lat":52.459541,"lon":13.334130},"amsl-ground":59,"type":"physical-network-function","references":{"site-links":["Berlin-south-Berlin-south-west"],"network-elements":["Nokia-eNodeB-1"]}}, +"Malpensa":{"id":"Malpensa","name":"Malpensa","location":{"lat":45.630000,"lon":8.723056},"amsl-ground":220,"type":"physical-network-function","references":{"site-links":["Prague-DC-Malpensa","Milan-Malpensa"],"network-elements":["SIAE-S2"]}}, +"Milan":{"id":"Milan","name":"Milan","location":{"lat":45.470312,"lon":9.183940},"amsl-ground":122,"type":"physical-network-function","references":{"site-links":["Prague-DC-Milan","Milan-Malpensa"],"network-elements":["SIAE-S1"]}}, +"Ottawa-Airport":{"id":"Ottawa-Airport","name":"Ottawa-Airport","location":{"lat":45.293149,"lon":-75.523889},"amsl-ground":113,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-Airport","Ottawa-Airport-Ottawa-south-west","Ottawa-Center-Ottawa-Airport"],"network-elements":["DragonWave-Z1","DragonWave-A2"]}}, +"Ottawa-Center":{"id":"Ottawa-Center","name":"Ottawa-Center","location":{"lat":45.250298,"lon":-76.080431},"amsl-ground":87,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-Center","Ottawa-Center-Ottawa-Airport","Ottawa-south-west-Ottawa-Center"],"network-elements":["DragonWave-A1","DragonWave-Z3"]}}, +"Ottawa-south-west":{"id":"Ottawa-south-west","name":"Ottawa-south-west","location":{"lat":45.345269,"lon":-75.910469},"amsl-ground":111,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-south-west","Ottawa-Airport-Ottawa-south-west","Ottawa-south-west-Ottawa-Center"],"network-elements":["DragonWave-Z2","DragonWave-A3"]}}, +"OWL-DC":{"id":"OWL-DC","name":"OWL-DC","location":{"lat":40.468102,"lon":-74.447872},"amsl-ground":32,"type":"data-center","references":{"site-links":["OWL-DC-Prague-DC","OWL-DC-Berlin-DC","OWL-DC-AT&T-Labs","OWL-DC-owl-north","OWL-DC-owl-north-east","OWL-DC-owl-east","OWL-DC-AT&T-Bedminster","OWL-DC-San-Ramon-DC"],"network-elements":[]}}, +"owl-east":{"id":"owl-east","name":"owl-east","location":{"lat":40.470480,"lon":-74.430146},"amsl-ground":25,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-east","owl-north-east-owl-east"],"network-elements":["Ericsson-B2","Airspan-LTE-BS4"]}}, +"owl-west":{"id":"owl-west","name":"owl-west","location":{"lat":40.465724,"lon":-74.465599},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-LTE-BS2"]}}, +"owl-north":{"id":"owl-north","name":"owl-north","location":{"lat":40.481588,"lon":-74.450998},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-north","owl-north-owl-north-east"],"network-elements":["Commscope-DAS-01","Ericsson-A1","NEC-WiMAX-BS3"]}}, +"owl-north-east":{"id":"owl-north-east","name":"owl-north-east","location":{"lat":40.479319,"lon":-74.437548},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-north-east","owl-north-owl-north-east","owl-north-east-owl-east"],"network-elements":["Ericsson-B1","Ericsson-A2","Airspan-LTE-BS3"]}}, +"owl-north-west":{"id":"owl-north-west","name":"owl-north-west","location":{"lat":40.475956,"lon":-74.462617},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":[],"network-elements":["NEC-WiMAX-BS2"]}}, +"owl-south":{"id":"owl-south","name":"owl-south","location":{"lat":40.454616,"lon":-74.444747},"amsl-ground":2,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-WiMAX-BS1"]}}, +"owl-south-east":{"id":"owl-south-east","name":"owl-south-east","location":{"lat":40.460248,"lon":-74.433127},"amsl-ground":28,"type":"physical-network-function","references":{"site-links":[],"network-elements":["NEC-WiMAX-BS1","Commscope-OneCell-01","Ericsson-LTE-Sim-05","Nokia-LTE-Sim-06","Samsung-LTE-Sim-07"]}}, +"owl-south-west":{"id":"owl-south-west","name":"owl-south-west","location":{"lat":40.456885,"lon":-74.458197},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-LTE-BS1"]}}, +"Prague-DC":{"id":"Prague-DC","name":"Prague-DC","location":{"lat":50.082702,"lon":14.419391},"amsl-ground":192,"type":"data-center","references":{"site-links":["OWL-DC-Prague-DC","Prague-DC-Bejing","Prague-DC-Tianjin","Prague-DC-Milan","Prague-DC-Malpensa","Prague-DC-Ottawa-Center","Prague-DC-Ottawa-Airport","Prague-DC-Ottawa-south-west","Prague-DC-Peania","Prague-DC-Athens","Prague-DC-Tel-Aviv","Prague-DC-Tel-Aviv-north","Prague-DC-Bucharest-north","Prague-DC-Politehnica-Bucharest"],"network-elements":[]}}, +"Tianjin":{"id":"Tianjin","name":"Tianjin","location":{"lat":39.125229,"lon":117.015355},"amsl-ground":4,"type":"physical-network-function","references":{"site-links":["Prague-DC-Tianjin","Bejing-Tianjin"],"network-elements":["ZTE-81"]}}, +"Peania":{"id":"Peania","name":"Peania","location":{"lat":37.941722,"lon":23.873501},"amsl-ground":95,"type":"physical-network-function","references":{"site-links":["Athens-Peania","Prague-DC-Peania"],"network-elements":[]}}, +"Athens":{"id":"Athens","name":"Athens","location":{"lat":37.990900,"lon":23.703320},"amsl-ground":88,"type":"physical-network-function","references":{"site-links":["Athens-Peania","Prague-DC-Athens"],"network-elements":["Intracom-Z"]}}, +"AT&T-Labs":{"id":"AT&T-Labs","name":"AT&T-Labs","location":{"lat":40.397461,"lon":-74.135717},"amsl-ground":49,"type":"data-center","references":{"site-links":["OWL-DC-AT&T-Labs","AT&T-Labs-Middletown-north","AT&T-Labs-Middletown-south-east","AT&T-Labs-Middletown-south-west"],"network-elements":[]}}, +"Middletown-north":{"id":"Middletown-north","name":"Middletown-north","location":{"lat":40.420676,"lon":-74.120049},"amsl-ground":15,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-north","Middletown-south-west-Middletown-north","Middletown-north-Middletown-south-east"],"network-elements":["DragonWave-A4","Ericsson-24"]}}, +"Middletown-south-east":{"id":"Middletown-south-east","name":"Middletown-south-east","location":{"lat":40.397288,"lon":-74.088610},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-south-east","Middletown-north-Middletown-south-east","Middletown-south-east-Middletown-south-west"],"network-elements":["DragonWave-Z4","Nokia-61"]}}, +"Middletown-south-west":{"id":"Middletown-south-west","name":"Middletown-south-west","location":{"lat":40.394148,"lon":-74.134519},"amsl-ground":48,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-south-west","Middletown-south-west-Middletown-north","Middletown-south-east-Middletown-south-west"],"network-elements":["Nokia-62","Ericsson-23"]}}, +"Tel-Aviv":{"id":"Tel-Aviv","name":"Tel-Aviv","location":{"lat":32.111466,"lon":34.836747},"amsl-ground":23,"type":"physical-network-function","references":{"site-links":["Tel-Aviv-Tel-Aviv-north","Prague-DC-Tel-Aviv"],"network-elements":["Ceragon-A1"]}}, +"Tel-Aviv-north":{"id":"Tel-Aviv-north","name":"Tel-Aviv-north","location":{"lat":32.175641,"lon":34.887036},"amsl-ground":70,"type":"physical-network-function","references":{"site-links":["Tel-Aviv-Tel-Aviv-north","Prague-DC-Tel-Aviv-north"],"network-elements":["Ceragon-Z1"]}}, +"Bucharest-north":{"id":"Bucharest-north","name":"Bucharest-north","location":{"lat":44.448833,"lon":26.091029},"amsl-ground":97,"type":"physical-network-function","references":{"site-links":["Bucharest-north-Politehnica-Bucharest","Prague-DC-Bucharest-north"],"network-elements":["Ceragon-A2"]}}, +"Politehnica-Bucharest":{"id":"Politehnica-Bucharest","name":"Politehnica-Bucharest","location":{"lat":44.433837,"lon":26.057854},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["Bucharest-north-Politehnica-Bucharest","Prague-DC-Politehnica-Bucharest"],"network-elements":["Ceragon-Z2"]}}, +"AT&T-Bedminster":{"id":"AT&T-Bedminster","name":"AT&T-Bedminster","location":{"lat":40.668802,"lon":-74.636862},"amsl-ground":104,"type":"data-center","references":{"site-links":["OWL-DC-AT&T-Bedminster","AT&T-Bedminster-Petrol-Bedminster","AT&T-Bedminster-US78/US287"],"network-elements":[]}}, +"Petrol-Bedminster":{"id":"Petrol-Bedminster","name":"Petrol-Bedminster","location":{"lat":40.679919,"lon":-74.652703},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["AT&T-Bedminster-Petrol-Bedminster"],"network-elements":["AltioStar-RRH-1"]}}, +"US78/US287":{"id":"US78/US287","name":"US78/US287","location":{"lat":40.643419,"lon":-74.647239},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["AT&T-Bedminster-US78/US287"],"network-elements":["AltioStar-RRH-2"]}}, +"San-Ramon-DC":{"id":"San-Ramon-DC","name":"San-Ramon-DC","location":{"lat":37.766128,"lon":-121.963456},"amsl-ground":32,"type":"data-center","references":{"site-links":["San-Ramon-DC-sr-east","San-Ramon-DC-sr-west","San-Ramon-DC-sr-north","San-Ramon-DC-sr-north-east","San-Ramon-DC-sr-north-west","San-Ramon-DC-sr-south","San-Ramon-DC-sr-south-east","San-Ramon-DC-sr-south-west","OWL-DC-San-Ramon-DC"],"network-elements":[]}}, +"sr-east":{"id":"sr-east","name":"sr-east","location":{"lat":37.768506,"lon":-121.945729},"amsl-ground":25,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-east"],"network-elements":[]}}, +"sr-west":{"id":"sr-west","name":"sr-west","location":{"lat":37.763750,"lon":-121.981183},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-west"],"network-elements":[]}}, +"sr-north":{"id":"sr-north","name":"sr-north","location":{"lat":37.779614,"lon":-121.966582},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north"],"network-elements":[]}}, +"sr-north-east":{"id":"sr-north-east","name":"sr-north-east","location":{"lat":37.777345,"lon":-121.953132},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north-east"],"network-elements":[]}}, +"sr-north-west":{"id":"sr-north-west","name":"sr-north-west","location":{"lat":37.773982,"lon":-121.978201},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north-west"],"network-elements":[]}}, +"sr-south":{"id":"sr-south","name":"sr-south","location":{"lat":37.752642,"lon":-121.960330},"amsl-ground":2,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south"],"network-elements":[]}}, +"sr-south-east":{"id":"sr-south-east","name":"sr-south-east","location":{"lat":37.758274,"lon":-121.948711},"amsl-ground":28,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south-east"],"network-elements":[]}}, +"sr-south-west":{"id":"sr-south-west","name":"sr-south-west","location":{"lat":37.754911,"lon":-121.973780},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south-west"],"network-elements":[]}}, +"Telia-Lab":{"id":"Telia-Lab","name":"Telia-Lab","location":{"lat":59.357212,"lon":17.974854},"amsl-ground":18,"type":"data-center","references":{"site-links":["Telia-Lab-ADVA-R1","Telia-Lab-ADVA-R2","Telia-Lab-ADVA-R3","Telia-Lab-Coriant-R1","Telia-Lab-Coriant-R2","Telia-Lab-Coriant-R3"],"network-elements":[]}}, +"ADVA-R1":{"id":"ADVA-R1","name":"ADVA-R1","location":{"lat":59.060684,"lon":16.496340},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R1","ADVA-R1-ADVA-R2","ADVA-R3-ADVA-R1"],"network-elements":["ADVA-R1","Coriant-204"]}}, +"ADVA-R2":{"id":"ADVA-R2","name":"ADVA-R2","location":{"lat":59.652001,"lon":17.149636},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R2","ADVA-R1-ADVA-R2","ADVA-R2-ADVA-R3","ADVA-R2-Coriant-R2"],"network-elements":["ADVA-R2","Coriant-202"]}}, +"ADVA-R3":{"id":"ADVA-R3","name":"ADVA-R3","location":{"lat":59.260519,"lon":17.115525},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R3","ADVA-R2-ADVA-R3","ADVA-R3-ADVA-R1","ADVA-R3-Coriant-R3"],"network-elements":["ADVA-R3"]}}, +"Coriant-R1":{"id":"Coriant-R1","name":"Coriant-R1","location":{"lat":59.418652,"lon":19.020660},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R1","Coriant-R1-Coriant-R3","Coriant-R2-Coriant-R1"],"network-elements":["Coriant-R1","Coriant-201"]}}, +"Coriant-R2":{"id":"Coriant-R2","name":"Coriant-R2","location":{"lat":59.649762,"lon":17.923781},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R2","Coriant-R2-Coriant-R1","Coriant-R3-Coriant-R2","ADVA-R2-Coriant-R2"],"network-elements":["Coriant-R2"]}}, +"Coriant-R3":{"id":"Coriant-R3","name":"Coriant-R3","location":{"lat":59.260319,"lon":17.911079},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R3","Coriant-R1-Coriant-R3","Coriant-R3-Coriant-R2","ADVA-R3-Coriant-R3"],"network-elements":["Coriant-R3","Coriant-203"]}} + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json new file mode 100644 index 000000000..c22624599 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json @@ -0,0 +1,738 @@ +{ "schema-information": { + +"tapi-common": { +"id": "tapi-common", +"is-read-only": false, +"description": ["This module contains TAPI Common Model definitions. Source: TapiCommon.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"service-interface-point-uuid": { +"id": "service-interface-point-uuid", +"is-read-only": false, +"description": ["none"] +}, +"service-interface-point-ref-g": { +"id": "service-interface-point-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"administrative-state": { +"id": "administrative-state", +"is-read-only": false, +"description": ["none"] +}, +"operational-state": { +"id": "operational-state", +"is-read-only": false, +"description": ["none"] +}, +"lifecycle-state": { +"id": "lifecycle-state", +"is-read-only": false, +"description": ["none"] +}, +"admin-state-pac-g": { +"id": "admin-state-pac-g", +"is-read-only": false, +"description": ["Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects."] +}, +"uuid": { +"id": "uuid", +"is-read-only": false, +"description": ["UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"] +}, +"name": { +"id": "name", +"is-read-only": false, +"description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."] +}, +"global-class-g": { +"id": "global-class-g", +"is-read-only": false, +"description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."] +}, +"lifecycle-state": { +"id": "lifecycle-state", +"is-read-only": false, +"description": ["none"] +}, +"lifecycle-state-pac-g": { +"id": "lifecycle-state-pac-g", +"is-read-only": false, +"description": ["Provides state attributes for an entity that has lifeccycle aspects only."] +}, +"local-id": { +"id": "local-id", +"is-read-only": false, +"description": ["none"] +}, +"name": { +"id": "name", +"is-read-only": false, +"description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."] +}, +"local-class-g": { +"id": "local-class-g", +"is-read-only": false, +"description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."] +}, +"operational-state": { +"id": "operational-state", +"is-read-only": false, +"description": ["none"] +}, +"lifecycle-state": { +"id": "lifecycle-state", +"is-read-only": false, +"description": ["none"] +}, +"operational-state-pac-g": { +"id": "operational-state-pac-g", +"is-read-only": false, +"description": ["Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects."] +}, +"context": { +"id": "context", +"is-read-only": false, +"description": ["none"] +}, +"service-interface-point": { +"id": "service-interface-point", +"is-read-only": false, +"description": ["none"] +}, +"tapi-context-g": { +"id": "tapi-context-g", +"is-read-only": false, +"description": ["The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements)."] +}, +"resource-spec-g": { +"id": "resource-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"service-spec-g": { +"id": "service-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["Usage of layerProtocolName [>1] in the ServiceInterfacePoint should be considered experimental"] +}, +"supported-layer-protocol-qualifier": { +"id": "supported-layer-protocol-qualifier", +"is-read-only": false, +"description": ["none"] +}, +"service-interface-point-g": { +"id": "service-interface-point-g", +"is-read-only": false, +"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."] +}, +"total-potential-capacity": { +"id": "total-potential-capacity", +"is-read-only": false, +"description": ["An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken."] +}, +"available-capacity": { +"id": "available-capacity", +"is-read-only": false, +"description": ["Capacity available to be assigned."] +}, +"capacity-pac-g": { +"id": "capacity-pac-g", +"is-read-only": false, +"description": ["The TopologicalEntity derives capacity from the underlying realization. A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization. A TopologicalEntity may be directly used in the view or may be assigned to another view for use. The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details. Represents the capacity available to user (client) along with client interaction and usage. A TopologicalEntity may reflect one or more client protocols and one or more members for each profile."] +}, +"termination-direction": { +"id": "termination-direction", +"is-read-only": false, +"description": ["The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"] +}, +"termination-state": { +"id": "termination-state", +"is-read-only": false, +"description": ["Indicates whether the layer is terminated and if so how."] +}, +"termination-pac-g": { +"id": "termination-pac-g", +"is-read-only": false, +"description": ["Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."] +}, +"LAYER_PROTOCOL_QUALIFIER": { +"id": "LAYER_PROTOCOL_QUALIFIER", +"is-read-only": false, +"description": ["none"] +}, +"LOCKED": { +"id": "LOCKED", +"is-read-only": false, +"description": ["Users are administratively prohibited from making use of the resource."] +}, +"UNLOCKED": { +"id": "UNLOCKED", +"is-read-only": false, +"description": ["Users are allowed to use the resource"] +}, +"administrative-state": { +"id": "administrative-state", +"is-read-only": false, +"description": ["The possible values of the administrativeState."] +}, +"date-and-time": { +"id": "date-and-time", +"is-read-only": false, +"description": ["This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000..9999 year MM 01..12 month dd 01..31 day hh 00..23 hour mm 00..59 minute ss 00..59 second s .0...9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00..23 time zone difference in hours Mm 00..59 time zone difference in minutes."] +}, +"MINIMIZE": { +"id": "MINIMIZE", +"is-read-only": false, +"description": ["none"] +}, +"MAXIMIZE": { +"id": "MAXIMIZE", +"is-read-only": false, +"description": ["none"] +}, +"ALLOW": { +"id": "ALLOW", +"is-read-only": false, +"description": ["none"] +}, +"DISALLOW": { +"id": "DISALLOW", +"is-read-only": false, +"description": ["none"] +}, +"DONT_CARE": { +"id": "DONT_CARE", +"is-read-only": false, +"description": ["none"] +}, +"directive-value": { +"id": "directive-value", +"is-read-only": false, +"description": ["none"] +}, +"BIDIRECTIONAL": { +"id": "BIDIRECTIONAL", +"is-read-only": false, +"description": ["The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)"] +}, +"UNIDIRECTIONAL": { +"id": "UNIDIRECTIONAL", +"is-read-only": false, +"description": ["The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports."] +}, +"UNDEFINED_OR_UNKNOWN": { +"id": "UNDEFINED_OR_UNKNOWN", +"is-read-only": false, +"description": ["Not a normal state. The system is unable to determine the correct value."] +}, +"forwarding-direction": { +"id": "forwarding-direction", +"is-read-only": false, +"description": ["The directionality of a Forwarding entity."] +}, +"ODU": { +"id": "ODU", +"is-read-only": false, +"description": ["Models the ODU layer as per ITU-T G.872"] +}, +"ETH": { +"id": "ETH", +"is-read-only": false, +"description": ["Models the ETH layer as per ITU-T G.8010"] +}, +"DSR": { +"id": "DSR", +"is-read-only": false, +"description": ["Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities."] +}, +"PHOTONIC_MEDIA": { +"id": "PHOTONIC_MEDIA", +"is-read-only": false, +"description": ["Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"] +}, +"PLANNED": { +"id": "PLANNED", +"is-read-only": false, +"description": ["The resource is planned but is not present in the network."] +}, +"POTENTIAL_AVAILABLE": { +"id": "POTENTIAL_AVAILABLE", +"is-read-only": false, +"description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."] +}, +"POTENTIAL_BUSY": { +"id": "POTENTIAL_BUSY", +"is-read-only": false, +"description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."] +}, +"INSTALLED": { +"id": "INSTALLED", +"is-read-only": false, +"description": ["The resource is present in the network and is capable of providing the service expected."] +}, +"PENDING_REMOVAL": { +"id": "PENDING_REMOVAL", +"is-read-only": false, +"description": ["The resource has been marked for removal"] +}, +"lifecycle-state": { +"id": "lifecycle-state", +"is-read-only": false, +"description": ["The possible values of the lifecycleState."] +}, +"value-name": { +"id": "value-name", +"is-read-only": false, +"description": ["The name of the value. The value need not have a name."] +}, +"value": { +"id": "value", +"is-read-only": false, +"description": ["The value"] +}, +"name-and-value-g": { +"id": "name-and-value-g", +"is-read-only": false, +"description": ["A scoped name-value pair"] +}, +"DISABLED": { +"id": "DISABLED", +"is-read-only": false, +"description": ["The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user."] +}, +"ENABLED": { +"id": "ENABLED", +"is-read-only": false, +"description": ["The resource is partially or fully operable and available for use"] +}, +"operational-state": { +"id": "operational-state", +"is-read-only": false, +"description": ["The possible values of the operationalState."] +}, +"BIDIRECTIONAL": { +"id": "BIDIRECTIONAL", +"is-read-only": false, +"description": ["The Port has both an INPUT flow and an OUTPUT flow defined."] +}, +"INPUT": { +"id": "INPUT", +"is-read-only": false, +"description": ["The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow)."] +}, +"OUTPUT": { +"id": "OUTPUT", +"is-read-only": false, +"description": ["The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow)."] +}, +"UNIDENTIFIED_OR_UNKNOWN": { +"id": "UNIDENTIFIED_OR_UNKNOWN", +"is-read-only": false, +"description": ["Not a normal state. The system is unable to determine the correct value."] +}, +"port-direction": { +"id": "port-direction", +"is-read-only": false, +"description": ["The orientation of flow at the Port of a Forwarding entity"] +}, +"SYMMETRIC": { +"id": "SYMMETRIC", +"is-read-only": false, +"description": ["none"] +}, +"ROOT": { +"id": "ROOT", +"is-read-only": false, +"description": ["none"] +}, +"LEAF": { +"id": "LEAF", +"is-read-only": false, +"description": ["none"] +}, +"TRUNK": { +"id": "TRUNK", +"is-read-only": false, +"description": ["none"] +}, +"UNKNOWN": { +"id": "UNKNOWN", +"is-read-only": false, +"description": ["none"] +}, +"port-role": { +"id": "port-role", +"is-read-only": false, +"description": ["The role of an end in the context of the function of the forwarding entity that it bounds"] +}, +"BIDIRECTIONAL": { +"id": "BIDIRECTIONAL", +"is-read-only": false, +"description": ["A Termination with both SINK and SOURCE flows."] +}, +"SINK": { +"id": "SINK", +"is-read-only": false, +"description": ["The flow is up the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SINK flow: - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component - then will be decoded and deconstructed - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component A SINK termination is one that only supports a SINK flow. A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity"] +}, +"SOURCE": { +"id": "SOURCE", +"is-read-only": false, +"description": ["The flow is down the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SOURCE flow: - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component - then will be assembled with various overheads etc and will be coded - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component A SOURCE termination is one that only supports a SOURCE flow. A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity"] +}, +"UNDEFINED_OR_UNKNOWN": { +"id": "UNDEFINED_OR_UNKNOWN", +"is-read-only": false, +"description": ["Not a normal state. The system is unable to determine the correct value."] +}, +"termination-direction": { +"id": "termination-direction", +"is-read-only": false, +"description": ["The directionality of a termination entity"] +}, +"LP_CAN_NEVER_TERMINATE": { +"id": "LP_CAN_NEVER_TERMINATE", +"is-read-only": false, +"description": ["A non-flexible case that can never be terminated."] +}, +"LT_NOT_TERMINATED": { +"id": "LT_NOT_TERMINATED", +"is-read-only": false, +"description": ["A flexible termination that can terminate but is currently not terminated."] +}, +"TERMINATED_SERVER_TO_CLIENT_FLOW": { +"id": "TERMINATED_SERVER_TO_CLIENT_FLOW", +"is-read-only": false, +"description": ["A flexible termination that is currently terminated for server to client flow only."] +}, +"TERMINATED_CLIENT_TO_SERVER_FLOW": { +"id": "TERMINATED_CLIENT_TO_SERVER_FLOW", +"is-read-only": false, +"description": ["A flexible termination that is currently terminated for client to server flow only."] +}, +"TERMINATED_BIDIRECTIONAL": { +"id": "TERMINATED_BIDIRECTIONAL", +"is-read-only": false, +"description": ["A flexible termination that is currently terminated in both directions of flow."] +}, +"LT_PERMENANTLY_TERMINATED": { +"id": "LT_PERMENANTLY_TERMINATED", +"is-read-only": false, +"description": ["A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases)."] +}, +"TERMINATION_STATE_UNKNOWN": { +"id": "TERMINATION_STATE_UNKNOWN", +"is-read-only": false, +"description": ["There TerminationState cannot be determined."] +}, +"termination-state": { +"id": "termination-state", +"is-read-only": false, +"description": ["Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."] +}, +"uuid": { +"id": "uuid", +"is-read-only": false, +"description": ["The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"] +}, +"total-size": { +"id": "total-size", +"is-read-only": false, +"description": ["Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate."] +}, +"bandwidth-profile": { +"id": "bandwidth-profile", +"is-read-only": false, +"description": ["none"] +}, +"capacity-g": { +"id": "capacity-g", +"is-read-only": false, +"description": ["Information on capacity of a particular TopologicalEntity."] +}, +"bw-profile-type": { +"id": "bw-profile-type", +"is-read-only": false, +"description": ["none"] +}, +"committed-information-rate": { +"id": "committed-information-rate", +"is-read-only": false, +"description": ["none"] +}, +"committed-burst-size": { +"id": "committed-burst-size", +"is-read-only": false, +"description": ["none"] +}, +"peak-information-rate": { +"id": "peak-information-rate", +"is-read-only": false, +"description": ["none"] +}, +"peak-burst-size": { +"id": "peak-burst-size", +"is-read-only": false, +"description": ["none"] +}, +"color-aware": { +"id": "color-aware", +"is-read-only": false, +"description": ["none"] +}, +"coupling-flag": { +"id": "coupling-flag", +"is-read-only": false, +"description": ["none"] +}, +"bandwidth-profile-g": { +"id": "bandwidth-profile-g", +"is-read-only": false, +"description": ["none"] +}, +"value": { +"id": "value", +"is-read-only": false, +"description": ["none"] +}, +"unit": { +"id": "unit", +"is-read-only": false, +"description": ["none"] +}, +"capacity-value-g": { +"id": "capacity-value-g", +"is-read-only": false, +"description": ["The Capacity (Bandwidth) values that are applicable for digital layers."] +}, +"TB": { +"id": "TB", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in TeraBytes"] +}, +"TBPS": { +"id": "TBPS", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in Terabit-per-second"] +}, +"GB": { +"id": "GB", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in GigaBytes"] +}, +"GBPS": { +"id": "GBPS", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in Gigabit-per-second"] +}, +"MB": { +"id": "MB", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in MegaBytes"] +}, +"MBPS": { +"id": "MBPS", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in Megabit-per-second"] +}, +"KB": { +"id": "KB", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in KiloBytes"] +}, +"KBPS": { +"id": "KBPS", +"is-read-only": false, +"description": ["Indicates that the integer CapacityValue is in Kilobit-per-second"] +}, +"GHz": { +"id": "GHz", +"is-read-only": false, +"description": ["none"] +}, +"MHz": { +"id": "MHz", +"is-read-only": false, +"description": ["none"] +}, +"capacity-unit": { +"id": "capacity-unit", +"is-read-only": false, +"description": ["none"] +}, +"MEF_10.x": { +"id": "MEF_10.x", +"is-read-only": false, +"description": ["none"] +}, +"RFC_2697": { +"id": "RFC_2697", +"is-read-only": false, +"description": ["none"] +}, +"RFC_2698": { +"id": "RFC_2698", +"is-read-only": false, +"description": ["none"] +}, +"RFC_4115": { +"id": "RFC_4115", +"is-read-only": false, +"description": ["none"] +}, +"bandwidth-profile-type": { +"id": "bandwidth-profile-type", +"is-read-only": false, +"description": ["none"] +}, +"end-time": { +"id": "end-time", +"is-read-only": false, +"description": ["none"] +}, +"start-time": { +"id": "start-time", +"is-read-only": false, +"description": ["none"] +}, +"time-range-g": { +"id": "time-range-g", +"is-read-only": false, +"description": ["none"] +}, +"value": { +"id": "value", +"is-read-only": false, +"description": ["none"] +}, +"unit": { +"id": "unit", +"is-read-only": false, +"description": ["none"] +}, +"time-period-g": { +"id": "time-period-g", +"is-read-only": false, +"description": ["none"] +}, +"YEARS": { +"id": "YEARS", +"is-read-only": false, +"description": ["none"] +}, +"MONTHS": { +"id": "MONTHS", +"is-read-only": false, +"description": ["none"] +}, +"DAYS": { +"id": "DAYS", +"is-read-only": false, +"description": ["none"] +}, +"HOURS": { +"id": "HOURS", +"is-read-only": false, +"description": ["none"] +}, +"MINUTES": { +"id": "MINUTES", +"is-read-only": false, +"description": ["none"] +}, +"SECONDS": { +"id": "SECONDS", +"is-read-only": false, +"description": ["none"] +}, +"MILLISECONDS": { +"id": "MILLISECONDS", +"is-read-only": false, +"description": ["none"] +}, +"MICROSECONDS": { +"id": "MICROSECONDS", +"is-read-only": false, +"description": ["none"] +}, +"NANOSECONDS": { +"id": "NANOSECONDS", +"is-read-only": false, +"description": ["none"] +}, +"PICOSECONDS": { +"id": "PICOSECONDS", +"is-read-only": false, +"description": ["none"] +}, +"time-unit": { +"id": "time-unit", +"is-read-only": false, +"description": ["none"] +}, +"period": { +"id": "period", +"is-read-only": false, +"description": ["none"] +}, +"time-interval-g": { +"id": "time-interval-g", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-qualifier": { +"id": "layer-protocol-qualifier", +"is-read-only": false, +"description": ["This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol. This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules. Examples: - LayerProtocolName := OPTICAL_DATA_UNIT LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc - LayerProtocolName := DIGITAL_SIGNAL_RATE LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc - LayerProtocolName := PHOTONIC_MEDIA LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS"] +}, +"get-service-interface-point-details": { +"id": "get-service-interface-point-details", +"is-read-only": false, +"description": ["none"] +}, +"sip-id-or-name": { +"id": "sip-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"sip": { +"id": "sip", +"is-read-only": false, +"description": ["none"] +}, +"get-service-interface-point-list": { +"id": "get-service-interface-point-list", +"is-read-only": false, +"description": ["none"] +}, +"sip": { +"id": "sip", +"is-read-only": false, +"description": ["none"] +}, +"update-service-interface-point": { +"id": "update-service-interface-point", +"is-read-only": false, +"description": ["none"] +}, +"sip-id-or-name": { +"id": "sip-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json new file mode 100644 index 000000000..d363f437e --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json @@ -0,0 +1,693 @@ +{ "schema-information": { + +"tapi-connectivity": { +"id": "tapi-connectivity", +"is-read-only": false, +"description": ["This module contains TAPI Connectivity Model definitions. Source: TapiConnectivity.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"connectivity-service-uuid": { +"id": "connectivity-service-uuid", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-service-ref-g": { +"id": "connectivity-service-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-service-end-point-local-id": { +"id": "connectivity-service-end-point-local-id", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-service-end-point-ref-g": { +"id": "connectivity-service-end-point-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"connection-end-point-uuid": { +"id": "connection-end-point-uuid", +"is-read-only": false, +"description": ["none"] +}, +"connection-end-point-ref-g": { +"id": "connection-end-point-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"connection-uuid": { +"id": "connection-uuid", +"is-read-only": false, +"description": ["none"] +}, +"connection-ref-g": { +"id": "connection-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"switch-control-uuid": { +"id": "switch-control-uuid", +"is-read-only": false, +"description": ["none"] +}, +"switch-control-ref-g": { +"id": "switch-control-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"route-local-id": { +"id": "route-local-id", +"is-read-only": false, +"description": ["none"] +}, +"route-ref-g": { +"id": "route-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"connection-end-point": { +"id": "connection-end-point", +"is-read-only": false, +"description": ["none"] +}, +"lower-connection": { +"id": "lower-connection", +"is-read-only": false, +"description": ["An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning). Aggregation is used as for the Node/Topology to allow changes in hierarchy. Connection aggregation reflects Node/Topology aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning."] +}, +"supported-client-link": { +"id": "supported-client-link", +"is-read-only": false, +"description": ["none"] +}, +"route": { +"id": "route", +"is-read-only": false, +"description": ["none"] +}, +"switch-control": { +"id": "switch-control", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"connection-g": { +"id": "connection-g", +"is-read-only": false, +"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-qualifier": { +"id": "layer-protocol-qualifier", +"is-read-only": false, +"description": ["none"] +}, +"parent-node-edge-point": { +"id": "parent-node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"client-node-edge-point": { +"id": "client-node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"aggregated-connection-end-point": { +"id": "aggregated-connection-end-point", +"is-read-only": false, +"description": ["none"] +}, +"connection-port-direction": { +"id": "connection-port-direction", +"is-read-only": false, +"description": ["The orientation of defined flow at the EndPoint."] +}, +"connection-port-role": { +"id": "connection-port-role", +"is-read-only": false, +"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] +}, +"connection-end-point-g": { +"id": "connection-end-point-g", +"is-read-only": false, +"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."] +}, +"service-layer": { +"id": "service-layer", +"is-read-only": false, +"description": ["none"] +}, +"service-type": { +"id": "service-type", +"is-read-only": false, +"description": ["none"] +}, +"service-level": { +"id": "service-level", +"is-read-only": false, +"description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"] +}, +"requested-capacity": { +"id": "requested-capacity", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-direction": { +"id": "connectivity-direction", +"is-read-only": false, +"description": ["none"] +}, +"schedule": { +"id": "schedule", +"is-read-only": false, +"description": ["none"] +}, +"coroute-inclusion": { +"id": "coroute-inclusion", +"is-read-only": false, +"description": ["none"] +}, +"diversity-exclusion": { +"id": "diversity-exclusion", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-constraint-g": { +"id": "connectivity-constraint-g", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"connection": { +"id": "connection", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-service-g": { +"id": "connectivity-service-g", +"is-read-only": false, +"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-qualifier": { +"id": "layer-protocol-qualifier", +"is-read-only": false, +"description": ["none"] +}, +"service-interface-point": { +"id": "service-interface-point", +"is-read-only": false, +"description": ["none"] +}, +"connection-end-point": { +"id": "connection-end-point", +"is-read-only": false, +"description": ["none"] +}, +"capacity": { +"id": "capacity", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["The orientation of defined flow at the EndPoint."] +}, +"role": { +"id": "role", +"is-read-only": false, +"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] +}, +"protection-role": { +"id": "protection-role", +"is-read-only": false, +"description": ["To specify the protection role of this Port when create or update ConnectivityService."] +}, +"connectivity-service-end-point-g": { +"id": "connectivity-service-end-point-g", +"is-read-only": false, +"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"] +}, +"connection-end-point": { +"id": "connection-end-point", +"is-read-only": false, +"description": ["none"] +}, +"route-g": { +"id": "route-g", +"is-read-only": false, +"description": ["The FC Route (FcRoute) object class models the individual routes of an FC. The route of an FC object is represented by a list of FCs at a lower level. Note that depending on the service supported by an FC, an the FC can have multiple routes."] +}, +"connectivity-service": { +"id": "connectivity-service", +"is-read-only": false, +"description": ["none"] +}, +"connection": { +"id": "connection", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-context-g": { +"id": "connectivity-context-g", +"is-read-only": false, +"description": ["none"] +}, +"selected-connection-end-point": { +"id": "selected-connection-end-point", +"is-read-only": false, +"description": ["none"] +}, +"selected-route": { +"id": "selected-route", +"is-read-only": false, +"description": ["none"] +}, +"selection-control": { +"id": "selection-control", +"is-read-only": false, +"description": ["Degree of administrative control applied to the switch selection."] +}, +"selection-reason": { +"id": "selection-reason", +"is-read-only": false, +"description": ["The reason for the current switch selection."] +}, +"switch-direction": { +"id": "switch-direction", +"is-read-only": false, +"description": ["Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both."] +}, +"switch-g": { +"id": "switch-g", +"is-read-only": false, +"description": ["The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection). If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open'). The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict."] +}, +"sub-switch-control": { +"id": "sub-switch-control", +"is-read-only": false, +"description": ["none"] +}, +"switch": { +"id": "switch", +"is-read-only": false, +"description": ["none"] +}, +"switch-control-g": { +"id": "switch-control-g", +"is-read-only": false, +"description": ["Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme."] +}, +"resilience-type": { +"id": "resilience-type", +"is-read-only": false, +"description": ["none"] +}, +"restoration-coordinate-type": { +"id": "restoration-coordinate-type", +"is-read-only": false, +"description": ["The coordination mechanism between multi-layers."] +}, +"restore-priority": { +"id": "restore-priority", +"is-read-only": false, +"description": ["none"] +}, +"reversion-mode": { +"id": "reversion-mode", +"is-read-only": false, +"description": ["Indcates whether the protection scheme is revertive or non-revertive."] +}, +"wait-to-revert-time": { +"id": "wait-to-revert-time", +"is-read-only": false, +"description": ["If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource."] +}, +"hold-off-time": { +"id": "hold-off-time", +"is-read-only": false, +"description": ["This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm."] +}, +"is-lock-out": { +"id": "is-lock-out", +"is-read-only": false, +"description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."] +}, +"is-frozen": { +"id": "is-frozen", +"is-read-only": false, +"description": ["Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected."] +}, +"is-coordinated-switching-both-ends": { +"id": "is-coordinated-switching-both-ends", +"is-read-only": false, +"description": ["Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends."] +}, +"max-switch-times": { +"id": "max-switch-times", +"is-read-only": false, +"description": ["Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset."] +}, +"preferred-restoration-layer": { +"id": "preferred-restoration-layer", +"is-read-only": false, +"description": ["Indicate which layer this resilience parameters package configured for."] +}, +"resilience-constraint-g": { +"id": "resilience-constraint-g", +"is-read-only": false, +"description": ["A list of control parameters to apply to a switch."] +}, +"connection-end-point": { +"id": "connection-end-point", +"is-read-only": false, +"description": ["none"] +}, +"cep-list-g": { +"id": "cep-list-g", +"is-read-only": false, +"description": ["none"] +}, +"POINT_TO_POINT_CONNECTIVITY": { +"id": "POINT_TO_POINT_CONNECTIVITY", +"is-read-only": false, +"description": ["none"] +}, +"POINT_TO_MULTIPOINT_CONNECTIVITY": { +"id": "POINT_TO_MULTIPOINT_CONNECTIVITY", +"is-read-only": false, +"description": ["none"] +}, +"MULTIPOINT_CONNECTIVITY": { +"id": "MULTIPOINT_CONNECTIVITY", +"is-read-only": false, +"description": ["none"] +}, +"ROOTED_MULTIPOINT_CONNECTIVITY": { +"id": "ROOTED_MULTIPOINT_CONNECTIVITY", +"is-read-only": false, +"description": ["none"] +}, +"service-type": { +"id": "service-type", +"is-read-only": false, +"description": ["none"] +}, +"REVERTIVE": { +"id": "REVERTIVE", +"is-read-only": false, +"description": ["An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time)."] +}, +"NON-REVERTIVE": { +"id": "NON-REVERTIVE", +"is-read-only": false, +"description": ["An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers."] +}, +"reversion-mode": { +"id": "reversion-mode", +"is-read-only": false, +"description": ["The reversion mode associated with protection."] +}, +"LOCK_OUT": { +"id": "LOCK_OUT", +"is-read-only": false, +"description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."] +}, +"NORMAL": { +"id": "NORMAL", +"is-read-only": false, +"description": ["none"] +}, +"MANUAL": { +"id": "MANUAL", +"is-read-only": false, +"description": ["none"] +}, +"FORCED": { +"id": "FORCED", +"is-read-only": false, +"description": ["none"] +}, +"selection-control": { +"id": "selection-control", +"is-read-only": false, +"description": ["Possible degrees of administrative control applied to the Route selection."] +}, +"LOCKOUT": { +"id": "LOCKOUT", +"is-read-only": false, +"description": ["none"] +}, +"NORMAL": { +"id": "NORMAL", +"is-read-only": false, +"description": ["none"] +}, +"MANUAL": { +"id": "MANUAL", +"is-read-only": false, +"description": ["none"] +}, +"FORCED": { +"id": "FORCED", +"is-read-only": false, +"description": ["none"] +}, +"WAIT_TO_REVERT": { +"id": "WAIT_TO_REVERT", +"is-read-only": false, +"description": ["none"] +}, +"SIGNAL_DEGRADE": { +"id": "SIGNAL_DEGRADE", +"is-read-only": false, +"description": ["none"] +}, +"SIGNAL_FAIL": { +"id": "SIGNAL_FAIL", +"is-read-only": false, +"description": ["none"] +}, +"selection-reason": { +"id": "selection-reason", +"is-read-only": false, +"description": ["The cause of the current route selection."] +}, +"NO_COORDINATE": { +"id": "NO_COORDINATE", +"is-read-only": false, +"description": ["none"] +}, +"HOLD_OFF_TIME": { +"id": "HOLD_OFF_TIME", +"is-read-only": false, +"description": ["none"] +}, +"WAIT_FOR_NOTIFICATION": { +"id": "WAIT_FOR_NOTIFICATION", +"is-read-only": false, +"description": ["none"] +}, +"coordinate-type": { +"id": "coordinate-type", +"is-read-only": false, +"description": ["none"] +}, +"WORK": { +"id": "WORK", +"is-read-only": false, +"description": ["none"] +}, +"PROTECT": { +"id": "PROTECT", +"is-read-only": false, +"description": ["none"] +}, +"PROTECTED": { +"id": "PROTECTED", +"is-read-only": false, +"description": ["none"] +}, +"NA": { +"id": "NA", +"is-read-only": false, +"description": ["none"] +}, +"WORK_RESTORE": { +"id": "WORK_RESTORE", +"is-read-only": false, +"description": ["none"] +}, +"PROTECT_RESTORE": { +"id": "PROTECT_RESTORE", +"is-read-only": false, +"description": ["none"] +}, +"protection-role": { +"id": "protection-role", +"is-read-only": false, +"description": ["none"] +}, +"get-connection-details": { +"id": "get-connection-details", +"is-read-only": false, +"description": ["none"] +}, +"service-id-or-name": { +"id": "service-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"connection-id-or-name": { +"id": "connection-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"connection": { +"id": "connection", +"is-read-only": false, +"description": ["none"] +}, +"get-connectivity-service-list": { +"id": "get-connectivity-service-list", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"get-connectivity-service-details": { +"id": "get-connectivity-service-details", +"is-read-only": false, +"description": ["none"] +}, +"service-id-or-name": { +"id": "service-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"create-connectivity-service": { +"id": "create-connectivity-service", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-constraint": { +"id": "connectivity-constraint", +"is-read-only": false, +"description": ["none"] +}, +"routing-constraint": { +"id": "routing-constraint", +"is-read-only": false, +"description": ["none"] +}, +"topology-constraint": { +"id": "topology-constraint", +"is-read-only": false, +"description": ["none"] +}, +"resilience-constraint": { +"id": "resilience-constraint", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"update-connectivity-service": { +"id": "update-connectivity-service", +"is-read-only": false, +"description": ["none"] +}, +"service-id-or-name": { +"id": "service-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-constraint": { +"id": "connectivity-constraint", +"is-read-only": false, +"description": ["none"] +}, +"routing-constraint": { +"id": "routing-constraint", +"is-read-only": false, +"description": ["none"] +}, +"topology-constraint": { +"id": "topology-constraint", +"is-read-only": false, +"description": ["none"] +}, +"resilience-constraint": { +"id": "resilience-constraint", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"delete-connectivity-service": { +"id": "delete-connectivity-service", +"is-read-only": false, +"description": ["none"] +}, +"service-id-or-name": { +"id": "service-id-or-name", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json new file mode 100644 index 000000000..01b8c92e0 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json @@ -0,0 +1,203 @@ +{ "schema-information": { + +"tapi-dsr": { +"id": "tapi-dsr", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE": { +"id": "DIGITAL_SIGNAL_TYPE", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_GigE": { +"id": "DIGITAL_SIGNAL_TYPE_GigE", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_10_GigE_LAN": { +"id": "DIGITAL_SIGNAL_TYPE_10_GigE_LAN", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_10_GigE_WAN": { +"id": "DIGITAL_SIGNAL_TYPE_10_GigE_WAN", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_40_GigE": { +"id": "DIGITAL_SIGNAL_TYPE_40_GigE", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_100_GigE": { +"id": "DIGITAL_SIGNAL_TYPE_100_GigE", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_100": { +"id": "DIGITAL_SIGNAL_TYPE_FC_100", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_200": { +"id": "DIGITAL_SIGNAL_TYPE_FC_200", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_400": { +"id": "DIGITAL_SIGNAL_TYPE_FC_400", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_800": { +"id": "DIGITAL_SIGNAL_TYPE_FC_800", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_1200": { +"id": "DIGITAL_SIGNAL_TYPE_FC_1200", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_1600": { +"id": "DIGITAL_SIGNAL_TYPE_FC_1600", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_FC_3200": { +"id": "DIGITAL_SIGNAL_TYPE_FC_3200", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_STM_1": { +"id": "DIGITAL_SIGNAL_TYPE_STM_1", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_STM_4": { +"id": "DIGITAL_SIGNAL_TYPE_STM_4", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_STM_16": { +"id": "DIGITAL_SIGNAL_TYPE_STM_16", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_STM_64": { +"id": "DIGITAL_SIGNAL_TYPE_STM_64", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_STM_256": { +"id": "DIGITAL_SIGNAL_TYPE_STM_256", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OC_3": { +"id": "DIGITAL_SIGNAL_TYPE_OC_3", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OC_12": { +"id": "DIGITAL_SIGNAL_TYPE_OC_12", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OC_48": { +"id": "DIGITAL_SIGNAL_TYPE_OC_48", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OC_192": { +"id": "DIGITAL_SIGNAL_TYPE_OC_192", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OC_768": { +"id": "DIGITAL_SIGNAL_TYPE_OC_768", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OTU_1": { +"id": "DIGITAL_SIGNAL_TYPE_OTU_1", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OTU_2": { +"id": "DIGITAL_SIGNAL_TYPE_OTU_2", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OTU_2E": { +"id": "DIGITAL_SIGNAL_TYPE_OTU_2E", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OTU_3": { +"id": "DIGITAL_SIGNAL_TYPE_OTU_3", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_OTU_4": { +"id": "DIGITAL_SIGNAL_TYPE_OTU_4", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_GPON": { +"id": "DIGITAL_SIGNAL_TYPE_GPON", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_XGPON": { +"id": "DIGITAL_SIGNAL_TYPE_XGPON", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_IB_SDR": { +"id": "DIGITAL_SIGNAL_TYPE_IB_SDR", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_IB_DDR": { +"id": "DIGITAL_SIGNAL_TYPE_IB_DDR", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_IB_QDR": { +"id": "DIGITAL_SIGNAL_TYPE_IB_QDR", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_SBCON_ESCON": { +"id": "DIGITAL_SIGNAL_TYPE_SBCON_ESCON", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_DVB_ASI": { +"id": "DIGITAL_SIGNAL_TYPE_DVB_ASI", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_SDI": { +"id": "DIGITAL_SIGNAL_TYPE_SDI", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_SDI_1G5": { +"id": "DIGITAL_SIGNAL_TYPE_SDI_1G5", +"is-read-only": false, +"description": ["none"] +}, +"DIGITAL_SIGNAL_TYPE_SDI_3G": { +"id": "DIGITAL_SIGNAL_TYPE_SDI_3G", +"is-read-only": false, +"description": ["none"] +}, +"digital-signal-type": { +"id": "digital-signal-type", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json new file mode 100644 index 000000000..177d0813c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json @@ -0,0 +1,1778 @@ +{ "schema-information": { + +"tapi-eth": { +"id": "tapi-eth", +"is-read-only": false, +"description": ["This module contains TAPI ETH Model definitions. Source: TapiEth.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"auxiliary-function-position-sequence": { +"id": "auxiliary-function-position-sequence", +"is-read-only": false, +"description": ["This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP."] +}, +"vlan-config": { +"id": "vlan-config", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021. range of type : -1, 0, 1..4094"] +}, +"csf-rdi-fdi-enable": { +"id": "csf-rdi-fdi-enable", +"is-read-only": false, +"description": ["This attribute models the MI_CSFrdifdiEnable information defined in G.8021."] +}, +"csf-report": { +"id": "csf-report", +"is-read-only": false, +"description": ["This attribute models the MI_CSF_Reported information defined in G.8021. range of type : true, false"] +}, +"filter-config-snk": { +"id": "filter-config-snk", +"is-read-only": false, +"description": ["This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."] +}, +"mac-length": { +"id": "mac-length", +"is-read-only": false, +"description": ["This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes. range of type : 1518, 1522, 2000"] +}, +"filter-config": { +"id": "filter-config", +"is-read-only": false, +"description": ["This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: - All bridges address: 01-80-C2-00-00-10, - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."] +}, +"is-ssf-reported": { +"id": "is-ssf-reported", +"is-read-only": false, +"description": ["This attribute provisions whether the SSF defect should be reported as fault cause or not. It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021."] +}, +"pll-thr": { +"id": "pll-thr", +"is-read-only": false, +"description": ["This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021. range of type : 0..number of ports"] +}, +"actor-oper-key": { +"id": "actor-oper-key", +"is-read-only": false, +"description": ["See 802.1AX: The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2. The meaning of particular Key values is of local significance. range of type : 16 bit"] +}, +"actor-system-id": { +"id": "actor-system-id", +"is-read-only": false, +"description": ["See 802.1AX: A MAC address used as a unique identifier for the System that contains this Aggregator."] +}, +"actor-system-priority": { +"id": "actor-system-priority", +"is-read-only": false, +"description": ["See 802.1AX: Indicating the priority associated with the Actor’s System ID. range of type : 2-octet"] +}, +"collector-max-delay": { +"id": "collector-max-delay", +"is-read-only": false, +"description": ["See 802.1AX: The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1). range of type : 16-bit"] +}, +"data-rate": { +"id": "data-rate", +"is-read-only": false, +"description": ["See 802.1AX: The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links."] +}, +"partner-oper-key": { +"id": "partner-oper-key", +"is-read-only": false, +"description": ["See 802.1AX: The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System. range of type : 16-bit"] +}, +"partner-system-id": { +"id": "partner-system-id", +"is-read-only": false, +"description": ["See 802.1AX: A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System."] +}, +"partner-system-priority": { +"id": "partner-system-priority", +"is-read-only": false, +"description": ["See 802.1AX: Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System. range of type : 2-octet"] +}, +"csf-config": { +"id": "csf-config", +"is-read-only": false, +"description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021. range of type : true, false"] +}, +"traffic-shaping": { +"id": "traffic-shaping", +"is-read-only": false, +"description": ["none"] +}, +"traffic-conditioning": { +"id": "traffic-conditioning", +"is-read-only": false, +"description": ["none"] +}, +"eth-ctp-pac-g": { +"id": "eth-ctp-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"ety-term": { +"id": "ety-term", +"is-read-only": false, +"description": ["none"] +}, +"eth-term": { +"id": "eth-term", +"is-read-only": false, +"description": ["none"] +}, +"eth-ctp": { +"id": "eth-ctp", +"is-read-only": false, +"description": ["none"] +}, +"eth-connection-end-point-spec-g": { +"id": "eth-connection-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"priority-regenerate": { +"id": "priority-regenerate", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021."] +}, +"ether-type": { +"id": "ether-type", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021."] +}, +"filter-config-1": { +"id": "filter-config-1", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed. range of type : MacAddress: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F; ActionEnum: PASS, BLOCK"] +}, +"frametype-config": { +"id": "frametype-config", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021. range of type : see Enumeration"] +}, +"port-vid": { +"id": "port-vid", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021."] +}, +"priority-code-point-config": { +"id": "priority-code-point-config", +"is-read-only": false, +"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021. range of type : see Enumeration"] +}, +"eth-termination-pac-g": { +"id": "eth-termination-pac-g", +"is-read-only": false, +"description": ["This object class models the Ethernet Flow Termination function located at a layer boundary."] +}, +"is-fts-enabled": { +"id": "is-fts-enabled", +"is-read-only": false, +"description": ["This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information."] +}, +"is-tx-pause-enabled": { +"id": "is-tx-pause-enabled", +"is-read-only": false, +"description": ["This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021."] +}, +"phy-type": { +"id": "phy-type", +"is-read-only": false, +"description": ["This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2."] +}, +"phy-type-list": { +"id": "phy-type-list", +"is-read-only": false, +"description": ["This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3."] +}, +"ety-termination-pac-g": { +"id": "ety-termination-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"prio-config-list": { +"id": "prio-config-list", +"is-read-only": false, +"description": ["This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."] +}, +"cond-config-list": { +"id": "cond-config-list", +"is-read-only": false, +"description": ["This attribute indicates for the conditioner process the conditioning parameters: - Queue ID: Indicates the Queue ID - Committed Information Rate (CIR): number of bits per second - Committed Burst Size (CBS): number of bytes - Excess Information Rate (EIR): number of bits per second - Excess Burst Size (EBS): number of bytes - Coupling flag (CF): 0 or 1 - Color mode (CM): color-blind and color-aware."] +}, +"codirectional": { +"id": "codirectional", +"is-read-only": false, +"description": ["This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP."] +}, +"traffic-conditioning-pac-g": { +"id": "traffic-conditioning-pac-g", +"is-read-only": false, +"description": ["This object class models the ETH traffic conditioning function as defined in G.8021. Basic attributes: codirectional, condConfigList, prioConfigList"] +}, +"prio-config-list": { +"id": "prio-config-list", +"is-read-only": false, +"description": ["This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."] +}, +"queue-config-list": { +"id": "queue-config-list", +"is-read-only": false, +"description": ["This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped."] +}, +"sched-config": { +"id": "sched-config", +"is-read-only": false, +"description": ["This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021. Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS). Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute."] +}, +"codirectional": { +"id": "codirectional", +"is-read-only": false, +"description": ["This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP."] +}, +"traffic-shaping-pac-g": { +"id": "traffic-shaping-pac-g", +"is-read-only": false, +"description": ["This object class models the ETH traffic shaping function as defined in G.8021. Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig"] +}, +"client-mel": { +"id": "client-mel", +"is-read-only": false, +"description": ["none"] +}, +"eth-meg-spec-g": { +"id": "eth-meg-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"eth-mep-common": { +"id": "eth-mep-common", +"is-read-only": false, +"description": ["none"] +}, +"eth-mep-source-pac": { +"id": "eth-mep-source-pac", +"is-read-only": false, +"description": ["none"] +}, +"eth-mep-sink": { +"id": "eth-mep-sink", +"is-read-only": false, +"description": ["none"] +}, +"eth-mep-spec-g": { +"id": "eth-mep-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"eth-mip-spec-g": { +"id": "eth-mip-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"eth-lb-msg": { +"id": "eth-lb-msg", +"is-read-only": false, +"description": ["none"] +}, +"number": { +"id": "number", +"is-read-only": false, +"description": ["G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process."] +}, +"eth-loopback-job-g": { +"id": "eth-loopback-job-g", +"is-read-only": false, +"description": ["This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob). This class models also the 'loopback discover' process, when destinationAddress is multicast. When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP."] +}, +"mep-mac": { +"id": "mep-mac", +"is-read-only": false, +"description": ["This attribute contains the MAC Address of the MEP."] +}, +"is-cc-enabled": { +"id": "is-cc-enabled", +"is-read-only": false, +"description": ["This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051."] +}, +"cc-period": { +"id": "cc-period", +"is-read-only": false, +"description": ["This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CCM message should be sent. Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM."] +}, +"cc-priority": { +"id": "cc-priority", +"is-read-only": false, +"description": ["This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent."] +}, +"lck-period": { +"id": "lck-period", +"is-read-only": false, +"description": ["This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent. range of type : 1s, 1min"] +}, +"lck-priority": { +"id": "lck-priority", +"is-read-only": false, +"description": ["This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent."] +}, +"eth-mep-common-g": { +"id": "eth-mep-common-g", +"is-read-only": false, +"description": ["Basic attributes: adminState, clientMel, megIdentifier, mepMac Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled Lock Process related attributes: lckPeriod, lckPriority This object class models the MEP functions that are common to MEP Sink and MEP Source."] +}, +"dm-1-priority": { +"id": "dm-1-priority", +"is-read-only": false, +"description": ["This attribute indicates the list of 1DM priorities for the MepSink."] +}, +"ais-priority": { +"id": "ais-priority", +"is-read-only": false, +"description": ["This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent."] +}, +"ais-period": { +"id": "ais-period", +"is-read-only": false, +"description": ["This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent. range of type : 1s, 1min"] +}, +"is-csf-reported": { +"id": "is-csf-reported", +"is-read-only": false, +"description": ["This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not."] +}, +"is-csf-rdi-fdi-enabled": { +"id": "is-csf-rdi-fdi-enabled", +"is-read-only": false, +"description": ["This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051."] +}, +"bandwidth-report": { +"id": "bandwidth-report", +"is-read-only": false, +"description": ["This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source."] +}, +"lm-degm": { +"id": "lm-degm", +"is-read-only": false, +"description": ["This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021."] +}, +"lm-deg-thr": { +"id": "lm-deg-thr", +"is-read-only": false, +"description": ["This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021."] +}, +"lm-m": { +"id": "lm-m", +"is-read-only": false, +"description": ["This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021."] +}, +"lm-tf-min": { +"id": "lm-tf-min", +"is-read-only": false, +"description": ["This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021."] +}, +"eth-mep-sink-g": { +"id": "eth-mep-sink-g", +"is-read-only": false, +"description": ["1DM related attribute: 1DmPriority AIS Process related attributes: aisPeriod, aisPriority Bandwidth notification Process related attribute: bandwidthReport Basic attribute: peerMepRefList CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported Defect correlation Process related attribute: currentProblemList This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of the dual-ended maintenance job, such as test. This object contains the configuration parameters for detecting 'degraded signal' (DEG)."] +}, +"aps-priority": { +"id": "aps-priority", +"is-read-only": false, +"description": ["This attribute specifies the priority of the APS messages. See section 8.1.5 APS insert process in G.8021."] +}, +"csf-priority": { +"id": "csf-priority", +"is-read-only": false, +"description": ["This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent"] +}, +"csf-period": { +"id": "csf-period", +"is-read-only": false, +"description": ["This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent. range of type : 1s, 1min"] +}, +"csf-config": { +"id": "csf-config", +"is-read-only": false, +"description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021."] +}, +"eth-mep-source-g": { +"id": "eth-mep-source-g", +"is-read-only": false, +"description": ["APS Process related attribute: apsPriority Basic attribute: mepIdentifier CSF Process related attributes: csfConfig, csfPeriod, csfPriority Link trace related operation: linkTrace Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource Test related operations: testInitiatorStart, testInitiatorTerminate This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test."] +}, +"eth-lt-msg": { +"id": "eth-lt-msg", +"is-read-only": false, +"description": ["none"] +}, +"time-to-live": { +"id": "time-to-live", +"is-read-only": false, +"description": ["G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol. The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed."] +}, +"eth-link-trace-job-g": { +"id": "eth-link-trace-job-g", +"is-read-only": false, +"description": ["This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP. The termination occurs at specified stop time (schedule attribute of OamJob)."] +}, +"eth-test-msg": { +"id": "eth-test-msg", +"is-read-only": false, +"description": ["none"] +}, +"eth-test-job-g": { +"id": "eth-test-job-g", +"is-read-only": false, +"description": ["This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted. The termination occurs at specified stop time (schedule attribute of OamJob)."] +}, +"responder-mep-id": { +"id": "responder-mep-id", +"is-read-only": false, +"description": ["none"] +}, +"source-address": { +"id": "source-address", +"is-read-only": false, +"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."] +}, +"priority": { +"id": "priority", +"is-read-only": false, +"description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"] +}, +"test-identifier": { +"id": "test-identifier", +"is-read-only": false, +"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"] +}, +"eth-on-demand-measurement-job-control-sink-g": { +"id": "eth-on-demand-measurement-job-control-sink-g", +"is-read-only": false, +"description": ["This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running."] +}, +"controller-mep-id": { +"id": "controller-mep-id", +"is-read-only": false, +"description": ["none"] +}, +"oam-pdu-generation-type": { +"id": "oam-pdu-generation-type", +"is-read-only": false, +"description": ["This attribute contains the pattern that is used for the generation of OAM PDUs."] +}, +"destination-address": { +"id": "destination-address", +"is-read-only": false, +"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."] +}, +"priority": { +"id": "priority", +"is-read-only": false, +"description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"] +}, +"message-period": { +"id": "message-period", +"is-read-only": false, +"description": ["This attribute contains the frequency of the OAM message (PDU) generation within a series. Note that the value 0 means that only one OAM message per measurement interval is generated. range of type : See corresponding Enum."] +}, +"repetition-period": { +"id": "repetition-period", +"is-read-only": false, +"description": ["This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series)."] +}, +"measurement-interval": { +"id": "measurement-interval", +"is-read-only": false, +"description": ["This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals. Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible. range of type : Non-negative"] +}, +"test-identifier": { +"id": "test-identifier", +"is-read-only": false, +"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of LMM/LMR measurement. range of type : 0..(2^32) - 1"] +}, +"data-tlv-length": { +"id": "data-tlv-length", +"is-read-only": false, +"description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."] +}, +"eth-on-demand-measurement-job-control-source-g": { +"id": "eth-on-demand-measurement-job-control-source-g", +"is-read-only": false, +"description": ["Basic attributes: destinationAddress, priority Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval Optional attributes: dataTlvLength, testIdentifier This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running."] +}, +"responder-mep-id": { +"id": "responder-mep-id", +"is-read-only": false, +"description": ["none"] +}, +"is-enabled": { +"id": "is-enabled", +"is-read-only": false, +"description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."] +}, +"source-address": { +"id": "source-address", +"is-read-only": false, +"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."] +}, +"test-identifier": { +"id": "test-identifier", +"is-read-only": false, +"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"] +}, +"eth-pro-active-measurement-job-control-sink-g": { +"id": "eth-pro-active-measurement-job-control-sink-g", +"is-read-only": false, +"description": ["This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the “Enable” attribute should have the value “FALSE”."] +}, +"controller-mep-id": { +"id": "controller-mep-id", +"is-read-only": false, +"description": ["none"] +}, +"is-enabled": { +"id": "is-enabled", +"is-read-only": false, +"description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."] +}, +"destination-address": { +"id": "destination-address", +"is-read-only": false, +"description": ["This attribute provides the Unicast MAC address of the intented destination."] +}, +"priority": { +"id": "priority", +"is-read-only": false, +"description": ["This attribute contains the priority value on which the MEP performs the measurement. When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames. The EMF usese this value to assign the “P” parameter of the measurement operation."] +}, +"period": { +"id": "period", +"is-read-only": false, +"description": ["This attribute indicates the period (frequency) of the measurement frame transmission. range of type : 100ms, 1s, 10s"] +}, +"test-identifier": { +"id": "test-identifier", +"is-read-only": false, +"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of 2-way loss measurement. range of type : 0..(2^32) - 1"] +}, +"data-tlv-length": { +"id": "data-tlv-length", +"is-read-only": false, +"description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."] +}, +"eth-pro-active-measurement-job-control-source-g": { +"id": "eth-pro-active-measurement-job-control-source-g", +"is-read-only": false, +"description": ["This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation."] +}, +"pro-active-near-end-1-dm-parameters": { +"id": "pro-active-near-end-1-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical near end performnace parameters."] +}, +"eth-pro-active-1-dm-performance-data-g": { +"id": "eth-pro-active-1-dm-performance-data-g", +"is-read-only": false, +"description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM)."] +}, +"pro-active-near-end-1-lm-parameters": { +"id": "pro-active-near-end-1-lm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical near end performnace parameters."] +}, +"eth-pro-active-1-lm-performance-data-g": { +"id": "eth-pro-active-1-lm-performance-data-g", +"is-read-only": false, +"description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL)."] +}, +"pro-active-bi-dir-dm-parameters": { +"id": "pro-active-bi-dir-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical bidirectional performnace parameters."] +}, +"pro-active-far-end-dm-parameters": { +"id": "pro-active-far-end-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical far end performnace parameters."] +}, +"pro-active-near-end-dm-parameters": { +"id": "pro-active-near-end-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical near end performnace parameters."] +}, +"eth-pro-active-dm-performance-data-g": { +"id": "eth-pro-active-dm-performance-data-g", +"is-read-only": false, +"description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR)."] +}, +"pro-active-far-end-lm-parameters": { +"id": "pro-active-far-end-lm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical far end performnace parameters."] +}, +"pro-active-near-end-lm-parameters": { +"id": "pro-active-near-end-lm-parameters", +"is-read-only": false, +"description": ["This attribute contains the statistical near end performnace parameters."] +}, +"bidirectional-uas": { +"id": "bidirectional-uas", +"is-read-only": false, +"description": ["This attribute contains the bidirectional UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."] +}, +"eth-pro-active-lm-performance-data-g": { +"id": "eth-pro-active-lm-performance-data-g", +"is-read-only": false, +"description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR)."] +}, +"on-demand-near-end-1-dm-parameters": { +"id": "on-demand-near-end-1-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."] +}, +"eth-on-demand-1-dm-performance-data-g": { +"id": "eth-on-demand-1-dm-performance-data-g", +"is-read-only": false, +"description": ["none"] +}, +"on-demand-near-end-1-lm-parameters": { +"id": "on-demand-near-end-1-lm-parameters", +"is-read-only": false, +"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."] +}, +"eth-on-demand-1-lm-performance-data-g": { +"id": "eth-on-demand-1-lm-performance-data-g", +"is-read-only": false, +"description": ["none"] +}, +"on-demand-far-end-dm-parameters": { +"id": "on-demand-far-end-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."] +}, +"on-demand-near-end-dm-parameters": { +"id": "on-demand-near-end-dm-parameters", +"is-read-only": false, +"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."] +}, +"eth-on-demand-dm-performance-data-g": { +"id": "eth-on-demand-dm-performance-data-g", +"is-read-only": false, +"description": ["none"] +}, +"on-demand-far-end-lm-parameters": { +"id": "on-demand-far-end-lm-parameters", +"is-read-only": false, +"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction."] +}, +"on-demand-near-end-lm-parameters": { +"id": "on-demand-near-end-lm-parameters", +"is-read-only": false, +"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."] +}, +"eth-on-demand-lm-performance-data-g": { +"id": "eth-on-demand-lm-performance-data-g", +"is-read-only": false, +"description": ["none"] +}, +"pro-active-control-1way-source": { +"id": "pro-active-control-1way-source", +"is-read-only": false, +"description": ["none"] +}, +"pro-active-control-1way-sink": { +"id": "pro-active-control-1way-sink", +"is-read-only": false, +"description": ["none"] +}, +"eth-pro-active-1way-measurement-job-g": { +"id": "eth-pro-active-1way-measurement-job-g", +"is-read-only": false, +"description": ["none"] +}, +"pro-active-control-2way-source": { +"id": "pro-active-control-2way-source", +"is-read-only": false, +"description": ["none"] +}, +"eth-pro-active-2way-measurement-job-g": { +"id": "eth-pro-active-2way-measurement-job-g", +"is-read-only": false, +"description": ["none"] +}, +"on-demand-control-2way-source": { +"id": "on-demand-control-2way-source", +"is-read-only": false, +"description": ["none"] +}, +"eth-on-demand-2way-measurement-job-g": { +"id": "eth-on-demand-2way-measurement-job-g", +"is-read-only": false, +"description": ["none"] +}, +"on-demand-control-1way-source": { +"id": "on-demand-control-1way-source", +"is-read-only": false, +"description": ["none"] +}, +"on-demand-control-1way-sink": { +"id": "on-demand-control-1way-sink", +"is-read-only": false, +"description": ["none"] +}, +"eth-on-demand-1way-measurement-job-g": { +"id": "eth-on-demand-1way-measurement-job-g", +"is-read-only": false, +"description": ["none"] +}, +"near-end-1-dm-cross-threshold": { +"id": "near-end-1-dm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the near end cross threshold values of the delay measurements."] +}, +"near-end-1-dm-clear-threshold": { +"id": "near-end-1-dm-clear-threshold", +"is-read-only": false, +"description": ["This attribute contains the near end clear threshold values of the delay measurements."] +}, +"eth-1-dm-threshold-data-g": { +"id": "eth-1-dm-threshold-data-g", +"is-read-only": false, +"description": ["This data type contains the threshold values for frame delay related 1-way measurements."] +}, +"near-end-1-lm-cross-threshold": { +"id": "near-end-1-lm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the near end cross threshold values of the loss measurements."] +}, +"near-end-1-lm-clear-threshold": { +"id": "near-end-1-lm-clear-threshold", +"is-read-only": false, +"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."] +}, +"eth-1-lm-threshold-data-g": { +"id": "eth-1-lm-threshold-data-g", +"is-read-only": false, +"description": ["This data type contains the threshold values for frame loss related 1-way measurements."] +}, +"near-end-dm-cross-threshold": { +"id": "near-end-dm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the near end cross threshold values of the delay measurements."] +}, +"near-end-dm-clear-threshold": { +"id": "near-end-dm-clear-threshold", +"is-read-only": false, +"description": ["This attribute contains the near end clear threshold values of the delay measurements."] +}, +"far-end-dm-cross-threshold": { +"id": "far-end-dm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the far end cross threshold values of the delay measurements."] +}, +"far-end-dm-clear-threshold": { +"id": "far-end-dm-clear-threshold", +"is-read-only": false, +"description": ["This attribute contains the far end clear threshold values of the delay measurements."] +}, +"bi-dir-dm-cross-threshold": { +"id": "bi-dir-dm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the bidirectional cross threshold values of the delay measurements."] +}, +"bi-dir-dm-clear-threshold": { +"id": "bi-dir-dm-clear-threshold", +"is-read-only": false, +"description": ["This attribute contains the bidirectional clear threshold values of the delay measurements."] +}, +"eth-dm-threshold-data-g": { +"id": "eth-dm-threshold-data-g", +"is-read-only": false, +"description": ["This data type contains the threshold values for frame delay related 2-way measurements."] +}, +"near-end-lm-cross-threshold": { +"id": "near-end-lm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the near end cross threshold values of the loss measurements."] +}, +"near-end-lm-clear-threshold": { +"id": "near-end-lm-clear-threshold", +"is-read-only": false, +"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."] +}, +"far-end-lm-cross-threshold": { +"id": "far-end-lm-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the far end cross threshold values of the loss measurements."] +}, +"far-end-lm-clear-threshold": { +"id": "far-end-lm-clear-threshold", +"is-read-only": false, +"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the far end clear threshold values of the loss measurements."] +}, +"bi-dir-lm-uas-cross-threshold": { +"id": "bi-dir-lm-uas-cross-threshold", +"is-read-only": false, +"description": ["This attribute contains the bidirectional cross threshold value of the UAS loss measurement."] +}, +"bi-dir-lm-uas-clear-threshold": { +"id": "bi-dir-lm-uas-clear-threshold", +"is-read-only": false, +"description": ["This attribute is only valid for the UAS parameter working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the bidirectional clear threshold value of the UAS loss measurement."] +}, +"eth-lm-threshold-data-g": { +"id": "eth-lm-threshold-data-g", +"is-read-only": false, +"description": ["This data type contains the threshold values for frame loss related 2-way measurements."] +}, +"rec-lbr-frames": { +"id": "rec-lbr-frames", +"is-read-only": false, +"description": ["G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames."] +}, +"out-of-order-lbr-frames": { +"id": "out-of-order-lbr-frames", +"is-read-only": false, +"description": ["G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO)."] +}, +"sent-lbm-frames": { +"id": "sent-lbm-frames", +"is-read-only": false, +"description": ["G.8052: This parameter returns the total number of sent LBM frames."] +}, +"crc-lbr-frames": { +"id": "crc-lbr-frames", +"is-read-only": false, +"description": ["G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed."] +}, +"ber-lbr-frames": { +"id": "ber-lbr-frames", +"is-read-only": false, +"description": ["G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern."] +}, +"detected-peer-mep": { +"id": "detected-peer-mep", +"is-read-only": false, +"description": ["G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP."] +}, +"eth-loopback-result-data-g": { +"id": "eth-loopback-result-data-g", +"is-read-only": false, +"description": ["none"] +}, +"result-list": { +"id": "result-list", +"is-read-only": false, +"description": ["G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames. The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV."] +}, +"eth-link-trace-result-data-g": { +"id": "eth-link-trace-result-data-g", +"is-read-only": false, +"description": ["none"] +}, +"sent-tst-frames": { +"id": "sent-tst-frames", +"is-read-only": false, +"description": ["G.8052: This parameter returns the total number of sent TST frames."] +}, +"eth-test-result-data-g": { +"id": "eth-test-result-data-g", +"is-read-only": false, +"description": ["none"] +}, +"destination-address": { +"id": "destination-address", +"is-read-only": false, +"description": ["G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP."] +}, +"priority": { +"id": "priority", +"is-read-only": false, +"description": ["G.8052: This parameter provides the priority to be used in the LBM frame."] +}, +"eth-oam-operation-common-pac-g": { +"id": "eth-oam-operation-common-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"period": { +"id": "period", +"is-read-only": false, +"description": ["G.8052: This parameter provides the periodicity of the TST OAM messages."] +}, +"drop-eligibility": { +"id": "drop-eligibility", +"is-read-only": false, +"description": ["G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered."] +}, +"data-tlv-length": { +"id": "data-tlv-length", +"is-read-only": false, +"description": ["G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame."] +}, +"test-pattern": { +"id": "test-pattern", +"is-read-only": false, +"description": ["G.8052: This parameter provides the test pattern to be used in the optional Data TLV. Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc. The following values of pattern types are defined: 0: 'Null signal without CRC-32' 1: 'Null signal with CRC-32' 2: 'PRBS 2^31-1 without CRC-32' 3: 'PRBS 2^31-1 with CRC-32'."] +}, +"eth-oam-msg-common-pac-g": { +"id": "eth-oam-msg-common-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE": { +"id": "ETH_OAM_JOB_TYPE", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_1DM": { +"id": "ETH_OAM_JOB_TYPE_ETH_1DM", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_1SLM": { +"id": "ETH_OAM_JOB_TYPE_ETH_1SLM", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_LM_CCM": { +"id": "ETH_OAM_JOB_TYPE_ETH_LM_CCM", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_LM_LMM": { +"id": "ETH_OAM_JOB_TYPE_ETH_LM_LMM", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_SLM": { +"id": "ETH_OAM_JOB_TYPE_ETH_SLM", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_DM": { +"id": "ETH_OAM_JOB_TYPE_ETH_DM", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_LTC": { +"id": "ETH_OAM_JOB_TYPE_ETH_LTC", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_LBK": { +"id": "ETH_OAM_JOB_TYPE_ETH_LBK", +"is-read-only": false, +"description": ["none"] +}, +"ETH_OAM_JOB_TYPE_ETH_TEST": { +"id": "ETH_OAM_JOB_TYPE_ETH_TEST", +"is-read-only": false, +"description": ["none"] +}, +"priority": { +"id": "priority", +"is-read-only": false, +"description": ["none"] +}, +"queue-id": { +"id": "queue-id", +"is-read-only": false, +"description": ["none"] +}, +"priority-configuration-g": { +"id": "priority-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"queue-id": { +"id": "queue-id", +"is-read-only": false, +"description": ["This attribute indicates the queue id."] +}, +"queue-depth": { +"id": "queue-depth", +"is-read-only": false, +"description": ["This attribute defines the depth of the queue in bytes."] +}, +"queue-threshold": { +"id": "queue-threshold", +"is-read-only": false, +"description": ["This attribute defines the threshold of the queue in bytes."] +}, +"queue-configuration-g": { +"id": "queue-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"cir": { +"id": "cir", +"is-read-only": false, +"description": ["This attribute indicates the Committed Information Rate in bits/s."] +}, +"cbs": { +"id": "cbs", +"is-read-only": false, +"description": ["This attribute indicates the Committed Burst Size in bytes."] +}, +"eir": { +"id": "eir", +"is-read-only": false, +"description": ["This attribute indicates the Excess Information Rate in bits/s."] +}, +"ebs": { +"id": "ebs", +"is-read-only": false, +"description": ["This attribute indicates the Excess Burst Size in bytes."] +}, +"coupling-flag": { +"id": "coupling-flag", +"is-read-only": false, +"description": ["This attribute indicates the coupling flag."] +}, +"colour-mode": { +"id": "colour-mode", +"is-read-only": false, +"description": ["This attribute indicates the colour mode."] +}, +"queue-id": { +"id": "queue-id", +"is-read-only": false, +"description": ["This attribute indicates the queue id."] +}, +"traffic-conditioning-configuration-g": { +"id": "traffic-conditioning-configuration-g", +"is-read-only": false, +"description": ["none"] +}, +"mac-address": { +"id": "mac-address", +"is-read-only": false, +"description": ["This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D)."] +}, +"priority-0": { +"id": "priority-0", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 0."] +}, +"priority-1": { +"id": "priority-1", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 1."] +}, +"priority-2": { +"id": "priority-2", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 2."] +}, +"priority-3": { +"id": "priority-3", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 3."] +}, +"priority-4": { +"id": "priority-4", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 4."] +}, +"priority-5": { +"id": "priority-5", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 5."] +}, +"priority-6": { +"id": "priority-6", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 6."] +}, +"priority-7": { +"id": "priority-7", +"is-read-only": false, +"description": ["This attribute defines the new priority value for the old priority value 7."] +}, +"priority-mapping-g": { +"id": "priority-mapping-g", +"is-read-only": false, +"description": ["This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021."] +}, +"vid": { +"id": "vid", +"is-read-only": false, +"description": ["This primitive type models the 12 Bit VLAN identifier of a VLAN tag."] +}, +"modify-cross-connection-data": { +"id": "modify-cross-connection-data", +"is-read-only": false, +"description": ["none"] +}, +"address": { +"id": "address", +"is-read-only": false, +"description": ["This attribute contains the MAC address of the address tuple."] +}, +"port-list": { +"id": "port-list", +"is-read-only": false, +"description": ["This attribute contains the ports associated to the MAC address in the address tuple."] +}, +"address-tuple-g": { +"id": "address-tuple-g", +"is-read-only": false, +"description": ["This data type contains an address tuple consisting of a MAC address and a corresponding port list."] +}, +"scheduling-configuration": { +"id": "scheduling-configuration", +"is-read-only": false, +"description": ["The syntax of this dataType is pending on the specification in G.8021, which is for further study."] +}, +"c-2-00-00-10": { +"id": "c-2-00-00-10", +"is-read-only": false, +"description": ["This attribute identifies the 'All LANs Bridge Management Group Address'."] +}, +"c-2-00-00-00": { +"id": "c-2-00-00-00", +"is-read-only": false, +"description": ["This attribute identifies the STP/RSTP/MSTP protocol address."] +}, +"c-2-00-00-01": { +"id": "c-2-00-00-01", +"is-read-only": false, +"description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol)."] +}, +"c-2-00-00-02": { +"id": "c-2-00-00-02", +"is-read-only": false, +"description": ["This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols)."] +}, +"c-2-00-00-03": { +"id": "c-2-00-00-03", +"is-read-only": false, +"description": ["This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol)."] +}, +"c-2-00-00-04": { +"id": "c-2-00-00-04", +"is-read-only": false, +"description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address."] +}, +"c-2-00-00-05": { +"id": "c-2-00-00-05", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-06": { +"id": "c-2-00-00-06", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-07": { +"id": "c-2-00-00-07", +"is-read-only": false, +"description": ["This attribute identifies the Metro Ethernet Forum E-LMI protocol group address."] +}, +"c-2-00-00-08": { +"id": "c-2-00-00-08", +"is-read-only": false, +"description": ["This attribute identifies the Provider Bridge Group address."] +}, +"c-2-00-00-09": { +"id": "c-2-00-00-09", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-0-a": { +"id": "c-2-00-00-0-a", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-0-b": { +"id": "c-2-00-00-0-b", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-0-c": { +"id": "c-2-00-00-0-c", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-0-d": { +"id": "c-2-00-00-0-d", +"is-read-only": false, +"description": ["This attribute identifies the Provider Bridge MVRP address."] +}, +"c-2-00-00-0-e": { +"id": "c-2-00-00-0-e", +"is-read-only": false, +"description": ["This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol)."] +}, +"c-2-00-00-0-f": { +"id": "c-2-00-00-0-f", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-20": { +"id": "c-2-00-00-20", +"is-read-only": false, +"description": ["This attribute identifies the Customer and Provider Bridge MMRP address."] +}, +"c-2-00-00-21": { +"id": "c-2-00-00-21", +"is-read-only": false, +"description": ["This attribute identifies the Customer Bridge MVRP address."] +}, +"c-2-00-00-22": { +"id": "c-2-00-00-22", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-23": { +"id": "c-2-00-00-23", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-24": { +"id": "c-2-00-00-24", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-25": { +"id": "c-2-00-00-25", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-26": { +"id": "c-2-00-00-26", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-27": { +"id": "c-2-00-00-27", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-28": { +"id": "c-2-00-00-28", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-29": { +"id": "c-2-00-00-29", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-2-a": { +"id": "c-2-00-00-2-a", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-2-b": { +"id": "c-2-00-00-2-b", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-2-c": { +"id": "c-2-00-00-2-c", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-2-d": { +"id": "c-2-00-00-2-d", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-2-e": { +"id": "c-2-00-00-2-e", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"c-2-00-00-2-f": { +"id": "c-2-00-00-2-f", +"is-read-only": false, +"description": ["Reserved for future standardization."] +}, +"control-frame-filter-g": { +"id": "control-frame-filter-g", +"is-read-only": false, +"description": ["This data type identifies the filter action for each of the 33 group MAC addresses (control frames). Value 'false' means block: The frame is discarded by the filter process. Value 'true' means pass: The frame is passed unchanged through the filter process."] +}, +"source-mac-address": { +"id": "source-mac-address", +"is-read-only": false, +"description": ["The sourceMacAddress is the address from the far end."] +}, +"port-id": { +"id": "port-id", +"is-read-only": false, +"description": ["This attribute returns the far end port identifier."] +}, +"nominal-bandwidth": { +"id": "nominal-bandwidth", +"is-read-only": false, +"description": ["This attribute returns the configured bandwidth"] +}, +"current-bandwidth": { +"id": "current-bandwidth", +"is-read-only": false, +"description": ["This attribute returns the current bandwidth."] +}, +"bandwidth-report-g": { +"id": "bandwidth-report-g", +"is-read-only": false, +"description": ["Data type for the bandwidth report."] +}, +"LOCK": { +"id": "LOCK", +"is-read-only": false, +"description": ["none"] +}, +"NORMAL": { +"id": "NORMAL", +"is-read-only": false, +"description": ["none"] +}, +"admin-state": { +"id": "admin-state", +"is-read-only": false, +"description": ["none"] +}, +"COLOUR_BLIND": { +"id": "COLOUR_BLIND", +"is-read-only": false, +"description": ["none"] +}, +"COLOUR_AWARE": { +"id": "COLOUR_AWARE", +"is-read-only": false, +"description": ["none"] +}, +"colour-mode": { +"id": "colour-mode", +"is-read-only": false, +"description": ["none"] +}, +"DISABLED": { +"id": "DISABLED", +"is-read-only": false, +"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is false - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."] +}, +"ENABLED": { +"id": "ENABLED", +"is-read-only": false, +"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."] +}, +"ENABLED_WITH_RDI_FDI": { +"id": "ENABLED_WITH_RDI_FDI", +"is-read-only": false, +"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is false."] +}, +"ENABLED_WITH_RDI_FDI_DCI": { +"id": "ENABLED_WITH_RDI_FDI_DCI", +"is-read-only": false, +"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is true."] +}, +"ENABLED_WITH_DCI": { +"id": "ENABLED_WITH_DCI", +"is-read-only": false, +"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is true."] +}, +"csf-config": { +"id": "csf-config", +"is-read-only": false, +"description": ["none"] +}, +"OTHER": { +"id": "OTHER", +"is-read-only": false, +"description": ["none"] +}, +"UNKNOWN": { +"id": "UNKNOWN", +"is-read-only": false, +"description": ["none"] +}, +"NONE": { +"id": "NONE", +"is-read-only": false, +"description": ["none"] +}, +"2BASE_TL": { +"id": "2BASE_TL", +"is-read-only": false, +"description": ["none"] +}, +"10MBIT_S": { +"id": "10MBIT_S", +"is-read-only": false, +"description": ["none"] +}, +"10PASS_TS": { +"id": "10PASS_TS", +"is-read-only": false, +"description": ["none"] +}, +"100BASE_T4": { +"id": "100BASE_T4", +"is-read-only": false, +"description": ["none"] +}, +"100BASE_X": { +"id": "100BASE_X", +"is-read-only": false, +"description": ["none"] +}, +"100BASE_T2": { +"id": "100BASE_T2", +"is-read-only": false, +"description": ["none"] +}, +"1000BASE_X": { +"id": "1000BASE_X", +"is-read-only": false, +"description": ["none"] +}, +"1000BASE_T": { +"id": "1000BASE_T", +"is-read-only": false, +"description": ["none"] +}, +"10GBASE-X": { +"id": "10GBASE-X", +"is-read-only": false, +"description": ["none"] +}, +"10GBASE_R": { +"id": "10GBASE_R", +"is-read-only": false, +"description": ["none"] +}, +"10GBASE_W": { +"id": "10GBASE_W", +"is-read-only": false, +"description": ["none"] +}, +"ety-phy-type": { +"id": "ety-phy-type", +"is-read-only": false, +"description": ["none"] +}, +"ADMIT_ONLY_VLAN_TAGGED_FRAMES": { +"id": "ADMIT_ONLY_VLAN_TAGGED_FRAMES", +"is-read-only": false, +"description": ["none"] +}, +"ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES": { +"id": "ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES", +"is-read-only": false, +"description": ["none"] +}, +"ADMIT_ALL_FRAMES": { +"id": "ADMIT_ALL_FRAMES", +"is-read-only": false, +"description": ["none"] +}, +"frame-type": { +"id": "frame-type", +"is-read-only": false, +"description": ["none"] +}, +"3_33MS": { +"id": "3_33MS", +"is-read-only": false, +"description": ["Default for protection."] +}, +"10MS": { +"id": "10MS", +"is-read-only": false, +"description": ["none"] +}, +"100MS": { +"id": "100MS", +"is-read-only": false, +"description": ["none"] +}, +"1S": { +"id": "1S", +"is-read-only": false, +"description": ["none"] +}, +"10S": { +"id": "10S", +"is-read-only": false, +"description": ["none"] +}, +"1MIN": { +"id": "1MIN", +"is-read-only": false, +"description": ["none"] +}, +"10MIN": { +"id": "10MIN", +"is-read-only": false, +"description": ["none"] +}, +"oam-period": { +"id": "oam-period", +"is-read-only": false, +"description": ["Provides the frequency for the OAM PDU insertion."] +}, +"8P0D": { +"id": "8P0D", +"is-read-only": false, +"description": ["none"] +}, +"7P1D": { +"id": "7P1D", +"is-read-only": false, +"description": ["none"] +}, +"6P2D": { +"id": "6P2D", +"is-read-only": false, +"description": ["none"] +}, +"5P3D": { +"id": "5P3D", +"is-read-only": false, +"description": ["none"] +}, +"DEI": { +"id": "DEI", +"is-read-only": false, +"description": ["This enumeration value means that all priorities should be drop eligible. DEI = Drop Eligibility Indicator"] +}, +"pcp-coding": { +"id": "pcp-coding", +"is-read-only": false, +"description": ["This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q."] +}, +"C_Tag": { +"id": "C_Tag", +"is-read-only": false, +"description": ["0x8100"] +}, +"S_Tag": { +"id": "S_Tag", +"is-read-only": false, +"description": ["0x88a8"] +}, +"I_Tag": { +"id": "I_Tag", +"is-read-only": false, +"description": ["88-e7"] +}, +"vlan-type": { +"id": "vlan-type", +"is-read-only": false, +"description": ["This enumeration contains the Ethertypes defined in IEEE 802.1Q."] +}, +"1MIN": { +"id": "1MIN", +"is-read-only": false, +"description": ["none"] +}, +"1S": { +"id": "1S", +"is-read-only": false, +"description": ["none"] +}, +"10S": { +"id": "10S", +"is-read-only": false, +"description": ["none"] +}, +"0": { +"id": "0", +"is-read-only": false, +"description": ["none"] +}, +"repetition-period": { +"id": "repetition-period", +"is-read-only": false, +"description": ["This enumeration defines the allowed values for the repetition period in on-demand measurements. Note: The value 0 means that the value is not relevant."] +}, +"10MS": { +"id": "10MS", +"is-read-only": false, +"description": ["none"] +}, +"100MS": { +"id": "100MS", +"is-read-only": false, +"description": ["none"] +}, +"1S": { +"id": "1S", +"is-read-only": false, +"description": ["none"] +}, +"10S": { +"id": "10S", +"is-read-only": false, +"description": ["none"] +}, +"0": { +"id": "0", +"is-read-only": false, +"description": ["none"] +}, +"message-period": { +"id": "message-period", +"is-read-only": false, +"description": ["This enumeration defines the allowed values for the message period in on-demand measurements. Notes: The value 10ms is only used in synthetic loss measurements. The value 0 means that the value is not relevant."] +}, +"SINGLE_INSTANCE": { +"id": "SINGLE_INSTANCE", +"is-read-only": false, +"description": ["none"] +}, +"REPETITIVE_INSTANCE": { +"id": "REPETITIVE_INSTANCE", +"is-read-only": false, +"description": ["none"] +}, +"SINGLE_SERIES": { +"id": "SINGLE_SERIES", +"is-read-only": false, +"description": ["none"] +}, +"REPETITIVE_SERIES": { +"id": "REPETITIVE_SERIES", +"is-read-only": false, +"description": ["none"] +}, +"oam-pdu-generation-type": { +"id": "oam-pdu-generation-type", +"is-read-only": false, +"description": ["This enumeration defines the generation pattern of the on-demand OAM PDUs (messages)."] +}, +"number-of-samples": { +"id": "number-of-samples", +"is-read-only": false, +"description": ["This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement. range of type : non-negative"] +}, +"frame-delay-list": { +"id": "frame-delay-list", +"is-read-only": false, +"description": ["This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute."] +}, +"frame-delay-variation-list": { +"id": "frame-delay-variation-list", +"is-read-only": false, +"description": ["This attribute contains the frame delay variations measured in ns (nano second). The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0)."] +}, +"on-demand-dm-performance-parameters-g": { +"id": "on-demand-dm-performance-parameters-g", +"is-read-only": false, +"description": ["This data type contains the results of an on-demand delay measurement job."] +}, +"total-transmitted-frames": { +"id": "total-transmitted-frames", +"is-read-only": false, +"description": ["This attribute contains the total number of frames transmitted."] +}, +"total-lost-frames": { +"id": "total-lost-frames", +"is-read-only": false, +"description": ["This attribute contains the total number of frames lost."] +}, +"total-frame-loss-ratio": { +"id": "total-frame-loss-ratio", +"is-read-only": false, +"description": ["This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)). The accuracy of the value is for further study."] +}, +"on-demand-lm-performance-parameters-g": { +"id": "on-demand-lm-performance-parameters-g", +"is-read-only": false, +"description": ["This data type contains the results of an on-demand loss measurement job."] +}, +"minimum-frame-delay": { +"id": "minimum-frame-delay", +"is-read-only": false, +"description": ["This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."] +}, +"average-frame-delay": { +"id": "average-frame-delay", +"is-read-only": false, +"description": ["This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."] +}, +"maximum-frame-delay": { +"id": "maximum-frame-delay", +"is-read-only": false, +"description": ["This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."] +}, +"minimum-frame-delay-variation": { +"id": "minimum-frame-delay-variation", +"is-read-only": false, +"description": ["This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."] +}, +"average-frame-delay-variation": { +"id": "average-frame-delay-variation", +"is-read-only": false, +"description": ["This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."] +}, +"maximum-frame-delay-variation": { +"id": "maximum-frame-delay-variation", +"is-read-only": false, +"description": ["This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."] +}, +"statistical-dm-performance-parameters-g": { +"id": "statistical-dm-performance-parameters-g", +"is-read-only": false, +"description": ["This data type contains the statistical delay measurement performance parameters."] +}, +"minimum-frame-loss-ratio": { +"id": "minimum-frame-loss-ratio", +"is-read-only": false, +"description": ["This attribute contains the minimum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."] +}, +"average-frame-loss-ratio": { +"id": "average-frame-loss-ratio", +"is-read-only": false, +"description": ["This attribute contains the average frame loss ratio calculated over a period of time. The accuracy of the value is for further study."] +}, +"maximum-frame-loss-ratio": { +"id": "maximum-frame-loss-ratio", +"is-read-only": false, +"description": ["This attribute contains the maximum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."] +}, +"ses": { +"id": "ses", +"is-read-only": false, +"description": ["This attribute contains the SES detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."] +}, +"uas": { +"id": "uas", +"is-read-only": false, +"description": ["This attribute contains UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."] +}, +"statistical-lm-performance-parameters-g": { +"id": "statistical-lm-performance-parameters-g", +"is-read-only": false, +"description": ["This data type contains the statistical loss measurement performance parameters."] +}, +"eth-oam-job-type": { +"id": "eth-oam-job-type", +"is-read-only": false, +"description": ["none"] +}, +"source-address": { +"id": "source-address", +"is-read-only": false, +"description": ["G.8052: This attribute contains the source MAC Address of an individual LTR frame result."] +}, +"time-to-live": { +"id": "time-to-live", +"is-read-only": false, +"description": ["G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result."] +}, +"data-tlv-length": { +"id": "data-tlv-length", +"is-read-only": false, +"description": ["G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result."] +}, +"link-trace-result-g": { +"id": "link-trace-result-g", +"is-read-only": false, +"description": ["G.8052: This data type contains the result from an individual LTR frame."] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json new file mode 100644 index 000000000..57926bd1a --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json @@ -0,0 +1,648 @@ +{ "schema-information": { + +"tapi-notification": { +"id": "tapi-notification", +"is-read-only": false, +"description": ["This module contains TAPI Notification Model definitions. Source: TapiNotification.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"notification": { +"id": "notification", +"is-read-only": false, +"description": ["none"] +}, +"notification-channel": { +"id": "notification-channel", +"is-read-only": false, +"description": ["none"] +}, +"subscription-filter": { +"id": "subscription-filter", +"is-read-only": false, +"description": ["none"] +}, +"subscription-state": { +"id": "subscription-state", +"is-read-only": false, +"description": ["none"] +}, +"supported-notification-types": { +"id": "supported-notification-types", +"is-read-only": false, +"description": ["none"] +}, +"supported-object-types": { +"id": "supported-object-types", +"is-read-only": false, +"description": ["none"] +}, +"notification-subscription-service-g": { +"id": "notification-subscription-service-g", +"is-read-only": false, +"description": ["none"] +}, +"requested-notification-types": { +"id": "requested-notification-types", +"is-read-only": false, +"description": ["none"] +}, +"requested-object-types": { +"id": "requested-object-types", +"is-read-only": false, +"description": ["none"] +}, +"requested-layer-protocols": { +"id": "requested-layer-protocols", +"is-read-only": false, +"description": ["none"] +}, +"requested-object-identifier": { +"id": "requested-object-identifier", +"is-read-only": false, +"description": ["none"] +}, +"include-content": { +"id": "include-content", +"is-read-only": false, +"description": ["Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)"] +}, +"subscription-filter-g": { +"id": "subscription-filter-g", +"is-read-only": false, +"description": ["none"] +}, +"notification": { +"id": "notification", +"is-read-only": false, +"description": ["none"] +}, +"notification-type": { +"id": "notification-type", +"is-read-only": false, +"description": ["none"] +}, +"target-object-type": { +"id": "target-object-type", +"is-read-only": false, +"description": ["none"] +}, +"target-object-identifier": { +"id": "target-object-identifier", +"is-read-only": false, +"description": ["none"] +}, +"target-object-name": { +"id": "target-object-name", +"is-read-only": false, +"description": ["none"] +}, +"event-time-stamp": { +"id": "event-time-stamp", +"is-read-only": false, +"description": ["none"] +}, +"sequence-number": { +"id": "sequence-number", +"is-read-only": false, +"description": ["A monotonous increasing sequence number associated with the notification. The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined."] +}, +"source-indicator": { +"id": "source-indicator", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"changed-attributes": { +"id": "changed-attributes", +"is-read-only": false, +"description": ["none"] +}, +"additional-info": { +"id": "additional-info", +"is-read-only": false, +"description": ["none"] +}, +"additional-text": { +"id": "additional-text", +"is-read-only": false, +"description": ["none"] +}, +"tca-info": { +"id": "tca-info", +"is-read-only": false, +"description": ["none"] +}, +"alarm-info": { +"id": "alarm-info", +"is-read-only": false, +"description": ["none"] +}, +"notification-g": { +"id": "notification-g", +"is-read-only": false, +"description": ["none"] +}, +"stream-address": { +"id": "stream-address", +"is-read-only": false, +"description": ["The address/location/URI of the channel/stream to which the subscribed notifications are published. This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string."] +}, +"next-sequence-no": { +"id": "next-sequence-no", +"is-read-only": false, +"description": ["The sequence number of the next notification that will be published on the channel"] +}, +"notification-channel-g": { +"id": "notification-channel-g", +"is-read-only": false, +"description": ["none"] +}, +"notif-subscription": { +"id": "notif-subscription", +"is-read-only": false, +"description": ["none"] +}, +"notification": { +"id": "notification", +"is-read-only": false, +"description": ["none"] +}, +"notification-context-g": { +"id": "notification-context-g", +"is-read-only": false, +"description": ["none"] +}, +"is-transient": { +"id": "is-transient", +"is-read-only": false, +"description": ["none"] +}, +"perceived-severity": { +"id": "perceived-severity", +"is-read-only": false, +"description": ["none"] +}, +"probable-cause": { +"id": "probable-cause", +"is-read-only": false, +"description": ["none"] +}, +"service-affecting": { +"id": "service-affecting", +"is-read-only": false, +"description": ["none"] +}, +"alarm-info-g": { +"id": "alarm-info-g", +"is-read-only": false, +"description": ["none"] +}, +"is-transient": { +"id": "is-transient", +"is-read-only": false, +"description": ["none"] +}, +"threshold-crossing": { +"id": "threshold-crossing", +"is-read-only": false, +"description": ["none"] +}, +"threshold-parameter": { +"id": "threshold-parameter", +"is-read-only": false, +"description": ["none"] +}, +"threshold-value": { +"id": "threshold-value", +"is-read-only": false, +"description": ["none"] +}, +"perceived-severity": { +"id": "perceived-severity", +"is-read-only": false, +"description": ["none"] +}, +"measurement-interval": { +"id": "measurement-interval", +"is-read-only": false, +"description": ["none"] +}, +"suspect-interval-flag": { +"id": "suspect-interval-flag", +"is-read-only": false, +"description": ["none"] +}, +"tca-info-g": { +"id": "tca-info-g", +"is-read-only": false, +"description": ["none"] +}, +"value-name": { +"id": "value-name", +"is-read-only": false, +"description": ["The name of the value. The value need not have a name."] +}, +"old-value": { +"id": "old-value", +"is-read-only": false, +"description": ["The value"] +}, +"new-value": { +"id": "new-value", +"is-read-only": false, +"description": ["The value"] +}, +"name-and-value-change-g": { +"id": "name-and-value-change-g", +"is-read-only": false, +"description": ["A scoped name-value triple, including old value and new value"] +}, +"OBJECT_CREATION": { +"id": "OBJECT_CREATION", +"is-read-only": false, +"description": ["Not a normal state. The system is unable to determine the correct value."] +}, +"OBJECT_DELETION": { +"id": "OBJECT_DELETION", +"is-read-only": false, +"description": ["none"] +}, +"ATTRIBUTE_VALUE_CHANGE": { +"id": "ATTRIBUTE_VALUE_CHANGE", +"is-read-only": false, +"description": ["none"] +}, +"ALARM_EVENT": { +"id": "ALARM_EVENT", +"is-read-only": false, +"description": ["none"] +}, +"THRESHOLD_CROSSING_ALERT": { +"id": "THRESHOLD_CROSSING_ALERT", +"is-read-only": false, +"description": ["none"] +}, +"notification-type": { +"id": "notification-type", +"is-read-only": false, +"description": ["List of supported Notifications types."] +}, +"TOPOLOGY": { +"id": "TOPOLOGY", +"is-read-only": false, +"description": ["none"] +}, +"NODE": { +"id": "NODE", +"is-read-only": false, +"description": ["none"] +}, +"LINK": { +"id": "LINK", +"is-read-only": false, +"description": ["none"] +}, +"CONNECTION": { +"id": "CONNECTION", +"is-read-only": false, +"description": ["none"] +}, +"PATH": { +"id": "PATH", +"is-read-only": false, +"description": ["none"] +}, +"CONNECTIVITY_SERVICE": { +"id": "CONNECTIVITY_SERVICE", +"is-read-only": false, +"description": ["none"] +}, +"VIRTUAL_NETWORK_SERVICE": { +"id": "VIRTUAL_NETWORK_SERVICE", +"is-read-only": false, +"description": ["none"] +}, +"PATH_COMPUTATION_SERVICE": { +"id": "PATH_COMPUTATION_SERVICE", +"is-read-only": false, +"description": ["none"] +}, +"NODE_EDGE_POINT": { +"id": "NODE_EDGE_POINT", +"is-read-only": false, +"description": ["none"] +}, +"SERVICE_INTERFACE_POINT": { +"id": "SERVICE_INTERFACE_POINT", +"is-read-only": false, +"description": ["none"] +}, +"CONNECTION_END_POINT": { +"id": "CONNECTION_END_POINT", +"is-read-only": false, +"description": ["none"] +}, +"MAINTENANCE_ENTITY_GROUP": { +"id": "MAINTENANCE_ENTITY_GROUP", +"is-read-only": false, +"description": ["none"] +}, +"MAINTENANCE_ENTITY": { +"id": "MAINTENANCE_ENTITY", +"is-read-only": false, +"description": ["none"] +}, +"MEG_END_POINT": { +"id": "MEG_END_POINT", +"is-read-only": false, +"description": ["none"] +}, +"MEG_INTERMEDIATE_POINT": { +"id": "MEG_INTERMEDIATE_POINT", +"is-read-only": false, +"description": ["none"] +}, +"SWITCH_CONTROL": { +"id": "SWITCH_CONTROL", +"is-read-only": false, +"description": ["none"] +}, +"SWITCH": { +"id": "SWITCH", +"is-read-only": false, +"description": ["none"] +}, +"ROUTE": { +"id": "ROUTE", +"is-read-only": false, +"description": ["none"] +}, +"NODE_RULE_GROUP": { +"id": "NODE_RULE_GROUP", +"is-read-only": false, +"description": ["none"] +}, +"INTER_RULE_GROUP": { +"id": "INTER_RULE_GROUP", +"is-read-only": false, +"description": ["none"] +}, +"RULE": { +"id": "RULE", +"is-read-only": false, +"description": ["none"] +}, +"OAM_JOB": { +"id": "OAM_JOB", +"is-read-only": false, +"description": ["none"] +}, +"object-type": { +"id": "object-type", +"is-read-only": false, +"description": ["The list of TAPI Global Object Class types on which Notifications can be raised."] +}, +"RESOURCE_OPERATION": { +"id": "RESOURCE_OPERATION", +"is-read-only": false, +"description": ["none"] +}, +"MANAGEMENT_OPERATION": { +"id": "MANAGEMENT_OPERATION", +"is-read-only": false, +"description": ["none"] +}, +"UNKNOWN": { +"id": "UNKNOWN", +"is-read-only": false, +"description": ["none"] +}, +"source-indicator": { +"id": "source-indicator", +"is-read-only": false, +"description": ["none"] +}, +"SUSPENDED": { +"id": "SUSPENDED", +"is-read-only": false, +"description": ["none"] +}, +"ACTIVE": { +"id": "ACTIVE", +"is-read-only": false, +"description": ["none"] +}, +"subscription-state": { +"id": "subscription-state", +"is-read-only": false, +"description": ["none"] +}, +"CRITICAL": { +"id": "CRITICAL", +"is-read-only": false, +"description": ["none"] +}, +"MAJOR": { +"id": "MAJOR", +"is-read-only": false, +"description": ["none"] +}, +"MINOR": { +"id": "MINOR", +"is-read-only": false, +"description": ["none"] +}, +"WARNING": { +"id": "WARNING", +"is-read-only": false, +"description": ["none"] +}, +"CLEARED": { +"id": "CLEARED", +"is-read-only": false, +"description": ["none"] +}, +"perceived-severity-type": { +"id": "perceived-severity-type", +"is-read-only": false, +"description": ["none"] +}, +"THRESHOLD_ABOVE": { +"id": "THRESHOLD_ABOVE", +"is-read-only": false, +"description": ["none"] +}, +"THRESHOLD_BELOW": { +"id": "THRESHOLD_BELOW", +"is-read-only": false, +"description": ["none"] +}, +"CLEARED": { +"id": "CLEARED", +"is-read-only": false, +"description": ["none"] +}, +"threshold-crossing-type": { +"id": "threshold-crossing-type", +"is-read-only": false, +"description": ["none"] +}, +"SERVICE_AFFECTING": { +"id": "SERVICE_AFFECTING", +"is-read-only": false, +"description": ["none"] +}, +"NOT_SERVICE_AFFECTING": { +"id": "NOT_SERVICE_AFFECTING", +"is-read-only": false, +"description": ["none"] +}, +"UNKNOWN": { +"id": "UNKNOWN", +"is-read-only": false, +"description": ["none"] +}, +"service-affecting": { +"id": "service-affecting", +"is-read-only": false, +"description": ["none"] +}, +"WARNING": { +"id": "WARNING", +"is-read-only": false, +"description": ["none"] +}, +"CLEAR": { +"id": "CLEAR", +"is-read-only": false, +"description": ["none"] +}, +"perceived-tca-severity": { +"id": "perceived-tca-severity", +"is-read-only": false, +"description": ["none"] +}, +"get-supported-notification-types": { +"id": "get-supported-notification-types", +"is-read-only": false, +"description": ["none"] +}, +"supported-notification-types": { +"id": "supported-notification-types", +"is-read-only": false, +"description": ["none"] +}, +"supported-object-types": { +"id": "supported-object-types", +"is-read-only": false, +"description": ["none"] +}, +"create-notification-subscription-service": { +"id": "create-notification-subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"subscription-filter": { +"id": "subscription-filter", +"is-read-only": false, +"description": ["none"] +}, +"subscription-state": { +"id": "subscription-state", +"is-read-only": false, +"description": ["none"] +}, +"subscription-service": { +"id": "subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"update-notification-subscription-service": { +"id": "update-notification-subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"subscription-id-or-name": { +"id": "subscription-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"subscription-filter": { +"id": "subscription-filter", +"is-read-only": false, +"description": ["none"] +}, +"subscription-state": { +"id": "subscription-state", +"is-read-only": false, +"description": ["none"] +}, +"subscription-service": { +"id": "subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"delete-notification-subscription-service": { +"id": "delete-notification-subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"subscription-id-or-name": { +"id": "subscription-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"subscription-service": { +"id": "subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"get-notification-subscription-service-details": { +"id": "get-notification-subscription-service-details", +"is-read-only": false, +"description": ["none"] +}, +"subscription-id-or-name": { +"id": "subscription-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"subscription-service": { +"id": "subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"get-notification-subscription-service-list": { +"id": "get-notification-subscription-service-list", +"is-read-only": false, +"description": ["none"] +}, +"subscription-service": { +"id": "subscription-service", +"is-read-only": false, +"description": ["none"] +}, +"get-notification-list": { +"id": "get-notification-list", +"is-read-only": false, +"description": ["none"] +}, +"subscription-id-or-name": { +"id": "subscription-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"time-period": { +"id": "time-period", +"is-read-only": false, +"description": ["none"] +}, +"notification": { +"id": "notification", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json new file mode 100644 index 000000000..33cd05d2c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json @@ -0,0 +1,778 @@ +{ "schema-information": { + +"tapi-oam": { +"id": "tapi-oam", +"is-read-only": false, +"description": ["This module contains TAPI OAM Model definitions. Source: TapiOam.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"oam-service-uuid": { +"id": "oam-service-uuid", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-ref-g": { +"id": "oam-service-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point-local-id": { +"id": "oam-service-end-point-local-id", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point-ref-g": { +"id": "oam-service-end-point-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"meg-uuid": { +"id": "meg-uuid", +"is-read-only": false, +"description": ["none"] +}, +"meg-ref-g": { +"id": "meg-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"maintenance-entity-local-id": { +"id": "maintenance-entity-local-id", +"is-read-only": false, +"description": ["none"] +}, +"maintenance-entity-ref-g": { +"id": "maintenance-entity-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"mep-local-id": { +"id": "mep-local-id", +"is-read-only": false, +"description": ["none"] +}, +"mep-ref-g": { +"id": "mep-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"mip-local-id": { +"id": "mip-local-id", +"is-read-only": false, +"description": ["none"] +}, +"mip-ref-g": { +"id": "mip-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-job-uuid": { +"id": "oam-job-uuid", +"is-read-only": false, +"description": ["none"] +}, +"oam-job-ref-g": { +"id": "oam-job-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"pm-current-data-local-id": { +"id": "pm-current-data-local-id", +"is-read-only": false, +"description": ["none"] +}, +"pm-current-data-ref-g": { +"id": "pm-current-data-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"pm-history-data-local-id": { +"id": "pm-history-data-local-id", +"is-read-only": false, +"description": ["none"] +}, +"pm-history-data-ref-g": { +"id": "pm-history-data-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile-uuid": { +"id": "oam-profile-uuid", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile-ref-g": { +"id": "oam-profile-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"pm-threshold-data-local-id": { +"id": "pm-threshold-data-local-id", +"is-read-only": false, +"description": ["none"] +}, +"pm-threshold-data-ref-g": { +"id": "pm-threshold-data-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"pm-bin-data-local-id": { +"id": "pm-bin-data-local-id", +"is-read-only": false, +"description": ["none"] +}, +"pm-bin-data-ref-g": { +"id": "pm-bin-data-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point": { +"id": "oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"mep-identifier": { +"id": "mep-identifier", +"is-read-only": false, +"description": ["none"] +}, +"peer-mep-identifier": { +"id": "peer-mep-identifier", +"is-read-only": false, +"description": ["none"] +}, +"mep-g": { +"id": "mep-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point": { +"id": "oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile": { +"id": "oam-profile", +"is-read-only": false, +"description": ["none"] +}, +"pm-current-data": { +"id": "pm-current-data", +"is-read-only": false, +"description": ["Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob. For example, typically at least one 15min and one 24hr; optionally one additional configurable (< 15min)"] +}, +"oam-job-type": { +"id": "oam-job-type", +"is-read-only": false, +"description": ["none"] +}, +"schedule": { +"id": "schedule", +"is-read-only": false, +"description": ["none"] +}, +"creation-time": { +"id": "creation-time", +"is-read-only": false, +"description": ["none"] +}, +"oam-job-g": { +"id": "oam-job-g", +"is-read-only": false, +"description": ["none"] +}, +"me": { +"id": "me", +"is-read-only": false, +"description": ["none"] +}, +"mep": { +"id": "mep", +"is-read-only": false, +"description": ["1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present) 2. ME may have 1 MEP (case of edge domaind, where the peer MEP is ouside the managed domain) 3. ME may have 2 MEPs"] +}, +"mip": { +"id": "mip", +"is-read-only": false, +"description": ["ME may 0, 1, or more MIPs"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"meg-level": { +"id": "meg-level", +"is-read-only": false, +"description": ["none"] +}, +"meg-identifier": { +"id": "meg-identifier", +"is-read-only": false, +"description": ["none"] +}, +"meg-g": { +"id": "meg-g", +"is-read-only": false, +"description": ["none"] +}, +"mep": { +"id": "mep", +"is-read-only": false, +"description": ["none"] +}, +"mip": { +"id": "mip", +"is-read-only": false, +"description": ["none"] +}, +"connection-route": { +"id": "connection-route", +"is-read-only": false, +"description": ["none"] +}, +"maintenance-entity-g": { +"id": "maintenance-entity-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point": { +"id": "oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"mip-g": { +"id": "mip-g", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"meg": { +"id": "meg", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile": { +"id": "oam-profile", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-g": { +"id": "oam-service-g", +"is-read-only": false, +"description": ["none"] +}, +"oam-service": { +"id": "oam-service", +"is-read-only": false, +"description": ["none"] +}, +"meg": { +"id": "meg", +"is-read-only": false, +"description": ["none"] +}, +"oam-job": { +"id": "oam-job", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile": { +"id": "oam-profile", +"is-read-only": false, +"description": ["none"] +}, +"oam-context-g": { +"id": "oam-context-g", +"is-read-only": false, +"description": ["none"] +}, +"service-interface-point": { +"id": "service-interface-point", +"is-read-only": false, +"description": ["none"] +}, +"connectivity-service-end-point": { +"id": "connectivity-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"mep": { +"id": "mep", +"is-read-only": false, +"description": ["none"] +}, +"mip": { +"id": "mip", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point-g": { +"id": "oam-service-end-point-g", +"is-read-only": false, +"description": ["none"] +}, +"mip": { +"id": "mip", +"is-read-only": false, +"description": ["none"] +}, +"mep": { +"id": "mep", +"is-read-only": false, +"description": ["none"] +}, +"mep-mip-list-g": { +"id": "mep-mip-list-g", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"meg-level": { +"id": "meg-level", +"is-read-only": false, +"description": ["none"] +}, +"oam-constraint-g": { +"id": "oam-constraint-g", +"is-read-only": false, +"description": ["none"] +}, +"pm-history-data": { +"id": "pm-history-data", +"is-read-only": false, +"description": ["in case of 24hr Current Data, at least 1 History Data. In case of 15min Current Data, at least 16 History Data. In case of <15min, the number of History Data shall be able to cover a span of 4 hours."] +}, +"granularity-period": { +"id": "granularity-period", +"is-read-only": false, +"description": ["none"] +}, +"timestamp": { +"id": "timestamp", +"is-read-only": false, +"description": ["This attribute indicates the start of the current monitoring interval. The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval."] +}, +"elapsed-time": { +"id": "elapsed-time", +"is-read-only": false, +"description": ["none"] +}, +"suspect-interval-flag": { +"id": "suspect-interval-flag", +"is-read-only": false, +"description": ["This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are: – Suspect data were detected by the actual resource doing data collection. – Transition of the administrativeState attribute to/from the 'lock' state. – Transition of the operationalState to/from the 'disabled' state. – Scheduler setting that inhibits the collection function. – The performance counters were reset during the interval. – The currentData (or subclass) object instance was created during the monitoring period."] +}, +"pm-current-data-g": { +"id": "pm-current-data-g", +"is-read-only": false, +"description": ["none"] +}, +"granularity-period": { +"id": "granularity-period", +"is-read-only": false, +"description": ["none"] +}, +"period-end-time": { +"id": "period-end-time", +"is-read-only": false, +"description": ["none"] +}, +"suspect-interval-flag": { +"id": "suspect-interval-flag", +"is-read-only": false, +"description": ["This attribute indicates that the performance data may not be reliable."] +}, +"pm-history-data-g": { +"id": "pm-history-data-g", +"is-read-only": false, +"description": ["none"] +}, +"pm-threshold-data": { +"id": "pm-threshold-data", +"is-read-only": false, +"description": ["none"] +}, +"pm-bin-data": { +"id": "pm-bin-data", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile-g": { +"id": "oam-profile-g", +"is-read-only": false, +"description": ["none"] +}, +"granularity-period": { +"id": "granularity-period", +"is-read-only": false, +"description": ["none"] +}, +"is-transient": { +"id": "is-transient", +"is-read-only": false, +"description": ["none"] +}, +"pm-threshold-data-g": { +"id": "pm-threshold-data-g", +"is-read-only": false, +"description": ["none"] +}, +"granularity-period": { +"id": "granularity-period", +"is-read-only": false, +"description": ["none"] +}, +"pm-bin-data-g": { +"id": "pm-bin-data-g", +"is-read-only": false, +"description": ["none"] +}, +"OAM_JOB_TYPE": { +"id": "OAM_JOB_TYPE", +"is-read-only": false, +"description": ["none"] +}, +"oam-job-type": { +"id": "oam-job-type", +"is-read-only": false, +"description": ["none"] +}, +"create-oam-service": { +"id": "create-oam-service", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"oam-constraint": { +"id": "oam-constraint", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"delete-oam-service": { +"id": "delete-oam-service", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"get-oam-service": { +"id": "get-oam-service", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"create-oam-job": { +"id": "create-oam-job", +"is-read-only": false, +"description": ["none"] +}, +"oam-job-type": { +"id": "oam-job-type", +"is-read-only": false, +"description": ["none"] +}, +"oam-service-end-point": { +"id": "oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile": { +"id": "oam-profile", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"schedule": { +"id": "schedule", +"is-read-only": false, +"description": ["none"] +}, +"oam-job": { +"id": "oam-job", +"is-read-only": false, +"description": ["none"] +}, +"get-oam-job": { +"id": "get-oam-job", +"is-read-only": false, +"description": ["none"] +}, +"job-id": { +"id": "job-id", +"is-read-only": false, +"description": ["none"] +}, +"oam-job": { +"id": "oam-job", +"is-read-only": false, +"description": ["none"] +}, +"get-oam-service-list": { +"id": "get-oam-service-list", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"get-meg": { +"id": "get-meg", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"meg": { +"id": "meg", +"is-read-only": false, +"description": ["none"] +}, +"update-oam-service": { +"id": "update-oam-service", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"oam-constraint": { +"id": "oam-constraint", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"delete-oam-job": { +"id": "delete-oam-job", +"is-read-only": false, +"description": ["none"] +}, +"job-id": { +"id": "job-id", +"is-read-only": false, +"description": ["none"] +}, +"update-oam-job": { +"id": "update-oam-job", +"is-read-only": false, +"description": ["none"] +}, +"job-id": { +"id": "job-id", +"is-read-only": false, +"description": ["none"] +}, +"oam-profile": { +"id": "oam-profile", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"schedule": { +"id": "schedule", +"is-read-only": false, +"description": ["none"] +}, +"oam-job": { +"id": "oam-job", +"is-read-only": false, +"description": ["none"] +}, +"create-oam-service-end-point": { +"id": "create-oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"sip-id": { +"id": "sip-id", +"is-read-only": false, +"description": ["none"] +}, +"c-sep-id": { +"id": "c-sep-id", +"is-read-only": false, +"description": ["none"] +}, +"layer": { +"id": "layer", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"delete-oam-service-end-point": { +"id": "delete-oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"o-sep-id": { +"id": "o-sep-id", +"is-read-only": false, +"description": ["none"] +}, +"update-oam-service-end-point": { +"id": "update-oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"o-sep-id": { +"id": "o-sep-id", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"get-oam-service-end-point": { +"id": "get-oam-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"service-id": { +"id": "service-id", +"is-read-only": false, +"description": ["none"] +}, +"o-sep-id": { +"id": "o-sep-id", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json new file mode 100644 index 000000000..c3ae65d32 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json @@ -0,0 +1,733 @@ +{ "schema-information": { + +"tapi-odu": { +"id": "tapi-odu", +"is-read-only": false, +"description": ["This module contains TAPI Odu Model definitions. Source: TapiOdu.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"opu-tributary-slot-size": { +"id": "opu-tributary-slot-size", +"is-read-only": false, +"description": ["This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP."] +}, +"auto-payload-type": { +"id": "auto-payload-type", +"is-read-only": false, +"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied."] +}, +"configured-client-type": { +"id": "configured-client-type", +"is-read-only": false, +"description": ["This attribute configures the type of the client CTP of the server ODU TTP."] +}, +"configured-mapping-type": { +"id": "configured-mapping-type", +"is-read-only": false, +"description": ["This attributes indicates the configured mapping type."] +}, +"accepted-payload-type": { +"id": "accepted-payload-type", +"is-read-only": false, +"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. This attribute is a 2-digit Hex code that indicates the new accepted payload type. Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE."] +}, +"odu-termination-and-client-adaptation-pac-g": { +"id": "odu-termination-and-client-adaptation-pac-g", +"is-read-only": false, +"description": ["This Pac contains the attributes associated with the client adaptation function of the server layer TTP It is present only if the CEP contains a TTP"] +}, +"odu-common": { +"id": "odu-common", +"is-read-only": false, +"description": ["none"] +}, +"odu-term-and-adapter": { +"id": "odu-term-and-adapter", +"is-read-only": false, +"description": ["none"] +}, +"odu-ctp": { +"id": "odu-ctp", +"is-read-only": false, +"description": ["none"] +}, +"odu-protection": { +"id": "odu-protection", +"is-read-only": false, +"description": ["none"] +}, +"odu-connection-end-point-spec-g": { +"id": "odu-connection-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"client-capacity": { +"id": "client-capacity", +"is-read-only": false, +"description": ["none"] +}, +"max-client-instances": { +"id": "max-client-instances", +"is-read-only": false, +"description": ["none"] +}, +"max-client-size": { +"id": "max-client-size", +"is-read-only": false, +"description": ["none"] +}, +"odu-pool-pac-g": { +"id": "odu-pool-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"odu-pool": { +"id": "odu-pool", +"is-read-only": false, +"description": ["none"] +}, +"odu-node-edge-point-spec-g": { +"id": "odu-node-edge-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"tributary-slot-list": { +"id": "tributary-slot-list", +"is-read-only": false, +"description": ["This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly)."] +}, +"tributary-port-number": { +"id": "tributary-port-number", +"is-read-only": false, +"description": ["This attribute identifies the tributary port number that is associated with the ODU CTP. range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU. In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero. In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016. In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016. In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016."] +}, +"accepted-msi": { +"id": "accepted-msi", +"is-read-only": false, +"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function."] +}, +"odu-ctp-pac-g": { +"id": "odu-ctp-pac-g", +"is-read-only": false, +"description": ["This Pac contains the attributes associated with the CTP It is present only if the CEP contains a CTP"] +}, +"odu-mep": { +"id": "odu-mep", +"is-read-only": false, +"description": ["none"] +}, +"odu-ncm": { +"id": "odu-ncm", +"is-read-only": false, +"description": ["none"] +}, +"odu-tcm": { +"id": "odu-tcm", +"is-read-only": false, +"description": ["none"] +}, +"odu-defect": { +"id": "odu-defect", +"is-read-only": false, +"description": ["none"] +}, +"odu-pm": { +"id": "odu-pm", +"is-read-only": false, +"description": ["none"] +}, +"odu-mep-spec-g": { +"id": "odu-mep-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"aps-enable": { +"id": "aps-enable", +"is-read-only": false, +"description": ["This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function."] +}, +"aps-level": { +"id": "aps-level", +"is-read-only": false, +"description": ["This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively."] +}, +"odu-protection-pac-g": { +"id": "odu-protection-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"tcm-fields-in-use": { +"id": "tcm-fields-in-use", +"is-read-only": false, +"description": ["This attribute indicates the used TCM fields of the ODU OH."] +}, +"odu-ncm-pac-g": { +"id": "odu-ncm-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"tcm-extension": { +"id": "tcm-extension", +"is-read-only": false, +"description": ["none"] +}, +"tcm-mode": { +"id": "tcm-mode", +"is-read-only": false, +"description": ["This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent."] +}, +"codirectional": { +"id": "codirectional", +"is-read-only": false, +"description": ["This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional."] +}, +"ac-status-source": { +"id": "ac-status-source", +"is-read-only": false, +"description": ["This attribute indicates the status of the accepted TCM."] +}, +"ac-status-sink": { +"id": "ac-status-sink", +"is-read-only": false, +"description": ["This attribute indicates the status of the accepted TCM."] +}, +"admin-state-source": { +"id": "admin-state-source", +"is-read-only": false, +"description": ["This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction."] +}, +"admin-state-sink": { +"id": "admin-state-sink", +"is-read-only": false, +"description": ["This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction."] +}, +"odu-tcm-mep-pac-g": { +"id": "odu-tcm-mep-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"odu-mip": { +"id": "odu-mip", +"is-read-only": false, +"description": ["none"] +}, +"odu-ncm": { +"id": "odu-ncm", +"is-read-only": false, +"description": ["none"] +}, +"odu-tcm": { +"id": "odu-tcm", +"is-read-only": false, +"description": ["none"] +}, +"odu-pm": { +"id": "odu-pm", +"is-read-only": false, +"description": ["none"] +}, +"odu-defect": { +"id": "odu-defect", +"is-read-only": false, +"description": ["none"] +}, +"odu-mip-spec-g": { +"id": "odu-mip-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"acti": { +"id": "acti", +"is-read-only": false, +"description": ["The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail."] +}, +"ex-dapi": { +"id": "ex-dapi", +"is-read-only": false, +"description": ["The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."] +}, +"ex-sapi": { +"id": "ex-sapi", +"is-read-only": false, +"description": ["The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."] +}, +"tim-act-disabled": { +"id": "tim-act-disabled", +"is-read-only": false, +"description": ["This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink."] +}, +"tim-det-mode": { +"id": "tim-det-mode", +"is-read-only": false, +"description": ["This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI"] +}, +"deg-m": { +"id": "deg-m", +"is-read-only": false, +"description": ["This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected."] +}, +"deg-thr": { +"id": "deg-thr", +"is-read-only": false, +"description": ["This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."] +}, +"odu-mip-pac-g": { +"id": "odu-mip-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"tcm-field": { +"id": "tcm-field", +"is-read-only": false, +"description": ["This attribute indicates the tandem connection monitoring field of the ODU OH."] +}, +"odu-tcm-mip-pac-g": { +"id": "odu-tcm-mip-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"dm-source": { +"id": "dm-source", +"is-read-only": false, +"description": ["This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue."] +}, +"dm-value": { +"id": "dm-value", +"is-read-only": false, +"description": ["This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1."] +}, +"txti": { +"id": "txti", +"is-read-only": false, +"description": ["The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission."] +}, +"odu-mep-pac-g": { +"id": "odu-mep-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"odu-type": { +"id": "odu-type", +"is-read-only": false, +"description": ["This attribute specifies the type of the ODU termination point."] +}, +"odu-rate": { +"id": "odu-rate", +"is-read-only": false, +"description": ["This attribute indicates the rate of the ODU terminatino point. This attribute is Set at create; i.e., once created it cannot be changed directly. In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute)."] +}, +"odu-rate-tolerance": { +"id": "odu-rate-tolerance", +"is-read-only": false, +"description": ["This attribute indicates the rate tolerance of the ODU termination point. Valid values are real value in the unit of ppm. Standardized values are defined in Table 7-2/G.709."] +}, +"odu-common-pac-g": { +"id": "odu-common-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"n-bbe": { +"id": "n-bbe", +"is-read-only": false, +"description": ["Near-end Background Block Error"] +}, +"f-bbe": { +"id": "f-bbe", +"is-read-only": false, +"description": ["Far-end Background Block Error"] +}, +"n-ses": { +"id": "n-ses", +"is-read-only": false, +"description": ["Near-end Severely Errored Second"] +}, +"f-ses": { +"id": "f-ses", +"is-read-only": false, +"description": ["Far-end Severely Errored Second"] +}, +"uas": { +"id": "uas", +"is-read-only": false, +"description": ["UnAvailable Second"] +}, +"odu-pm-pac-g": { +"id": "odu-pm-pac-g", +"is-read-only": false, +"description": ["Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class. PM data attributes: fBbe, fSes, nBbe, nSes. uas"] +}, +"bdi": { +"id": "bdi", +"is-read-only": false, +"description": ["Backward Defect Indication"] +}, +"deg": { +"id": "deg", +"is-read-only": false, +"description": ["Signal Degraded"] +}, +"lck": { +"id": "lck", +"is-read-only": false, +"description": ["Locked"] +}, +"oci": { +"id": "oci", +"is-read-only": false, +"description": ["Open Connection Indicator"] +}, +"ssf": { +"id": "ssf", +"is-read-only": false, +"description": ["Server Signal Failure"] +}, +"tim": { +"id": "tim", +"is-read-only": false, +"description": ["Trail Trace Identifier Mismatch"] +}, +"odu-defect-pac-g": { +"id": "odu-defect-pac-g", +"is-read-only": false, +"description": ["The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised."] +}, +"ODU_TYPE": { +"id": "ODU_TYPE", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU0": { +"id": "ODU_TYPE_ODU0", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU1": { +"id": "ODU_TYPE_ODU1", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU2": { +"id": "ODU_TYPE_ODU2", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU2E": { +"id": "ODU_TYPE_ODU2E", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU3": { +"id": "ODU_TYPE_ODU3", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU4": { +"id": "ODU_TYPE_ODU4", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU_FLEX": { +"id": "ODU_TYPE_ODU_FLEX", +"is-read-only": false, +"description": ["none"] +}, +"ODU_TYPE_ODU_CN": { +"id": "ODU_TYPE_ODU_CN", +"is-read-only": false, +"description": ["none"] +}, +"odu-type": { +"id": "odu-type", +"is-read-only": false, +"description": ["none"] +}, +"AMP": { +"id": "AMP", +"is-read-only": false, +"description": ["none"] +}, +"BMP": { +"id": "BMP", +"is-read-only": false, +"description": ["none"] +}, +"GFP-F": { +"id": "GFP-F", +"is-read-only": false, +"description": ["none"] +}, +"GMP": { +"id": "GMP", +"is-read-only": false, +"description": ["none"] +}, +"TTP_GFP_BMP": { +"id": "TTP_GFP_BMP", +"is-read-only": false, +"description": ["none"] +}, +"NULL": { +"id": "NULL", +"is-read-only": false, +"description": ["none"] +}, +"mapping-type": { +"id": "mapping-type", +"is-read-only": false, +"description": ["none"] +}, +"DAPI": { +"id": "DAPI", +"is-read-only": false, +"description": ["none"] +}, +"SAPI": { +"id": "SAPI", +"is-read-only": false, +"description": ["none"] +}, +"BOTH": { +"id": "BOTH", +"is-read-only": false, +"description": ["none"] +}, +"OFF": { +"id": "OFF", +"is-read-only": false, +"description": ["none"] +}, +"tim-det-mo": { +"id": "tim-det-mo", +"is-read-only": false, +"description": ["List of modes for trace identifier mismatch detection."] +}, +"1G25": { +"id": "1G25", +"is-read-only": false, +"description": ["none"] +}, +"2G5": { +"id": "2G5", +"is-read-only": false, +"description": ["none"] +}, +"odu-slot-size": { +"id": "odu-slot-size", +"is-read-only": false, +"description": ["none"] +}, +"named-payload-type": { +"id": "named-payload-type", +"is-read-only": false, +"description": ["none"] +}, +"hex-payload-type": { +"id": "hex-payload-type", +"is-read-only": false, +"description": ["none"] +}, +"odu-payload-type-g": { +"id": "odu-payload-type-g", +"is-read-only": false, +"description": ["none"] +}, +"UNKNOWN": { +"id": "UNKNOWN", +"is-read-only": false, +"description": ["none"] +}, +"UNINTERPRETABLE": { +"id": "UNINTERPRETABLE", +"is-read-only": false, +"description": ["none"] +}, +"odu-named-payload-type": { +"id": "odu-named-payload-type", +"is-read-only": false, +"description": ["none"] +}, +"deg-thr-value": { +"id": "deg-thr-value", +"is-read-only": false, +"description": ["Percentage of detected errored blocks"] +}, +"deg-thr-type": { +"id": "deg-thr-type", +"is-read-only": false, +"description": ["Number of errored blocks"] +}, +"percentage-granularity": { +"id": "percentage-granularity", +"is-read-only": false, +"description": ["none"] +}, +"deg-thr-g": { +"id": "deg-thr-g", +"is-read-only": false, +"description": ["Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. degThrValue when type is PERCENTAGE: percentageGranularity is used to indicate the number of decimal points So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100% So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100% degThrValue when type is NUMBER_ERROR_BLOCKS: Number of Errored Blocks is captured in an integer value."] +}, +"PERCENTAGE": { +"id": "PERCENTAGE", +"is-read-only": false, +"description": ["Choice of % or Number of errored blocks"] +}, +"NUMBER_ERRORED_BLOCKS": { +"id": "NUMBER_ERRORED_BLOCKS", +"is-read-only": false, +"description": ["Number of % or blocks"] +}, +"deg-thr-type": { +"id": "deg-thr-type", +"is-read-only": false, +"description": ["The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."] +}, +"NO_SOURCE_TC": { +"id": "NO_SOURCE_TC", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection"] +}, +"IN_USE_WITHOUT_IAE": { +"id": "IN_USE_WITHOUT_IAE", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 0 0 1, In use without IAE (Incoming Alignment Error)"] +}, +"IN_USE_WITH_IAE": { +"id": "IN_USE_WITH_IAE", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)"] +}, +"RESERVED_1": { +"id": "RESERVED_1", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization"] +}, +"RESERVED_2": { +"id": "RESERVED_2", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization"] +}, +"LCK": { +"id": "LCK", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK"] +}, +"OCI": { +"id": "OCI", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI"] +}, +"AIS": { +"id": "AIS", +"is-read-only": false, +"description": ["TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS"] +}, +"tcm-status": { +"id": "tcm-status", +"is-read-only": false, +"description": ["See Table 15-5/G.709/Y.1331"] +}, +"OPERATIONAL": { +"id": "OPERATIONAL", +"is-read-only": false, +"description": ["none"] +}, +"TRANSPARENT": { +"id": "TRANSPARENT", +"is-read-only": false, +"description": ["none"] +}, +"MONITOR": { +"id": "MONITOR", +"is-read-only": false, +"description": ["none"] +}, +"tcm-mode": { +"id": "tcm-mode", +"is-read-only": false, +"description": ["List of value modes for the sink side of the tandem connection monitoring function."] +}, +"INTRUSIVE": { +"id": "INTRUSIVE", +"is-read-only": false, +"description": ["none"] +}, +"NON-INTRUSIVE": { +"id": "NON-INTRUSIVE", +"is-read-only": false, +"description": ["none"] +}, +"tcm-monitoring": { +"id": "tcm-monitoring", +"is-read-only": false, +"description": ["Monitoring types for the tandem connection monitoring function."] +}, +"NORMAL": { +"id": "NORMAL", +"is-read-only": false, +"description": ["none"] +}, +"PASS-THROUGH": { +"id": "PASS-THROUGH", +"is-read-only": false, +"description": ["none"] +}, +"ERASE": { +"id": "ERASE", +"is-read-only": false, +"description": ["none"] +}, +"tcm-extension": { +"id": "tcm-extension", +"is-read-only": false, +"description": ["none"] +}, +"ONES": { +"id": "ONES", +"is-read-only": false, +"description": ["none"] +}, +"ONE_TENTHS": { +"id": "ONE_TENTHS", +"is-read-only": false, +"description": ["value * (1/10)"] +}, +"ONE_HUNDREDTHS": { +"id": "ONE_HUNDREDTHS", +"is-read-only": false, +"description": ["value * (1/100)"] +}, +"ONE_THOUSANDTHS": { +"id": "ONE_THOUSANDTHS", +"is-read-only": false, +"description": ["value * (1/1000)"] +}, +"percentage-granularity": { +"id": "percentage-granularity", +"is-read-only": false, +"description": ["none"] +}, +"bidirectional": { +"id": "bidirectional", +"is-read-only": false, +"description": ["none"] +}, +"uas": { +"id": "uas", +"is-read-only": false, +"description": ["none"] +}, +"nuas": { +"id": "nuas", +"is-read-only": false, +"description": ["none"] +}, +"fuas": { +"id": "fuas", +"is-read-only": false, +"description": ["none"] +}, +"uas-choice-g": { +"id": "uas-choice-g", +"is-read-only": false, +"description": ["If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json new file mode 100644 index 000000000..c969c91b1 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json @@ -0,0 +1,403 @@ +{ "schema-information": { + +"tapi-path-computation": { +"id": "tapi-path-computation", +"is-read-only": false, +"description": ["This module contains TAPI Path Computation Model definitions. Source: TapiPathComputation.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"path-uuid": { +"id": "path-uuid", +"is-read-only": false, +"description": ["none"] +}, +"path-ref-g": { +"id": "path-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"link": { +"id": "link", +"is-read-only": false, +"description": ["none"] +}, +"routing-constraint": { +"id": "routing-constraint", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"path-g": { +"id": "path-g", +"is-read-only": false, +"description": ["Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes"] +}, +"service-interface-point": { +"id": "service-interface-point", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-qualifier": { +"id": "layer-protocol-qualifier", +"is-read-only": false, +"description": ["none"] +}, +"capacity": { +"id": "capacity", +"is-read-only": false, +"description": ["none"] +}, +"role": { +"id": "role", +"is-read-only": false, +"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["The orientation of defined flow at the EndPoint."] +}, +"path-service-end-point-g": { +"id": "path-service-end-point-g", +"is-read-only": false, +"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"] +}, +"path": { +"id": "path", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"routing-constraint": { +"id": "routing-constraint", +"is-read-only": false, +"description": ["none"] +}, +"topology-constraint": { +"id": "topology-constraint", +"is-read-only": false, +"description": ["none"] +}, +"objective-function": { +"id": "objective-function", +"is-read-only": false, +"description": ["none"] +}, +"optimization-constraint": { +"id": "optimization-constraint", +"is-read-only": false, +"description": ["none"] +}, +"path-computation-service-g": { +"id": "path-computation-service-g", +"is-read-only": false, +"description": ["none"] +}, +"bandwidth-optimization": { +"id": "bandwidth-optimization", +"is-read-only": false, +"description": ["none"] +}, +"concurrent-paths": { +"id": "concurrent-paths", +"is-read-only": false, +"description": ["none"] +}, +"cost-optimization": { +"id": "cost-optimization", +"is-read-only": false, +"description": ["none"] +}, +"link-utilization": { +"id": "link-utilization", +"is-read-only": false, +"description": ["none"] +}, +"resource-sharing": { +"id": "resource-sharing", +"is-read-only": false, +"description": ["none"] +}, +"path-objective-function-g": { +"id": "path-objective-function-g", +"is-read-only": false, +"description": ["none"] +}, +"traffic-interruption": { +"id": "traffic-interruption", +"is-read-only": false, +"description": ["none"] +}, +"path-optimization-constraint-g": { +"id": "path-optimization-constraint-g", +"is-read-only": false, +"description": ["none"] +}, +"cost-characteristic": { +"id": "cost-characteristic", +"is-read-only": false, +"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."] +}, +"latency-characteristic": { +"id": "latency-characteristic", +"is-read-only": false, +"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."] +}, +"risk-diversity-characteristic": { +"id": "risk-diversity-characteristic", +"is-read-only": false, +"description": ["none"] +}, +"diversity-policy": { +"id": "diversity-policy", +"is-read-only": false, +"description": ["none"] +}, +"route-objective-function": { +"id": "route-objective-function", +"is-read-only": false, +"description": ["none"] +}, +"route-direction": { +"id": "route-direction", +"is-read-only": false, +"description": ["none"] +}, +"is-exclusive": { +"id": "is-exclusive", +"is-read-only": false, +"description": ["To distinguish if the resources are to be exclusive to the service"] +}, +"routing-constraint-g": { +"id": "routing-constraint-g", +"is-read-only": false, +"description": ["none"] +}, +"path-comp-service": { +"id": "path-comp-service", +"is-read-only": false, +"description": ["none"] +}, +"path": { +"id": "path", +"is-read-only": false, +"description": ["none"] +}, +"path-computation-context-g": { +"id": "path-computation-context-g", +"is-read-only": false, +"description": ["none"] +}, +"include-topology": { +"id": "include-topology", +"is-read-only": false, +"description": ["none"] +}, +"avoid-topology": { +"id": "avoid-topology", +"is-read-only": false, +"description": ["none"] +}, +"include-path": { +"id": "include-path", +"is-read-only": false, +"description": ["none"] +}, +"exclude-path": { +"id": "exclude-path", +"is-read-only": false, +"description": ["none"] +}, +"include-link": { +"id": "include-link", +"is-read-only": false, +"description": ["This is a loose constraint - that is it is unordered and could be a partial list"] +}, +"exclude-link": { +"id": "exclude-link", +"is-read-only": false, +"description": ["none"] +}, +"include-node": { +"id": "include-node", +"is-read-only": false, +"description": ["This is a loose constraint - that is it is unordered and could be a partial list"] +}, +"exclude-node": { +"id": "exclude-node", +"is-read-only": false, +"description": ["none"] +}, +"preferred-transport-layer": { +"id": "preferred-transport-layer", +"is-read-only": false, +"description": ["soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers"] +}, +"topology-constraint-g": { +"id": "topology-constraint-g", +"is-read-only": false, +"description": ["none"] +}, +"MIN_WORK_ROUTE_HOP": { +"id": "MIN_WORK_ROUTE_HOP", +"is-read-only": false, +"description": ["none"] +}, +"MIN_WORK_ROUTE_COST": { +"id": "MIN_WORK_ROUTE_COST", +"is-read-only": false, +"description": ["none"] +}, +"MIN_WORK_ROUTE_LATENCY": { +"id": "MIN_WORK_ROUTE_LATENCY", +"is-read-only": false, +"description": ["none"] +}, +"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP": { +"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP", +"is-read-only": false, +"description": ["none"] +}, +"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST": { +"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST", +"is-read-only": false, +"description": ["none"] +}, +"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY": { +"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY", +"is-read-only": false, +"description": ["none"] +}, +"LOAD_BALANCE_MAX_UNUSED_CAPACITY": { +"id": "LOAD_BALANCE_MAX_UNUSED_CAPACITY", +"is-read-only": false, +"description": ["none"] +}, +"route-objective-function": { +"id": "route-objective-function", +"is-read-only": false, +"description": ["none"] +}, +"SRLG": { +"id": "SRLG", +"is-read-only": false, +"description": ["none"] +}, +"SRNG": { +"id": "SRNG", +"is-read-only": false, +"description": ["none"] +}, +"SNG": { +"id": "SNG", +"is-read-only": false, +"description": ["none"] +}, +"NODE": { +"id": "NODE", +"is-read-only": false, +"description": ["none"] +}, +"LINK": { +"id": "LINK", +"is-read-only": false, +"description": ["none"] +}, +"diversity-policy": { +"id": "diversity-policy", +"is-read-only": false, +"description": ["none"] +}, +"compute-p-2-p-path": { +"id": "compute-p-2-p-path", +"is-read-only": false, +"description": ["none"] +}, +"sep": { +"id": "sep", +"is-read-only": false, +"description": ["none"] +}, +"routing-constraint": { +"id": "routing-constraint", +"is-read-only": false, +"description": ["none"] +}, +"topology-constraint": { +"id": "topology-constraint", +"is-read-only": false, +"description": ["none"] +}, +"objective-function": { +"id": "objective-function", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"optimize-p-2-p-path": { +"id": "optimize-p-2-p-path", +"is-read-only": false, +"description": ["none"] +}, +"path-id-or-name": { +"id": "path-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"routing-constraint": { +"id": "routing-constraint", +"is-read-only": false, +"description": ["none"] +}, +"optimization-constraint": { +"id": "optimization-constraint", +"is-read-only": false, +"description": ["none"] +}, +"objective-function": { +"id": "objective-function", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"delete-p-2-p-path": { +"id": "delete-p-2-p-path", +"is-read-only": false, +"description": ["none"] +}, +"path-id-or-name": { +"id": "path-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json new file mode 100644 index 000000000..b2e4b4c25 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json @@ -0,0 +1,798 @@ +{ "schema-information": { + +"tapi-photonic-media": { +"id": "tapi-photonic-media", +"is-read-only": false, +"description": ["This module contains TAPI PhotonicMedia Model definitions. Source: TapiPhotonicMedia.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"number-of-otsi": { +"id": "number-of-otsi", +"is-read-only": false, +"description": ["none"] +}, +"otsi-gserver-adaptation-pac-g": { +"id": "otsi-gserver-adaptation-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"otsi-termination": { +"id": "otsi-termination", +"is-read-only": false, +"description": ["none"] +}, +"otsi-connection-end-point-spec-g": { +"id": "otsi-connection-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"selected-central-frequency": { +"id": "selected-central-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["none"] +}, +"selected-application-identifier": { +"id": "selected-application-identifier", +"is-read-only": false, +"description": ["This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."] +}, +"selected-modulation": { +"id": "selected-modulation", +"is-read-only": false, +"description": ["This parameter defines the modulation used at the source"] +}, +"selected-spectrum": { +"id": "selected-spectrum", +"is-read-only": false, +"description": ["none"] +}, +"transmited-power": { +"id": "transmited-power", +"is-read-only": false, +"description": ["Measured power at the Transmitter."] +}, +"received-power": { +"id": "received-power", +"is-read-only": false, +"description": ["none"] +}, +"laser-properties": { +"id": "laser-properties", +"is-read-only": false, +"description": ["Laser properties."] +}, +"otsi-termination-pac-g": { +"id": "otsi-termination-pac-g", +"is-read-only": false, +"description": ["Provides status information only."] +}, +"supportable-spectrum": { +"id": "supportable-spectrum", +"is-read-only": false, +"description": ["none"] +}, +"available-spectrum": { +"id": "available-spectrum", +"is-read-only": false, +"description": ["none"] +}, +"occupied-spectrum": { +"id": "occupied-spectrum", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-pool-capability-pac-g": { +"id": "media-channel-pool-capability-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"mc-pool": { +"id": "mc-pool", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-node-edge-point-spec-g": { +"id": "media-channel-node-edge-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"optical-routing-strategy": { +"id": "optical-routing-strategy", +"is-read-only": false, +"description": ["none"] +}, +"otsi-routing-spec-g": { +"id": "otsi-routing-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"occupied-spectrum": { +"id": "occupied-spectrum", +"is-read-only": false, +"description": ["none"] +}, +"measured-power-ingress": { +"id": "measured-power-ingress", +"is-read-only": false, +"description": ["none"] +}, +"measured-power-egress": { +"id": "measured-power-egress", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-properties-pac-g": { +"id": "media-channel-properties-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"otsi-adapter": { +"id": "otsi-adapter", +"is-read-only": false, +"description": ["none"] +}, +"fec-parameters": { +"id": "fec-parameters", +"is-read-only": false, +"description": ["none"] +}, +"otsi-assembly-connection-end-point-spec-g": { +"id": "otsi-assembly-connection-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"supportable-lower-central-frequency": { +"id": "supportable-lower-central-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["The lower frequency of the channel spectrum"] +}, +"supportable-upper-central-frequency": { +"id": "supportable-upper-central-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["The Upper frequency of the channel spectrum"] +}, +"supportable-application-identifier": { +"id": "supportable-application-identifier", +"is-read-only": false, +"description": ["The list of supportable ApplicationIdentifiers."] +}, +"supportable-modulation": { +"id": "supportable-modulation", +"is-read-only": false, +"description": ["This parameter defines the modulation used at the source"] +}, +"total-power-warn-threshold": { +"id": "total-power-warn-threshold", +"is-read-only": false, +"unit":"dBm", +"description": ["none"] +}, +"otsi-capability-pac-g": { +"id": "otsi-capability-pac-g", +"is-read-only": false, +"description": ["Can read the status of the warning for the upper value that the power can reach."] +}, +"otsi-capability": { +"id": "otsi-capability", +"is-read-only": false, +"description": ["none"] +}, +"otsi-service-interface-point-spec-g": { +"id": "otsi-service-interface-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"otsi-config": { +"id": "otsi-config", +"is-read-only": false, +"description": ["none"] +}, +"nmc-config": { +"id": "nmc-config", +"is-read-only": false, +"description": ["none"] +}, +"otsi-connectivity-service-end-point-spec-g": { +"id": "otsi-connectivity-service-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"central-frequency": { +"id": "central-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave"] +}, +"application-identifier": { +"id": "application-identifier", +"is-read-only": false, +"description": ["This attribute indicates the selected Application Identifier."] +}, +"modulation": { +"id": "modulation", +"is-read-only": false, +"description": ["The modulation techniqu selected at the source."] +}, +"laser-control": { +"id": "laser-control", +"is-read-only": false, +"description": ["Laser control can be FORCED-ON, FORCED-OFF or AUTOMATIC-LASER-SHUTDOWN"] +}, +"transmit-power": { +"id": "transmit-power", +"is-read-only": false, +"description": ["Transmit power as requested."] +}, +"total-power-warn-threshold-upper": { +"id": "total-power-warn-threshold-upper", +"is-read-only": false, +"unit":"dBm", +"description": ["Configure the Max, Default and Min values for the Upper power threshold."] +}, +"total-power-warn-threshold-lower": { +"id": "total-power-warn-threshold-lower", +"is-read-only": false, +"unit":"dBm", +"description": ["Configure Max, Default and Min values for lower power threshold."] +}, +"otsi-termination-config-pac-g": { +"id": "otsi-termination-config-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"pre-fec-ber": { +"id": "pre-fec-ber", +"is-read-only": false, +"description": ["counter: bit error rate before correction by FEC"] +}, +"post-fec-ber": { +"id": "post-fec-ber", +"is-read-only": false, +"description": ["counter: bit error rate after correction by FEC"] +}, +"corrected-bytes": { +"id": "corrected-bytes", +"is-read-only": false, +"description": ["Bytes corrected between those that were received corrupted"] +}, +"corrected-bits": { +"id": "corrected-bits", +"is-read-only": false, +"description": ["Bits corrected between those that were received corrupted"] +}, +"uncorrectable-bytes": { +"id": "uncorrectable-bytes", +"is-read-only": false, +"description": ["Bytes that could not be corrected by FEC"] +}, +"uncorrectable-bits": { +"id": "uncorrectable-bits", +"is-read-only": false, +"description": ["Bits that could not be corrected by FEC"] +}, +"fec-properties-pac-g": { +"id": "fec-properties-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"mc-pool": { +"id": "mc-pool", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-service-interface-point-spec-g": { +"id": "media-channel-service-interface-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"mc-config": { +"id": "mc-config", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-connectivity-service-end-point-spec-g": { +"id": "media-channel-connectivity-service-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"spectrum": { +"id": "spectrum", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-config-pac-g": { +"id": "media-channel-config-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"media-channel": { +"id": "media-channel", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-connection-end-point-spec-g": { +"id": "media-channel-connection-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"ots-media-channel": { +"id": "ots-media-channel", +"is-read-only": false, +"description": ["none"] +}, +"ots-connection-end-point-spec-g": { +"id": "ots-connection-end-point-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"media-channel-assembly-spec-g": { +"id": "media-channel-assembly-spec-g", +"is-read-only": false, +"description": ["none"] +}, +"laser-status": { +"id": "laser-status", +"is-read-only": false, +"description": ["none"] +}, +"laser-application-type": { +"id": "laser-application-type", +"is-read-only": false, +"description": ["The type of laser, its operational wavelengths, and its applications. String size 255."] +}, +"laser-bias-current": { +"id": "laser-bias-current", +"is-read-only": false, +"description": ["The Bias current of the laser that is the medium polarization current of the laser."] +}, +"laser-temperature": { +"id": "laser-temperature", +"is-read-only": false, +"description": ["The temperature of the laser"] +}, +"laser-properties-pac-g": { +"id": "laser-properties-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"total-power": { +"id": "total-power", +"is-read-only": false, +"description": ["The total power at any point in a channel specified in dBm. range of type : -99.000..99.000"] +}, +"power-spectral-density": { +"id": "power-spectral-density", +"is-read-only": false, +"description": ["This describes how power of a signal is distributed over frequency specified in nW/MHz range of type : -2147483648..2147483648"] +}, +"power-properties-pac-g": { +"id": "power-properties-pac-g", +"is-read-only": false, +"description": ["Indication with severity warning raised when a total power value measured is above the threshold."] +}, +"total-power-upper-warn-threshold-default": { +"id": "total-power-upper-warn-threshold-default", +"is-read-only": false, +"description": ["Can read the value of the default threshold that was set"] +}, +"total-power-upper-warn-threshold-min": { +"id": "total-power-upper-warn-threshold-min", +"is-read-only": false, +"description": ["Can read the value of the lower threshold that was set"] +}, +"total-power-upper-warn-threshold-max": { +"id": "total-power-upper-warn-threshold-max", +"is-read-only": false, +"description": ["Can read the value of the upper threshold that was set"] +}, +"total-power-lower-warn-threshold-default": { +"id": "total-power-lower-warn-threshold-default", +"is-read-only": false, +"description": ["Can read the value of the default threshold that was set"] +}, +"total-power-lower-warn-threshold-max": { +"id": "total-power-lower-warn-threshold-max", +"is-read-only": false, +"description": ["Can read the value of the upper threshold that was set"] +}, +"total-power-lower-warn-threshold-min": { +"id": "total-power-lower-warn-threshold-min", +"is-read-only": false, +"description": ["Can read the value of the lower threshold that was set"] +}, +"total-power-threshold-pac-g": { +"id": "total-power-threshold-pac-g", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE": { +"id": "SPECTRUM_TYPE", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_OTSi": { +"id": "SPECTRUM_TYPE_OTSi", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_OTSiA": { +"id": "SPECTRUM_TYPE_OTSiA", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_OTSiG": { +"id": "SPECTRUM_TYPE_OTSiG", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_NMC": { +"id": "SPECTRUM_TYPE_NMC", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_NMCA": { +"id": "SPECTRUM_TYPE_NMCA", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_SMC": { +"id": "SPECTRUM_TYPE_SMC", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_SMCA": { +"id": "SPECTRUM_TYPE_SMCA", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_OCH": { +"id": "SPECTRUM_TYPE_OCH", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_OMS": { +"id": "SPECTRUM_TYPE_OMS", +"is-read-only": false, +"description": ["none"] +}, +"SPECTRUM_TYPE_OTS": { +"id": "SPECTRUM_TYPE_OTS", +"is-read-only": false, +"description": ["none"] +}, +"application-identifier-type": { +"id": "application-identifier-type", +"is-read-only": false, +"description": ["The ITU-T recommendation which defines the application code format."] +}, +"application-code": { +"id": "application-code", +"is-read-only": false, +"description": ["none"] +}, +"application-identifier-g": { +"id": "application-identifier-g", +"is-read-only": false, +"description": ["The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."] +}, +"grid-type": { +"id": "grid-type", +"is-read-only": false, +"description": ["Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width"] +}, +"adjustment-granularity": { +"id": "adjustment-granularity", +"is-read-only": false, +"description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)"] +}, +"central-frequency": { +"id": "central-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave."] +}, +"channel-number": { +"id": "channel-number", +"is-read-only": false, +"description": ["As per ITU-T G.694.1, this attribute is denoted as 'n' and is used to calculate the nominal central frequency (in THz) as follows: 193.1 + × where channelNumber is a positive or negative integer including 0 and adjustment_granularity is the nominal central frequency granularity in THz"] +}, +"central-frequency-or-wavelength-g": { +"id": "central-frequency-or-wavelength-g", +"is-read-only": false, +"description": ["This data-type holds the central frequency directly or optionally the information to determine the nominal central frequency of a FIXED grid (DWDM or CWDM) and FLEX grid type systems. As per ITU-T G.694.1, the nominal central frequency (in THz) is calculated as follows: 193.1 + × where channelNumber is a positive or negative integer including 0 and is the nominal central frequency granularity in THz For FIXED grid types, the adjustmentGranularity is one of (0.1/0.05/0.025/0.0125) THz corresponding to channel spacing of one of (100/50/25/12.5) GHz For FLEX grid type, the adjusmentGranularity is 0.00625 THz and the slot width is variable in increments of 12.5 GHz"] +}, +"OPTIMAL_OSNR": { +"id": "OPTIMAL_OSNR", +"is-read-only": false, +"description": ["none"] +}, +"NO_RELAY": { +"id": "NO_RELAY", +"is-read-only": false, +"description": ["none"] +}, +"MIN_RELAY": { +"id": "MIN_RELAY", +"is-read-only": false, +"description": ["none"] +}, +"PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE": { +"id": "PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE", +"is-read-only": false, +"description": ["none"] +}, +"PREFERRED_NO_SKIPPING_WAVELENGTH": { +"id": "PREFERRED_NO_SKIPPING_WAVELENGTH", +"is-read-only": false, +"description": ["none"] +}, +"optical-routing-strategy": { +"id": "optical-routing-strategy", +"is-read-only": false, +"description": ["none"] +}, +"PROPRIETARY": { +"id": "PROPRIETARY", +"is-read-only": false, +"description": ["none"] +}, +"ITUT_G959_1": { +"id": "ITUT_G959_1", +"is-read-only": false, +"description": ["none"] +}, +"ITUT_G698_1": { +"id": "ITUT_G698_1", +"is-read-only": false, +"description": ["none"] +}, +"ITUT_G698_2": { +"id": "ITUT_G698_2", +"is-read-only": false, +"description": ["none"] +}, +"ITUT_G696_1": { +"id": "ITUT_G696_1", +"is-read-only": false, +"description": ["none"] +}, +"ITUT_G695": { +"id": "ITUT_G695", +"is-read-only": false, +"description": ["none"] +}, +"application-identifier-type": { +"id": "application-identifier-type", +"is-read-only": false, +"description": ["none"] +}, +"DWDM": { +"id": "DWDM", +"is-read-only": false, +"description": ["Fixed frequency grid in C & L bands as specified in ITU-T G.694.1"] +}, +"CWDM": { +"id": "CWDM", +"is-read-only": false, +"description": ["Fixed frequency grid as specified in ITU-T G.694.2"] +}, +"FLEX": { +"id": "FLEX", +"is-read-only": false, +"description": ["Flexible frequency grid as specified in ITU-T G.694.1. In this case, - the allowed frequency slots have a nominal central frequency (in THz) defined by: 193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz - and a slot width defined by: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz. Any combination of frequency slots is allowed as long as no two frequency slots overlap."] +}, +"GRIDLESS": { +"id": "GRIDLESS", +"is-read-only": false, +"description": ["none"] +}, +"UNSPECIFIED": { +"id": "UNSPECIFIED", +"is-read-only": false, +"description": ["Unspecified/proprietary frequency grid"] +}, +"grid-type": { +"id": "grid-type", +"is-read-only": false, +"description": ["The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications."] +}, +"G_100GHZ": { +"id": "G_100GHZ", +"is-read-only": false, +"description": ["100000 MHz"] +}, +"G_50GHZ": { +"id": "G_50GHZ", +"is-read-only": false, +"description": ["50000 MHz"] +}, +"G_25GHZ": { +"id": "G_25GHZ", +"is-read-only": false, +"description": ["25000 MHz"] +}, +"G_12_5GHZ": { +"id": "G_12_5GHZ", +"is-read-only": false, +"description": ["12500 MHz"] +}, +"G_6_25GHZ": { +"id": "G_6_25GHZ", +"is-read-only": false, +"description": ["6250 MHz"] +}, +"G_3_125GHZ": { +"id": "G_3_125GHZ", +"is-read-only": false, +"description": ["3125 MHz"] +}, +"UNCONSTRAINED": { +"id": "UNCONSTRAINED", +"is-read-only": false, +"description": ["none"] +}, +"adjustment-granularity": { +"id": "adjustment-granularity", +"is-read-only": false, +"description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency"] +}, +"upper-frequency": { +"id": "upper-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["The upper frequency bound of the media channel spectrum specified in MHz"] +}, +"lower-frequency": { +"id": "lower-frequency", +"is-read-only": false, +"unit":"MHz", +"description": ["The lower frequency bound of the media channel spectrum specified in MHz"] +}, +"frequency-slot": { +"id": "frequency-slot", +"is-read-only": false, +"description": ["none"] +}, +"spectrum-g": { +"id": "spectrum-g", +"is-read-only": false, +"description": ["This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems."] +}, +"RZ": { +"id": "RZ", +"is-read-only": false, +"description": ["none"] +}, +"NRZ": { +"id": "NRZ", +"is-read-only": false, +"description": ["none"] +}, +"BPSK": { +"id": "BPSK", +"is-read-only": false, +"description": ["none"] +}, +"DPSK": { +"id": "DPSK", +"is-read-only": false, +"description": ["none"] +}, +"QPSK": { +"id": "QPSK", +"is-read-only": false, +"description": ["none"] +}, +"8QAM": { +"id": "8QAM", +"is-read-only": false, +"description": ["none"] +}, +"16QAM": { +"id": "16QAM", +"is-read-only": false, +"description": ["none"] +}, +"UNDEFINED": { +"id": "UNDEFINED", +"is-read-only": false, +"description": ["none"] +}, +"modulation-technique": { +"id": "modulation-technique", +"is-read-only": false, +"description": ["none"] +}, +"spectral-width": { +"id": "spectral-width", +"is-read-only": false, +"description": ["Width of the media channel spectrum specified in MHz"] +}, +"slot-width-number": { +"id": "slot-width-number", +"is-read-only": false, +"description": ["As per ITU-T G.694.1, this attribute is denoted as 'm' and is used to calculate the slot width (in GHz) as follows: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz."] +}, +"frequency-slot-g": { +"id": "frequency-slot-g", +"is-read-only": false, +"description": ["The frequency range allocated to a slot and unavailable to other slots within a flexible grid. A frequency slot is defined by its nominal central frequency. As per ITU-T G.694.1 the slot width is calculated as follows: 12.5 × where slotWidthNumber is a positive integer and 12.5 is the slot width granularity in GHz"] +}, +"PUMP": { +"id": "PUMP", +"is-read-only": false, +"description": ["none"] +}, +"MODULATED": { +"id": "MODULATED", +"is-read-only": false, +"description": ["none"] +}, +"PULSE": { +"id": "PULSE", +"is-read-only": false, +"description": ["none"] +}, +"laser-type": { +"id": "laser-type", +"is-read-only": false, +"description": ["none"] +}, +"spectrum-type": { +"id": "spectrum-type", +"is-read-only": false, +"description": ["none"] +}, +"FORCED-ON": { +"id": "FORCED-ON", +"is-read-only": false, +"description": ["none"] +}, +"FORCED-OFF": { +"id": "FORCED-OFF", +"is-read-only": false, +"description": ["none"] +}, +"AUTOMATIC-LASER-SHUTDOWN": { +"id": "AUTOMATIC-LASER-SHUTDOWN", +"is-read-only": false, +"description": ["none"] +}, +"UNDEFINED": { +"id": "UNDEFINED", +"is-read-only": false, +"description": ["none"] +}, +"laser-control-type": { +"id": "laser-control-type", +"is-read-only": false, +"description": ["none"] +}, +"ON": { +"id": "ON", +"is-read-only": false, +"description": ["none"] +}, +"OFF": { +"id": "OFF", +"is-read-only": false, +"description": ["none"] +}, +"PULSING": { +"id": "PULSING", +"is-read-only": false, +"description": ["none"] +}, +"UNDEFINED": { +"id": "UNDEFINED", +"is-read-only": false, +"description": ["none"] +}, +"laser-control-status-type": { +"id": "laser-control-status-type", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json new file mode 100644 index 000000000..b0c2bd8cd --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json @@ -0,0 +1,648 @@ +{ "schema-information": { + +"tapi-topology": { +"id": "tapi-topology", +"is-read-only": false, +"description": ["This module contains TAPI Topology Model definitions. Source: TapiTopology.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"topology-uuid": { +"id": "topology-uuid", +"is-read-only": false, +"description": ["none"] +}, +"topology-ref-g": { +"id": "topology-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"link-uuid": { +"id": "link-uuid", +"is-read-only": false, +"description": ["none"] +}, +"link-ref-g": { +"id": "link-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"node-uuid": { +"id": "node-uuid", +"is-read-only": false, +"description": ["none"] +}, +"node-ref-g": { +"id": "node-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"node-edge-point-uuid": { +"id": "node-edge-point-uuid", +"is-read-only": false, +"description": ["none"] +}, +"node-edge-point-ref-g": { +"id": "node-edge-point-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"node-rule-group-uuid": { +"id": "node-rule-group-uuid", +"is-read-only": false, +"description": ["none"] +}, +"node-rule-group-ref-g": { +"id": "node-rule-group-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"node-edge-point": { +"id": "node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["The directionality of the Link. Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). Is not present in more complex cases."] +}, +"resilience-type": { +"id": "resilience-type", +"is-read-only": false, +"description": ["none"] +}, +"link-g": { +"id": "link-g", +"is-read-only": false, +"description": ["The Link object class models effective adjacency between two or more ForwardingDomains (FD)."] +}, +"owned-node-edge-point": { +"id": "owned-node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"aggregated-node-edge-point": { +"id": "aggregated-node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"node-rule-group": { +"id": "node-rule-group", +"is-read-only": false, +"description": ["none"] +}, +"encap-topology": { +"id": "encap-topology", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"node-g": { +"id": "node-g", +"is-read-only": false, +"description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."] +}, +"node": { +"id": "node", +"is-read-only": false, +"description": ["none"] +}, +"link": { +"id": "link", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"topology-g": { +"id": "topology-g", +"is-read-only": false, +"description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."] +}, +"transitioned-layer-protocol-name": { +"id": "transitioned-layer-protocol-name", +"is-read-only": false, +"description": ["Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role."] +}, +"layer-protocol-transition-pac-g": { +"id": "layer-protocol-transition-pac-g", +"is-read-only": false, +"description": ["Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. This abstraction is relevant when considering multi-layer routing. The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details. This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved. Links that included details in this Pac are often referred to as Transitional Links."] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"supported-cep-layer-protocol-qualifier": { +"id": "supported-cep-layer-protocol-qualifier", +"is-read-only": false, +"description": ["none"] +}, +"aggregated-node-edge-point": { +"id": "aggregated-node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"mapped-service-interface-point": { +"id": "mapped-service-interface-point", +"is-read-only": false, +"description": ["NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental"] +}, +"link-port-direction": { +"id": "link-port-direction", +"is-read-only": false, +"description": ["The orientation of defined flow at the LinkEnd."] +}, +"link-port-role": { +"id": "link-port-role", +"is-read-only": false, +"description": ["Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root) in the context of the Link with respect to the Link function."] +}, +"node-edge-point-g": { +"id": "node-edge-point-g", +"is-read-only": false, +"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."] +}, +"risk-characteristic": { +"id": "risk-characteristic", +"is-read-only": false, +"description": ["A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration."] +}, +"risk-parameter-pac-g": { +"id": "risk-parameter-pac-g", +"is-read-only": false, +"description": ["The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection. A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization. The realization can be partitioned into segments which have some relevant common failure modes. There is a risk of failure/degradation of each segment of the underlying realization. Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct). Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity. Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk. The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity. A segment has one or more risk characteristic. Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other. Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics."] +}, +"cost-characteristic": { +"id": "cost-characteristic", +"is-read-only": false, +"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."] +}, +"transfer-cost-pac-g": { +"id": "transfer-cost-pac-g", +"is-read-only": false, +"description": ["The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity There may be many perspectives from which cost may be considered for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. Using an entity will incur a cost."] +}, +"error-characteristic": { +"id": "error-characteristic", +"is-read-only": false, +"description": ["Describes the degree to which the signal propagated can be errored. Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded."] +}, +"loss-characteristic": { +"id": "loss-characteristic", +"is-read-only": false, +"description": ["Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow. Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips)."] +}, +"repeat-delivery-characteristic": { +"id": "repeat-delivery-characteristic", +"is-read-only": false, +"description": ["Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay."] +}, +"delivery-order-characteristic": { +"id": "delivery-order-characteristic", +"is-read-only": false, +"description": ["Describes the degree to which packets will be delivered out of sequence. Does not apply to TDM as the TDM protocols maintain strict order."] +}, +"unavailable-time-characteristic": { +"id": "unavailable-time-characteristic", +"is-read-only": false, +"description": ["Describes the duration for which there may be no valid signal propagated."] +}, +"server-integrity-process-characteristic": { +"id": "server-integrity-process-characteristic", +"is-read-only": false, +"description": ["Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity."] +}, +"transfer-integrity-pac-g": { +"id": "transfer-integrity-pac-g", +"is-read-only": false, +"description": ["Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal. It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals. Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact."] +}, +"latency-characteristic": { +"id": "latency-characteristic", +"is-read-only": false, +"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."] +}, +"transfer-timing-pac-g": { +"id": "transfer-timing-pac-g", +"is-read-only": false, +"description": ["A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity."] +}, +"validation-mechanism": { +"id": "validation-mechanism", +"is-read-only": false, +"description": ["Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity."] +}, +"validation-pac-g": { +"id": "validation-pac-g", +"is-read-only": false, +"description": ["Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity."] +}, +"topology": { +"id": "topology", +"is-read-only": false, +"description": ["none"] +}, +"network-topology-service-g": { +"id": "network-topology-service-g", +"is-read-only": false, +"description": ["none"] +}, +"nw-topology-service": { +"id": "nw-topology-service", +"is-read-only": false, +"description": ["none"] +}, +"topology": { +"id": "topology", +"is-read-only": false, +"description": ["none"] +}, +"topology-context-g": { +"id": "topology-context-g", +"is-read-only": false, +"description": ["none"] +}, +"rule": { +"id": "rule", +"is-read-only": false, +"description": ["none"] +}, +"associated-node-rule-group": { +"id": "associated-node-rule-group", +"is-read-only": false, +"description": ["none"] +}, +"inter-rule-group-g": { +"id": "inter-rule-group-g", +"is-read-only": false, +"description": ["none"] +}, +"rule": { +"id": "rule", +"is-read-only": false, +"description": ["none"] +}, +"node-edge-point": { +"id": "node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"composed-rule-group": { +"id": "composed-rule-group", +"is-read-only": false, +"description": ["none"] +}, +"inter-rule-group": { +"id": "inter-rule-group", +"is-read-only": false, +"description": ["none"] +}, +"node-rule-group-g": { +"id": "node-rule-group-g", +"is-read-only": false, +"description": ["none"] +}, +"rule-type": { +"id": "rule-type", +"is-read-only": false, +"description": ["none"] +}, +"forwarding-rule": { +"id": "forwarding-rule", +"is-read-only": false, +"description": ["none"] +}, +"override-priority": { +"id": "override-priority", +"is-read-only": false, +"description": ["none"] +}, +"rule-g": { +"id": "rule-g", +"is-read-only": false, +"description": ["none"] +}, +"cost-name": { +"id": "cost-name", +"is-read-only": false, +"description": ["The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName."] +}, +"cost-value": { +"id": "cost-value", +"is-read-only": false, +"description": ["The specific cost."] +}, +"cost-algorithm": { +"id": "cost-algorithm", +"is-read-only": false, +"description": ["The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm."] +}, +"cost-characteristic-g": { +"id": "cost-characteristic-g", +"is-read-only": false, +"description": ["The information for a particular cost characteristic."] +}, +"traffic-property-name": { +"id": "traffic-property-name", +"is-read-only": false, +"description": ["The identifier of the specific traffic property to which the queuing latency applies."] +}, +"fixed-latency-characteristic": { +"id": "fixed-latency-characteristic", +"is-read-only": false, +"description": ["A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity"] +}, +"queing-latency-characteristic": { +"id": "queing-latency-characteristic", +"is-read-only": false, +"description": ["The specific queuing latency for the traffic property."] +}, +"jitter-characteristic": { +"id": "jitter-characteristic", +"is-read-only": false, +"description": ["High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency. Applies to TDM systems (and not packet)."] +}, +"wander-characteristic": { +"id": "wander-characteristic", +"is-read-only": false, +"description": ["Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency. Applies to TDM systems (and not packet)."] +}, +"latency-characteristic-g": { +"id": "latency-characteristic-g", +"is-read-only": false, +"description": ["Provides information on latency characteristic for a particular stated trafficProperty."] +}, +"risk-characteristic-name": { +"id": "risk-characteristic-name", +"is-read-only": false, +"description": ["The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge). Depending upon the importance of the traffic being routed different risk characteristics will be evaluated."] +}, +"risk-identifier-list": { +"id": "risk-identifier-list", +"is-read-only": false, +"description": ["A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity."] +}, +"risk-characteristic-g": { +"id": "risk-characteristic-g", +"is-read-only": false, +"description": ["The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic."] +}, +"validation-mechanism": { +"id": "validation-mechanism", +"is-read-only": false, +"description": ["Name of mechanism used to validate adjacency"] +}, +"layer-protocol-adjacency-validated": { +"id": "layer-protocol-adjacency-validated", +"is-read-only": false, +"description": ["State of validatiion"] +}, +"validation-robustness": { +"id": "validation-robustness", +"is-read-only": false, +"description": ["Quality of validation (i.e. how likely is the stated validation to be invalid)"] +}, +"validation-mechanism-g": { +"id": "validation-mechanism-g", +"is-read-only": false, +"description": ["Identifies the validation mechanism and describes the characteristics of that mechanism"] +}, +"MAY_FORWARD_ACROSS_GROUP": { +"id": "MAY_FORWARD_ACROSS_GROUP", +"is-read-only": false, +"description": ["none"] +}, +"MUST_FORWARD_ACROSS_GROUP": { +"id": "MUST_FORWARD_ACROSS_GROUP", +"is-read-only": false, +"description": ["none"] +}, +"CANNOT_FORWARD_ACROSS_GROUP": { +"id": "CANNOT_FORWARD_ACROSS_GROUP", +"is-read-only": false, +"description": ["none"] +}, +"NO_STATEMENT_ON_FORWARDING": { +"id": "NO_STATEMENT_ON_FORWARDING", +"is-read-only": false, +"description": ["none"] +}, +"forwarding-rule": { +"id": "forwarding-rule", +"is-read-only": false, +"description": ["none"] +}, +"FORWARDING": { +"id": "FORWARDING", +"is-read-only": false, +"description": ["none"] +}, +"CAPACITY": { +"id": "CAPACITY", +"is-read-only": false, +"description": ["none"] +}, +"COST": { +"id": "COST", +"is-read-only": false, +"description": ["none"] +}, +"TIMING": { +"id": "TIMING", +"is-read-only": false, +"description": ["none"] +}, +"RISK": { +"id": "RISK", +"is-read-only": false, +"description": ["none"] +}, +"GROUPING": { +"id": "GROUPING", +"is-read-only": false, +"description": ["none"] +}, +"rule-type": { +"id": "rule-type", +"is-read-only": false, +"description": ["none"] +}, +"restoration-policy": { +"id": "restoration-policy", +"is-read-only": false, +"description": ["none"] +}, +"protection-type": { +"id": "protection-type", +"is-read-only": false, +"description": ["none"] +}, +"resilience-type-g": { +"id": "resilience-type-g", +"is-read-only": false, +"description": ["none"] +}, +"PER_DOMAIN_RESTORATION": { +"id": "PER_DOMAIN_RESTORATION", +"is-read-only": false, +"description": ["none"] +}, +"END_TO_END_RESTORATION": { +"id": "END_TO_END_RESTORATION", +"is-read-only": false, +"description": ["none"] +}, +"NA": { +"id": "NA", +"is-read-only": false, +"description": ["none"] +}, +"restoration-policy": { +"id": "restoration-policy", +"is-read-only": false, +"description": ["none"] +}, +"NO_PROTECTON": { +"id": "NO_PROTECTON", +"is-read-only": false, +"description": ["none"] +}, +"ONE_PLUS_ONE_PROTECTION": { +"id": "ONE_PLUS_ONE_PROTECTION", +"is-read-only": false, +"description": ["none"] +}, +"ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION": { +"id": "ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION", +"is-read-only": false, +"description": ["none"] +}, +"PERMANENT_ONE_PLUS_ONE_PROTECTION": { +"id": "PERMANENT_ONE_PLUS_ONE_PROTECTION", +"is-read-only": false, +"description": ["none"] +}, +"ONE_FOR_ONE_PROTECTION": { +"id": "ONE_FOR_ONE_PROTECTION", +"is-read-only": false, +"description": ["none"] +}, +"DYNAMIC_RESTORATION": { +"id": "DYNAMIC_RESTORATION", +"is-read-only": false, +"description": ["none"] +}, +"PRE_COMPUTED_RESTORATION": { +"id": "PRE_COMPUTED_RESTORATION", +"is-read-only": false, +"description": ["none"] +}, +"protection-type": { +"id": "protection-type", +"is-read-only": false, +"description": ["none"] +}, +"get-topology-details": { +"id": "get-topology-details", +"is-read-only": false, +"description": ["none"] +}, +"topology-id-or-name": { +"id": "topology-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"topology": { +"id": "topology", +"is-read-only": false, +"description": ["none"] +}, +"get-node-details": { +"id": "get-node-details", +"is-read-only": false, +"description": ["none"] +}, +"topology-id-or-name": { +"id": "topology-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"node-id-or-name": { +"id": "node-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"node": { +"id": "node", +"is-read-only": false, +"description": ["none"] +}, +"get-node-edge-point-details": { +"id": "get-node-edge-point-details", +"is-read-only": false, +"description": ["none"] +}, +"topology-id-or-name": { +"id": "topology-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"node-id-or-name": { +"id": "node-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"ep-id-or-name": { +"id": "ep-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"node-edge-point": { +"id": "node-edge-point", +"is-read-only": false, +"description": ["none"] +}, +"get-link-details": { +"id": "get-link-details", +"is-read-only": false, +"description": ["none"] +}, +"topology-id-or-name": { +"id": "topology-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"link-id-or-name": { +"id": "link-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"link": { +"id": "link", +"is-read-only": false, +"description": ["none"] +}, +"get-topology-list": { +"id": "get-topology-list", +"is-read-only": false, +"description": ["none"] +}, +"topology": { +"id": "topology", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json new file mode 100644 index 000000000..ddeb8cb08 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json @@ -0,0 +1,198 @@ +{ "schema-information": { + +"tapi-virtual-network": { +"id": "tapi-virtual-network", +"is-read-only": false, +"description": ["This module contains TAPI Virtual Network Model definitions. Source: TapiVirtualNetwork.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"] +}, +"virtual-nw-service-uuid": { +"id": "virtual-nw-service-uuid", +"is-read-only": false, +"description": ["none"] +}, +"virtual-nw-service-ref-g": { +"id": "virtual-nw-service-ref-g", +"is-read-only": false, +"description": ["none"] +}, +"src-service-end-point": { +"id": "src-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"sink-service-end-point": { +"id": "sink-service-end-point", +"is-read-only": false, +"description": ["none"] +}, +"diversity-exclusion": { +"id": "diversity-exclusion", +"is-read-only": false, +"description": ["none"] +}, +"requested-capacity": { +"id": "requested-capacity", +"is-read-only": false, +"description": ["none"] +}, +"service-level": { +"id": "service-level", +"is-read-only": false, +"description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"] +}, +"service-layer": { +"id": "service-layer", +"is-read-only": false, +"description": ["none"] +}, +"cost-characteristic": { +"id": "cost-characteristic", +"is-read-only": false, +"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."] +}, +"latency-characteristic": { +"id": "latency-characteristic", +"is-read-only": false, +"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."] +}, +"virtual-network-constraint-g": { +"id": "virtual-network-constraint-g", +"is-read-only": false, +"description": ["none"] +}, +"topology": { +"id": "topology", +"is-read-only": false, +"description": ["none"] +}, +"end-point": { +"id": "end-point", +"is-read-only": false, +"description": ["none"] +}, +"vnw-constraint": { +"id": "vnw-constraint", +"is-read-only": false, +"description": ["none"] +}, +"schedule": { +"id": "schedule", +"is-read-only": false, +"description": ["none"] +}, +"state": { +"id": "state", +"is-read-only": false, +"description": ["none"] +}, +"layer-protocol-name": { +"id": "layer-protocol-name", +"is-read-only": false, +"description": ["none"] +}, +"virtual-network-service-g": { +"id": "virtual-network-service-g", +"is-read-only": false, +"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."] +}, +"service-interface-point": { +"id": "service-interface-point", +"is-read-only": false, +"description": ["none"] +}, +"role": { +"id": "role", +"is-read-only": false, +"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."] +}, +"direction": { +"id": "direction", +"is-read-only": false, +"description": ["The orientation of defined flow at the EndPoint."] +}, +"service-layer": { +"id": "service-layer", +"is-read-only": false, +"description": ["none"] +}, +"virtual-network-service-end-point-g": { +"id": "virtual-network-service-end-point-g", +"is-read-only": false, +"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"] +}, +"virtual-nw-service": { +"id": "virtual-nw-service", +"is-read-only": false, +"description": ["none"] +}, +"virtual-network-context-g": { +"id": "virtual-network-context-g", +"is-read-only": false, +"description": ["none"] +}, +"create-virtual-network-service": { +"id": "create-virtual-network-service", +"is-read-only": false, +"description": ["none"] +}, +"sep": { +"id": "sep", +"is-read-only": false, +"description": ["none"] +}, +"vnw-constraint": { +"id": "vnw-constraint", +"is-read-only": false, +"description": ["none"] +}, +"conn-schedule": { +"id": "conn-schedule", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"delete-virtual-network-service": { +"id": "delete-virtual-network-service", +"is-read-only": false, +"description": ["none"] +}, +"service-id-or-name": { +"id": "service-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"get-virtual-network-service-details": { +"id": "get-virtual-network-service-details", +"is-read-only": false, +"description": ["none"] +}, +"service-id-or-name": { +"id": "service-id-or-name", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}, +"get-virtual-network-service-list": { +"id": "get-virtual-network-service-list", +"is-read-only": false, +"description": ["none"] +}, +"service": { +"id": "service", +"is-read-only": false, +"description": ["none"] +}} +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json new file mode 100644 index 000000000..21c7efb36 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json @@ -0,0 +1,54 @@ +{ + "settings": { + "analysis": { + "analyzer": { + "standard": { + "type": "whitespace" + } + } + } + }, + "mappings": { + "required-networkelement": { + "date_detection": false + }, + "maintenancemode": { + "date_detection": false + }, + "site": { + "properties": { + "id": { + "index": "not_analyzed", + "type": "string" + }, + "name": { + "index": "not_analyzed", + "type": "string" + }, + "location": { + "geohash": true, + "geohash_precision": 10, + "type": "geo_point", + "lat_lon": true, + "geohash_prefix": true + } + } + }, + "site-link": { + "properties": { + "id": { + "index": "not_analyzed", + "type": "string" + }, + "siteZ": { + "index": "not_analyzed", + "type": "string" + }, + "siteA": { + "index": "not_analyzed", + "type": "string" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json new file mode 100644 index 000000000..e4aa7458f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json @@ -0,0 +1,8 @@ +{ + "actions":[ + { "add": { + "alias": "mwtn", + "index": "mwtn_v1" + }} + ] +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json new file mode 100644 index 000000000..25cabedfc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json @@ -0,0 +1,157 @@ +{ + "mappings": { + "faultlog": { + "properties": { + "fault": { + "properties": { + "nodeName": { + "index": "not_analyzed", + "type": "string" + }, + "severity": { + "index": "not_analyzed", + "type": "string" + }, + "timeStamp": { + "index": "not_analyzed", + "type": "string" + }, + "problem": { + "index": "not_analyzed", + "type": "string" + }, + "counter": { + "index": "not_analyzed", + "type": "string" + }, + "objectId": { + "index": "not_analyzed", + "type": "string" + } + } + } + } + }, + "faultcurrent": { + "properties": { + "faultCurrent": { + "properties": { + "nodeName": { + "index": "not_analyzed", + "type": "string" + }, + "severity": { + "index": "not_analyzed", + "type": "string" + }, + "timeStamp": { + "index": "not_analyzed", + "type": "string" + }, + "problem": { + "index": "not_analyzed", + "type": "string" + }, + "counter": { + "index": "not_analyzed", + "type": "string" + }, + "objectId": { + "index": "not_analyzed", + "type": "string" + } + } + } + } + }, + "eventlog": { + "properties": { + "event": { + "properties": { + "nodeName": { + "index": "not_analyzed", + "type": "string" + }, + "timeStamp": { + "index": "not_analyzed", + "type": "string" + }, + "newValue": { + "index": "not_analyzed", + "type": "string" + }, + "attributeName": { + "index": "not_analyzed", + "type": "string" + }, + "counter": { + "index": "not_analyzed", + "type": "string" + }, + "objectId": { + "index": "not_analyzed", + "type": "string" + } + } + } + } + }, + + "inventorytoplevel": { + "properties": { + "uuidList": { + "index": "not_analyzed", + "type": "string" + }, + "mountpoint": { + "index": "not_analyzed", + "type": "string" + } + } + }, + "inventoryequipment": { + "properties": { + "date": { + "index": "not_analyzed", + "type": "string" + }, + "modelIdentifier": { + "index": "not_analyzed", + "type": "string" + }, + "partTypeId": { + "index": "not_analyzed", + "type": "string" + }, + "serial": { + "index": "not_analyzed", + "type": "string" + }, + "typeName": { + "index": "not_analyzed", + "type": "string" + }, + "description": { + "index": "not_analyzed", + "type": "string" + }, + "uuid": { + "index": "not_analyzed", + "type": "string" + }, + "version": { + "index": "not_analyzed", + "type": "string" + }, + "containedHolder": { + "index": "not_analyzed", + "type": "string" + }, + "mountpoint": { + "index": "not_analyzed", + "type": "string" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json new file mode 100644 index 000000000..92d5ad2fb --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json @@ -0,0 +1,92 @@ +{ + "mappings": + { + "historicalperformance24h": + { + "properties": + { + "node-name": + { + "index": "not_analyzed", + "type": "string" + }, + "time-stamp": + { + "index": "not_analyzed", + "type": "string" + }, + "suspect-interval-flag": + { + "type": "boolean" + }, + "scanner-id": + { + "index": "not_analyzed", + "type": "string" + }, + "uuid-interface": + { + "index": "not_analyzed", + "type": "string" + }, + "layer-protocol-name": { + "index": "not_analyzed", + "type": "string" + }, + "granularity-period": + { + "index": "not_analyzed", + "type": "string" + }, + "radio-signal-id": { + "index": "not_analyzed", + "type": "string" + } + } + }, + + "historicalperformance15min": + { + "properties": + { + "node-name": + { + "index": "not_analyzed", + "type": "string" + }, + "time-stamp": + { + "index": "not_analyzed", + "type": "string" + }, + "suspect-interval-flag": + { + "type": "boolean" + }, + "scanner-id": + { + "index": "not_analyzed", + "type": "string" + }, + "uuid-interface": + { + "index": "not_analyzed", + "type": "string" + }, + "layer-protocol-name": { + "index": "not_analyzed", + "type": "string" + }, + "granularity-period": + { + "index": "not_analyzed", + "type": "string" + }, + "radio-signal-id": { + "index": "not_analyzed", + "type": "string" + } + } + } + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties new file mode 100644 index 000000000..70b21dcd1 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties @@ -0,0 +1,80 @@ +# Elasticsearch plugin descriptor file +# This file must exist as 'plugin-descriptor.properties' at +# the root directory of all plugins. +# +# A plugin can be 'site', 'jvm', or both. +# +### example site plugin for "foo": +# +# foo.zip <-- zip file for the plugin, with this structure: +# _site/ <-- the contents that will be served +# plugin-descriptor.properties <-- example contents below: +# +# site=true +# description=My cool plugin +# version=1.0 +# +### example jvm plugin for "foo" +# +# foo.zip <-- zip file for the plugin, with this structure: +# .jar <-- classes, resources, dependencies +# .jar <-- any number of jars +# plugin-descriptor.properties <-- example contents below: +# +# jvm=true +# classname=foo.bar.BazPlugin +# description=My cool plugin +# version=2.0.0-rc1 +# elasticsearch.version=2.0 +# java.version=1.7 +# +### mandatory elements for all plugins: +# +# 'description': simple summary of the plugin +description=The Delete By Query plugin allows to delete documents in Elasticsearch with a single query. +# +# 'version': plugin's version +version=2.2.0 +# +# 'name': the plugin name +name=delete-by-query + +### mandatory elements for site plugins: +# +# 'site': set to true to indicate contents of the _site/ +# directory in the root of the plugin should be served. +site=false +# +### mandatory elements for jvm plugins : +# +# 'jvm': true if the 'classname' class should be loaded +# from jar files in the root directory of the plugin. +# Note that only jar files in the root directory are +# added to the classpath for the plugin! If you need +# other resources, package them into a resources jar. +jvm=true +# +# 'classname': the name of the class to load, fully-qualified. +classname=org.elasticsearch.plugin.deletebyquery.DeleteByQueryPlugin +# +# 'java.version' version of java the code is built against +# use the system property java.specification.version +# version string must be a sequence of nonnegative decimal integers +# separated by "."'s and may have leading zeros +java.version=1.7 +# +# 'elasticsearch.version' version of elasticsearch compiled against +# You will have to release a new version of the plugin for each new +# elasticsearch release. This version is checked when the plugin +# is loaded so Elasticsearch will refuse to start in the presence of +# plugins with the incorrect elasticsearch.version. +elasticsearch.version=2.2.0 +# +### deprecated elements for jvm plugins : +# +# 'isolated': true if the plugin should have its own classloader. +# passing false is deprecated, and only intended to support plugins +# that have hard dependencies against each other. If this is +# not specified, then the plugin is isolated by default. +isolated=true +# diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc new file mode 100644 index 000000000..757f96929 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc @@ -0,0 +1,40 @@ +{ + "maxerr": 1000, + + "predef": [ + "exports", + "describe", + "expect", + "it", + "beforeEach", + "afterEach", + "jasmine", + "test", + "spyOn" + ], + + "jquery" : true, + "browser" : true, + + "curly": true, + "debug": false, + "devel": true, + "eqeqeq": true, + "eqnull": true, + "expr": true, + "forin": false, + "immed": false, + "latedef": true, + "newcap": true, + "noarg": true, + "noempty": false, + "nonew": false, + "nomen": false, + "plusplus": false, + "regexp": false, + "undef": true, + "sub": true, + "white": false, + "scripturl": true, + "esnext": true +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js new file mode 100644 index 000000000..d9607ac76 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js @@ -0,0 +1,115 @@ +module.exports = function(grunt) { + + var fileSets = require("./grunt_fileSets.js"); + + // Project configuration. + grunt.initConfig({ + clean: { + _site: { + src: ['_site'] + } + }, + concat: { + vendorjs: { + src: fileSets.vendorJs, + dest: '_site/vendor.js' + }, + vendorcss: { + src: fileSets.vendorCss, + dest: '_site/vendor.css' + }, + appjs: { + src: fileSets.srcJs, + dest: '_site/app.js' + }, + appcss: { + src: fileSets.srcCss, + dest: '_site/app.css' + } + }, + + copy: { + site_index: { + src: 'index.html', + dest: '_site/index.html', + options: { + process: function( src ) { + return src.replace(/_site\//g, ""); + } + } + }, + base: { + expand: true, + cwd: 'src/app/base/', + src: [ '*.gif', '*.png', '*.css' ], + dest: '_site/base/' + }, + iconFonts: { + expand: true, + cwd: 'src/vendor/font-awesome/fonts/', + src: '**', + dest: '_site/fonts' + }, + i18n: { + src: 'src/vendor/i18n/i18n.js', + dest: '_site/i18n.js' + }, + lang: { + expand: true, + cwd: 'src/app/lang/', + src: '**', + dest: '_site/lang/' + } + }, + + jasmine: { + task: { + src: [ fileSets.vendorJs, 'src/vendor/i18n/i18n.js', 'src/app/lang/en_strings.js', fileSets.srcJs ], + options: { + specs: 'src/app/**/*Spec.js', + helpers: 'test/spec/*Helper.js', + display: "short", + summary: true + } + } + }, + + watch: { + "scripts": { + files: ['src/**/*', 'test/spec/*' ], + tasks: ['default'], + options: { + spawn: false + } + }, + "grunt": { + files: [ 'Gruntfile.js' ] + } + }, + + connect: { + server: { + options: { + port: 9100, + base: '.', + keepalive: true + } + } + } + + }); + + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-contrib-connect'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-jasmine'); + + // Default task(s). + grunt.registerTask('default', ['clean', 'concat', 'copy', 'jasmine']); + grunt.registerTask('server', ['connect:server']); + grunt.registerTask('dev', [ 'default', 'watch' ]); + + +}; diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE new file mode 100644 index 000000000..a93b4df40 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE @@ -0,0 +1,13 @@ +Copyright 2010-2013 Ben Birch + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this software except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile new file mode 100644 index 000000000..6db8d5b49 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile @@ -0,0 +1,98 @@ +h1. elasticsearch-head + +h2. A web front end for an Elasticsearch cluster + +h3. "http://mobz.github.io/elasticsearch-head":http://mobz.github.io/elasticsearch-head + +h2. Installing and Running + +There are two main ways of running and installing elasticsearch-head + +h4. Running as a plugin of Elasticsearch + +* Install elasticsearch-head: + - for Elasticsearch 5.x: + site plugins are not supported. Run elasticsearch-head "as a standalone server":#running-with-built-in-server + - for Elasticsearch 2.x - 4.x: + @sudo elasticsearch/bin/plugin install mobz/elasticsearch-head@ + - for Elasticsearch 1.x: + @sudo elasticsearch/bin/plugin -install mobz/elasticsearch-head/1.x@ + - for Elasticsearch 0.9: + @sudo elasticsearch/bin/plugin -install mobz/elasticsearch-head/0.9@ + +* @open http://localhost:9200/_plugin/head/@ + +This will automatically download the latest version of elasticsearch-head from github and run it as a plugin within the elasticsearch cluster. In this mode; +* elasticsearch-head automatically connects to the node that is running it + +Note on different Elasticsearch installation path: +* If you've installed the .deb package, then the plugin executable will be available at @/usr/share/elasticsearch/bin/plugin@. +* If you've installed Elasticsearch via Homebrew, plugin executable will be available at @/usr/local/Cellar/elasticsearch/(elasticsearch version)/libexec/bin/plugin@. + +h4. Running with built in server + +* enable "cors":http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-http.html by adding @http.cors.enabled: true@ in elasticsearch configuration. Don't forget to also set @http.cors.allow-origin@ because no origin allowed by default. @http.cors.allow-origin: "*"@ is valid value, however it's considered as a security risk as your cluster is open to cross origin from *anywhere*. Check Elasticsearch documentation on this parameter: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http +* @git clone git://github.com/mobz/elasticsearch-head.git@ +* @cd elasticsearch-head@ +* @npm install@ +* @grunt server@ +* @open@ "http://localhost:9100/":http://localhost:9100/ + +This will start a local webserver running on port 9100 serving elasticsearch-head +* Best option if you are likely to connect to several different clusters + +h4. Alternatives + +h5. Running from the filesystem + +elastisearch-head is a standalone webapp written in good-ol' html5. This means, you can put it up on any webserver, run it directly from the filesystem, use it on an iPad, or put it on a floppy disk and carry it with you. + +h4. URL Parameters + +Parameters may be appended to the url to set an initial state eg. @head/index.html?base_uri=http://node-01.example.com:9200@ + +* @base_uri@ force elasticsearch-head to connect to a particular node. +* @dashboard@ experimental feature to open elasticsearch-head in a mode suitable for dashboard / radiator. Accepts one parameter @dashboard=cluster@ +* @auth_user@ adds basic auth credentials to http requests ( requires "elasticsearch-http-basic":https://github.com/karussell/elasticsearch-http-basic plugin or a reverse proxy ) +* @auth_password@ basic auth password as above (note: without "additional security layers":http://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https, passwords are sent over the network *in the clear* ) + +h4. Contributing + +To contribute to elasticsearch-head you will need the following developer tools + +# git and a "github":https://github.com/ account +# "node ( including npm )":http://nodejs.org/download +# "grunt-cli":http://gruntjs.com/getting-started +# (to run jasmine tests) "phantomjs":http://phantomjs.org + +Then + +# create a fork of elasticsearch-head on github +# clone your fork to your machine +# @cd elasticsearch-head@ +# @npm install@ # downloads node dev dependencies +# @grunt dev@ # builds the distribution files, then watches the src directory for changes + +Changes to both _site and src directories *must* be committed, to allow people to +run elasticsearch-head without running dev tools and follow existing dev patterns, +such as indenting with tabs. + +h5. Contributing an Internationalisation + + +* Chinese by "darkcount":https://github.com/hangxin1940 +* English (primary) by "Ben Birch":https://twitter.com/mobz +* French by "David Pilato":https://twitter.com/dadoonet +* Portuguese by "caiodangelo":https://github.com/caiodangelo +* Turkish by "Cemre Mengu":https://github.com/cemremengu + +To contribute an internationalisation + +# Follow "Contributing" instructions above +# Find your 2-character "ISO 639-1 language code":http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes +# edit _site/index.html to add your 2 letter language code to the data-langs attribute of this line @@ +# make a copy of @src/app/langs/en_strings.js@ prefixed with your language code +# convert english strings and fragments to your language. "Formatting Rules":http://docs.oracle.com/javase/tutorial/i18n/format/messageintro.html +# Submit a pull request + +!http://mobz.github.com/elasticsearch-head/screenshots/clusterOverview.png(ClusterOverview Screenshot)! diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css new file mode 100644 index 000000000..2fa215229 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css @@ -0,0 +1,704 @@ +TABLE.table { + border-collapse: collapse; +} + + +TABLE.table TH { + font-weight: normal; + text-align: left; + vertical-align: middle; +} + +TABLE.table TBODY.striped TR:nth-child(odd) { + background: #eee; +} + +TABLE.table H3 { + margin: 0; + font-weight: bold; + font-size: 140%; +} + +.require { color: #a00; } + +.uiButton { + padding: 0; + border: 0; + margin: 3px; + width: auto; + overflow: visible; + cursor: pointer; + background: transparent; +} + +.uiButton-content { + height: 20px; + border: 1px solid #668dc6; + border-radius: 2px; + background: #96c6eb; + background: -moz-linear-gradient(top, #96c6eb, #5296c7); + background: -webkit-linear-gradient(top, #96c6eb, #5296c7); + color: white; + font-weight: bold; +} + +.moz .uiButton-content { margin: 0 -2px; } + +.uiButton-label { + padding: 2px 6px; + white-space: nowrap; +} +.uiButton:hover .uiButton-content { + background: #2777ba; + background: -moz-linear-gradient(top, #6aaadf, #2777ba); + background: -webkit-linear-gradient(top, #6aaadf, #2777ba); +} +.uiButton.active .uiButton-content, +.uiButton:active .uiButton-content { + background: #2575b7; + background: -moz-linear-gradient(top, #2576b8, #2575b7); + background: -webkit-linear-gradient(top, #2576b8, #2575b7); +} +.uiButton.disabled .uiButton-content, +.uiButton.disabled:active .uiButton-content { + border-color: #c6c6c6; + color: #999999; + background: #ddd; + background: -moz-linear-gradient(top, #ddd, #ddd); + background: -webkit-linear-gradient(top, #ddd, #ddd); +} + +.uiButton.disabled { + cursor: default; +} + +.uiMenuButton { + display: inline-block; +} + +.uiMenuButton .uiButton-label { + background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7'); + background-position: right 50%; + background-repeat: no-repeat; + padding-right: 17px; + text-align: left; +} + +.uiSplitButton { + white-space: nowrap; +} + +.uiSplitButton .uiButton:first-child { + margin-right: 0; + display: inline-block; +} + +.uiSplitButton .uiButton:first-child .uiButton-content { + border-right-width: 1; + border-right-color: #5296c7; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.uiSplitButton .uiMenuButton { + margin-left: 0; +} + +.uiSplitButton .uiButton:last-child .uiButton-content { + border-radius: 2px; + border-left-width: 1; + border-left-color: #96c6eb; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + height: 20px; +} + +.uiSplitButton .uiButton:last-child .uiButton-label { + padding: 2px 17px 2px 6px; + margin-left: -8px; +} + +.uiToolbar { + height: 28px; + background: #fdfefe; + background: -moz-linear-gradient(top, #fdfefe, #eaedef); + background: -webkit-linear-gradient(top, #fdfefe, #eaedef); + border-bottom: 1px solid #d2d5d7; + padding: 3px 10px; +} + +.uiToolbar H2 { + display: inline-block; + font-size: 120%; + margin: 0; + padding: 5px 20px 5px 0; +} + +.uiToolbar .uiTextField { + display: inline-block; +} + +.uiToolbar .uiTextField INPUT { + padding-top: 2px; + padding-bottom: 5px; +} +#uiModal { + background: black; +} + +.uiPanel { + box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black; + position: absolute; + background: #eee; + border: 1px solid #666; +} + +.uiPanel-titleBar { + text-align: center; + font-weight: bold; + padding: 2px 0; + background: rgba(223, 223, 223, 0.75); + background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75)); + background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75)); + border-bottom: 1px solid #bbb; +} + +.uiPanel-close { + cursor: pointer; + border: 1px solid #aaa; + background: #fff; + color: #fff; + float: left; + height: 10px; + left: 3px; + line-height: 9px; + padding: 1px 0; + position: relative; + text-shadow: 0 0 1px #000; + top: 0px; + width: 12px; +} +.uiPanel-close:hover { + background: #eee; +} + +.uiPanel-body { + overflow: auto; +} + + +.uiInfoPanel { + background: rgba(0, 0, 0, 0.75); + color: white; + border-radius: 8px; + padding: 1px; +} +.uiInfoPanel .uiPanel-titleBar { + background: rgba(74, 74, 74, 0.75); + background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75)); + background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75)); + border-radius: 8px 8px 0 0; + padding: 1px 0 2px 0; + border-bottom: 0; +} +.uiInfoPanel .uiPanel-close { + border-radius: 6px; + height: 13px; + width: 13px; + background: #ccc; + left: 3px; + top: 1px; + color: #333; + text-shadow: #222 0 0 1px; + line-height: 11px; + border: 0; + padding: 0; +} +.uiInfoPanel .uiPanel-close:hover { + background: #eee; +} + +.uiInfoPanel .uiPanel-body { + background: transparent; + padding: 20px; + border-radius: 0 0 8px 8px; + border: 1px solid #222; +} + +.uiMenuPanel { + border: 1px solid #668dc6; + position: absolute; + background: #96c6eb; + color: white; +} + +.uiMenuPanel LI { + list-style: none; + border-bottom: 1px solid #668dc6; +} + +.uiMenuPanel LI:hover { + background: #2575b7; +} + +.uiMenuPanel LI:last-child { + border-bottom: 0; +} + +.uiMenuPanel-label { + white-space: nowrap; + padding: 2px 10px 2px 10px; + cursor: pointer; +} + +.disabled .uiMenuPanel-label { + cursor: auto; + color: #888; +} + +.uiSelectMenuPanel .uiMenuPanel-label { + margin-left: 1em; + padding-left: 4px; +} + +.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before { + content: "\2713"; + width: 12px; + margin-left: -12px; + display: inline-block; +} + +.uiTable TABLE { + border-collapse: collapse; +} + +.uiTable-body { + overflow-y: scroll; + overflow-x: auto; +} + +.uiTable-headers { + overflow-x: hidden; +} + +.uiTable-body TD { + white-space: nowrap; +} + +.uiTable-body .uiTable-header-row TH, +.uiTable-body .uiTable-header-row TH DIV { + padding-top: 0; + padding-bottom: 0; +} + +.uiTable-body .uiTable-header-cell > DIV { + height: 0; + overflow: hidden; +} + +.uiTable-headercell-menu { + float: right; +} + +.uiTable-tools { + padding: 3px 4px; + height: 14px; +} + +.uiTable-header-row { + background: #ddd; + background: -moz-linear-gradient(top, #eee, #ccc); + background: -webkit-linear-gradient(top, #eee, #ccc); +} + +.uiTable-headercell-text { + margin-right: 20px; +} + +.uiTable-headercell-menu { + display: none; +} + +.uiTable-header-row TH { + border-right: 1px solid #bbb; + padding: 0; + text-align: left; +} + +.uiTable-header-row TH > DIV { + padding: 3px 4px; + border-right: 1px solid #eee; +} + +.uiTable-headerEndCap > DIV { + width: 19px; +} + +.uiTable-header-row .uiTable-sort { + background: #ccc; + background: -moz-linear-gradient(top, #bebebe, #ccc); + background: -webkit-linear-gradient(top, #bebebe, #ccc); +} +.uiTable-header-row TH.uiTable-sort > DIV { + border-right: 1px solid #ccc; +} + +.uiTable-sort .uiTable-headercell-menu { + display: block; +} + +.uiTable TABLE TD { + border-right: 1px solid transparent; + padding: 3px 4px; +} + +.uiTable-body TABLE TR:nth-child(even) { + background: #f3f3f3; +} + +.uiTable-body TABLE TR.selected { + color: white; + background: #6060f1; +} + +DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; } +UL.uiJsonPretty-object, +UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; } +UL.uiJsonPretty-object LI, +UL.uiJsonPretty-array LI { padding: 0; margin: 0; } +.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; } +.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; } +.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before, +.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; } +SPAN.uiJsonPretty-string, +SPAN.uiJsonPretty-string A { color: green; } +SPAN.uiJsonPretty-string A { text-decoration: underline;} +SPAN.uiJsonPretty-number { color: blue; } +SPAN.uiJsonPretty-null { color: red; } +SPAN.uiJsonPretty-boolean { color: purple; } +.expando > .uiJsonPretty-name { cursor: pointer; } +.expando > .uiJsonPretty-name:hover { text-decoration: underline; } +.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; } +.uiJsonPretty-minimised > UL { opacity: 0.6; } +.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; } +.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; } + + +.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; } +.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; } +.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; } +.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; } + +.uiPanelForm-field { + display: block; + padding: 2px 0; + clear: both; +} + +.uiPanelForm-label { + float: left; + width: 200px; + padding: 3px 7px; + text-align: right; +} + +.uiSidebarSection-head { + background-color: #b9cfff; + background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg=='); + background-repeat: no-repeat; + background-position: 2px 5px; + margin-bottom: 1px; + padding: 3px 3px 3px 17px; + cursor: pointer; +} + +.shown > .uiSidebarSection-head { + background-position: 2px -13px; +} + +.uiSidebarSection-body { + margin-bottom: 3px; + display: none; +} + +.uiSidebarSection-help { + text-shadow: #228 1px 1px 2px; + color: blue; + cursor: pointer; +} + +.uiSidebarSection-help:hover { + text-decoration: underline; +} + +.uiQueryFilter { + width: 350px; + padding: 5px; + background: #d8e7ff; + background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff); + background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff); +} + +.uiQueryFilter DIV.uiQueryFilter-section { + margin-bottom: 5px; +} + +.uiQueryFilter HEADER { + display: block; + font-variant: small-caps; + font-weight: bold; + margin: 5px 0; +} + +.uiQueryFilter-aliases SELECT { + width: 100%; +} + +.uiQueryFilter-booble { + cursor: pointer; + background: #e8f1ff; + border: 1px solid #e8f1ff; + border-radius: 5px; + padding: 1px 4px; + margin-bottom: 1px; + overflow: hidden; + white-space: nowrap; +} + +.uiQueryFilter-booble.selected { + background: #dae3f0; + border-top: 1px solid #c8d4e6; + border-left: 1px solid #c8d4e6; + border-bottom: 1px solid #ffffff; + border-right: 1px solid #ffffff; +} + +.uiQueryFilter-filterName { + background-color: #cbdfff; + margin-bottom: 4px; + padding: 3px; + cursor: pointer; +} + +.uiQueryFilter-filters INPUT { + width: 300px; +} + +.uiQueryFilter-subMultiFields { + padding-left: 10px; +} + +.uiQueryFilter-rangeHintFrom, +.uiQueryFilter-rangeHintTo { + margin: 0; + opacity: 0.75; +} +.uiBrowser-filter { + float: left; +} + +.uiBrowser-table { + margin-left: 365px; +} + +.uiAnyRequest-request { + float: left; + width: 350px; + padding: 5px; + background: #d8e7ff; + background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff); + background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff); +} + +.uiAnyRequest-request INPUT[type=text], +.uiAnyRequest-request TEXTAREA { + width: 340px; +} + +.anyRequest INPUT[name=path] { + width: 259px; +} + +.uiAnyRequest-out { + margin-left: 365px; +} + +.uiAnyRequest-out P { + margin-top: 0; +} + +.uiAnyRequest-jsonErr { + color: red; +} + +.uiAnyRequest-history { + margin: 0; + padding: 0; + list-style: none; + max-height: 100px; + overflow-x: hidden; + overflow-y: auto; +} + +.uiNodesView TH, +.uiNodesView TD { + vertical-align: top; + padding: 2px 20px; +} + +.uiNodesView TH.close, +.uiNodesView TD.close { + color: #888; + background: #f2f2f2; +} + +.uiNodesView .uiMenuButton .uiButton-content { + padding-right: 3px; + border-radius: 8px; + height: 14px; +} + +.uiNodesView .uiMenuButton.active .uiButton-content, +.uiNodesView .uiMenuButton:active .uiButton-content { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} + +.uiNodesView .uiMenuButton .uiButton-label { + padding: 0px 17px 0px 7px; +} + +.uiNodesView-hasAlias { + text-align: center; +} +.uiNodesView-hasAlias.max { + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; +} +.uiNodesView-hasAlias.min { + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; +} +.uiNodesView-hasAlias-remove { + float: right; + font-weight: bold; + cursor: pointer; +} + +.uiNodesView TD.uiNodesView-icon { + padding: 20px 0px 15px 20px; +} + +.uiNodesView-node:nth-child(odd) { + background: #eee; +} + +.uiNodesView-routing { + position: relative; + min-width: 90px; +} + +.uiNodesView-nullReplica, +.uiNodesView-replica { + box-sizing: border-box; + cursor: pointer; + float: left; + height: 40px; + width: 35px; + margin: 4px; + border: 2px solid #444; + padding: 2px; + font-size: 32px; + line-height: 32px; + text-align: center; + letter-spacing: -5px; + text-indent: -7px; +} + +.uiNodesView-replica.primary { + border-width: 4px; + line-height: 29px; +} + +.uiNodesView-nullReplica { + border-color: transparent; +} + +.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; } +.uiNodesView-replica.state-INITIALIZING { background: #dddc88; } +.uiNodesView-replica.state-STARTED { background: #99dd88; } +.uiNodesView-replica.state-RELOCATING { background: #dc88dd; } + + +.uiClusterConnect-uri { + width: 280px; +} + +.uiStructuredQuery { + padding: 10px; +} + +.uiStructuredQuery-out { + min-height: 30px; +} + +.uiFilterBrowser-row * { + margin-right: 0.4em; +} + +.uiFilterBrowser-row BUTTON { + height: 22px; + position: relative; + top: 1px; +} + +.uiHeader { + padding: 3px 10px; +} + +.uiHeader-name, .uiHeader-status { + font-size: 1.2em; + font-weight: bold; + padding: 0 10px; +} + + +.uiApp-header { + background: #eee; + position: fixed; + width: 100%; + z-index: 9; +} + +.uiApp-header H1 { + margin: -2px 0 -4px 0; + float: left; + padding-right: 25px; +} + +.uiApp-headerMenu { + border-bottom: 1px solid #bbb; + padding: 0px 3px; + height: 22px; +} + +.uiApp-headerMenu .active { + background: white; + border-bottom-color: white; +} + +.uiApp-headerMenuItem { + border: 1px solid #bbb; + padding: 4px 8px 1px ; + margin: 2px 1px 0; + height: 14px; + cursor: pointer; +} + +.uiApp-body { + padding: 51px 0px 0px 0px; +} + +.uiApp-headerNewMenuItem { + color: blue; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js new file mode 100644 index 000000000..1cdc1f543 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js @@ -0,0 +1,4389 @@ +(function() { + + var window = this, + $ = jQuery; + + function ns( namespace ) { + return (namespace || "").split(".").reduce( function( space, name ) { + return space[ name ] || ( space[ name ] = { ns: ns } ); + }, this ); + } + + var app = ns("app"); + + var acx = ns("acx"); + + /** + * object iterator, returns an array with one element for each property of the object + * @function + */ + acx.eachMap = function(obj, fn, thisp) { + var ret = []; + for(var n in obj) { + ret.push(fn.call(thisp, n, obj[n], obj)); + } + return ret; + }; + + /** + * augments the first argument with the properties of the second and subsequent arguments + * like {@link $.extend} except that existing properties are not overwritten + */ + acx.augment = function() { + var args = Array.prototype.slice.call(arguments), + src = (args.length === 1) ? this : args.shift(), + augf = function(n, v) { + if(! (n in src)) { + src[n] = v; + } + }; + for(var i = 0; i < args.length; i++) { + $.each(args[i], augf); + } + return src; + }; + + /** + * tests whether the argument is an array + * @function + */ + acx.isArray = $.isArray; + + /** + * tests whether the argument is an object + * @function + */ + acx.isObject = function (value) { + return Object.prototype.toString.call(value) == "[object Object]"; + }; + + /** + * tests whether the argument is a function + * @function + */ + acx.isFunction = $.isFunction; + + /** + * tests whether the argument is a date + * @function + */ + acx.isDate = function (value) { + return Object.prototype.toString.call(value) == "[object Date]"; + }; + + /** + * tests whether the argument is a regexp + * @function + */ + acx.isRegExp = function (value) { + return Object.prototype.toString.call(value) == "[object RegExp]"; + }; + + /** + * tests whether the value is blank or empty + * @function + */ + acx.isEmpty = function (value, allowBlank) { + return value === null || value === undefined || ((acx.isArray(value) && !value.length)) || (!allowBlank ? value === '' : false); + }; + + /** + * data type for performing chainable geometry calculations
+ * can be initialised x,y | {x, y} | {left, top} + */ + acx.vector = function(x, y) { + return new acx.vector.prototype.Init(x, y); + }; + + acx.vector.prototype = { + Init : function(x, y) { + x = x || 0; + this.y = isFinite(x.y) ? x.y : (isFinite(x.top) ? x.top : (isFinite(y) ? y : 0)); + this.x = isFinite(x.x) ? x.x : (isFinite(x.left) ? x.left : (isFinite(x) ? x : 0)); + }, + + add : function(i, j) { + var d = acx.vector(i, j); + return new this.Init(this.x + d.x, this.y + d.y); + }, + + sub : function(i, j) { + var d = acx.vector(i, j); + return new this.Init(this.x - d.x, this.y - d.y); + }, + + addX : function(i) { + return new this.Init(this.x + i, this.y); + }, + + addY : function(j) { + return new this.Init(this.x, this.y + j); + }, + + mod : function(fn) { // runs a function against the x and y values + return new this.Init({x: fn.call(this, this.x, "x"), y: fn.call(this, this.y, "y")}); + }, + + /** returns true if this is within a rectangle formed by the points p and q */ + within : function(p, q) { + return ( this.x >= ((p.x < q.x) ? p.x : q.x) && this.x <= ((p.x > q.x) ? p.x : q.x) && + this.y >= ((p.y < q.y) ? p.y : q.y) && this.y <= ((p.y > q.y) ? p.y : q.y) ); + }, + + asOffset : function() { + return { top: this.y, left: this.x }; + }, + + asSize : function() { + return { height: this.y, width: this.x }; + } + }; + + acx.vector.prototype.Init.prototype = acx.vector.prototype; + + /** + * short cut functions for working with vectors and jquery. + * Each function returns the equivalent jquery value in a two dimentional vector + */ + $.fn.vSize = function() { return acx.vector(this.width(), this.height()); }; + $.fn.vOuterSize = function(margin) { return acx.vector(this.outerWidth(margin), this.outerHeight(margin)); }; + $.fn.vScroll = function() { return acx.vector(this.scrollLeft(), this.scrollTop()); }; + $.fn.vOffset = function() { return acx.vector(this.offset()); }; + $.fn.vPosition = function() { return acx.vector(this.position()); }; + $.Event.prototype.vMouse = function() { return acx.vector(this.pageX, this.pageY); }; + + /** + * object extensions (ecma5 compatible) + */ + acx.augment(Object, { + keys: function(obj) { + var ret = []; + for(var n in obj) if(Object.prototype.hasOwnProperty.call(obj, n)) ret.push(n); + return ret; + } + }); + + /** + * Array prototype extensions + */ + acx.augment(Array.prototype, { + 'contains' : function(needle) { + return this.indexOf(needle) !== -1; + }, + + // returns a new array consisting of all the members that are in both arrays + 'intersection' : function(b) { + var ret = []; + for(var i = 0; i < this.length; i++) { + if(b.contains(this[i])) { + ret.push(this[i]); + } + } + return ret; + }, + + 'remove' : function(value) { + var i = this.indexOf(value); + if(i !== -1) { + this.splice(i, 1); + } + } + }); + + /** + * String prototype extensions + */ + acx.augment(String.prototype, { + 'contains' : function(needle) { + return this.indexOf(needle) !== -1; + }, + + 'equalsIgnoreCase' : function(match) { + return this.toLowerCase() === match.toLowerCase(); + }, + + 'escapeHtml' : function() { + return this.replace(/&/g, '&').replace(//g, '>'); + }, + + 'escapeJS' : function() { + var meta = {'"':'\\"', '\\':'\\\\', '/':'\\/', '\b':'\\b', '\f':'\\f', '\n':'\\n', '\r':'\\r', '\t':'\\t'}, + xfrm = function(c) { return meta[c] || "\\u" + c.charCodeAt(0).toString(16).zeroPad(4); }; + return this.replace(new RegExp('(["\\\\\x00-\x1f\x7f-\uffff])', 'g'), xfrm); + }, + + 'escapeRegExp' : function() { + var ret = "", esc = "\\^$*+?.()=|{,}[]-"; + for ( var i = 0; i < this.length; i++) { + ret += (esc.contains(this.charAt(i)) ? "\\" : "") + this.charAt(i); + } + return ret; + }, + + 'zeroPad' : function(len) { + return ("0000000000" + this).substring(this.length - len + 10); + } + }); + + $.fn.forEach = Array.prototype.forEach; + + // joey / jquery integration + $.joey = function( obj ) { + return $( window.joey( obj ) ); + }; + + window.joey.plugins.push( function( obj ) { + if( obj instanceof jQuery ) { + return obj[0]; + } + }); + +})(); + +/** + * base class for creating inheritable classes + * based on resigs 'Simple Javascript Inheritance Class' (based on base2 and prototypejs) + * modified with static super and auto config + * @name Class + * @constructor + */ +(function( $, app ){ + + var ux = app.ns("ux"); + + var initializing = false, fnTest = /\b_super\b/; + + ux.Class = function(){}; + + ux.Class.extend = function(prop) { + function Class() { + if(!initializing) { + var args = Array.prototype.slice.call(arguments); + this.config = $.extend( function(t) { // automatically construct a config object based on defaults and last item passed into the constructor + return $.extend(t._proto && t._proto() && arguments.callee(t._proto()) || {}, t.defaults); + } (this) , args.pop() ); + this.init && this.init.apply(this, args); // automatically run the init function when class created + } + } + + initializing = true; + var prototype = new this(); + initializing = false; + + var _super = this.prototype; + prototype._proto = function() { + return _super; + }; + + for(var name in prop) { + prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { this._super = _super[name]; return fn.apply(this, arguments); }; + })(name, prop[name]) : prop[name]; + } + + Class.prototype = prototype; + Class.constructor = Class; + + Class.extend = arguments.callee; // make class extendable + + return Class; + }; +})( this.jQuery, this.app ); + +(function( app ) { + + var ut = app.ns("ut"); + + ut.option_template = function(v) { return { tag: "OPTION", value: v, text: v }; }; + + ut.require_template = function(f) { return f.require ? { tag: "SPAN", cls: "require", text: "*" } : null; }; + + + var sib_prefix = ['B','ki','Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']; + + ut.byteSize_template = function(n) { + var i = 0; + while( n >= 1000 ) { + i++; + n /= 1024; + } + return (i === 0 ? n.toString() : n.toFixed( 3 - parseInt(n,10).toString().length )) + ( sib_prefix[ i ] || "..E" ); + }; + + var sid_prefix = ['','k','M', 'G', 'T', 'P', 'E', 'Z', 'Y']; + + ut.count_template = function(n) { + var i = 0; + while( n >= 1000 ) { + i++; + n /= 1000; + } + return i === 0 ? n.toString() : ( n.toFixed( 3 - parseInt(n,10).toString().length ) + ( sid_prefix[ i ] || "..E" ) ); + }; + +})( this.app ); + +(function( app ) { + + var ux = app.ns("ux"); + + ux.Observable = ux.Class.extend((function() { + return { + init: function() { + this.observers = {}; + for( var opt in this.config ) { // automatically install observers that are defined in the configuration + if( opt.indexOf( 'on' ) === 0 ) { + this.on( opt.substring(2) , this.config[ opt ] ); + } + } + }, + _getObs: function( type ) { + return ( this.observers[ type.toLowerCase() ] || ( this.observers[ type.toLowerCase() ] = [] ) ); + }, + on: function( type, fn, params, thisp ) { + this._getObs( type ).push( { "cb" : fn, "args" : params || [] , "cx" : thisp || this } ); + return this; + }, + fire: function( type ) { + var params = Array.prototype.slice.call( arguments, 1 ); + this._getObs( type ).slice().forEach( function( ob ) { + ob["cb"].apply( ob["cx"], ob["args"].concat( params ) ); + } ); + return this; + }, + removeAllObservers: function() { + this.observers = {}; + }, + removeObserver: function( type, fn ) { + var obs = this._getObs( type ), + index = obs.reduce( function(p, t, i) { return (t.cb === fn) ? i : p; }, -1 ); + if(index !== -1) { + obs.splice( index, 1 ); + } + return this; // make observable functions chainable + }, + hasObserver: function( type ) { + return !! this._getObs( type ).length; + } + }; + })()); + +})( this.app ); +(function( app ) { + + var ux = app.ns("ux"); + + var extend = ux.Observable.extend; + var instance = function() { + if( ! ("me" in this) ) { + this.me = new this(); + } + return this.me; + }; + + ux.Singleton = ux.Observable.extend({}); + + ux.Singleton.extend = function() { + var Self = extend.apply( this, arguments ); + Self.instance = instance; + return Self; + }; + +})( this.app ); + +(function( $, app ) { + + var ux = app.ns("ux"); + + /** + * Provides drag and drop functionality
+ * a DragDrop instance is created for each usage pattern and then used over and over again
+ * first a dragObj is defined - this is the jquery node that will be dragged around
+ * second, the event callbacks are defined - these allow you control the ui during dragging and run functions when successfully dropping
+ * thirdly drop targets are defined - this is a list of DOM nodes, the constructor works in one of two modes: + *
  • without targets - objects can be picked up and dragged around, dragStart and dragStop events fire
  • + *
  • with targets - as objects are dragged over targets dragOver, dragOut and DragDrop events fire + * to start dragging call the DragDrop.pickup_handler() function, dragging stops when the mouse is released. + * @constructor + * The following options are supported + *
    targetSelector
    + *
    an argument passed directly to jquery to create a list of targets, as such it can be a CSS style selector, or an array of DOM nodes
    if target selector is null the DragDrop does Drag only and will not fire dragOver dragOut and dragDrop events
    + *
    pickupSelector
    + *
    a jquery selector. The pickup_handler is automatically bound to matched elements (eg clicking on these elements starts the drag). if pickupSelector is null, the pickup_handler must be manually bound $(el).bind("mousedown", dragdrop.pickup_handler)
    + *
    dragObj
    + *
    the jQuery element to drag around when pickup is called. If not defined, dragObj must be set in onDragStart
    + *
    draggingClass
    + *
    the class(es) added to items when they are being dragged
    + * The following observables are supported + *
    dragStart
    + *
    a callback when start to drag
    function(jEv)
    + *
    dragOver
    + *
    a callback when we drag into a target
    function(jEl)
    + *
    dragOut
    + *
    a callback when we drag out of a target, or when we drop over a target
    function(jEl)
    + *
    dragDrop
    + *
    a callback when we drop on a target
    function(jEl)
    + *
    dragStop
    + *
    a callback when we stop dragging
    function(jEv)
    + */ + ux.DragDrop = ux.Observable.extend({ + defaults : { + targetsSelector : null, + pickupSelector: null, + dragObj : null, + draggingClass : "dragging" + }, + + init: function(options) { + this._super(); // call the class initialiser + + this.drag_handler = this.drag.bind(this); + this.drop_handler = this.drop.bind(this); + this.pickup_handler = this.pickup.bind(this); + this.targets = []; + this.dragObj = null; + this.dragObjOffset = null; + this.currentTarget = null; + if(this.config.pickupSelector) { + $(this.config.pickupSelector).bind("mousedown", this.pickup_handler); + } + }, + + drag : function(jEv) { + jEv.preventDefault(); + var mloc = acx.vector( this.lockX || jEv.pageX, this.lockY || jEv.pageY ); + this.dragObj.css(mloc.add(this.dragObjOffset).asOffset()); + if(this.targets.length === 0) { + return; + } + if(this.currentTarget !== null && mloc.within(this.currentTarget[1], this.currentTarget[2])) { + return; + } + if(this.currentTarget !== null) { + this.fire('dragOut', this.currentTarget[0]); + this.currentTarget = null; + } + for(var i = 0; i < this.targets.length; i++) { + if(mloc.within(this.targets[i][1], this.targets[i][2])) { + this.currentTarget = this.targets[i]; + break; + } + } + if(this.currentTarget !== null) { + this.fire('dragOver', this.currentTarget[0]); + } + }, + + drop : function(jEv) { + $(document).unbind("mousemove", this.drag_handler); + $(document).unbind("mouseup", this.drop_handler); + this.dragObj.removeClass(this.config.draggingClass); + if(this.currentTarget !== null) { + this.fire('dragOut', this.currentTarget[0]); + this.fire('dragDrop', this.currentTarget[0]); + } + this.fire('dragStop', jEv); + this.dragObj = null; + }, + + pickup : function(jEv, opts) { + $.extend(this.config, opts); + this.fire('dragStart', jEv); + this.dragObj = this.dragObj || this.config.dragObj; + this.dragObjOffset = this.config.dragObjOffset || acx.vector(this.dragObj.offset()).sub(jEv.pageX, jEv.pageY); + this.lockX = this.config.lockX ? jEv.pageX : 0; + this.lockY = this.config.lockY ? jEv.pageY : 0; + this.dragObj.addClass(this.config.draggingClass); + if(!this.dragObj.get(0).parentNode || this.dragObj.get(0).parentNode.nodeType === 11) { // 11 = document fragment + $(document.body).append(this.dragObj); + } + if(this.config.targetsSelector) { + this.currentTarget = null; + var targets = ( this.targets = [] ); + // create an array of elements optimised for rapid collision detection calculation + $(this.config.targetsSelector).each(function(i, el) { + var jEl = $(el); + var tl = acx.vector(jEl.offset()); + var br = tl.add(jEl.width(), jEl.height()); + targets.push([jEl, tl, br]); + }); + } + $(document).bind("mousemove", this.drag_handler); + $(document).bind("mouseup", this.drop_handler); + this.drag_handler(jEv); + } + }); + +})( this.jQuery, this.app ); + +(function( app ) { + + var ux = app.ns("ux"); + + ux.FieldCollection = ux.Observable.extend({ + defaults: { + fields: [] // the collection of fields + }, + init: function() { + this._super(); + this.fields = this.config.fields; + }, + validate: function() { + return this.fields.reduce(function(r, field) { + return r && field.validate(); + }, true); + }, + getData: function(type) { + return this.fields.reduce(function(r, field) { + r[field.name] = field.val(); return r; + }, {}); + } + }); + +})( this.app ); + +(function( $, app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.Model = ux.Observable.extend({ + defaults: { + data: null + }, + init: function() { + this.set( this.config.data ); + }, + set: function( key, value ) { + if( arguments.length === 1 ) { + this._data = $.extend( {}, key ); + } else { + key.split(".").reduce(function( ptr, prop, i, props) { + if(i === (props.length - 1) ) { + ptr[prop] = value; + } else { + if( !(prop in ptr) ) { + ptr[ prop ] = {}; + } + return ptr[prop]; + } + }, this._data ); + } + }, + get: function( key ) { + return key.split(".").reduce( function( ptr, prop ) { + return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined; + }, this._data ); + }, + }); +})( this.jQuery, this.app ); + +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.DataSourceInterface = ux.Observable.extend({ + /* + properties + meta = { total: 0 }, + headers = [ { name: "" } ], + data = [ { column: value, column: value } ], + sort = { column: "name", dir: "desc" } + events + data: function( DataSourceInterface ) + */ + _getSummary: function(res) { + this.summary = i18n.text("TableResults.Summary", res._shards.successful, res._shards.total, res.hits.total, (res.took / 1000).toFixed(3)); + }, + _getMeta: function(res) { + this.meta = { total: res.hits.total, shards: res._shards, tool: res.took }; + } + }); + +})( this.app ); +(function( app ) { + + var data = app.ns("data"); + + data.ResultDataSourceInterface = data.DataSourceInterface.extend({ + results: function(res) { + this._getSummary(res); + this._getMeta(res); + this._getData(res); + this.sort = {}; + this.fire("data", this); + }, + _getData: function(res) { + var columns = this.columns = []; + this.data = res.hits.hits.map(function(hit) { + var row = (function(path, spec, row) { + for(var prop in spec) { + if(acx.isObject(spec[prop])) { + arguments.callee(path.concat(prop), spec[prop], row); + } else if(acx.isArray(spec[prop])) { + if(spec[prop].length) { + arguments.callee(path.concat(prop), spec[prop][0], row) + } + } else { + var dpath = path.concat(prop).join("."); + if(! columns.contains(dpath)) { + columns.push(dpath); + } + row[dpath] = (spec[prop] || "null").toString(); + } + } + return row; + })([ hit._type ], hit, {}); + row._source = hit; + return row; + }, this); + } + }); + +})( this.app ); + +(function( app ) { + + /* + notes on elasticsearch terminology used in this project + + indices[index] contains one or more + types[type] contains one or more + documents contain one or more + paths[path] + each path contains one element of data + each path maps to one field + + eg PUT, "/twitter/tweet/1" + { + user: "mobz", + date: "2011-01-01", + message: "You know, for browsing elasticsearch", + name: { + first: "Ben", + last: "Birch" + } + } + + creates + 1 index: twitter + this is the collection of index data + 1 type: tweet + this is the type of document (kind of like a table in sql) + 1 document: /twitter/tweet/1 + this is an actual document in the index ( kind of like a row in sql) + 5 paths: [ ["user"], ["date"], ["message"], ["name","first"], ["name","last"] ] + since documents can be heirarchical this maps a path from a document root to a piece of data + 5 fields: [ "user", "date", "message", "first", "last" ] + this is an indexed 'column' of data. fields are not heirarchical + + the relationship between a path and a field is called a mapping. mappings also contain a wealth of information about how es indexes the field + + notes + 1) a path is stored as an array, the dpath is . . path.join("."), + which can be considered the canonical reference for a mapping + 2) confusingly, es uses the term index for both the collection of indexed data, and the individually indexed fields + so the term index_name is the same as field_name in this sense. + + */ + + var data = app.ns("data"); + var ux = app.ns("ux"); + + var coretype_map = { + "string" : "string", + "keyword" : "string", + "text" : "string", + "byte" : "number", + "short" : "number", + "long" : "number", + "integer" : "number", + "float" : "number", + "double" : "number", + "ip" : "number", + "date" : "date", + "boolean" : "boolean", + "binary" : "binary", + "multi_field" : "multi_field" + }; + + var default_property_map = { + "string" : { "store" : "no", "index" : "analysed" }, + "number" : { "store" : "no", "precision_steps" : 4 }, + "date" : { "store" : "no", "format" : "dateOptionalTime", "index": "yes", "precision_steps": 4 }, + "boolean" : { "store" : "no", "index": "yes" }, + "binary" : { }, + "multi_field" : { } + }; + + // parses metatdata from a cluster, into a bunch of useful data structures + data.MetaData = ux.Observable.extend({ + defaults: { + state: null // (required) response from a /_cluster/state request + }, + init: function() { + this._super(); + this.refresh(this.config.state); + }, + getIndices: function(alias) { + return alias ? this.aliases[alias] : this.indicesList; + }, + // returns an array of strings containing all types that are in all of the indices passed in, or all types + getTypes: function(indices) { + var indices = indices || [], types = []; + this.typesList.forEach(function(type) { + for(var i = 0; i < indices.length; i++) { + if(! this.indices[indices[i]].types.contains(type)) + return; + } + types.push(type); + }, this); + return types; + }, + refresh: function(state) { + // currently metadata expects all like named fields to have the same type, even when from different types and indices + var aliases = this.aliases = {}; + var indices = this.indices = {}; + var types = this.types = {}; + var fields = this.fields = {}; + var paths = this.paths = {}; + + function createField( mapping, index, type, path, name ) { + var dpath = [ index, type ].concat( path ).join( "." ); + var field_name = mapping.index_name || path.join( "." ); + var field = paths[ dpath ] = fields[ field_name ] || $.extend({ + field_name : field_name, + core_type : coretype_map[ mapping.type ], + dpaths : [] + }, default_property_map[ coretype_map[ mapping.type ] ], mapping ); + + if (field.type === "multi_field" && typeof field.fields !== "undefined") { + for (var subField in field.fields) { + field.fields[ subField ] = createField( field.fields[ subField ], index, type, path.concat( subField ), name + "." + subField ); + } + } + if (fields.dpaths) { + field.dpaths.push(dpath); + } + return field; + } + function getFields(properties, type, index, listeners) { + (function procPath(prop, path) { + for (var n in prop) { + if ("properties" in prop[n]) { + procPath( prop[ n ].properties, path.concat( n ) ); + } else { + var field = createField(prop[n], index, type, path.concat(n), n); + listeners.forEach( function( listener ) { + listener[ field.field_name ] = field; + } ); + } + } + })(properties, []); + } + for (var index in state.metadata.indices) { + indices[index] = { + types : [], fields : {}, paths : {}, parents : {} + }; + indices[index].aliases = state.metadata.indices[index].aliases; + indices[index].aliases.forEach(function(alias) { + (aliases[alias] || (aliases[alias] = [])).push(index); + }); + var mapping = state.metadata.indices[index].mappings; + for (var type in mapping) { + indices[index].types.push(type); + if ( type in types) { + types[type].indices.push(index); + } else { + types[type] = { + indices : [index], fields : {} + }; + } + getFields(mapping[type].properties, type, index, [fields, types[type].fields, indices[index].fields]); + if ( typeof mapping[type]._parent !== "undefined") { + indices[index].parents[type] = mapping[type]._parent.type; + } + } + } + + this.aliasesList = Object.keys(aliases); + this.indicesList = Object.keys(indices); + this.typesList = Object.keys(types); + this.fieldsList = Object.keys(fields); + } + }); + +})( this.app ); + +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.MetaDataFactory = ux.Observable.extend({ + defaults: { + cluster: null // (required) an app.services.Cluster + }, + init: function() { + this._super(); + this.config.cluster.get("_cluster/state", function(data) { + this.metaData = new app.data.MetaData({state: data}); + this.fire("ready", this.metaData, { originalData: data }); // TODO originalData needed for legacy ui.FilterBrowser + }.bind(this)); + } + }); + +})( this.app ); + +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.Query = ux.Observable.extend({ + defaults: { + cluster: null, // (required) instanceof app.services.Cluster + size: 50 // size of pages to return + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.refuid = 0; + this.refmap = {}; + this.indices = []; + this.types = []; + this.search = { + query: { bool: { must: [], must_not: [], should: [] } }, + from: 0, + size: this.config.size, + sort: [], + aggs: {}, + version: true + }; + this.defaultClause = this.addClause(); + this.history = [ this.getState() ]; + }, + clone: function() { + var q = new data.Query({ cluster: this.cluster }); + q.restoreState(this.getState()); + for(var uqid in q.refmap) { + q.removeClause(uqid); + } + return q; + }, + getState: function() { + return $.extend(true, {}, { search: this.search, indices: this.indices, types: this.types }); + }, + restoreState: function(state) { + state = $.extend(true, {}, state || this.history[this.history.length - 1]); + this.indices = state.indices; + this.types = state.types; + this.search = state.search; + }, + getData: function() { + return JSON.stringify(this.search); + }, + query: function() { + var state = this.getState(); + this.cluster.post( + (this.indices.join(",") || "_all") + "/" + ( this.types.length ? this.types.join(",") + "/" : "") + "_search", + this.getData(), + function(results) { + if(results === null) { + alert(i18n.text("Query.FailAndUndo")); + this.restoreState(); + return; + } + this.history.push(state); + + this.fire("results", this, results); + }.bind(this)); + }, + loadParents: function(res,metadata){ + //create data for mget + var data = { docs :[] }; + var indexToTypeToParentIds = {}; + res.hits.hits.forEach(function(hit) { + if (typeof hit.fields != "undefined"){ + if (typeof hit.fields._parent != "undefined"){ + var parentType = metadata.indices[hit._index].parents[hit._type]; + if (typeof indexToTypeToParentIds[hit._index] == "undefined"){ + indexToTypeToParentIds[hit._index] = new Object(); + } + if (typeof indexToTypeToParentIds[hit._index][hit._type] == "undefined"){ + indexToTypeToParentIds[hit._index][hit._type] = new Object(); + } + if (typeof indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] == "undefined"){ + indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] = null; + data.docs.push({ _index:hit._index, _type:parentType, _id:hit.fields._parent}); + } + } + } + }); + + //load parents + var state = this.getState(); + this.cluster.post("_mget",JSON.stringify(data), + function(results) { + if(results === null) { + alert(i18n.text("Query.FailAndUndo")); + this.restoreState(); + return; + } + this.history.push(state); + var indexToTypeToParentIdToHit = new Object(); + results.docs.forEach(function(doc) { + if (typeof indexToTypeToParentIdToHit[doc._index] == "undefined"){ + indexToTypeToParentIdToHit[doc._index] = new Object(); + } + + if (typeof indexToTypeToParentIdToHit[doc._index][doc._type] == "undefined"){ + indexToTypeToParentIdToHit[doc._index][doc._type] = new Object(); + } + + indexToTypeToParentIdToHit[doc._index][doc._type][doc._id] = doc; + }); + + res.hits.hits.forEach(function(hit) { + if (typeof hit.fields != "undefined"){ + if (typeof hit.fields._parent != "undefined"){ + var parentType = metadata.indices[hit._index].parents[hit._type]; + hit._parent = indexToTypeToParentIdToHit[hit._index][parentType][hit.fields._parent]; + } + } + }); + + this.fire("resultsWithParents", this, res); + }.bind(this)); + }, + setPage: function(page) { + this.search.from = this.config.size * (page - 1); + }, + setSort: function(index, desc) { + var sortd = {}; sortd[index] = { reverse: !!desc }; + this.search.sort.unshift( sortd ); + for(var i = 1; i < this.search.sort.length; i++) { + if(Object.keys(this.search.sort[i])[0] === index) { + this.search.sort.splice(i, 1); + break; + } + } + }, + setIndex: function(index, add) { + if(add) { + if(! this.indices.contains(index)) this.indices.push(index); + } else { + this.indices.remove(index); + } + this.fire("setIndex", this, { index: index, add: !!add }); + }, + setType: function(type, add) { + if(add) { + if(! this.types.contains(type)) this.types.push(type); + } else { + this.types.remove(type); + } + this.fire("setType", this, { type: type, add: !!add }); + }, + addClause: function(value, field, op, bool) { + bool = bool || "should"; + op = op || "match_all"; + field = field || "_all"; + var clause = this._setClause(value, field, op, bool); + var uqid = "q-" + this.refuid++; + this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool }; + if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) { + this.removeClause(this.defaultClause); + } + this.fire("queryChanged", this, { uqid: uqid, search: this.search} ); + return uqid; // returns reference to inner query object to allow fast updating + }, + removeClause: function(uqid) { + var ref = this.refmap[uqid], + bool = this.search.query.bool[ref.bool]; + bool.remove(ref.clause); + if(this.search.query.bool.must.length + this.search.query.bool.should.length === 0) { + this.defaultClause = this.addClause(); + } + }, + addAggs: function(aggs) { + var aggsId = "f-" + this.refuid++; + this.search.aggs[aggsId] = aggs; + this.refmap[aggsId] = { aggsId: aggsId, aggs: aggs }; + return aggsId; + }, + removeAggs: function(aggsId) { + delete this.search.aggs[aggsId]; + delete this.refmap[aggsId]; + }, + _setClause: function(value, field, op, bool) { + var clause = {}, query = {}; + if(op === "match_all") { + } else if(op === "query_string") { + query["default_field"] = field; + query["query"] = value; + } else if(op === "missing") { + op = "constant_score" + var missing = {}, filter = {}; + missing["field"] = field; + filter["missing"] = missing + query["filter"] = filter; + } else { + query[field] = value; + } + clause[op] = query; + this.search.query.bool[bool].push(clause); + return clause; + } + }); + +})( this.app ); + +(function( app ) { + + var data = app.ns("data"); + + data.QueryDataSourceInterface = data.DataSourceInterface.extend({ + defaults: { + metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata + query: null // (required) instanceof app.data.Query the data source + }, + init: function() { + this._super(); + this.config.query.on("results", this._results_handler.bind(this) ); + this.config.query.on("resultsWithParents", this._load_parents.bind(this) ); + }, + _results_handler: function(query, res) { + this._getSummary(res); + this._getMeta(res); + var sort = query.search.sort[0] || { "_score": { reverse: false }}; + var sortField = Object.keys(sort)[0]; + this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") }; + this._getData(res, this.config.metadata); + this.fire("data", this); + }, + _load_parents: function(query, res) { + query.loadParents(res, this.config.metadata); + }, + _getData: function(res, metadata) { + var metaColumns = ["_index", "_type", "_id", "_score"]; + var columns = this.columns = [].concat(metaColumns); + + this.data = res.hits.hits.map(function(hit) { + var row = (function(path, spec, row) { + for(var prop in spec) { + if(acx.isObject(spec[prop])) { + arguments.callee(path.concat(prop), spec[prop], row); + } else if(acx.isArray(spec[prop])) { + if(spec[prop].length) { + arguments.callee(path.concat(prop), spec[prop][0], row) + } + } else { + var dpath = path.concat(prop).join("."); + if(metadata.paths[dpath]) { + var field_name = metadata.paths[dpath].field_name; + if(! columns.contains(field_name)) { + columns.push(field_name); + } + row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString(); + } else { + // TODO: field not in metadata index + } + } + } + return row; + })([ hit._index, hit._type ], hit._source, {}); + metaColumns.forEach(function(n) { row[n] = hit[n]; }); + row._source = hit; + if (typeof hit._parent!= "undefined") { + (function(prefix, path, spec, row) { + for(var prop in spec) { + if(acx.isObject(spec[prop])) { + arguments.callee(prefix, path.concat(prop), spec[prop], row); + } else if(acx.isArray(spec[prop])) { + if(spec[prop].length) { + arguments.callee(prefix, path.concat(prop), spec[prop][0], row) + } + } else { + var dpath = path.concat(prop).join("."); + if(metadata.paths[dpath]) { + var field_name = metadata.paths[dpath].field_name; + var column_name = prefix+"."+field_name; + if(! columns.contains(column_name)) { + columns.push(column_name); + } + row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString(); + } else { + // TODO: field not in metadata index + } + } + } + })(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row); + } + return row; + }, this); + } + }); + +})( this.app ); + +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.BoolQuery = ux.Observable.extend({ + defaults: { + size: 50 // size of pages to return + }, + init: function() { + this._super(); + this.refuid = 0; + this.refmap = {}; + this.search = { + query: { bool: { must: [], must_not: [], should: [] } }, + from: 0, + size: this.config.size, + sort: [], + aggs: {} + }; + this.defaultClause = this.addClause(); + }, + setSize: function(size) { + this.search.size = parseInt( size, 10 ); + }, + setPage: function(page) { + this.search.from = this.config.size * (page - 1) + 1; + }, + addClause: function(value, field, op, bool) { + bool = bool || "should"; + op = op || "match_all"; + field = field || "_all"; + var clause = this._setClause(value, field, op, bool); + var uqid = "q-" + this.refuid++; + this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool }; + if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) { + this.removeClause(this.defaultClause); + } + this.fire("queryChanged", this, { uqid: uqid, search: this.search} ); + return uqid; // returns reference to inner query object to allow fast updating + }, + removeClause: function(uqid) { + var ref = this.refmap[uqid], + bool = this.search.query.bool[ref.bool]; + var clauseIdx = bool.indexOf(ref.clause); + // Check that this clause hasn't already been removed + if (clauseIdx >=0) { + bool.splice(clauseIdx, 1); + } + }, + _setClause: function(value, field, op, bool) { + var clause = {}, query = {}; + if(op === "match_all") { + } else if(op === "query_string") { + query["default_field"] = field; + query["query"] = value; + } else if(op === "missing") { + op = "constant_score" + var missing = {}, filter = {}; + missing["field"] = field; + filter["missing"] = missing + query["filter"] = filter; + } else { + query[field.substring(field.indexOf(".")+1)] = value; + } + clause[op] = query; + this.search.query.bool[bool].push(clause); + return clause; + }, + getData: function() { + return JSON.stringify(this.search); + } + }); + +})( this.app ); +(function( app ) { + + var ux = app.ns("ux"); + var services = app.ns("services"); + + services.Preferences = ux.Singleton.extend({ + init: function() { + this._storage = window.localStorage; + this._setItem("__version", 1 ); + }, + get: function( key ) { + return this._getItem( key ); + }, + set: function( key, val ) { + return this._setItem( key, val ); + }, + _getItem: function( key ) { + try { + return JSON.parse( this._storage.getItem( key ) ); + } catch(e) { + console.warn( e ); + return undefined; + } + }, + _setItem: function( key, val ) { + try { + return this._storage.setItem( key, JSON.stringify( val ) ); + } catch(e) { + console.warn( e ); + return undefined; + } + } + }); + +})( this.app ); + +(function( $, app ) { + + var services = app.ns("services"); + var ux = app.ns("ux"); + + function parse_version( v ) { + return v.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1,4).map( function(d) { return parseInt(d || 0, 10); } ); + } + + services.Cluster = ux.Class.extend({ + defaults: { + base_uri: null + }, + init: function() { + this.base_uri = this.config.base_uri; + }, + setVersion: function( v ) { + this.version = v; + this._version_parts = parse_version( v ); + }, + versionAtLeast: function( v ) { + var testVersion = parse_version( v ); + for( var i = 0; i < 3; i++ ) { + if( testVersion[i] !== this._version_parts[i] ) { + return testVersion[i] < this._version_parts[i]; + } + } + return true; + }, + request: function( params ) { + return $.ajax( $.extend({ + url: this.base_uri + params.path, + dataType: "json", + error: function(xhr, type, message) { + if("console" in window) { + console.log({ "XHR Error": type, "message": message }); + } + } + }, params) ); + }, + "get": function(path, success) { return this.request( { type: "GET", path: path, success: success } ); }, + "post": function(path, data, success) { return this.request( { type: "POST", path: path, data: data, success: success } ); }, + "put": function(path, data, success) { return this.request( { type: "PUT", path: path, data: data, success: success } ); }, + "delete": function(path, data, success) { return this.request( { type: "DELETE", path: path, data: data, success: success } ); } + }); + +})( this.jQuery, this.app ); + + (function( app ) { + + var services = app.ns("services"); + var ux = app.ns("ux"); + + services.ClusterState = ux.Observable.extend({ + defaults: { + cluster: null + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.clusterState = null; + this.status = null; + this.nodeStats = null; + this.clusterNodes = null; + }, + refresh: function() { + var self = this, clusterState, status, nodeStats, clusterNodes, clusterHealth; + function updateModel() { + if( clusterState && status && nodeStats && clusterNodes && clusterHealth ) { + this.clusterState = clusterState; + this.status = status; + this.nodeStats = nodeStats; + this.clusterNodes = clusterNodes; + this.clusterHealth = clusterHealth; + this.fire( "data", this ); + } + } + this.cluster.get("_cluster/state", function( data ) { + clusterState = data; + updateModel.call( self ); + }); + this.cluster.get("_stats", function( data ) { + status = data; + updateModel.call( self ); + }); + this.cluster.get("_nodes/stats", function( data ) { + nodeStats = data; + updateModel.call( self ); + }); + this.cluster.get("_nodes", function( data ) { + clusterNodes = data; + updateModel.call( self ); + }); + this.cluster.get("_cluster/health", function( data ) { + clusterHealth = data; + updateModel.call( self ); + }); + }, + _clusterState_handler: function(state) { + this.clusterState = state; + this.redraw("clusterState"); + }, + _status_handler: function(status) { + this.status = status; + this.redraw("status"); + }, + _clusterNodeStats_handler: function(stats) { + this.nodeStats = stats; + this.redraw("nodeStats"); + }, + _clusterNodes_handler: function(nodes) { + this.clusterNodes = nodes; + this.redraw("clusterNodes"); + }, + _clusterHealth_handler: function(health) { + this.clusterHealth = health; + this.redraw("status"); + } + }); + +})( this.app ); + +(function( $, joey, app ) { + + var ui = app.ns("ui"); + var ux = app.ns("ux"); + + ui.AbstractWidget = ux.Observable.extend({ + defaults : { + id: null // the id of the widget + }, + + el: null, // this is the jquery wrapped dom element(s) that is the root of the widget + + init: function() { + this._super(); + for(var prop in this) { // automatically bind all the event handlers + if(prop.contains("_handler")) { + this[prop] = this[prop].bind(this); + } + } + }, + + id: function(suffix) { + return this.config.id ? (this.config.id + (suffix ? "-" + suffix : "")) : undefined; + }, + + attach: function( parent, method ) { + if( parent ) { + this.el[ method || "appendTo"]( parent ); + } + this.fire("attached", this ); + return this; + }, + + remove: function() { + this.el.remove(); + this.fire("removed", this ); + this.removeAllObservers(); + this.el = null; + return this; + } + }); + + joey.plugins.push( function( obj ) { + if( obj instanceof ui.AbstractWidget ) { + return obj.el[0]; + } + }); + +})( this.jQuery, this.joey, this.app ); + +(function( $, app, joey ) { + + var ui = app.ns("ui"); + + ui.AbstractField = ui.AbstractWidget.extend({ + + defaults: { + name : "", // (required) - name of the field + require: false, // validation requirements (false, true, regexp, function) + value: "", // default value + label: "" // human readable label of this field + }, + + init: function(parent) { + this._super(); + this.el = $.joey(this._main_template()); + this.field = this.el.find("[name="+this.config.name+"]"); + this.label = this.config.label; + this.require = this.config.require; + this.name = this.config.name; + this.val( this.config.value ); + this.attach( parent ); + }, + + val: function( val ) { + if(val === undefined) { + return this.field.val(); + } else { + this.field.val( val ); + return this; + } + }, + + validate: function() { + var val = this.val(), req = this.require; + if( req === false ) { + return true; + } else if( req === true ) { + return val.length > 0; + } else if( req.test && $.isFunction(req.test) ) { + return req.test( val ); + } else if( $.isFunction(req) ) { + return req( val, this ); + } + } + + }); + +})( this.jQuery, this.app, this.joey ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.TextField = ui.AbstractField.extend({ + init: function() { + this._super(); + }, + _keyup_handler: function() { + this.fire("change", this ); + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiField uiTextField", children: [ + { tag: "INPUT", + type: "text", + name: this.config.name, + placeholder: this.config.placeholder, + onkeyup: this._keyup_handler + } + ]}; + } + }); + +})( this.app ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.CheckField = ui.AbstractField.extend({ + _main_template: function() { return ( + { tag: "DIV", id: this.id(), cls: "uiCheckField", children: [ + { tag: "INPUT", type: "checkbox", name: this.config.name, checked: !!this.config.value } + ] } + ); }, + validate: function() { + return this.val() || ( ! this.require ); + }, + val: function( val ) { + if( val === undefined ) { + return !!this.field.attr( "checked" ); + } else { + this.field.attr( "checked", !!val ); + } + } + }); + +})( this.app ); + + + +(function( $, joey, app ) { + + var ui = app.ns("ui"); + + ui.Button = ui.AbstractWidget.extend({ + defaults : { + label: "", // the label text + disabled: false, // create a disabled button + autoDisable: false // automatically disable the button when clicked + }, + + _baseCls: "uiButton", + + init: function(parent) { + this._super(); + this.el = $.joey(this.button_template()) + .bind("click", this.click_handler); + this.config.disabled && this.disable(); + this.attach( parent ); + }, + + click_handler: function(jEv) { + if(! this.disabled) { + this.fire("click", jEv, this); + this.config.autoDisable && this.disable(); + } + }, + + enable: function() { + this.el.removeClass("disabled"); + this.disabled = false; + return this; + }, + + disable: function(disable) { + if(disable === false) { + return this.enable(); + } + this.el.addClass("disabled"); + this.disabled = true; + return this; + }, + + button_template: function() { return ( + { tag: 'BUTTON', type: 'button', id: this.id(), cls: this._baseCls, children: [ + { tag: 'DIV', cls: 'uiButton-content', children: [ + { tag: 'DIV', cls: 'uiButton-label', text: this.config.label } + ] } + ] } + ); } + }); + +})( this.jQuery, this.joey, this.app ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.MenuButton = app.ui.Button.extend({ + defaults: { + menu: null + }, + _baseCls: "uiButton uiMenuButton", + init: function(parent) { + this._super(parent); + this.menu = this.config.menu; + this.on("click", this.openMenu_handler); + this.menu.on("open", function() { this.el.addClass("active"); }.bind(this)); + this.menu.on("close", function() { this.el.removeClass("active"); }.bind(this)); + }, + openMenu_handler: function(jEv) { + this.menu && this.menu.open(jEv); + } + }); + +})( this.jQuery, this.app ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.SplitButton = ui.AbstractWidget.extend({ + defaults: { + items: [], + label: "" + }, + _baseCls: "uiSplitButton", + init: function( parent ) { + this._super( parent ); + this.value = null; + this.button = new ui.Button({ + label: this.config.label, + onclick: this._click_handler + }); + this.menu = new ui.SelectMenuPanel({ + value: this.config.value, + items: this._getItems(), + onSelect: this._select_handler + }); + this.menuButton = new ui.MenuButton({ + label: "\u00a0", + menu: this.menu + }); + this.el = $.joey(this._main_template()); + }, + remove: function() { + this.menu.remove(); + }, + disable: function() { + this.button.disable(); + }, + enable: function() { + this.button.enable(); + }, + _click_handler: function() { + this.fire("click", this, { value: this.value } ); + }, + _select_handler: function( panel, event ) { + this.fire( "select", this, event ); + }, + _getItems: function() { + return this.config.items; + }, + _main_template: function() { + return { tag: "DIV", cls: this._baseCls, children: [ + this.button, this.menuButton + ] }; + } + }); + +})( this.jQuery, this.app ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.RefreshButton = ui.SplitButton.extend({ + defaults: { + timer: -1 + }, + init: function( parent ) { + this.config.label = i18n.text("General.RefreshResults"); + this._super( parent ); + this.set( this.config.timer ); + }, + set: function( value ) { + this.value = value; + window.clearInterval( this._timer ); + if( this.value > 0 ) { + this._timer = window.setInterval( this._refresh_handler, this.value ); + } + }, + _click_handler: function() { + this._refresh_handler(); + }, + _select_handler: function( el, event ) { + this.set( event.value ); + this.fire("change", this ); + }, + _refresh_handler: function() { + this.fire("refresh", this ); + }, + _getItems: function() { + return [ + { text: i18n.text("General.ManualRefresh"), value: -1 }, + { text: i18n.text("General.RefreshQuickly"), value: 100 }, + { text: i18n.text("General.Refresh5seconds"), value: 5000 }, + { text: i18n.text("General.Refresh1minute"), value: 60000 } + ]; + } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.Toolbar = ui.AbstractWidget.extend({ + defaults: { + label: "", + left: [], + right: [] + }, + init: function(parent) { + this._super(); + this.el = $.joey(this._main_template()); + }, + _main_template: function() { + return { tag: "DIV", cls: "uiToolbar", children: [ + { tag: "DIV", cls: "pull-left", children: [ + { tag: "H2", text: this.config.label } + ].concat(this.config.left) }, + { tag: "DIV", cls: "pull-right", children: this.config.right } + ]}; + } + }); + +})( this.jQuery, this.app ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.AbstractPanel = ui.AbstractWidget.extend({ + defaults: { + body: null, // initial content of the body + modal: true, // create a modal panel - creates a div that blocks interaction with page + height: 'auto', // panel height + width: 400, // panel width (in pixels) + open: false, // show the panel when it is created + parent: 'BODY', // node that panel is attached to + autoRemove: false // remove the panel from the dom and destroy it when the widget is closed + }, + shared: { // shared data for all instances of ui.Panel and decendants + stack: [], // array of all open panels + modal: $( { tag: "DIV", id: "uiModal", css: { opacity: 0.2, position: "absolute", top: "0px", left: "0px" } } ) + }, + init: function() { + this._super(); + }, + open: function( ev ) { + this.el + .css( { visibility: "hidden" } ) + .appendTo( this.config.parent ) + .css( this._getPosition( ev ) ) + .css( { zIndex: (this.shared.stack.length ? (+this.shared.stack[this.shared.stack.length - 1].el.css("zIndex") + 10) : 100) } ) + .css( { visibility: "visible", display: "block" } ); + this.shared.stack.remove(this); + this.shared.stack.push(this); + this._setModal(); + $(document).bind("keyup", this._close_handler ); + this.fire("open", { source: this, event: ev } ); + return this; + }, + close: function() { + var index = this.shared.stack.indexOf(this); + if(index !== -1) { + this.shared.stack.splice(index, 1); + this.el.css( { left: "-2999px" } ); // move the dialog to the left rather than hiding to prevent ie6 rendering artifacts + this._setModal(); + this.fire("close", this ); + if(this.config.autoRemove) { + this.remove(); + } + } + return this; + }, + // close the panel and remove it from the dom, destroying it (you can not reuse the panel after calling remove) + remove: function() { + this.close(); + $(document).unbind("keyup", this._close_handler ); + this._super(); + }, + // starting at the top of the stack, find the first panel that wants a modal and put it just underneath, otherwise remove the modal + _setModal: function() { + for(var stackPtr = this.shared.stack.length - 1; stackPtr >= 0; stackPtr--) { + if(this.shared.stack[stackPtr].config.modal) { + this.shared.modal + .appendTo( document.body ) + .css( { zIndex: this.shared.stack[stackPtr].el.css("zIndex") - 5 } ) + .css( $(document).vSize().asSize() ); + return; + } + } + this.shared.modal.remove(); // no panels that want a modal were found + }, + _getPosition: function() { + return $(window).vSize() // get the current viewport size + .sub(this.el.vSize()) // subtract the size of the panel + .mod(function(s) { return s / 2; }) // divide by 2 (to center it) + .add($(document).vScroll()) // add the current scroll offset + .mod(function(s) { return Math.max(5, s); }) // make sure the panel is not off the edge of the window + .asOffset(); // and return it as a {top, left} object + }, + _close_handler: function( ev ) { + if( ev.type === "keyup" && ev.keyCode !== 27) { return; } // press esc key to close + $(document).unbind("keyup", this._close_handler); + this.close( ev ); + } + }); + +})( this.jQuery, this.app ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.DraggablePanel = ui.AbstractPanel.extend({ + defaults: { + // title: "" // (required) text for the panel title + }, + + _baseCls: "uiPanel", + + init: function() { + this._super(); + this.body = $(this._body_template()); + this.title = $(this._title_template()); + this.el = $.joey( this._main_template() ); + this.el.css( { width: this.config.width } ); + this.dd = new app.ux.DragDrop({ + pickupSelector: this.el.find(".uiPanel-titleBar"), + dragObj: this.el + }); + // open the panel if set in configuration + this.config.open && this.open(); + }, + + setBody: function(body) { + this.body.empty().append(body); + }, + _body_template: function() { return { tag: "DIV", cls: "uiPanel-body", css: { height: this.config.height + (this.config.height === 'auto' ? "" : "px" ) }, children: [ this.config.body ] }; }, + _title_template: function() { return { tag: "SPAN", cls: "uiPanel-title", text: this.config.title }; }, + _main_template: function() { return ( + { tag: "DIV", id: this.id(), cls: this._baseCls, children: [ + { tag: "DIV", cls: "uiPanel-titleBar", children: [ + { tag: "DIV", cls: "uiPanel-close", onclick: this._close_handler, text: "x" }, + this.title + ]}, + this.body + ] } + ); } + }); + +})( this.jQuery, this.app ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.InfoPanel = ui.DraggablePanel.extend({ + _baseCls: "uiPanel uiInfoPanel" + }); + +})( this.app ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.DialogPanel = ui.DraggablePanel.extend({ + _commit_handler: function(jEv) { + this.fire("commit", this, { jEv: jEv }); + }, + _main_template: function() { + var t = this._super(); + t.children.push(this._actionsBar_template()); + return t; + }, + _actionsBar_template: function() { + return { tag: "DIV", cls: "pull-right", children: [ + new app.ui.Button({ label: "Cancel", onclick: this._close_handler }), + new app.ui.Button({ label: "OK", onclick: this._commit_handler }) + ]}; + } + }); + +})( this.app ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.MenuPanel = ui.AbstractPanel.extend({ + defaults: { + items: [], // (required) an array of menu items + modal: false + }, + _baseCls: "uiMenuPanel", + init: function() { + this._super(); + this.el = $(this._main_template()); + }, + open: function(jEv) { + this._super(jEv); + var cx = this; setTimeout(function() { $(document).bind("click", cx._close_handler); }, 50); + }, + _getItems: function() { + return this.config.items; + }, + _close_handler: function(jEv) { + this._super(jEv); + $(document).unbind("click", this._close_handler); + }, + _main_template: function() { + return { tag: "DIV", cls: this._baseCls, children: this._getItems().map(this._menuItem_template, this) }; + }, + _menuItem_template: function(item) { + var dx = item.disabled ? { onclick: function() {} } : {}; + return { tag: "LI", cls: "uiMenuPanel-item" + (item.disabled ? " disabled" : "") + (item.selected ? " selected" : ""), children: [ $.extend({ tag: "DIV", cls: "uiMenuPanel-label" }, item, dx ) ] }; + }, + _getPosition: function(jEv) { + var right = !! $(jEv.target).parents(".pull-right").length; + var parent = $(jEv.target).closest("BUTTON"); + return parent.vOffset() + .addY(parent.vSize().y) + .addX( right ? parent.vSize().x - this.el.vOuterSize().x : 0 ) + .asOffset(); + } + }); + +})( this.app ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.SelectMenuPanel = ui.MenuPanel.extend({ + defaults: { + items: [], // (required) an array of menu items + value: null + }, + _baseCls: "uiSelectMenuPanel uiMenuPanel", + init: function() { + this.value = this.config.value; + this._super(); + }, + _getItems: function() { + return this.config.items.map( function( item ) { + return { + text: item.text, + selected: this.value === item.value, + onclick: function( jEv ) { + var el = $( jEv.target ).closest("LI"); + el.parent().children().removeClass("selected"); + el.addClass("selected"); + this.fire( "select", this, { value: item.value } ); + this.value = item.value; + }.bind(this) + }; + }, this ); + + } + }); + +})( this.app ); + +( function( $, app ) { + + var ui = app.ns("ui"); + + ui.Table = ui.AbstractWidget.extend({ + defaults: { + store: null, // (required) implements interface app.data.DataSourceInterface + height: 0, + width: 0 + }, + _baseCls: "uiTable", + init: function(parent) { + this._super(); + this.initElements(parent); + this.config.store.on("data", this._data_handler); + }, + attach: function(parent) { + if(parent) { + this._super(parent); + this._reflow(); + } + }, + initElements: function(parent) { + this.el = $.joey(this._main_template()); + this.body = this.el.find(".uiTable-body"); + this.headers = this.el.find(".uiTable-headers"); + this.tools = this.el.find(".uiTable-tools"); + this.attach( parent ); + }, + _data_handler: function(store) { + this.tools.text(store.summary); + this.headers.empty().append(this._header_template(store.columns)); + this.body.empty().append(this._body_template(store.data, store.columns)); + this._reflow(); + }, + _reflow: function() { + var firstCol = this.body.find("TR:first TH.uiTable-header-cell > DIV"), + headers = this.headers.find("TR:first TH.uiTable-header-cell > DIV"); + for(var i = 0; i < headers.length; i++) { + $(headers[i]).width( $(firstCol[i]).width() ); + } + this._scroll_handler(); + }, + _scroll_handler: function(ev) { + this.el.find(".uiTable-headers").scrollLeft(this.body.scrollLeft()); + }, + _dataClick_handler: function(ev) { + var row = $(ev.target).closest("TR"); + if(row.length) { + this.fire("rowClick", this, { row: row } ); + } + }, + _headerClick_handler: function(ev) { + var header = $(ev.target).closest("TH.uiTable-header-cell"); + if(header.length) { + this.fire("headerClick", this, { header: header, column: header.data("column"), dir: header.data("dir") }); + } + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), css: { width: this.config.width + "px" }, cls: this._baseCls, children: [ + { tag: "DIV", cls: "uiTable-tools" }, + { tag: "DIV", cls: "uiTable-headers", onclick: this._headerClick_handler }, + { tag: "DIV", cls: "uiTable-body", + onclick: this._dataClick_handler, + onscroll: this._scroll_handler, + css: { height: this.config.height + "px", width: this.config.width + "px" } + } + ] }; + }, + _header_template: function(columns) { + var ret = { tag: "TABLE", children: [ this._headerRow_template(columns) ] }; + ret.children[0].children.push(this._headerEndCap_template()); + return ret; + }, + _headerRow_template: function(columns) { + return { tag: "TR", cls: "uiTable-header-row", children: columns.map(function(column) { + var dir = ((this.config.store.sort.column === column) && this.config.store.sort.dir) || "none"; + return { tag: "TH", data: { column: column, dir: dir }, cls: "uiTable-header-cell" + ((dir !== "none") ? " uiTable-sort" : ""), children: [ + { tag: "DIV", children: [ + { tag: "DIV", cls: "uiTable-headercell-menu", text: dir === "asc" ? "\u25b2" : "\u25bc" }, + { tag: "DIV", cls: "uiTable-headercell-text", text: column } + ]} + ]}; + }, this)}; + }, + _headerEndCap_template: function() { + return { tag: "TH", cls: "uiTable-headerEndCap", children: [ { tag: "DIV" } ] }; + }, + _body_template: function(data, columns) { + return { tag: "TABLE", children: [] + .concat(this._headerRow_template(columns)) + .concat(data.map(function(row) { + return { tag: "TR", data: { row: row }, cls: "uiTable-row", children: columns.map(function(column){ + return { tag: "TD", cls: "uiTable-cell", children: [ { tag: "DIV", text: (row[column] || "").toString() } ] }; + })}; + })) + }; + } + + }); + +})( this.jQuery, this.app ); + +( function( $, app, joey ) { + + var ui = app.ns("ui"); + + var CELL_SEPARATOR = ","; + var CELL_QUOTE = '"'; + var LINE_SEPARATOR = "\r\n"; + + ui.CSVTable = ui.AbstractWidget.extend({ + defaults: { + results: null + }, + _baseCls: "uiCSVTable", + init: function( parent ) { + this._super(); + var results = this.config.results.hits.hits; + var columns = this._parseResults( results ); + this._downloadButton = new ui.Button({ + label: "Generate Download Link", + onclick: this._downloadLinkGenerator_handler + }); + this._downloadLink = $.joey( { tag: "A", text: "download", }); + this._downloadLink.hide(); + this._csvText = this._csv_template( columns, results ); + this.el = $.joey( this._main_template() ); + this.attach( parent ); + }, + _downloadLinkGenerator_handler: function() { + var csvData = new Blob( [ this._csvText ], { type: 'text/csv' }); + var csvURL = URL.createObjectURL( csvData ); + this._downloadLink.attr( "href", csvURL ); + this._downloadLink.show(); + }, + _parseResults: function( results ) { + var columnPaths = {}; + (function parse( path, obj ) { + if( obj instanceof Array ) { + for( var i = 0; i < obj.length; i++ ) { + parse( path, obj[i] ); + } + } else if( typeof obj === "object" ) { + for( var prop in obj ) { + parse( path + "." + prop, obj[ prop ] ); + } + } else { + columnPaths[ path ] = true; + } + })( "root", results ); + var columns = []; + for( var column in columnPaths ) { + columns.push( column.split(".").slice(1) ); + } + return columns; + }, + _main_template: function() { return ( + { tag: "DIV", cls: this._baseCls, id: this.id(), children: [ + this._downloadButton, + this._downloadLink, + { tag: "PRE", text: this._csvText } + ] } + ); }, + _csv_template: function( columns, results ) { + return this._header_template( columns ) + LINE_SEPARATOR + this._results_template( columns, results ); + }, + _header_template: function( columns ) { + return columns.map( function( column ) { + return column.join("."); + }).join( CELL_SEPARATOR ); + }, + _results_template: function( columns, results ) { + return results.map( function( result ) { + return columns.map( function( column ) { + var l = 0, + ptr = result; + while( l !== column.length && ptr != null ) { + ptr = ptr[ column[ l++ ] ]; + } + return ( ptr == null ) ? "" : ( CELL_QUOTE + ptr.toString().replace(/"/g, '""') + CELL_QUOTE ); + }).join( CELL_SEPARATOR ); + }).join( LINE_SEPARATOR ); + } + }); + +})( this.jQuery, this.app, this.joey ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.JsonPretty = ui.AbstractWidget.extend({ + defaults: { + obj: null + }, + init: function(parent) { + this._super(); + this.el = $(this._main_template()); + this.attach(parent); + this.el.click(this._click_handler); + }, + + _click_handler: function(jEv) { + var t = $(jEv.target).closest(".uiJsonPretty-name").closest("LI"); + if(t.length === 0 || t.parents(".uiJsonPretty-minimised").length > 0) { return; } + t.toggleClass("uiJsonPretty-minimised"); + jEv.stopPropagation(); + }, + + _main_template: function() { + try { + return { tag: "DIV", cls: "uiJsonPretty", children: this.pretty.parse(this.config.obj) }; + } catch (error) { + throw "JsonPretty error: " + error.message; + } + }, + + pretty: { // from https://github.com/RyanAmos/Pretty-JSON/blob/master/pretty_json.js + "expando" : function(value) { + return (value && (/array|object/i).test(value.constructor.name)) ? "expando" : ""; + }, + "parse": function (member) { + return this[(member == null) ? 'null' : member.constructor.name.toLowerCase()](member); + }, + "null": function (value) { + return this['value']('null', 'null'); + }, + "array": function (value) { + var results = []; + var lastItem = value.length - 1; + value.forEach(function( v, i ) { + results.push({ tag: "LI", cls: this.expando(v), children: [ this['parse'](v) ] }); + if( i !== lastItem ) { + results.push(","); + } + }, this); + return [ "[ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-array", children: results } : null), "]" ]; + }, + "object": function (value) { + var results = []; + var keys = Object.keys( value ); + var lastItem = keys.length - 1; + keys.forEach( function( key, i ) { + var children = [ this['value']( 'name', '"' + key + '"' ), ": ", this['parse']( value[ key ]) ]; + if( i !== lastItem ) { + children.push(","); + } + results.push( { tag: "LI", cls: this.expando( value[ key ] ), children: children } ); + }, this); + return [ "{ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-object", children: results } : null ), "}" ]; + }, + "number": function (value) { + return this['value']('number', value.toString()); + }, + "string": function (value) { + if (/^(http|https|file):\/\/[^\s]+$/.test(value)) { + return this['link']( value ); + } else { + return this['value']('string', '"' + value.toString() + '"'); + } + }, + "boolean": function (value) { + return this['value']('boolean', value.toString()); + }, + "link": function( value ) { + return this['value']("string", { tag: "A", href: value, target: "_blank", text: '"' + value + '"' } ); + }, + "value": function (type, value) { + if (/^(http|https|file):\/\/[^\s]+$/.test(value)) { + } + return { tag: "SPAN", cls: "uiJsonPretty-" + type, text: value }; + } + } + }); + +})( this.jQuery, this.app ); + +(function( $, app ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.PanelForm = ui.AbstractWidget.extend({ + defaults: { + fields: null // (required) instanceof app.ux.FieldCollection + }, + init: function(parent) { + this._super(); + this.el = $.joey(this._main_template()); + this.attach( parent ); + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiPanelForm", children: this.config.fields.fields.map(this._field_template, this) }; + }, + _field_template: function(field) { + return { tag: "LABEL", cls: "uiPanelForm-field", children: [ + { tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] }, + field + ]}; + } + }); + +})( this.jQuery, this.app ); + +(function( app ){ + + var ui = app.ns("ui"); + + ui.HelpPanel = ui.InfoPanel.extend({ + defaults: { + ref: "", + open: true, + autoRemove: true, + modal: false, + width: 500, + height: 450, + title: i18n.text("General.Help") + }, + init: function() { + this._super(); + this.body.append(i18n.text(this.config.ref)); + } + }); + +})( this.app ); + +(function( app ) { + + var ui = app.ns("ui"); + + ui.JsonPanel = ui.InfoPanel.extend({ + defaults: { + json: null, // (required) + modal: false, + open: true, + autoRemove: true, + height: 500, + width: 600 + }, + + _baseCls: "uiPanel uiInfoPanel uiJsonPanel", + + _body_template: function() { + var body = this._super(); + body.children = [ new ui.JsonPretty({ obj: this.config.json }) ]; + return body; + } + }); + +})( this.app ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.SidebarSection = ui.AbstractWidget.extend({ + defaults: { + title: "", + help: null, + body: null, + open: false + }, + init: function() { + this._super(); + this.el = $.joey( this._main_template() ); + this.body = this.el.children(".uiSidebarSection-body"); + this.config.open && ( this.el.addClass("shown") && this.body.css("display", "block") ); + }, + _showSection_handler: function( ev ) { + var shown = $( ev.target ).closest(".uiSidebarSection") + .toggleClass("shown") + .children(".uiSidebarSection-body").slideToggle(200, function() { this.fire("animComplete", this); }.bind(this)) + .end() + .hasClass("shown"); + this.fire(shown ? "show" : "hide", this); + }, + _showHelp_handler: function( ev ) { + new ui.HelpPanel({ref: this.config.help}); + ev.stopPropagation(); + }, + _main_template: function() { return ( + { tag: "DIV", cls: "uiSidebarSection", children: [ + (this.config.title && { tag: "DIV", cls: "uiSidebarSection-head", onclick: this._showSection_handler, children: [ + this.config.title, + ( this.config.help && { tag: "SPAN", cls: "uiSidebarSection-help pull-right", onclick: this._showHelp_handler, text: i18n.text("General.HelpGlyph") } ) + ] }), + { tag: "DIV", cls: "uiSidebarSection-body", children: [ this.config.body ] } + ] } + ); } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.ResultTable = ui.Table.extend({ + defaults: { + width: 500, + height: 400 + }, + + init: function() { + this._super(); + this.on("rowClick", this._showPreview_handler); + this.selectedRow = null; + $(document).bind("keydown", this._nav_handler); + }, + remove: function() { + $(document).unbind("keydown", this._nav_handler); + this._super(); + }, + attach: function(parent) { + if(parent) { + var height = parent.height() || ( $(document).height() - parent.offset().top - 41 ); // 41 = height in px of .uiTable-tools + uiTable-header + var width = parent.width(); + this.el.width( width ); + this.body.width( width ).height( height ); + } + this._super(parent); + }, + showPreview: function(row) { + row.addClass("selected"); + this.preview = new app.ui.JsonPanel({ + title: i18n.text("Browser.ResultSourcePanelTitle"), + json: row.data("row")._source, + onClose: function() { row.removeClass("selected"); } + }); + }, + _nav_handler: function(jEv) { + if(jEv.keyCode !== 40 && jEv.keyCode !== 38) { + return; + } + this.selectedRow && this.preview && this.preview.remove(); + if(jEv.keyCode === 40) { // up arrow + this.selectedRow = this.selectedRow ? this.selectedRow.next("TR") : this.body.find("TR:first"); + } else if(jEv.keyCode === 38) { // down arrow + this.selectedRow = this.selectedRow ? this.selectedRow.prev("TR") : this.body.find("TR:last"); + } + this.selectedRow && this.showPreview(this.selectedRow); + }, + _showPreview_handler: function(obj, data) { + this.showPreview(this.selectedRow = data.row); + } + }); + +})( this.jQuery, this.app ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.QueryFilter = ui.AbstractWidget.extend({ + defaults: { + metadata: null, // (required) instanceof app.data.MetaData + query: null // (required) instanceof app.data.Query that the filters will act apon + }, + init: function() { + this._super(); + this.metadata = this.config.metadata; + this.query = this.config.query; + this.el = $(this._main_template()); + }, + helpTypeMap: { + "date" : "QueryFilter.DateRangeHelp" + }, + requestUpdate: function(jEv) { + if(jEv && jEv.originalEvent) { // we only want to update on real user interaction not generated events + this.query.setPage(1); + this.query.query(); + } + }, + getSpec: function(fieldName) { + return this.metadata.fields[fieldName]; + }, + _selectAlias_handler: function(jEv) { + var indices = (jEv.target.selectedIndex === 0) ? [] : this.metadata.getIndices($(jEv.target).val()); + $(".uiQueryFilter-index").each(function(i, el) { + var jEl = $(el); + if(indices.contains(jEl.text()) !== jEl.hasClass("selected")) { + jEl.click(); + } + }); + this.requestUpdate(jEv); + }, + _selectIndex_handler: function(jEv) { + var jEl = $(jEv.target).closest(".uiQueryFilter-index"); + jEl.toggleClass("selected"); + var selected = jEl.hasClass("selected"); + this.query.setIndex(jEl.text(), selected); + if(selected) { + var types = this.metadata.getTypes(this.query.indices); + this.el.find("DIV.uiQueryFilter-type.selected").each(function(n, el) { + if(! types.contains($(el).text())) { + $(el).click(); + } + }); + } + this.requestUpdate(jEv); + }, + _selectType_handler: function(jEv) { + var jEl = $(jEv.target).closest(".uiQueryFilter-type"); + jEl.toggleClass("selected"); + var type = jEl.text(), selected = jEl.hasClass("selected"); + this.query.setType(type, selected); + if(selected) { + var indices = this.metadata.types[type].indices; + // es throws a 500 if searching an index for a type it does not contain - so we prevent that + this.el.find("DIV.uiQueryFilter-index.selected").each(function(n, el) { + if(! indices.contains($(el).text())) { + $(el).click(); + } + }); + // es throws a 500 if you specify types from different indices with _all + jEl.siblings(".uiQueryFilter-type.selected").forEach(function(el) { + if(this.metadata.types[$(el).text()].indices.intersection(indices).length === 0) { + $(el).click(); + } + }, this); + } + this.requestUpdate(jEv); + }, + _openFilter_handler: function(section) { + var field_name = section.config.title; + if(! section.loaded) { + var spec = this.getSpec(field_name); + if(spec.core_type === "string") { + section.body.append(this._textFilter_template(spec)); + } else if(spec.core_type === "date") { + section.body.append(this._dateFilter_template(spec)); + section.body.append(new ui.DateHistogram({ printEl: section.body.find("INPUT"), cluster: this.cluster, query: this.query, spec: spec })); + } else if(spec.core_type === "number") { + section.body.append(this._numericFilter_template(spec)); + } else if(spec.core_type === 'boolean') { + section.body.append(this._booleanFilter_template(spec)); + } else if (spec.core_type === 'multi_field') { + section.body.append(this._multiFieldFilter_template(section, spec)); + } + section.loaded = true; + } + section.on("animComplete", function(section) { section.body.find("INPUT").focus(); }); + }, + _textFilterChange_handler: function(jEv) { + var jEl = $(jEv.target).closest("INPUT"); + var val = jEl.val(); + var spec = jEl.data("spec"); + var uqids = jEl.data("uqids") || []; + uqids.forEach(function(uqid) { + uqid && this.query.removeClause(uqid); + }, this); + if(val.length) { + if(jEl[0] === document.activeElement && jEl[0].selectionStart === jEl[0].selectionEnd) { + val = val.replace(new RegExp("(.{"+jEl[0].selectionStart+"})"), "$&*"); + } + uqids = val.split(/\s+/).map(function(term) { + // Figure out the actual field name - needed for multi_field, because + // querying for "field.field" will not work. Simply "field" must be used + // if nothing is aliased. + var fieldNameParts = spec.field_name.split('.'); + var part = fieldNameParts.length - 1; + var name = fieldNameParts[part]; + while (part >= 1) { + if (fieldNameParts[part] !== fieldNameParts[part - 1]) { + name = fieldNameParts[part - 1] + "." + name; + } + part--; + } + return term && this.query.addClause(term, name, "wildcard", "must"); + }, this); + } + jEl.data("uqids", uqids); + this.requestUpdate(jEv); + }, + _dateFilterChange_handler: function(jEv) { + var jEl = $(jEv.target).closest("INPUT"); + var val = jEl.val(); + var spec = jEl.data("spec"); + var uqid = jEl.data("uqid") || null; + var range = window.dateRangeParser.parse(val); + var lastRange = jEl.data("lastRange"); + if(!range || (lastRange && lastRange.start === range.start && lastRange.end === range.end)) { + return; + } + uqid && this.query.removeClause(uqid); + if((range.start && range.end) === null) { + uqid = null; + } else { + var value = {}; + if( range.start ) { + value["gte"] = range.start; + } + if( range.end ) { + value["lte"] = range.end; + } + uqid = this.query.addClause( value, spec.field_name, "range", "must"); + } + jEl.data("lastRange", range); + jEl.siblings(".uiQueryFilter-rangeHintFrom") + .text(i18n.text("QueryFilter.DateRangeHint.from", range.start && new Date(range.start).toUTCString())); + jEl.siblings(".uiQueryFilter-rangeHintTo") + .text(i18n.text("QueryFilter.DateRangeHint.to", range.end && new Date(range.end).toUTCString())); + jEl.data("uqid", uqid); + this.requestUpdate(jEv); + }, + _numericFilterChange_handler: function(jEv) { + var jEl = $(jEv.target).closest("INPUT"); + var val = jEl.val(); + var spec = jEl.data("spec"); + var uqid = jEl.data("uqid") || null; + var lastRange = jEl.data("lastRange"); + var range = (function(val) { + var ops = val.split(/->|<>|/.test(val)) { + return { gte: (ops[0] - ops[1]), lte: (ops[0] + ops[1]) }; + } else if(/->| .uiBrowser-filter") ); + this.resultTable = new ui.ResultTable( { + onHeaderClick: this._changeSort_handler, + store: this.store + } ); + this.resultTable.attach( this.el.find("> .uiBrowser-table") ); + this.updateResults(); + }.bind(this) + }); + }, + updateResults: function() { + this.query.query(); + }, + _changeSort_handler: function(table, wEv) { + this.query.setSort(wEv.column, wEv.dir === "desc"); + this.query.setPage(1); + this.query.query(); + }, + _main_template: function() { + return { tag: "DIV", cls: "uiBrowser", children: [ + new ui.Toolbar({ + label: i18n.text("Browser.Title"), + left: [ ], + right: [ this._refreshButton ] + }), + { tag: "DIV", cls: "uiBrowser-filter" }, + { tag: "DIV", cls: "uiBrowser-table" } + ] }; + } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app, i18n, raphael ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + var services = app.ns("services"); + + ui.AnyRequest = ui.Page.extend({ + defaults: { + cluster: null, // (required) instanceof app.services.Cluster + path: "_search", // default uri to send a request to + query: { query: { match_all: { }}}, + transform: " return root;" // default transformer function (does nothing) + }, + init: function(parent) { + this._super(); + this.prefs = services.Preferences.instance(); + this.history = this.prefs.get("anyRequest-history") || [ { type: "POST", path: this.config.path, query : JSON.stringify(this.config.query), transform: this.config.transform } ]; + this.el = $.joey(this._main_template()); + this.base_uriEl = this.el.find("INPUT[name=base_uri]"); + this.pathEl = this.el.find("INPUT[name=path]"); + this.typeEl = this.el.find("SELECT[name=method]"); + this.dataEl = this.el.find("TEXTAREA[name=body]"); + this.prettyEl = this.el.find("INPUT[name=pretty]"); + this.transformEl = this.el.find("TEXTAREA[name=transform]"); + this.asGraphEl = this.el.find("INPUT[name=asGraph]"); + this.asTableEl = this.el.find("INPUT[name=asTable]"); + this.asJsonEl = this.el.find("INPUT[name=asJson]"); + this.cronEl = this.el.find("SELECT[name=cron]"); + this.outEl = this.el.find("DIV.uiAnyRequest-out"); + this.errEl = this.el.find("DIV.uiAnyRequest-jsonErr"); + this.typeEl.val("GET"); + this.attach(parent); + this.setHistoryItem(this.history[this.history.length - 1]); + }, + setHistoryItem: function(item) { + this.pathEl.val(item.path); + this.typeEl.val(item.type); + this.dataEl.val(item.query); + this.transformEl.val(item.transform); + }, + _request_handler: function( ev ) { + if(! this._validateJson_handler()) { + return; + } + var path = this.pathEl.val(), + type = this.typeEl.val(), + query = JSON.stringify(JSON.parse(this.dataEl.val())), + transform = this.transformEl.val(), + base_uri = this.base_uriEl.val(); + if( ev ) { // if the user click request + if(this.timer) { + window.clearTimeout(this.timer); // stop any cron jobs + } + delete this.prevData; // remove data from previous cron runs + this.outEl.text(i18n.text("AnyRequest.Requesting")); + if( ! /\/$/.test( base_uri )) { + base_uri += "/"; + this.base_uriEl.val( base_uri ); + } + for(var i = 0; i < this.history.length; i++) { + if(this.history[i].path === path && + this.history[i].type === type && + this.history[i].query === query && + this.history[i].transform === transform) { + this.history.splice(i, 1); + } + } + this.history.push({ + path: path, + type: type, + query: query, + transform: transform + }); + this.history.slice(250); // make sure history does not get too large + this.prefs.set( "anyRequest-history", this.history ); + this.el.find("UL.uiAnyRequest-history") + .empty() + .append($( { tag: "UL", children: this.history.map(this._historyItem_template, this) }).children()) + .children().find(":last-child").each(function(i, j) { j.scrollIntoView(false); }).end() + .scrollLeft(0); + } + this.config.cluster.request({ + url: base_uri + path, + type: type, + data: query, + success: this._responseWriter_handler, + error: this._responseError_handler + }); + }, + _responseError_handler: function (response) { + var obj; + try { + obj = JSON.parse(response.responseText); + if (obj) { + this._responseWriter_handler(obj); + } + } catch (err) { + } + }, + _responseWriter_handler: function(data) { + this.outEl.empty(); + try { + data = (new Function("root", "prev", this.transformEl.val()))(data, this.prevData) + } catch(e) { + this.errEl.text(e.message); + return; + } + if(this.asGraphEl.attr("checked")) { + var w = this.outEl.width(); + raphael(this.outEl[0], w - 10, 300) + .g.barchart(10, 10, w - 20, 280, [data]); + } + if(this.asTableEl.attr("checked")) { + try { + var store = new app.data.ResultDataSourceInterface(); + this.outEl.append(new app.ui.ResultTable({ + width: this.outEl.width() - 23, + store: store + } ) ); + store.results(data); + } catch(e) { + this.errEl.text("Results Table Failed: " + e.message); + } + } + if(this.asJsonEl.attr("checked")) { + this.outEl.append(new ui.JsonPretty({ obj: data })); + } + if(this.cronEl.val() > 0) { + this.timer = window.setTimeout(function(){ + this._request_handler(); + }.bind(this), this.cronEl.val()); + } + this.prevData = data; + }, + _validateJson_handler: function( ev ) { + /* if the textarea is empty, we replace its value by an empty JSON object : "{}" and the request goes on as usual */ + var jsonData = this.dataEl.val().trim(); + var j; + if(jsonData === "") { + jsonData = "{}"; + this.dataEl.val( jsonData ); + } + try { + j = JSON.parse(jsonData); + } catch(e) { + this.errEl.text(e.message); + return false; + } + this.errEl.text(""); + if(this.prettyEl.attr("checked")) { + this.dataEl.val(JSON.stringify(j, null, " ")); + } + return true; + }, + _historyClick_handler: function( ev ) { + var item = $( ev.target ).closest( "LI" ).data( "item" ); + this.setHistoryItem( item ); + }, + _main_template: function() { + return { tag: "DIV", cls: "anyRequest", children: [ + { tag: "DIV", cls: "uiAnyRequest-request", children: [ + new app.ui.SidebarSection({ + open: false, + title: i18n.text("AnyRequest.History"), + body: { tag: "UL", onclick: this._historyClick_handler, cls: "uiAnyRequest-history", children: this.history.map(this._historyItem_template, this) } + }), + new app.ui.SidebarSection({ + open: true, + title: i18n.text("AnyRequest.Query"), + body: { tag: "DIV", children: [ + { tag: "INPUT", type: "text", name: "base_uri", value: this.config.cluster.config.base_uri }, + { tag: "BR" }, + { tag: "INPUT", type: "text", name: "path", value: this.config.path }, + { tag: "SELECT", name: "method", children: ["POST", "GET", "PUT", "HEAD", "DELETE"].map(ut.option_template) }, + { tag: "TEXTAREA", name: "body", rows: 20, text: JSON.stringify(this.config.query) }, + { tag: "BUTTON", css: { cssFloat: "right" }, type: "button", children: [ { tag: "B", text: i18n.text("AnyRequest.Request") } ], onclick: this._request_handler }, + { tag: "BUTTON", type: "button", text: i18n.text("AnyRequest.ValidateJSON"), onclick: this._validateJson_handler }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "pretty" }, i18n.text("AnyRequest.Pretty") ] }, + { tag: "DIV", cls: "uiAnyRequest-jsonErr" } + ]} + }), + new app.ui.SidebarSection({ + title: i18n.text("AnyRequest.Transformer"), + help: "AnyRequest.TransformerHelp", + body: { tag: "DIV", children: [ + { tag: "CODE", text: "function(root, prev) {" }, + { tag: "BR" }, + { tag: "TEXTAREA", name: "transform", rows: 5, text: this.config.transform }, + { tag: "BR" }, + { tag: "CODE", text: "}" } + ] } + }), + new app.ui.SidebarSection({ + title: i18n.text("AnyRequest.RepeatRequest"), + body: { tag: "DIV", children: [ + i18n.text("AnyRequest.RepeatRequestSelect"), " ", + { tag: "SELECT", name: "cron", children: [ + { value: 0, text: "do not repeat" }, + { value: 1000, text: "second" }, + { value: 1000 * 2, text: "2 seconds" }, + { value: 1000 * 5, text: "5 seconds" }, + { value: 1000 * 20, text: "20 seconds" }, + { value: 1000 * 60, text: "minute" }, + { value: 1000 * 60 * 10, text: "10 minutes" }, + { value: 1000 * 60 * 60, text: "hour" } + ].map(function(op) { return $.extend({ tag: "OPTION"}, op); }) } + ] } + }), + new app.ui.SidebarSection({ + title: i18n.text("AnyRequest.DisplayOptions"), + help: "AnyRequest.DisplayOptionsHelp", + body: { tag: "DIV", children: [ + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", checked: true, name: "asJson" }, i18n.text("AnyRequest.AsJson") ] }, + { tag: "BR" }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asGraph" }, i18n.text("AnyRequest.AsGraph") ] }, + { tag: "BR" }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asTable" }, i18n.text("AnyRequest.AsTable") ] } + ] } + }) + ] }, + { tag: "DIV", cls: "uiAnyRequest-out" } + ] }; + }, + _historyItem_template: function(item) { + return { tag: "LI", cls: "booble", data: { item: item }, children: [ + { tag: "SPAN", text: item.path }, + " ", + { tag: "EM", text: item.query }, + " ", + { tag: "SPAN", text: item.transform } + ] }; + } + }); + +})( this.jQuery, this.app, this.i18n, this.Raphael ); + +(function( app, i18n, joey ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.NodesView = ui.AbstractWidget.extend({ + defaults: { + interactive: true, + aliasRenderer: "list", + scaleReplicas: 1, + cluster: null, + data: null + }, + init: function() { + this._super(); + this.interactive = this.config.interactive; + this.cluster = this.config.cluster; + this._aliasRenderFunction = { + "none": this._aliasRender_template_none, + "list": this._aliasRender_template_list, + "full": this._aliasRender_template_full + }[ this.config.aliasRenderer ]; + this._styleSheetEl = joey({ tag: "STYLE", text: ".uiNodesView-nullReplica, .uiNodesView-replica { zoom: " + this.config.scaleReplicas + " }" }); + this.el = $( this._main_template( this.config.data.cluster, this.config.data.indices ) ); + }, + + _newAliasAction_handler: function( index ) { + var fields = new app.ux.FieldCollection({ + fields: [ + new ui.TextField({ label: i18n.text("AliasForm.AliasName"), name: "alias", require: true }) + ] + }); + var dialog = new ui.DialogPanel({ + title: i18n.text("AliasForm.NewAliasForIndexName", index.name), + body: new ui.PanelForm({ fields: fields }), + onCommit: function(panel, args) { + if(fields.validate()) { + var data = fields.getData(); + var command = { + "actions" : [ + { "add" : { "index" : index.name, "alias" : data["alias"] } } + ] + }; + this.config.cluster.post('_aliases', JSON.stringify(command), function(d) { + dialog.close(); + alert(JSON.stringify(d)); + this.fire("redraw"); + }.bind(this) ); + } + }.bind(this) + }).open(); + }, + _postIndexAction_handler: function(action, index, redraw) { + this.cluster.post(encodeURIComponent( index.name ) + "/" + encodeURIComponent( action ), null, function(r) { + alert(JSON.stringify(r)); + redraw && this.fire("redraw"); + }.bind(this)); + }, + _optimizeIndex_handler: function(index) { + var fields = new app.ux.FieldCollection({ + fields: [ + new ui.TextField({ label: i18n.text("OptimizeForm.MaxSegments"), name: "max_num_segments", value: "1", require: true }), + new ui.CheckField({ label: i18n.text("OptimizeForm.ExpungeDeletes"), name: "only_expunge_deletes", value: false }), + new ui.CheckField({ label: i18n.text("OptimizeForm.FlushAfter"), name: "flush", value: true }), + new ui.CheckField({ label: i18n.text("OptimizeForm.WaitForMerge"), name: "wait_for_merge", value: false }) + ] + }); + var dialog = new ui.DialogPanel({ + title: i18n.text("OptimizeForm.OptimizeIndex", index.name), + body: new ui.PanelForm({ fields: fields }), + onCommit: function( panel, args ) { + if(fields.validate()) { + this.cluster.post(encodeURIComponent( index.name ) + "/_optimize", fields.getData(), function(r) { + alert(JSON.stringify(r)); + }); + dialog.close(); + } + }.bind(this) + }).open(); + }, + _testAnalyser_handler: function(index) { + this.cluster.get(encodeURIComponent( index.name ) + "/_analyze?text=" + encodeURIComponent( prompt( i18n.text("IndexCommand.TextToAnalyze") ) ), function(r) { + alert(JSON.stringify(r, true, " ")); + }); + }, + _deleteIndexAction_handler: function(index) { + if( prompt( i18n.text("AliasForm.DeleteAliasMessage", i18n.text("Command.DELETE"), index.name ) ) === i18n.text("Command.DELETE") ) { + this.cluster["delete"](encodeURIComponent( index.name ), null, function(r) { + alert(JSON.stringify(r)); + this.fire("redraw"); + }.bind(this) ); + } + }, + _shutdownNode_handler: function(node) { + if(prompt( i18n.text("IndexCommand.ShutdownMessage", i18n.text("Command.SHUTDOWN"), node.cluster.name ) ) === i18n.text("Command.SHUTDOWN") ) { + this.cluster.post( "_cluster/nodes/" + encodeURIComponent( node.name ) + "/_shutdown", null, function(r) { + alert(JSON.stringify(r)); + this.fire("redraw"); + }.bind(this)); + } + }, + _deleteAliasAction_handler: function( index, alias ) { + if( confirm( i18n.text("Command.DeleteAliasMessage" ) ) ) { + var command = { + "actions" : [ + { "remove" : { "index" : index.name, "alias" : alias.name } } + ] + }; + this.config.cluster.post('_aliases', JSON.stringify(command), function(d) { + alert(JSON.stringify(d)); + this.fire("redraw"); + }.bind(this) ); + } + }, + + _replica_template: function(replica) { + var r = replica.replica; + return { tag: "DIV", + cls: "uiNodesView-replica" + (r.primary ? " primary" : "") + ( " state-" + r.state ), + text: r.shard.toString(), + onclick: function() { new ui.JsonPanel({ + json: replica.status || r, + title: r.index + "/" + r.node + " [" + r.shard + "]" }); + } + }; + }, + _routing_template: function(routing) { + var cell = { tag: "TD", cls: "uiNodesView-routing" + (routing.open ? "" : " close"), children: [] }; + for(var i = 0; i < routing.replicas.length; i++) { + if(i % routing.max_number_of_shards === 0 && i > 0) { + cell.children.push({ tag: "BR" }); + } + if( routing.replicas[i] ) { + cell.children.push(this._replica_template(routing.replicas[i])); + } else { + cell.children.push( { tag: "DIV", cls: "uiNodesView-nullReplica" } ); + } + } + return cell; + }, + _nodeControls_template: function( node ) { return ( + { tag: "DIV", cls: "uiNodesView-controls", children: [ + new ui.MenuButton({ + label: i18n.text("NodeInfoMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("NodeInfoMenu.ClusterNodeInfo"), onclick: function() { new ui.JsonPanel({ json: node.cluster, title: node.name });} }, + { text: i18n.text("NodeInfoMenu.NodeStats"), onclick: function() { new ui.JsonPanel({ json: node.stats, title: node.name });} } + ] + }) + }), + new ui.MenuButton({ + label: i18n.text("NodeActionsMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("NodeActionsMenu.Shutdown"), onclick: function() { this._shutdownNode_handler(node); }.bind(this) } + ] + }) + }) + ] } + ); }, + _nodeIcon_template: function( node ) { + var icon, alt; + if( node.name === "Unassigned" ) { + icon = "fa-exclamation-triangle"; + alt = i18n.text( "NodeType.Unassigned" ); + } else if( node.cluster.settings && "tribe" in node.cluster.settings) { + icon = "fa-sitemap"; + alt = i18n.text("NodeType.Tribe" ); + } else { + icon = "fa-" + (node.master_node ? "star" : "circle") + (node.data_node ? "" : "-o" ); + alt = i18n.text( node.master_node ? ( node.data_node ? "NodeType.Master" : "NodeType.Coord" ) : ( node.data_node ? "NodeType.Worker" : "NodeType.Client" ) ); + } + return { tag: "TD", title: alt, cls: "uiNodesView-icon", children: [ + { tag: "SPAN", cls: "fa fa-2x " + icon } + ] }; + }, + _node_template: function(node) { + return { tag: "TR", cls: "uiNodesView-node" + (node.master_node ? " master": ""), children: [ + this._nodeIcon_template( node ), + { tag: "TH", children: node.name === "Unassigned" ? [ + { tag: "H3", text: node.name } + ] : [ + { tag: "H3", text: node.cluster.name }, + { tag: "DIV", text: node.cluster.hostname }, + this.interactive ? this._nodeControls_template( node ) : null + ] } + ].concat(node.routings.map(this._routing_template, this))}; + }, + _indexHeaderControls_template: function( index ) { return ( + { tag: "DIV", cls: "uiNodesView-controls", children: [ + new ui.MenuButton({ + label: i18n.text("IndexInfoMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("IndexInfoMenu.Status"), onclick: function() { new ui.JsonPanel({ json: index.status, title: index.name }); } }, + { text: i18n.text("IndexInfoMenu.Metadata"), onclick: function() { new ui.JsonPanel({ json: index.metadata, title: index.name }); } } + ] + }) + }), + new ui.MenuButton({ + label: i18n.text("IndexActionsMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("IndexActionsMenu.NewAlias"), onclick: function() { this._newAliasAction_handler(index); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Refresh"), onclick: function() { this._postIndexAction_handler("_refresh", index, false); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Flush"), onclick: function() { this._postIndexAction_handler("_flush", index, false); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Optimize"), onclick: function () { this._optimizeIndex_handler(index); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Snapshot"), disabled: closed, onclick: function() { this._postIndexAction_handler("_gateway/snapshot", index, false); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Analyser"), onclick: function() { this._testAnalyser_handler(index); }.bind(this) }, + { text: (index.state === "close") ? i18n.text("IndexActionsMenu.Open") : i18n.text("IndexActionsMenu.Close"), onclick: function() { this._postIndexAction_handler((index.state === "close") ? "_open" : "_close", index, true); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Delete"), onclick: function() { this._deleteIndexAction_handler(index); }.bind(this) } + ] + }) + }) + ] } + ); }, + _indexHeader_template: function( index ) { + var closed = index.state === "close"; + var line1 = closed ? "index: close" : ( "size: " + (index.status && index.status.primaries && index.status.total ? ut.byteSize_template( index.status.primaries.store.size_in_bytes ) + " (" + ut.byteSize_template( index.status.total.store.size_in_bytes ) + ")" : "unknown" ) ); + var line2 = closed ? "\u00A0" : ( "docs: " + (index.status && index.status.primaries && index.status.primaries.docs && index.status.total && index.status.total.docs ? index.status.primaries.docs.count.toLocaleString() + " (" + (index.status.total.docs.count + index.status.total.docs.deleted).toLocaleString() + ")" : "unknown" ) ); + return index.name ? { tag: "TH", cls: (closed ? "close" : ""), children: [ + { tag: "H3", text: index.name }, + { tag: "DIV", text: line1 }, + { tag: "DIV", text: line2 }, + this.interactive ? this._indexHeaderControls_template( index ) : null + ] } : [ { tag: "TD" }, { tag: "TH" } ]; + }, + _aliasRender_template_none: function( cluster, indices ) { + return null; + }, + _aliasRender_template_list: function( cluster, indices ) { + return cluster.aliases.length && { tag: "TBODY", children: [ + { tag: "TR", children: [ + { tag: "TD" } + ].concat( indices.map( function( index ) { + return { tag: "TD", children: index.metadata && index.metadata.aliases.map( function( alias ) { + return { tag: "LI", text: alias }; + } ) }; + })) } + ] }; + }, + _aliasRender_template_full: function( cluster, indices ) { + return cluster.aliases.length && { tag: "TBODY", children: cluster.aliases.map( function(alias, row) { + return { tag: "TR", children: [ { tag: "TD" },{ tag: "TD" } ].concat(alias.indices.map(function(index, i) { + if (index) { + return { + tag: "TD", + css: { background: "#" + "9ce9c7fc9".substr((row+6)%7,3) }, + cls: "uiNodesView-hasAlias" + ( alias.min === i ? " min" : "" ) + ( alias.max === i ? " max" : "" ), + text: alias.name, + children: this.interactive ? [ + { tag: 'SPAN', + text: i18n.text("General.CloseGlyph"), + cls: 'uiNodesView-hasAlias-remove', + onclick: this._deleteAliasAction_handler.bind( this, index, alias ) + } + ]: null + }; + } else { + return { tag: "TD" }; + } + }, this ) ) }; + }, this ) }; + }, + _main_template: function(cluster, indices) { + return { tag: "TABLE", cls: "table uiNodesView", children: [ + this._styleSheetEl, + { tag: "THEAD", children: [ { tag: "TR", children: indices.map(this._indexHeader_template, this) } ] }, + this._aliasRenderFunction( cluster, indices ), + { tag: "TBODY", children: cluster.nodes.map(this._node_template, this) } + ] }; + } + + }); + +})( this.app, this.i18n, this.joey ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var services = app.ns("services"); + + // ( master ) master = true, data = true + // ( coordinator ) master = true, data = false + // ( worker ) master = false, data = true; + // ( client ) master = false, data = false; + // http enabled ? + + function nodeSort_name(a, b) { + if (!(a.cluster && b.cluster)) { + return 0; + } + return a.cluster.name.toString().localeCompare( b.cluster.name.toString() ); + } + + function nodeSort_addr( a, b ) { + if (!(a.cluster && b.cluster)) { + return 0; + } + return a.cluster.transport_address.toString().localeCompare( b.cluster.transport_address.toString() ); + } + + function nodeSort_type( a, b ) { + if (!(a.cluster && b.cluster)) { + return 0; + } + if( a.master_node ) { + return -1; + } else if( b.master_node ) { + return 1; + } else if( a.data_node && !b.data_node ) { + return -1; + } else if( b.data_node && !a.data_node ) { + return 1; + } else { + return a.cluster.name.toString().localeCompare( b.cluster.name.toString() ); + } + } + + var NODE_SORT_TYPES = { + "Sort.ByName": nodeSort_name, + "Sort.ByAddress": nodeSort_addr, + "Sort.ByType": nodeSort_type + }; + + function nodeFilter_none( a ) { + return true; + } + + function nodeFilter_clients( a ) { + return (a.master_node || a.data_node ); + } + + + ui.ClusterOverview = ui.Page.extend({ + defaults: { + cluster: null // (reqired) an instanceof app.services.Cluster + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.prefs = services.Preferences.instance(); + this._clusterState = this.config.clusterState; + this._clusterState.on("data", this.draw_handler ); + this._refreshButton = new ui.RefreshButton({ + onRefresh: this.refresh.bind(this), + onChange: function( btn ) { + if( btn.value === -1 ) { + this.draw_handler(); + } + }.bind( this ) + }); + var nodeSortPref = this.prefs.get("clusterOverview-nodeSort") || Object.keys(NODE_SORT_TYPES)[0]; + this._nodeSort = NODE_SORT_TYPES[ nodeSortPref ]; + this._nodeSortMenu = new ui.MenuButton({ + label: i18n.text( "Preference.SortCluster" ), + menu: new ui.SelectMenuPanel({ + value: nodeSortPref, + items: Object.keys( NODE_SORT_TYPES ).map( function( k ) { + return { text: i18n.text( k ), value: k }; + }), + onSelect: function( panel, event ) { + this._nodeSort = NODE_SORT_TYPES[ event.value ]; + this.prefs.set("clusterOverview-nodeSort", event.value ); + this.draw_handler(); + }.bind(this) + }) + }); + this._indicesSort = this.prefs.get( "clusterOverview-indicesSort") || "desc"; + this._indicesSortMenu = new ui.MenuButton({ + label: i18n.text( "Preference.SortIndices" ), + menu: new ui.SelectMenuPanel({ + value: this._indicesSort, + items: [ + { value: "desc", text: i18n.text( "SortIndices.Descending" ) }, + { value: "asc", text: i18n.text( "SortIndices.Ascending" ) } ], + onSelect: function( panel, event ) { + this._indicesSort = event.value; + this.prefs.set( "clusterOverview-indicesSort", this._indicesSort ); + this.draw_handler(); + }.bind(this) + }) + }); + this._aliasRenderer = this.prefs.get( "clusterOverview-aliasRender" ) || "full"; + this._aliasMenu = new ui.MenuButton({ + label: i18n.text( "Preference.ViewAliases" ), + menu: new ui.SelectMenuPanel({ + value: this._aliasRenderer, + items: [ + { value: "full", text: i18n.text( "ViewAliases.Grouped" ) }, + { value: "list", text: i18n.text( "ViewAliases.List" ) }, + { value: "none", text: i18n.text( "ViewAliases.None" ) } ], + onSelect: function( panel, event ) { + this._aliasRenderer = event.value; + this.prefs.set( "clusterOverview-aliasRender", this._aliasRenderer ); + this.draw_handler(); + }.bind(this) + }) + }); + this._indexFilter = new ui.TextField({ + value: this.prefs.get("clusterOverview-indexFilter"), + placeholder: i18n.text( "Overview.IndexFilter" ), + onchange: function( indexFilter ) { + this.prefs.set("clusterOverview-indexFilter", indexFilter.val() ); + this.draw_handler(); + }.bind(this) + }); + this.el = $(this._main_template()); + this.tablEl = this.el.find(".uiClusterOverview-table"); + this.refresh(); + }, + remove: function() { + this._clusterState.removeObserver( "data", this.draw_handler ); + }, + refresh: function() { + this._refreshButton.disable(); + this._clusterState.refresh(); + }, + draw_handler: function() { + var data = this._clusterState; + var indexFilter; + try { + var indexFilterRe = new RegExp( this._indexFilter.val() ); + indexFilter = function(s) { return indexFilterRe.test(s); }; + } catch(e) { + indexFilter = function() { return true; }; + } + var clusterState = data.clusterState; + var status = data.status; + var nodeStats = data.nodeStats; + var clusterNodes = data.clusterNodes; + var nodes = []; + var indices = []; + var cluster = {}; + var nodeIndices = {}; + var indexIndices = {}, indexIndicesIndex = 0; + function newNode(n) { + return { + name: n, + routings: [], + master_node: clusterState.master_node === n + }; + } + function newIndex(i) { + return { + name: i, + replicas: [] + }; + } + function getIndexForNode(n) { + return nodeIndices[n] = (n in nodeIndices) ? nodeIndices[n] : nodes.push(newNode(n)) - 1; + } + function getIndexForIndex(routings, i) { + var index = indexIndices[i] = (i in indexIndices) ? + (routings[indexIndices[i]] = routings[indexIndices[i]] || newIndex(i)) && indexIndices[i] + : ( ( routings[indexIndicesIndex] = newIndex(i) ) && indexIndicesIndex++ ); + indices[index] = i; + return index; + } + $.each(clusterNodes.nodes, function(name, node) { + getIndexForNode(name); + }); + + var indexNames = []; + $.each(clusterState.routing_table.indices, function(name, index){ + indexNames.push(name); + }); + indexNames.sort(); + if (this._indicesSort === "desc") indexNames.reverse(); + indexNames.filter( indexFilter ).forEach(function(name) { + var indexObject = clusterState.routing_table.indices[name]; + $.each(indexObject.shards, function(name, shard) { + shard.forEach(function(replica){ + var node = replica.node; + if(node === null) { node = "Unassigned"; } + var index = replica.index; + var shard = replica.shard; + var routings = nodes[getIndexForNode(node)].routings; + var indexIndex = getIndexForIndex(routings, index); + var replicas = routings[indexIndex].replicas; + if(node === "Unassigned" || !indexObject.shards[shard]) { + replicas.push({ replica: replica }); + } else { + replicas[shard] = { + replica: replica, + status: indexObject.shards[shard].filter(function(replica) { + return replica.node === node; + })[0] + }; + } + }); + }); + }); + indices = indices.map(function(index){ + return { + name: index, + state: "open", + metadata: clusterState.metadata.indices[index], + status: status.indices[index] + }; + }, this); + $.each(clusterState.metadata.indices, function(name, index) { + if(index.state === "close" && indexFilter( name )) { + indices.push({ + name: name, + state: "close", + metadata: index, + status: null + }); + } + }); + nodes.forEach(function(node) { + node.stats = nodeStats.nodes[node.name]; + var cluster = clusterNodes.nodes[node.name]; + node.cluster = cluster || { name: "" }; + node.data_node = !( cluster && cluster.attributes && cluster.attributes.data === "false" ); + for(var i = 0; i < indices.length; i++) { + node.routings[i] = node.routings[i] || { name: indices[i].name, replicas: [] }; + node.routings[i].max_number_of_shards = indices[i].metadata.settings["index.number_of_shards"]; + node.routings[i].open = indices[i].state === "open"; + } + }); + var aliasesIndex = {}; + var aliases = []; + var indexClone = indices.map(function() { return false; }); + $.each(clusterState.metadata.indices, function(name, index) { + index.aliases.forEach(function(alias) { + var aliasIndex = aliasesIndex[alias] = (alias in aliasesIndex) ? aliasesIndex[alias] : aliases.push( { name: alias, max: -1, min: 999, indices: [].concat(indexClone) }) - 1; + var indexIndex = indexIndices[name]; + var aliasRow = aliases[aliasIndex]; + aliasRow.min = Math.min(aliasRow.min, indexIndex); + aliasRow.max = Math.max(aliasRow.max, indexIndex); + aliasRow.indices[indexIndex] = indices[indexIndex]; + }); + }); + cluster.aliases = aliases; + cluster.nodes = nodes + .filter( nodeFilter_none ) + .sort( this._nodeSort ); + indices.unshift({ name: null }); + this._drawNodesView( cluster, indices ); + this._refreshButton.enable(); + }, + _drawNodesView: function( cluster, indices ) { + this._nodesView && this._nodesView.remove(); + this._nodesView = new ui.NodesView({ + onRedraw: function() { + this.refresh(); + }.bind(this), + interactive: ( this._refreshButton.value === -1 ), + aliasRenderer: this._aliasRenderer, + cluster: this.cluster, + data: { + cluster: cluster, + indices: indices + } + }); + this._nodesView.attach( this.tablEl ); + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiClusterOverview", children: [ + new ui.Toolbar({ + label: i18n.text("Overview.PageTitle"), + left: [ + this._nodeSortMenu, + this._indicesSortMenu, + this._aliasMenu, + this._indexFilter + ], + right: [ + this._refreshButton + ] + }), + { tag: "DIV", cls: "uiClusterOverview-table" } + ] }; + } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( app, i18n, raphael ) { + + var ui = app.ns("ui"); + + ui.DateHistogram = ui.AbstractWidget.extend({ + defaults: { + printEl: null, // (optional) if supplied, clicking on elements in the histogram changes the query + cluster: null, // (required) + query: null, // (required) the current query + spec: null // (required) // date field spec + }, + init: function() { + this._super(); + this.el = $(this._main_template()); + this.query = this.config.query.clone(); + // check if the index/types have changed and rebuild the histogram + this.config.query.on("results", function(query) { + if(this.queryChanged) { + this.buildHistogram(query); + this.queryChanged = false; + } + }.bind(this)); + this.config.query.on("setIndex", function(query, params) { + this.query.setIndex(params.index, params.add); + this.queryChanged = true; + }.bind(this)); + this.config.query.on("setType", function(query, params) { + this.query.setType(params.type, params.add); + this.queryChanged = true; + }.bind(this)); + this.query.search.size = 0; + this.query.on("results", this._stat_handler); + this.query.on("results", this._aggs_handler); + this.buildHistogram(); + }, + buildHistogram: function(query) { + this.statAggs = this.query.addAggs({ + stats: { field: this.config.spec.field_name } + }); + this.query.query(); + this.query.removeAggs(this.statAggs); + }, + _stat_handler: function(query, results) { + if(! results.aggregations[this.statAggs]) { return; } + this.stats = results.aggregations[this.statAggs]; + // here we are calculating the approximate range that will give us less than 121 columns + var rangeNames = [ "year", "year", "month", "day", "hour", "minute" ]; + var rangeFactors = [100000, 12, 30, 24, 60, 60000 ]; + this.intervalRange = 1; + var range = this.stats.max - this.stats.min; + do { + this.intervalName = rangeNames.pop(); + var factor = rangeFactors.pop(); + this.intervalRange *= factor; + range = range / factor; + } while(range > 70); + this.dateAggs = this.query.addAggs({ + date_histogram : { + field: this.config.spec.field_name, + interval: this.intervalName + } + }); + this.query.query(); + this.query.removeAggs(this.dateAggs); + }, + _aggs_handler: function(query, results) { + if(! results.aggregations[this.dateAggs]) { return; } + var buckets = [], range = this.intervalRange; + var min = Math.floor(this.stats.min / range) * range; + var prec = [ "year", "month", "day", "hour", "minute", "second" ].indexOf(this.intervalName); + results.aggregations[this.dateAggs].buckets.forEach(function(entry) { + buckets[parseInt((entry.key - min) / range , 10)] = entry.doc_count; + }, this); + for(var i = 0; i < buckets.length; i++) { + buckets[i] = buckets[i] || 0; + } + this.el.removeClass("loading"); + var el = this.el.empty(); + var w = el.width(), h = el.height(); + var r = raphael(el[0], w, h ); + var printEl = this.config.printEl; + query = this.config.query; + r.g.barchart(0, 0, w, h, [buckets], { gutter: "0", vgutter: 0 }).hover( + function() { + this.flag = r.g.popup(this.bar.x, h - 5, this.value || "0").insertBefore(this); + }, function() { + this.flag.animate({opacity: 0}, 200, ">", function () {this.remove();}); + } + ).click(function() { + if(printEl) { + printEl.val(window.dateRangeParser.print(min + this.bar.index * range, prec)); + printEl.trigger("keyup"); + query.query(); + } + }); + }, + _main_template: function() { return ( + { tag: "DIV", cls: "uiDateHistogram loading", css: { height: "50px" }, children: [ + i18n.text("General.LoadingAggs") + ] } + ); } + }); + +})( this.app, this.i18n, this.Raphael ); +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var services = app.ns("services"); + + ui.ClusterConnect = ui.AbstractWidget.extend({ + defaults: { + cluster: null + }, + init: function() { + this._super(); + this.prefs = services.Preferences.instance(); + this.cluster = this.config.cluster; + this.el = $.joey(this._main_template()); + this.cluster.get( "", this._node_handler ); + }, + + _node_handler: function(data) { + if(data) { + this.prefs.set("app-base_uri", this.cluster.base_uri); + } + }, + + _reconnect_handler: function() { + var base_uri = this.el.find(".uiClusterConnect-uri").val(); + $("body").empty().append(new app.App("body", { id: "es", base_uri: base_uri })); + }, + + _main_template: function() { + return { tag: "SPAN", cls: "uiClusterConnect", children: [ + { tag: "INPUT", type: "text", cls: "uiClusterConnect-uri", onkeyup: function( ev ) { + if(ev.which === 13) { + ev.preventDefault(); + this._reconnect_handler(); + } + }.bind(this), id: this.id("baseUri"), value: this.cluster.base_uri }, + { tag: "BUTTON", type: "button", text: i18n.text("Header.Connect"), onclick: this._reconnect_handler } + ]}; + } + }); + +})( this.jQuery, this.app, this.i18n ); + + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var data = app.ns("data"); + + var StructuredQuery = ui.AbstractWidget.extend({ + defaults: { + cluster: null // (required) instanceof app.services.Cluster + }, + _baseCls: "uiStructuredQuery", + init: function(parent) { + this._super(); + this.selector = new ui.IndexSelector({ + onIndexChanged: this._indexChanged_handler, + cluster: this.config.cluster + }); + this.el = $(this._main_template()); + this.out = this.el.find("DIV.uiStructuredQuery-out"); + this.attach( parent ); + }, + + _indexChanged_handler: function( index ) { + this.filter && this.filter.remove(); + this.filter = new ui.FilterBrowser({ + cluster: this.config.cluster, + index: index, + onStartingSearch: function() { this.el.find("DIV.uiStructuredQuery-out").text( i18n.text("General.Searching") ); this.el.find("DIV.uiStructuredQuery-src").hide(); }.bind(this), + onSearchSource: this._searchSource_handler, + onResults: this._results_handler + }); + this.el.find(".uiStructuredQuery-body").append(this.filter); + }, + + _results_handler: function( filter, event ) { + var typeMap = { + "json": this._jsonResults_handler, + "table": this._tableResults_handler, + "csv": this._csvResults_handler + }; + typeMap[ event.type ].call( this, event.data, event.metadata ); + }, + _jsonResults_handler: function( results ) { + this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.JsonPretty({ obj: results })); + }, + _csvResults_handler: function( results ) { + this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.CSVTable({ results: results })); + }, + _tableResults_handler: function( results, metadata ) { + // hack up a QueryDataSourceInterface so that StructuredQuery keeps working without using a Query object + var qdi = new data.QueryDataSourceInterface({ metadata: metadata, query: new data.Query() }); + var tab = new ui.Table( { + store: qdi, + height: 400, + width: this.out.innerWidth() + } ).attach(this.out.empty()); + qdi._results_handler(qdi.config.query, results); + }, + + _showRawJSON : function() { + if($("#rawJsonText").length === 0) { + var hiddenButton = $("#showRawJSON"); + var jsonText = $({tag: "P", type: "p", id: "rawJsonText"}); + jsonText.text(hiddenButton[0].value); + hiddenButton.parent().append(jsonText); + } + }, + + _searchSource_handler: function(src) { + var searchSourceDiv = this.el.find("DIV.uiStructuredQuery-src"); + searchSourceDiv.empty().append(new app.ui.JsonPretty({ obj: src })); + if(typeof JSON !== "undefined") { + var showRawJSON = $({ tag: "BUTTON", type: "button", text: i18n.text("StructuredQuery.ShowRawJson"), id: "showRawJSON", value: JSON.stringify(src), onclick: this._showRawJSON }); + searchSourceDiv.append(showRawJSON); + } + searchSourceDiv.show(); + }, + + _main_template: function() { + return { tag: "DIV", cls: this._baseCls, children: [ + this.selector, + { tag: "DIV", cls: "uiStructuredQuery-body" }, + { tag: "DIV", cls: "uiStructuredQuery-src", css: { display: "none" } }, + { tag: "DIV", cls: "uiStructuredQuery-out" } + ]}; + } + }); + + ui.StructuredQuery = ui.Page.extend({ + init: function() { + this.q = new StructuredQuery( this.config ); + this.el = this.q.el; + } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var data = app.ns("data"); + var ut = app.ns("ut"); + + ui.FilterBrowser = ui.AbstractWidget.extend({ + defaults: { + cluster: null, // (required) instanceof app.services.Cluster + index: "" // (required) name of the index to query + }, + + init: function(parent) { + this._super(); + this._cluster = this.config.cluster; + this.el = $(this._main_template()); + this.filtersEl = this.el.find(".uiFilterBrowser-filters"); + this.attach( parent ); + new data.MetaDataFactory({ cluster: this._cluster, onReady: function(metadata, eventData) { + this.metadata = metadata; + this._createFilters_handler(eventData.originalData.metadata.indices); + }.bind(this) }); + }, + + _createFilters_handler: function(data) { + var filters = []; + function scan_properties(path, obj) { + if (obj.properties) { + for (var prop in obj.properties) { + scan_properties(path.concat(prop), obj.properties[prop]); + } + } else { + // handle multi_field + if (obj.fields) { + for (var subField in obj.fields) { + filters.push({ path: (path[path.length - 1] !== subField) ? path.concat(subField) : path, type: obj.fields[subField].type, meta: obj.fields[subField] }); + } + } else { + filters.push({ path: path, type: obj.type, meta: obj }); + } + } + } + for(var type in data[this.config.index].mappings) { + scan_properties([type], data[this.config.index].mappings[type]); + } + + filters.sort( function(a, b) { + var x = a.path.join("."); + var y = b.path.join("."); + return (x < y) ? -1 : (x > y) ? 1 : 0; + }); + + this.filters = [ + { path: ["match_all"], type: "match_all", meta: {} }, + { path: ["_all"], type: "_all", meta: {}} + ].concat(filters); + + this._addFilterRow_handler(); + }, + + _addFilterRow_handler: function() { + this.filtersEl.append(this._filter_template()); + }, + + _removeFilterRow_handler: function(jEv) { + $(jEv.target).closest("DIV.uiFilterBrowser-row").remove(); + if(this.filtersEl.children().length === 0) { + this._addFilterRow_handler(); + } + }, + + _search_handler: function() { + var search = new data.BoolQuery(); + search.setSize( this.el.find(".uiFilterBrowser-outputSize").val() ) + this.fire("startingSearch"); + this.filtersEl.find(".uiFilterBrowser-row").each(function(i, row) { + row = $(row); + var bool = row.find(".bool").val(); + var field = row.find(".field").val(); + var op = row.find(".op").val(); + var value = {}; + if(field === "match_all") { + op = "match_all"; + } else if(op === "range") { + var lowqual = row.find(".lowqual").val(), + highqual = row.find(".highqual").val(); + if(lowqual.length) { + value[row.find(".lowop").val()] = lowqual; + } + if(highqual.length) { + value[row.find(".highop").val()] = highqual; + } + } else if(op === "fuzzy") { + var qual = row.find(".qual").val(), + fuzzyqual = row.find(".fuzzyqual").val(); + if(qual.length) { + value["value"] = qual; + } + if(fuzzyqual.length) { + value[row.find(".fuzzyop").val()] = fuzzyqual; + } + } else { + value = row.find(".qual").val(); + } + search.addClause(value, field, op, bool); + }); + if(this.el.find(".uiFilterBrowser-showSrc").attr("checked")) { + this.fire("searchSource", search.search); + } + this._cluster.post( this.config.index + "/_search", search.getData(), this._results_handler ); + }, + + _results_handler: function( data ) { + var type = this.el.find(".uiFilterBrowser-outputFormat").val(); + this.fire("results", this, { type: type, data: data, metadata: this.metadata }); + }, + + _changeQueryField_handler: function(jEv) { + var select = $(jEv.target); + var spec = select.children(":selected").data("spec"); + select.siblings().remove(".op,.qual,.range,.fuzzy"); + var ops = []; + if(spec.type === 'match_all') { + } else if(spec.type === '_all') { + ops = ["query_string"]; + } else if(spec.type === 'string' || spec.type === 'text' || spec.type === 'keyword') { + ops = ["term", "wildcard", "prefix", "fuzzy", "range", "query_string", "text", "missing"]; + } else if(spec.type === 'long' || spec.type === 'integer' || spec.type === 'float' || + spec.type === 'byte' || spec.type === 'short' || spec.type === 'double') { + ops = ["term", "range", "fuzzy", "query_string", "missing"]; + } else if(spec.type === 'date') { + ops = ["term", "range", "fuzzy", "query_string", "missing"]; + } else if(spec.type === 'geo_point') { + ops = ["missing"]; + } else if(spec.type === 'ip') { + ops = ["term", "range", "fuzzy", "query_string", "missing"]; + } else if(spec.type === 'boolean') { + ops = ["term"] + } + select.after({ tag: "SELECT", cls: "op", onchange: this._changeQueryOp_handler, children: ops.map(ut.option_template) }); + select.next().change(); + }, + + _changeQueryOp_handler: function(jEv) { + var op = $(jEv.target), opv = op.val(); + op.siblings().remove(".qual,.range,.fuzzy"); + if(opv === 'term' || opv === 'wildcard' || opv === 'prefix' || opv === "query_string" || opv === 'text') { + op.after({ tag: "INPUT", cls: "qual", type: "text" }); + } else if(opv === 'range') { + op.after(this._range_template()); + } else if(opv === 'fuzzy') { + op.after(this._fuzzy_template()); + } + }, + + _main_template: function() { + return { tag: "DIV", children: [ + { tag: "DIV", cls: "uiFilterBrowser-filters" }, + { tag: "BUTTON", type: "button", text: i18n.text("General.Search"), onclick: this._search_handler }, + { tag: "LABEL", children: + i18n.complex("FilterBrowser.OutputType", { tag: "SELECT", cls: "uiFilterBrowser-outputFormat", children: [ + { text: i18n.text("Output.Table"), value: "table" }, + { text: i18n.text("Output.JSON"), value: "json" }, + { text: i18n.text("Output.CSV"), value: "csv" } + ].map(function( o ) { return $.extend({ tag: "OPTION" }, o ); } ) } ) + }, + { tag: "LABEL", children: + i18n.complex("FilterBrowser.OutputSize", { tag: "SELECT", cls: "uiFilterBrowser-outputSize", + children: [ "10", "50", "250", "1000", "5000", "25000" ].map( ut.option_template ) + } ) + }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", cls: "uiFilterBrowser-showSrc" }, i18n.text("Output.ShowSource") ] } + ]}; + }, + + _filter_template: function() { + return { tag: "DIV", cls: "uiFilterBrowser-row", children: [ + { tag: "SELECT", cls: "bool", children: ["must", "must_not", "should"].map(ut.option_template) }, + { tag: "SELECT", cls: "field", onchange: this._changeQueryField_handler, children: this.filters.map(function(f) { + return { tag: "OPTION", data: { spec: f }, value: f.path.join("."), text: f.path.join(".") }; + })}, + { tag: "BUTTON", type: "button", text: "+", onclick: this._addFilterRow_handler }, + { tag: "BUTTON", type: "button", text: "-", onclick: this._removeFilterRow_handler } + ]}; + }, + + _range_template: function() { + return { tag: "SPAN", cls: "range", children: [ + { tag: "SELECT", cls: "lowop", children: ["gt", "gte"].map(ut.option_template) }, + { tag: "INPUT", type: "text", cls: "lowqual" }, + { tag: "SELECT", cls: "highop", children: ["lt", "lte"].map(ut.option_template) }, + { tag: "INPUT", type: "text", cls: "highqual" } + ]}; + }, + + _fuzzy_template: function() { + return { tag: "SPAN", cls: "fuzzy", children: [ + { tag: "INPUT", cls: "qual", type: "text" }, + { tag: "SELECT", cls: "fuzzyop", children: ["max_expansions", "min_similarity"].map(ut.option_template) }, + { tag: "INPUT", cls: "fuzzyqual", type: "text" } + ]}; + } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.IndexSelector = ui.AbstractWidget.extend({ + init: function(parent) { + this._super(); + this.el = $(this._main_template()); + this.attach( parent ); + this.cluster = this.config.cluster; + this.update(); + }, + update: function() { + this.cluster.get( "_stats", this._update_handler ); + }, + + _update_handler: function(data) { + var options = []; + var index_names = Object.keys(data.indices).sort(); + for(var i=0; i < index_names.length; i++) { + name = index_names[i]; + options.push(this._option_template(name, data.indices[name])); + } + this.el.find(".uiIndexSelector-select").empty().append(this._select_template(options)); + this._indexChanged_handler(); + }, + + _main_template: function() { + return { tag: "DIV", cls: "uiIndexSelector", children: i18n.complex( "IndexSelector.SearchIndexForDocs", { tag: "SPAN", cls: "uiIndexSelector-select" } ) }; + }, + + _indexChanged_handler: function() { + this.fire("indexChanged", this.el.find("SELECT").val()); + }, + + _select_template: function(options) { + return { tag: "SELECT", children: options, onChange: this._indexChanged_handler }; + }, + + _option_template: function(name, index) { + return { tag: "OPTION", value: name, text: i18n.text("IndexSelector.NameWithDocs", name, index.primaries.docs.count ) }; + } + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.Header = ui.AbstractWidget.extend({ + defaults: { + cluster: null, + clusterState: null + }, + _baseCls: "uiHeader", + init: function() { + this._clusterConnect = new ui.ClusterConnect({ + cluster: this.config.cluster + }); + var quicks = [ + { text: i18n.text("Nav.Info"), path: "" }, + { text: i18n.text("Nav.Status"), path: "_stats" }, + { text: i18n.text("Nav.NodeStats"), path: "_nodes/stats" }, + { text: i18n.text("Nav.ClusterNodes"), path: "_nodes" }, + { text: i18n.text("Nav.Plugins"), path: "_nodes/plugins" }, + { text: i18n.text("Nav.ClusterState"), path: "_cluster/state" }, + { text: i18n.text("Nav.ClusterHealth"), path: "_cluster/health" }, + { text: i18n.text("Nav.Templates"), path: "_template" } + ]; + var cluster = this.config.cluster; + var quickPanels = {}; + var menuItems = quicks.map( function( item ) { + return { text: item.text, onclick: function() { + cluster.get( item.path, function( data ) { + quickPanels[ item.path ] && quickPanels[ item.path ].el && quickPanels[ item.path ].remove(); + quickPanels[ item.path ] = new ui.JsonPanel({ + title: item.text, + json: data + }); + } ); + } }; + }, this ); + this._quickMenu = new ui.MenuButton({ + label: i18n.text("NodeInfoMenu.Title"), + menu: new ui.MenuPanel({ + items: menuItems + }) + }); + this.el = $.joey( this._main_template() ); + this.nameEl = this.el.find(".uiHeader-name"); + this.statEl = this.el.find(".uiHeader-status"); + this._clusterState = this.config.clusterState; + this._clusterState.on("data", function( state ) { + var shards = state.status._shards; + var colour = state.clusterHealth.status; + var name = state.clusterState.cluster_name; + this.nameEl.text( name ); + this.statEl + .text( i18n.text("Header.ClusterHealth", colour, shards.successful, shards.total ) ) + .css( "background", colour ); + }.bind(this)); + this.statEl.text( i18n.text("Header.ClusterNotConnected") ).css("background", "grey"); + this._clusterState.refresh(); + }, + _main_template: function() { return ( + { tag: "DIV", cls: this._baseCls, children: [ + this._clusterConnect, + { tag: "SPAN", cls: "uiHeader-name" }, + { tag: "SPAN", cls: "uiHeader-status" }, + { tag: "H1", text: i18n.text("General.Elasticsearch") }, + { tag: "SPAN", cls: "pull-right", children: [ + this._quickMenu + ] } + ] } + ); } + } ); + +})( this.jQuery, this.app, this.i18n ); + +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.IndexOverview = ui.Page.extend({ + defaults: { + cluster: null + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this._clusterState = this.config.clusterState; + this._clusterState.on("data", this._refresh_handler ); + this.el = $(this._main_template()); + this._refresh_handler(); + }, + remove: function() { + this._clusterState.removeObserver( "data", this._refresh_handler ); + }, + _refresh_handler: function() { + var state = this._clusterState; + var view = { + indices: acx.eachMap( state.status.indices, function( name, index ) { + return { + name: name, + state: index + }; + }).sort( function( a, b ) { + return a.name < b.name ? -1 : 1; + }) + }; + this._indexViewEl && this._indexViewEl.remove(); + this._indexViewEl = $( this._indexTable_template( view ) ); + this.el.find(".uiIndexOverview-table").append( this._indexViewEl ); + }, + _newIndex_handler: function() { + var fields = new app.ux.FieldCollection({ + fields: [ + new ui.TextField({ label: i18n.text("ClusterOverView.IndexName"), name: "_name", require: true }), + new ui.TextField({ + label: i18n.text("ClusterOverview.NumShards"), + name: "number_of_shards", + value: "5", + require: function( val ) { return parseInt( val, 10 ) >= 1; } + }), + new ui.TextField({ + label: i18n.text("ClusterOverview.NumReplicas"), + name: "number_of_replicas", + value: "1", + require: function( val ) { return parseInt( val, 10 ) >= 0; } + }) + ] + }); + var dialog = new ui.DialogPanel({ + title: i18n.text("ClusterOverview.NewIndex"), + body: new ui.PanelForm({ fields: fields }), + onCommit: function(panel, args) { + if(fields.validate()) { + var data = fields.getData(); + var name = data["_name"]; + delete data["_name"]; + this.config.cluster.put( encodeURIComponent( name ), JSON.stringify({ settings: { index: data } }), function(d) { + dialog.close(); + alert(JSON.stringify(d)); + this._clusterState.refresh(); + }.bind(this) ); + } + }.bind(this) + }).open(); + }, + _indexTable_template: function( view ) { return ( + { tag: "TABLE", cls: "table", children: [ + { tag: "THEAD", children: [ + { tag: "TR", children: [ + { tag: "TH" }, + { tag: "TH", children: [ + { tag: "H3", text: "Size" } + ] }, + { tag: "TH", children: [ + { tag: "H3", text: "Docs" } + ] } + ] } + ] }, + { tag: "TBODY", cls: "striped", children: view.indices.map( this._index_template, this ) } + ] } + ); }, + + _index_template: function( index ) { return ( + { tag: "TR", children: [ + { tag: "TD", children: [ + { tag: "H3", text: index.name } + ] }, + { tag: "TD", text: ut.byteSize_template( index.state.primaries.store.size_in_bytes ) + "/" + ut.byteSize_template( index.state.total.store.size_in_bytes ) }, + { tag: "TD", text: ut.count_template( index.state.primaries.docs.count ) } + ] } + ); }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiIndexOverview", children: [ + new ui.Toolbar({ + label: i18n.text("IndexOverview.PageTitle"), + left: [ + new ui.Button({ + label: i18n.text("ClusterOverview.NewIndex"), + onclick: this._newIndex_handler + }), + ] + }), + { tag: "DIV", cls: "uiIndexOverview-table", children: this._indexViewEl } + ] }; + } + + }); + +})( this.jQuery, this.app, this.i18n ); + +(function( app, i18n ) { + + var ui = app.ns("ui"); + var services = app.ns("services"); + + app.App = ui.AbstractWidget.extend({ + defaults: { + base_uri: null + }, + init: function(parent) { + this._super(); + this.prefs = services.Preferences.instance(); + this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; + if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) { + // XHR request fails if the URL is not ending with a "/" + this.base_uri += "/"; + } + if( this.config.auth_user ) { + var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password ); + $.ajaxSetup({ + headers: { + "Authorization": "Basic " + credentials + } + }); + } + this.cluster = new services.Cluster({ base_uri: this.base_uri }); + this._clusterState = new services.ClusterState({ + cluster: this.cluster + }); + + this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState }); + this.$body = $.joey( this._body_template() ); + this.el = $.joey(this._main_template()); + this.attach( parent ); + this.instances = {}; + this.el.find(".uiApp-headerMenuItem:first").click(); + if( this.config.dashboard ) { + if( this.config.dashboard === "cluster" ) { + var page = this.instances["ClusterOverview"]; + page._refreshButton.set( 5000 ); + } + } + }, + + navigateTo: function( type, config, ev ) { + if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) { + this.showNew( type, config, ev ); + } else { + var ref = type + "0"; + if(! this.instances[ ref ]) { + this.createPage( type, 0, config ); + } + this.show( ref, ev ); + } + }, + + createPage: function( type, id, config ) { + var page = this.instances[ type + id ] = new ui[ type ]( config ); + this.$body.append( page ); + return page; + }, + + show: function( ref, ev ) { + $( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active"); + for(var p in this.instances) { + this.instances[p][ p === ref ? "show" : "hide" ](); + } + }, + + showNew: function( type, config, jEv ) { + var ref, page, $tab, + type_index = 0; + + while ( ! page ) { + ref = type + ( ++type_index ); + if (! ( ref in this.instances ) ) { + page = this.createPage( type, type_index, config ); + } + } + + // Add the tab and its click handlers + $tab = $.joey({ + tag: "DIV", + cls: "uiApp-headerMenuItem pull-left", + text: i18n.text("Nav." + type ) + " " + type_index, + onclick: function( ev ) { this.show( ref, ev ); }.bind(this), + children: [ + { tag: "A", text: " [-]", onclick: function (ev) { + $tab.remove(); + page.remove(); + delete this.instances[ ref ]; + }.bind(this) } + ] + }); + + $('.uiApp-headerMenu').append( $tab ); + $tab.trigger("click"); + }, + + _openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); }, + _openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); }, + _openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev ); }, + _openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); }, + _openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); }, + + _body_template: function() { return ( + { tag: "DIV", id: this.id("body"), cls: "uiApp-body" } + ); }, + + _main_template: function() { + return { tag: "DIV", cls: "uiApp", children: [ + { tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [ + this._header, + { tag: "DIV", cls: "uiApp-headerMenu", children: [ + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [ + { tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' } + ] }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [ + { tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' } + ] }, + ]} + ]}, + this.$body + ]}; + } + + }); + +})( this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png new file mode 100644 index 000000000..f433ec6d0 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif new file mode 100644 index 000000000..f001e23f7 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css new file mode 100644 index 000000000..29a5f1b69 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css @@ -0,0 +1,44 @@ +BODY { + font-family: Verdana, sans-serif; + font-size: 73%; + padding: 0; + margin: 0; +} + +INPUT, SELECT, TEXTAREA { + border: 1px solid #cecece; + padding: 1px 3px; + background: white; +} + +SELECT { + padding: 0; +} + +.saf SELECT { + margin-top: 0; + margin-bottom: 0; +} + +TEXTAREA, CODE { + font-family: monospace; + font-size: 13px; +} + +BUTTON::-moz-focus-inner { + border: none; +} + +.pull-left { + float: left; +} + +.pull-right { + float: right; +} + +.loading { + background-image: url(loading.gif); + background-repeat: no-repeat; + text-indent: 20px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf new file mode 100644 index 000000000..8b0f54e47 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..7c79c6a6b Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..45fdf3383 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..e89738de5 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..8c1748aab Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js new file mode 100644 index 000000000..de0fc5178 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js @@ -0,0 +1,93 @@ +(function() { + /** + * provides text formatting and i18n key storage features
    + * implements most of the Sun Java MessageFormat functionality. + * @see Sun's Documentation + */ + + var keys = {}; + + var format = function(message, args) { + var substitute = function() { + var format = arguments[1].split(','); + var substr = escape(args[format.shift()]); + if(format.length === 0) { + return substr; // simple substitution eg {0} + } + switch(format.shift()) { + case "number" : return (new Number(substr)).toLocaleString(); + case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch + case "time" : return (new Date(+substr)).toLocaleTimeString(); // eg i18n.text("Key", +(new Date())); for current time + } + var styles = format.join("").split("|").map(function(style) { + return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/); + }); + var match = styles[0][3]; + for(var i=0; i + + + + + elasticsearch-head + + + + + + + + + + + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js new file mode 100644 index 000000000..3679dfbbc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js @@ -0,0 +1,177 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "Loading Aggregations...", + "General.Searching": "Searching...", + "General.Search": "Search", + "General.Help": "Help", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "Refresh", + "General.ManualRefresh": "Manual Refresh", + "General.RefreshQuickly": "Refresh quickly", + "General.Refresh5seconds": "Refresh every 5 seconds", + "General.Refresh1minute": "Refresh every minute", + "AliasForm.AliasName": "Alias Name", + "AliasForm.NewAliasForIndex": "New Alias for {0}", + "AliasForm.DeleteAliasMessage": "type ''{0}'' to delete {1}. There is no undo", + "AnyRequest.DisplayOptions" : "Display Options", + "AnyRequest.AsGraph" : "Graph Results", + "AnyRequest.AsJson" : "Show Raw JSON", + "AnyRequest.AsTable" : "Show Search Results Table", + "AnyRequest.History" : "History", + "AnyRequest.RepeatRequest" : "Repeat Request", + "AnyRequest.RepeatRequestSelect" : "Repeat request every ", + "AnyRequest.Transformer" : "Result Transformer", + "AnyRequest.Pretty": "Pretty", + "AnyRequest.Query" : "Query", + "AnyRequest.Request": "Request", + "AnyRequest.Requesting": "Requesting...", + "AnyRequest.ValidateJSON": "Validate JSON", + "Browser.Title": "Browser", + "Browser.ResultSourcePanelTitle": "Result Source", + "Command.DELETE": "DELETE", + "Command.SHUTDOWN": "SHUTDOWN", + "Command.DeleteAliasMessage": "Delete Alias?", + "ClusterOverView.IndexName": "Index Name", + "ClusterOverview.NumShards": "Number of Shards", + "ClusterOverview.NumReplicas": "Number of Replicas", + "ClusterOverview.NewIndex": "New Index", + "IndexActionsMenu.Title": "Actions", + "IndexActionsMenu.NewAlias": "New Alias...", + "IndexActionsMenu.Refresh": "Refresh", + "IndexActionsMenu.Flush": "Flush", + "IndexActionsMenu.Optimize": "Optimize...", + "IndexActionsMenu.Snapshot": "Gateway Snapshot", + "IndexActionsMenu.Analyser": "Test Analyser", + "IndexActionsMenu.Open": "Open", + "IndexActionsMenu.Close": "Close", + "IndexActionsMenu.Delete": "Delete...", + "IndexInfoMenu.Title": "Info", + "IndexInfoMenu.Status": "Index Status", + "IndexInfoMenu.Metadata": "Index Metadata", + "IndexCommand.TextToAnalyze": "Text to Analyse", + "IndexCommand.ShutdownMessage": "type ''{0}'' to shutdown {1}. Node can NOT be restarted from this interface", + "IndexOverview.PageTitle": "Indices Overview", + "IndexSelector.NameWithDocs": "{0} ({1} docs)", + "IndexSelector.SearchIndexForDocs": "Search {0} for documents where:", + "FilterBrowser.OutputType": "Output Results: {0}", + "FilterBrowser.OutputSize": "Number of Results: {0}", + "Header.ClusterHealth": "cluster health: {0} ({1} of {2})", + "Header.ClusterNotConnected": "cluster health: not connected", + "Header.Connect": "Connect", + "Nav.AnyRequest": "Any Request", + "Nav.Browser": "Browser", + "Nav.ClusterHealth": "Cluster Health", + "Nav.ClusterState": "Cluster State", + "Nav.ClusterNodes": "Nodes Info", + "Nav.Info": "Info", + "Nav.NodeStats": "Nodes Stats", + "Nav.Overview": "Overview", + "Nav.Indices": "Indices", + "Nav.Plugins": "Plugins", + "Nav.Status": "Indices Stats", + "Nav.Templates": "Templates", + "Nav.StructuredQuery": "Structured Query", + "NodeActionsMenu.Title": "Actions", + "NodeActionsMenu.Shutdown": "Shutdown...", + "NodeInfoMenu.Title": "Info", + "NodeInfoMenu.ClusterNodeInfo": "Cluster Node Info", + "NodeInfoMenu.NodeStats": "Node Stats", + "NodeType.Client": "Client Node", + "NodeType.Coord": "Coordinator", + "NodeType.Master": "Master Node", + "NodeType.Tribe": "Tribe Node", + "NodeType.Worker": "Worker Node", + "NodeType.Unassigned": "Unassigned", + "OptimizeForm.OptimizeIndex": "Optimize {0}", + "OptimizeForm.MaxSegments": "Maximum # Of Segments", + "OptimizeForm.ExpungeDeletes": "Only Expunge Deletes", + "OptimizeForm.FlushAfter": "Flush After Optimize", + "OptimizeForm.WaitForMerge": "Wait For Merge", + "Overview.PageTitle" : "Cluster Overview", + "Output.JSON": "JSON", + "Output.Table": "Table", + "Output.CSV": "CSV", + "Output.ShowSource": "Show query source", + "Preference.SortCluster": "Sort Cluster", + "Sort.ByName": "By Name", + "Sort.ByAddress": "By Address", + "Sort.ByType": "By Type", + "Preference.SortIndices": "Sort Indices", + "SortIndices.Descending": "Descending", + "SortIndices.Ascending": "Ascending", + "Preference.ViewAliases": "View Aliases", + "ViewAliases.Grouped": "Grouped", + "ViewAliases.List": "List", + "ViewAliases.None": "None", + "Overview.IndexFilter": "Index Filter", + "TableResults.Summary": "Searched {0} of {1} shards. {2} hits. {3} seconds", + "QueryFilter.AllIndices": "All Indices", + "QueryFilter.AnyValue": "any", + "QueryFilter-Header-Indices": "Indices", + "QueryFilter-Header-Types": "Types", + "QueryFilter-Header-Fields": "Fields", + "QueryFilter.DateRangeHint.from": "From : {0}", + "QueryFilter.DateRangeHint.to": " To : {0}", + "Query.FailAndUndo": "Query Failed. Undoing last changes", + "StructuredQuery.ShowRawJson": "Show Raw JSON" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    The Result Transformer can be used to post process the raw json results from a request into a more useful format.

    \ +

    The transformer should contain the body of a javascript function. The return value from the function becomes the new value passed to the json printer

    \ +

    Example:
    \ + return root.hits.hits[0]; would traverse a result set to show just the first match
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); would return the total memory used across an entire cluster

    \ +

    The following functions are available and can be useful processing arrays and objects
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    When Repeat Request is running, an extra parameter called prev is passed to the transformation function. This allows comparisons, and cumulative graphing

    \ +

    Example:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; would return the load average on the first cluster node over the last minute\ + This could be fed into the Graph to produce a load graph for the node\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    Raw Json: shows complete results of the query and transformation in raw JSON format

    \ +

    Graph Results: To produce a graph of your results, use the result transformer to produce an array of values

    \ +

    Search Results Table: If your query is a search, you can display the results of the search in a table.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Date fields accept a natural language query to produce a From and To date that form a range that the results are queried over.

    \ +

    The following formats are supported:

    \ +
      \ +
    • Keywords / Key Phrases
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + searches for dates matching the keyword. last year would search all of last year.
    • \ +
    • Ranges
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (spaces optional, many synonyms for range qualifiers)
      \ + Create a search range centered on now extending into the past and future by the amount specified.
    • \ +
    • DateTime and Partial DateTime
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + these formats specify a specific date range. 2011 would search the whole of 2011, while 2011-01-18 12:32:45 would only search for results in that 1 second range
    • \ +
    • Time and Time Partials
      \ + 12
      12:32
      12:32:45

      \ + these formats search for a particular time during the current day. 12:32 would search that minute during today
    • \ +
    • Date Ranges
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + A Date Range is created by specifying two dates in any format (Keyword / DateTime / Time) separated by < or -> (both do the same thing). If either end of the date range is missing, it is the same as having no constraint in that direction.
    • \ +
    • Date Range using Offset
      \ + 2010 -> 1yr
      3mins < now
      \ + Searches the specified date including the range in the direction specified.
    • \ +
    • Anchored Ranges
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Similar to above except the range is extend in both directions from the anchor date
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js new file mode 100644 index 000000000..2cc9bbb0c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js @@ -0,0 +1,164 @@ +i18n.setKeys({ +// "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs" : "Chargement des facettes...", + "General.Searching": "Recherche en cours...", + "General.Search": "Recherche", + "General.Help": "Aide", +// "General.HelpGlyph": "?", +// "General.CloseGlyph": "X", + "General.RefreshResults": "Rafraîchir", + "General.ManualRefresh": "Rafraîchissement manuel", + "General.RefreshQuickly": "Rafraîchissement rapide", + "General.Refresh5seconds": "Rafraîchissement toutes les 5 secondes", + "General.Refresh1minute": "Rafraîchissement toutes les minutes", + "AliasForm.AliasName": "Alias", + "AliasForm.NewAliasForIndex": "Nouvel Alias pour {0}", + "AliasForm.DeleteAliasMessage": "Entrez ''{0}'' pour effacer {1}. Attention, action irréversible.", + "AnyRequest.DisplayOptions" : "Options d'affichage", + "AnyRequest.AsGraph" : "En graphe", + "AnyRequest.AsJson" : "En JSON brut", + "AnyRequest.AsTable" : "En tableau", + "AnyRequest.History" : "Historique", + "AnyRequest.RepeatRequest" : "Répétition automatique de la requête", + "AnyRequest.RepeatRequestSelect" : "Répéter la requête toutes les ", + "AnyRequest.Transformer" : "Transformation des résultats", +// "AnyRequest.Pretty": "Pretty", + "AnyRequest.Query" : "Recherche", + "AnyRequest.Request": "Requête", + "AnyRequest.Requesting": "Requête en cours...", + "AnyRequest.ValidateJSON": "Valider le JSON", + "Browser.Title": "Navigateur", + "Browser.ResultSourcePanelTitle": "Résultat au format JSON", + "Command.DELETE": "SUPPRIMER", + "Command.SHUTDOWN": "ETEINDRE", + "Command.DeleteAliasMessage": "Supprimer l'Alias?", + "ClusterOverView.IndexName": "Index", + "ClusterOverview.NumShards": "Nombre de shards", + "ClusterOverview.NumReplicas": "Nombre de replica", + "ClusterOverview.NewIndex": "Nouvel Index", +// "IndexActionsMenu.Title": "Actions", + "IndexActionsMenu.NewAlias": "Nouvel Alias...", + "IndexActionsMenu.Refresh": "Rafraîchir", + "IndexActionsMenu.Flush": "Flusher", + "IndexActionsMenu.Optimize": "Optimiser...", + "IndexActionsMenu.Snapshot": "Dupliquer l'index (Snapshot)", + "IndexActionsMenu.Analyser": "Tester un analyseur", + "IndexActionsMenu.Open": "Ouvrir", + "IndexActionsMenu.Close": "Fermer", + "IndexActionsMenu.Delete": "Effacer...", +// "IndexInfoMenu.Title": "Info", + "IndexInfoMenu.Status": "Etat de l'Index", + "IndexInfoMenu.Metadata": "Métadonnées de l'Index", + "IndexCommand.TextToAnalyze": "Texte à analyser", + "IndexCommand.ShutdownMessage": "Entrez ''{0}'' pour éteindre {1}. Le noeud NE PEUT PAS être redémarré depuis cette interface.", +// "IndexSelector.NameWithDocs": "{0} ({1} docs)", + "IndexSelector.SearchIndexForDocs": "Chercher dans {0} les documents correspondant à", + "FilterBrowser.OutputType": "Format d'affichage des résultats {0}", + "FilterBrowser.OutputSize": "Nombre de Résultats: {0}", + "Header.ClusterHealth": "Santé du cluster: {0} ({1} {2})", + "Header.ClusterNotConnected": "Santé du cluster: non connecté", + "Header.Connect": "Se connecter", + "Nav.AnyRequest": "Autres requêtes", + "Nav.StructuredQuery": "Requêtes structurées", + "Nav.Browser": "Navigateur", + "Nav.ClusterHealth": "Santé du cluster", + "Nav.ClusterState": "Etat du cluster", + "Nav.ClusterNodes": "Noeuds du cluster", +// "Nav.Info": "Info", + "Nav.NodeStats": "Statistiques sur les noeuds", + "Nav.Overview": "Aperçu", + "Nav.Indices": "Index", + "Nav.Plugins": "Plugins", + "Nav.Status": "Etat", + "Nav.Templates": "Templates", + "Nav.StructuredQuery": "Recherche Structurée", +// "NodeActionsMenu.Title": "Actions", + "NodeActionsMenu.Shutdown": "Eteindre...", +// "NodeInfoMenu.Title": "Info", + "NodeInfoMenu.ClusterNodeInfo": "Infos sur le noeud du cluster", + "NodeInfoMenu.NodeStats": "Statistiques du noeud", + "NodeType.Client": "Noeud Client", + "NodeType.Coord": "Coordinateur", + "NodeType.Master": "Noeud Master", + "NodeType.Tribe": "Noeud Tribe", + "NodeType.Worker": "Noeud Worker", + "NodeType.Unassigned": "Non assigné", + "OptimizeForm.OptimizeIndex": "Optimiser {0}", + "OptimizeForm.MaxSegments": "Nombre maximum de segments", + "OptimizeForm.ExpungeDeletes": "Seulement purger les suppressions", + "OptimizeForm.FlushAfter": "Flusher après l'optimisation", + "OptimizeForm.WaitForMerge": "Attendre la fin de la fusion", + "Overview.PageTitle" : "Aperçu du cluster", +// "Output.JSON": "JSON", + "Output.Table": "Tableau", + "Output.ShowSource": "Voir la requête source", + "TableResults.Summary": "Recherche sur {0} des {1} shards. {2} résultats. {3} secondes", + "QueryFilter.AllIndices": "Tous les index", + "QueryFilter.AnyValue": "Tout", + "QueryFilter-Header-Indices": "Index", +// "QueryFilter-Header-Types": "Types", + "QueryFilter-Header-Fields": "Champs", + "QueryFilter.DateRangeHint.from": "De : {0}", + "QueryFilter.DateRangeHint.to": " A : {0}", + "Query.FailAndUndo": "Requête en échec. Annulation des dernières modifications.", + "StructuredQuery.ShowRawJson": "Voir le JSON brut" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    Le transformateur de résultats peut être utilisé pour modifier a posteriori les résultats JSON bruts dans un format plus utile.

    \ +

    Le transformateur devrait contenir le corps d'une fonction javascript. La valeur de retour de la fonction devient la nouvelle valeur qui sera passée à l'afficheur des documents JSON.

    \ +

    Exemple:
    \ + return root.hits.hits[0]; ne renverra que le premier élément de l'ensemble des résultats.
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); retournera la mémoire totale utilisée dans l'ensemble du cluster.

    \ +

    Les fonctions suivantes sont disponibles et peuvent vous être utiles pour travailler sur les tableaux et les objets:
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    Lorsque vous activez la répétition automatique de la requête, un paramètre supplémentaire nommé prev est passé à la fonction de transformation. Cela permet les comparaisons et les graphes cumulatifs.

    \ +

    Exemple:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; retournera la charge moyenne du premier noeud du cluster pour la dernière minute écoulée.\ + Cela peut alimenter ensuite le graphe pour produire un graphe de charge du noeud.\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    En JSON brut: affiche les résultats complets de la recherche éventuellement transformée au format JSON brut.

    \ +

    En graphe: pour fabriquer un graphe de vos résultats, utilsez la transformation de résultats pour générer un tableau de valeurs.

    \ +

    En tableau: si votre requête est une recherche, vous pouvez alors afficher les résultats dans un tableau.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Les champs Date acceptent une requête en langage naturel pour produire un écart de date (from/to) correspondant.

    \ +

    Les formats suivants sont acceptés :

    \ +
      \ +
    • Mots clés
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + Cherchera pour des dates correspondant au mot clé. last year cherchera sur toute l'année précédente.
    • \ +
    • Ecarts
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (les espaces sont optionnels et il existe beaucoup de synonymes pour qualifier les écarts)
      \ + Créé un écart de date basé sur l'heure courante (maintenant) avec plus ou moins l'écart indiqué.
    • \ +
    • Dates et Dates partielles
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + Ces formats indiquent un écart de date spécifique. 2011 cherchera sur toute l'année 2011, alors que 2011-01-18 12:32:45 ne cherchera que pour la date précise à la seconde près.
    • \ +
    • Heures et heures partielles
      \ + 12
      12:32
      12:32:45

      \ + Ces formats indiquent un espace de temps pour la date du jour. 12:32 cherchera les éléments d'aujourd'hui à cette minute précise.
    • \ +
    • Ecart de Date
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + Un écart de date est créé en spécifiant deux dates dans n'importe lequel des formats précédents (Mot clé / Dates / Heures) séparées par < ou -> (les deux produisent le même effet). Si la date de fin n'est pas indiquée, alors il n'y aura aucune contrainte de fin.
    • \ +
    • Ecart de date avec décalage
      \ + 2010 -> 1yr
      3mins < now
      \ + Cherche en incluant un décalage de la date dans la direction indiquée.
    • \ +
    • Ecart de date avec bornes
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Similaire à ci-dessus excepté que le décalage est appliqué dans les deux sens à partir de la date indiquée.
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js new file mode 100644 index 000000000..d4b6abff5 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js @@ -0,0 +1,174 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "Carregando Facetas...", + "General.Searching": "Buscando...", + "General.Search": "Busca", + "General.Help": "Ajuda", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "Atualizar", + "General.ManualRefresh": "Atualização Manual", + "General.RefreshQuickly": "Atualização rápida", + "General.Refresh5seconds": "Atualização a cada 5 segundos", + "General.Refresh1minute": "Atualização a cada minuto", + "AliasForm.AliasName": "Apelido", + "AliasForm.NewAliasForIndex": "Novo apelido para {0}", + "AliasForm.DeleteAliasMessage": "digite ''{0}'' para deletar {1}. Não há como voltar atrás", + "AnyRequest.DisplayOptions" : "Mostrar Opções", + "AnyRequest.AsGraph" : "Mostrar como gráfico", + "AnyRequest.AsJson" : "Mostrar JSON bruto", + "AnyRequest.AsTable" : "Mostrar tabela de resultados da consulta", + "AnyRequest.History" : "Histórico", + "AnyRequest.RepeatRequest" : "Refazer requisição", + "AnyRequest.RepeatRequestSelect" : "Repetir requisição a cada ", + "AnyRequest.Transformer" : "Transformador de resultado", + "AnyRequest.Pretty": "Amigável", + "AnyRequest.Query" : "Consulta", + "AnyRequest.Request": "Requisição", + "AnyRequest.Requesting": "Realizando requisição...", + "AnyRequest.ValidateJSON": "Validar JSON", + "Browser.Title": "Navegador", + "Browser.ResultSourcePanelTitle": "Resultado", + "Command.DELETE": "DELETAR", + "Command.SHUTDOWN": "DESLIGAR", + "Command.DeleteAliasMessage": "Remover apelido?", + "ClusterOverView.IndexName": "Nome do índice", + "ClusterOverview.NumShards": "Número de Shards", + "ClusterOverview.NumReplicas": "Número de Réplicas", + "ClusterOverview.NewIndex": "Novo índice", + "IndexActionsMenu.Title": "Ações", + "IndexActionsMenu.NewAlias": "Novo apelido...", + "IndexActionsMenu.Refresh": "Atualizar", + "IndexActionsMenu.Flush": "Flush", + "IndexActionsMenu.Optimize": "Otimizar...", + "IndexActionsMenu.Snapshot": "Snapshot do Gateway", + "IndexActionsMenu.Analyser": "Analizador de teste", + "IndexActionsMenu.Open": "Abrir", + "IndexActionsMenu.Close": "Fechar", + "IndexActionsMenu.Delete": "Deletar...", + "IndexInfoMenu.Title": "Info", + "IndexInfoMenu.Status": "Status do índice", + "IndexInfoMenu.Metadata": "Metadados do índice", + "IndexCommand.TextToAnalyze": "Texto para analizar", + "IndexCommand.ShutdownMessage": "digite ''{0}'' para desligar {1}. Nó NÃO PODE ser reiniciado à partir dessa interface", + "IndexOverview.PageTitle": "Visão geral dos índices", + "IndexSelector.NameWithDocs": "{0} ({1} documentoss)", + "IndexSelector.SearchIndexForDocs": "Busca {0} por documentos onde:", + "FilterBrowser.OutputType": "Resultados: {0}", + "FilterBrowser.OutputSize": "Número de Resultados: {0}", + "Header.ClusterHealth": "saúde do cluster: {0} ({1} {2})", + "Header.ClusterNotConnected": "saúde do cluster: não conectado", + "Header.Connect": "Conectar", + "Nav.AnyRequest": "Qualquer requisição", + "Nav.Browser": "Navegador", + "Nav.ClusterHealth": "Saúde do Cluster", + "Nav.ClusterState": "Estado do Cluster", + "Nav.ClusterNodes": "Nós do Cluster", + "Nav.Info": "Informações", + "Nav.NodeStats": "Estatísticas do nó", + "Nav.Overview": "Visão Geral", + "Nav.Indices": "Índices", + "Nav.Plugins": "Plugins", + "Nav.Status": "Status", + "Nav.Templates": "Modelos", + "Nav.StructuredQuery": "Consulta Estruturada", + "NodeActionsMenu.Title": "Ações", + "NodeActionsMenu.Shutdown": "Desligar...", + "NodeInfoMenu.Title": "Informações", + "NodeInfoMenu.ClusterNodeInfo": "Informações do Nó do Cluster", + "NodeInfoMenu.NodeStats": "Estatísticas do Nó", + "NodeType.Client": "Nó cliente", + "NodeType.Coord": "Coordenador", + "NodeType.Master": "Nó mestre", + "NodeType.Tribe": "Nó tribo", + "NodeType.Worker": "Nó trabalhador", + "NodeType.Unassigned": "Não atribuido", + "OptimizeForm.OptimizeIndex": "Otimizar {0}", + "OptimizeForm.MaxSegments": "# Máximo De Segmentos", + "OptimizeForm.ExpungeDeletes": "Apenas Expurgar Exclusões", + "OptimizeForm.FlushAfter": "Flush após Otimizar", + "OptimizeForm.WaitForMerge": "Esperar Por Merge", + "Overview.PageTitle": "Visão geral do Cluster", + "Output.JSON": "JSON", + "Output.Table": "Tabela", + "Output.CSV": "CSV", + "Output.ShowSource": "Mostrar consulta original", + "Preference.SortCluster": "Ordenar Cluster", + "Sort.ByName": "Por nome", + "Sort.ByAddress": "Por endereço", + "Sort.ByType": "Por tipo", + "Preference.ViewAliases": "Ver Alias", + "ViewAliases.Grouped": "Agrupado", + "ViewAliases.List": "Lista", + "ViewAliases.None": "Nenhum", + "Overview.IndexFilter": "Filtar Índice", + "TableResults.Summary": "Buscado {0} de {1} shards. {2} resultados. {3} segundos", + "QueryFilter.AllIndices": "Todos os Índices", + "QueryFilter.AnyValue": "qualquer", + "QueryFilter-Header-Indices": "Índices", + "QueryFilter-Header-Types": "Tipos", + "QueryFilter-Header-Fields": "Campos", + "QueryFilter.DateRangeHint.from": "De : {0}", + "QueryFilter.DateRangeHint.to": " A : {0}", + "Query.FailAndUndo": "Consulta falhou. Desfazendo últimas alterações", + "StructuredQuery.ShowRawJson": "Mostrar JSON bruto" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    O Transformador de Resultados pode ser usado para transformar os resultados de uma consulta de json bruto para um formato mais útil.

    \ +

    O transformador deve possuir o corpo de uma função javascript. O retorno da função se torna o novo valor passado para o json printer

    \ +

    Exemplo:
    \ + return root.hits.hits[0]; irá alterar a resposta para mostrar apenas o primeiro resultado
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); irá retornar o total de memória utilizada pelo cluster

    \ +

    As seguintes funções estão disponíveis e podem ser úteis no processamento de vetores e objetos
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    Durante a execução da opção Refazer Requisição, um parâmetro extra chamado prev é passado para a função de transformação. Isso permite fazer comparações e marcações cumulativas

    \ +

    Exemplo:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; irá retornar a carga média no primeiro nó do cluster no último minuto\ + Essa informação pode ser inserida no Gráfico para fazer um gráfico de carga do nó\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    Json Bruto: Exibe o resultado completo da consulta e da transformação no formato de JSON bruto

    \ +

    Gráfico de Resultados: Para gerar um gráfico com seus resultados, utilize o tranformador de resultados para produzir um vetor de valores

    \ +

    Tabela de Resultados da Consulta: Se sua consulta for uma busca, você pode exibir seus resultados no formato de uma tabela.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Campos do tipo Data aceitam consultas em linguagem natural (em inglês) para produzir um From e um To de modo a formar um intervalo dentro do qual os resultados são filtrados.

    \ +

    Os seguintes formatos são suportados:

    \ +
      \ +
    • Palavras-chave
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + buscam por datas de acordo com a palavra-chave. last year irá buscar tudo do último ano.
    • \ +
    • Intervalos
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (espaços são opcionais, diversos sinônimos para qualificadores de intervalo)
      \ + Cria um intervalo de busca a partir de agora (now), extendendo este intervalo no passado e no futuro de acordo com intervalo especificado.
    • \ +
    • Data/Hora (DateTime) e Data/Hora parcial
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + esses formatos especificam um intervalo especifico. 2011 irá buscar todo o ano de 2011, enquanto 2011-01-18 12:32:45 irá buscar apenas por resultados dentro deste intervalo de 1 segundo
    • \ +
    • Tempo (Time) e Tempo parcial
      \ + 12
      12:32
      12:32:45

      \ + esses formatos buscam por um horário específico no dia atual. 12:32 irá buscar este minuto específico do dia
    • \ +
    • Intervalos de Data
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + Um intervalo de data é criado especificando-se duas datas em qualquer formato (Palavras-chave, Data/Hora ou Tempo) separados por < ou -> (ambos fazem a mesma coisa). Se a data de início ou fim do intervalo não for especificada é a mesma coisa que não impor limites na busca nesta direção.
    • \ +
    • Intervalo de Data com Deslocamento
      \ + 2010 -> 1yr
      3mins < now
      \ + Busca a data especificada incluindo o intervalo na direção determinada pelo deslocamento
    • \ +
    • Intervalos Bidirecionais
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Idêntico ao exemplo anterior porém o intervalo é extendido em ambas as direções a partir da data especificada
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js new file mode 100644 index 000000000..f61195616 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js @@ -0,0 +1,177 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "Gruplar Yükleniyor...", + "General.Searching": "Aranıyor...", + "General.Search": "Ara", + "General.Help": "Yardım", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "Yenile", + "General.ManualRefresh": "Manuel Yenileme", + "General.RefreshQuickly": "Hızlı yenile", + "General.Refresh5seconds": "5 saniyede bir yenile", + "General.Refresh1minute": "Her dakika yenile", + "AliasForm.AliasName": "Alternatif İsim", + "AliasForm.NewAliasForIndex": "{0} için yeni alternatif isim", + "AliasForm.DeleteAliasMessage": "{1} silmek için ''{0}'' . Geriye dönüş yoktur.", + "AnyRequest.DisplayOptions" : "Seçenekleri Göster", + "AnyRequest.AsGraph" : "Sonuçları Çizdir", + "AnyRequest.AsJson" : "JSON formatında göster", + "AnyRequest.AsTable" : "Arama sonuçlarını tablo halinde göster", + "AnyRequest.History" : "Geçmiş", + "AnyRequest.RepeatRequest" : "İsteği Tekrarla", + "AnyRequest.RepeatRequestSelect" : "İsteği sürekli tekrarla ", + "AnyRequest.Transformer" : "Sonuç Dönüştürücü", + "AnyRequest.Pretty": "Düzenli", + "AnyRequest.Query" : "Sorgu", + "AnyRequest.Request": "Gönder", + "AnyRequest.Requesting": "İsteniyor...", + "AnyRequest.ValidateJSON": "JSON Doğrula", + "Browser.Title": "Browser", + "Browser.ResultSourcePanelTitle": "Sonuç Kaynağı", + "Command.DELETE": "SİL", + "Command.SHUTDOWN": "KAPA", + "Command.DeleteAliasMessage": "Alternatif ismi sil?", + "ClusterOverView.IndexName": "Indeks İsmi", + "ClusterOverview.NumShards": "Sektör Sayısı", + "ClusterOverview.NumReplicas": "Yedek Sayısı", + "ClusterOverview.NewIndex": "Yeni Indeks", + "IndexActionsMenu.Title": "İşlemler", + "IndexActionsMenu.NewAlias": "Yeni Alternatif İsim...", + "IndexActionsMenu.Refresh": "Yenile", + "IndexActionsMenu.Flush": "Boşalt", + "IndexActionsMenu.Optimize": "Optimize et...", + "IndexActionsMenu.Snapshot": "Gateway Snapshot (Kopya Al)", + "IndexActionsMenu.Analyser": "Analizi test et", + "IndexActionsMenu.Open": "Aç", + "IndexActionsMenu.Close": "Kapa", + "IndexActionsMenu.Delete": "Sil...", + "IndexInfoMenu.Title": "Bilgi", + "IndexInfoMenu.Status": "Indeks Durumu", + "IndexInfoMenu.Metadata": "Indeks Metaveri", + "IndexCommand.TextToAnalyze": "Analiz edilecek metin", + "IndexCommand.ShutdownMessage": "{1} kapatmak için ''{0}'' yazın . Nod bu arayüzden tekrar BAŞLATILAMAZ", + "IndexOverview.PageTitle": "Indeksler Genel Bakış", + "IndexSelector.NameWithDocs": "{0} ({1} döküman)", + "IndexSelector.SearchIndexForDocs": "{0} indeksinde ara:", + "FilterBrowser.OutputType": "Sonuç Formatı: {0}", + "FilterBrowser.OutputSize": "Sonuç Sayısı: {0}", + "Header.ClusterHealth": "Küme Durumu: {0} ({1} de {2})", + "Header.ClusterNotConnected": "Küme Durumu: Bağlı Değil", + "Header.Connect": "Bağlan", + "Nav.AnyRequest": "Özel Sorgu", + "Nav.Browser": "Görüntüle", + "Nav.ClusterHealth": "Küme Durumu", + "Nav.ClusterState": "Küme Statüsü", + "Nav.ClusterNodes": "Nod Bilgileri", + "Nav.Info": "Bilgi", + "Nav.NodeStats": "Nod İstatistikleri", + "Nav.Overview": "Genel Bakış", + "Nav.Indices": "Indeksler", + "Nav.Plugins": "Eklentiler", + "Nav.Status": "Indeks İstatistikleri", + "Nav.Templates": "Şablonlar", + "Nav.StructuredQuery": "Yapılandırılmış Sorgu", + "NodeActionsMenu.Title": "İşlemler", + "NodeActionsMenu.Shutdown": "Kapat...", + "NodeInfoMenu.Title": "Bilgi", + "NodeInfoMenu.ClusterNodeInfo": "Küme Nod Bilgileri", + "NodeInfoMenu.NodeStats": "Nod İstatistikleri", + "NodeType.Client": "Client Nod", + "NodeType.Coord": "Coordinator", + "NodeType.Master": "Master Nod", + "NodeType.Tribe": "Tribe Nod", + "NodeType.Worker": "Worker Nod", + "NodeType.Unassigned": "Sahipsiz", + "OptimizeForm.OptimizeIndex": "{0} Optimize Et", + "OptimizeForm.MaxSegments": "Maksimum Segment Sayısı", + "OptimizeForm.ExpungeDeletes": "Silme İşlemi Artıklarını Temizle", + "OptimizeForm.FlushAfter": "Optimize Ettikten Sonra Boşalt", + "OptimizeForm.WaitForMerge": "Birleştirme İçin Bekle", + "Overview.PageTitle" : "Kümeler Genelbakış", + "Output.JSON": "JSON", + "Output.Table": "Tablo", + "Output.CSV": "CSV", + "Output.ShowSource": "Sorgu kaynağını göster", + "Preference.SortCluster": "Kümeyi Sırala", + "Sort.ByName": "İsme göre", + "Sort.ByAddress": "Adrese göre", + "Sort.ByType": "Tipe göre", + "Preference.SortIndices": "Indeksleri sırala", + "SortIndices.Descending": "Azalan", + "SortIndices.Ascending": "Artan", + "Preference.ViewAliases": "Alternatif isimleri görüntüle", + "ViewAliases.Grouped": "Gruplanmış", + "ViewAliases.List": "Liste", + "ViewAliases.None": "Karışık", + "Overview.IndexFilter": "Indeks Filtresi", + "TableResults.Summary": "{0} parçanın {1} tanesi arandı. {2} sonuç. {3} saniye", + "QueryFilter.AllIndices": "Tüm Indeksler", + "QueryFilter.AnyValue": "herhangi", + "QueryFilter-Header-Indices": "Indeksler", + "QueryFilter-Header-Types": "Tipler", + "QueryFilter-Header-Fields": "Alanlar", + "QueryFilter.DateRangeHint.from": "{0}'dan", + "QueryFilter.DateRangeHint.to": " {0}'a", + "Query.FailAndUndo": "Sorgu Başarısız. Son değişiklikler geri alınıyor.", + "StructuredQuery.ShowRawJson": "Formatsız JSON göster" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    Sonuç Dönüştürücü sorgudan dönen JSON sonuçlarını işleyip daha kullanışlı bir formata dönüştürmek için kullanılabilir.

    \ +

    Dönüştürücü içierisinde javascript fonksiyonu tanımlanmalıdır. Bu fonksiyondan dönen yeni sonuç çıktı kısmına yazdırılır.

    \ +

    Örnek:
    \ + return root.hits.hits[0]; sonucu dolaşarak ilk eşleşmeyi göster
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); tüm kümede kullanılan toplam belleği gösterir

    \ +

    Aşağıdaki fonksiyonlar dizi ve objelerin işlenmesinde yardımcı olması için kullanılabilir
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    Sorgu tekrarlama çalışırken, prev isimli ekstra bir parametre dönüştürücü fonksiyonuna verilir. Bu sayede karşılaştırmalar ve toplu grafik gösterimleri yapılabilir.

    \ +

    Örnek:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; önceki dakika boyunca kümede bulunan ilk nod üzerindeki averaj yükü verir.\ + Bu sonuç nod için yük grafiği yaratılmasında kullanılabilir.\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    Sade Json: Sorgunun tüm sonuçlarını ve (yapıldıysa) dönüştürüldükten sonraki halini sade JSON formatında gösterir

    \ +

    Sonuçları Çizdir: Sonuçları grafiksel olarak görüntülemek için sonuç dörücüyü kullanarak değerleri dizi haline getirin.

    \ +

    Arama Sonuçları Tablosu: Eğer sorgunuz bir arama ise, sonuçları bir tabloda görüntüleyebilirsiniz.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Tarih alanları ana dile yakın kelimeler kullanarak iki tarih aralığında sorgu yapılabilmesini sağlar.

    \ +

    Aşağıdaki tanımlar kullanılabilir:

    \ +
      \ +
    • Anahtar Kelimeler
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + kelimeleri eşleşen tarihleri verir. Örneğin last year geçen yıl tarihli bütün verileri döndürür.
    • \ +
    • Aralıklar
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (boşluklar isteğe bağlıdır, ayni kelime için farklı yazım şekilleri kullanılabilir)
      \ + Şu anki tarihi (now) baz alarak geçmiş veya ileriki bir tarih aralığındaki kayıtları verir.
    • \ +
    • Tarih ve Kısmi Tarihler
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + bu formatlar spesifik bir tarihi tanımlarlar. 2011 tüm 2011 yılını ararken, 2011-01-18 12:32:45 şeklinde bir sorgu sadece o saniyedeki sonuçları verir.
    • \ +
    • Zaman ve Kısmi Zamanlar
      \ + 12
      12:32
      12:32:45

      \ + bu formatlar gün içerisinde spesifik bir zamanı tanımlarlar. Örneğin 12:32 sadece bu saat ve dakikadaki kayıtları verir.
    • \ +
    • Tarih Aralıkları
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + Tarih aralıkları yukarda belirtilen herhangi bir formatı < or -> ile ayırarak yapılabilir. Eğer aralığın bir tarafı eksikse, sorgu ucu açıkmış gibi davranır.
    • \ +
    • Ofsetli Tarih Aralığı
      \ + 2010 -> 1yr
      3mins < now
      \ + Verilen yöndeki tarih aralığına bakar.
    • \ +
    • Çakılı Aralıklar
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Yukarıdakiyle ayni fakat belirtilen tarihten her iki yöne de bakılır.
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js new file mode 100644 index 000000000..0038de173 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js @@ -0,0 +1,172 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "加载聚合查询...", + "General.Searching": "搜索中...", + "General.Search": "搜索", + "General.Help": "帮助", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "刷新", + "General.ManualRefresh": "手动刷新", + "General.RefreshQuickly": "快速刷新", + "General.Refresh5seconds": "每5秒刷新", + "General.Refresh1minute": "每1分钟刷新", + "AliasForm.AliasName": "别名", + "AliasForm.NewAliasForIndex": "为 {0} 创建新别名", + "AliasForm.DeleteAliasMessage": "输入 ''{0}'' 删除 {1}. 此操作无法恢复", + "AnyRequest.DisplayOptions" : "显示选项", + "AnyRequest.AsGraph" : "图形视图", + "AnyRequest.AsJson" : "原始 JSON", + "AnyRequest.AsTable" : "表格视图", + "AnyRequest.History" : "历史记录", + "AnyRequest.RepeatRequest" : "重复请求", + "AnyRequest.RepeatRequestSelect" : "重复周期 ", + "AnyRequest.Transformer" : "结果转换器", + "AnyRequest.Pretty": "易读", + "AnyRequest.Query" : "查询", + "AnyRequest.Request": "提交请求", + "AnyRequest.Requesting": "请求中...", + "AnyRequest.ValidateJSON": "验证 JSON", + "Browser.Title": "数据浏览", + "Browser.ResultSourcePanelTitle": "原始数据", + "Command.DELETE": "删除", + "Command.SHUTDOWN": "关闭", + "Command.DeleteAliasMessage": "删除别名?", + "ClusterOverView.IndexName": "索引名称", + "ClusterOverview.NumShards": "分片数", + "ClusterOverview.NumReplicas": "副本数", + "ClusterOverview.NewIndex": "新建索引", + "IndexActionsMenu.Title": "动作", + "IndexActionsMenu.NewAlias": "新建别名...", + "IndexActionsMenu.Refresh": "刷新", + "IndexActionsMenu.Flush": "Flush刷新", + "IndexActionsMenu.Optimize": "优化...", + "IndexActionsMenu.Snapshot": "网关快照", + "IndexActionsMenu.Analyser": "测试分析器", + "IndexActionsMenu.Open": "开启", + "IndexActionsMenu.Close": "关闭", + "IndexActionsMenu.Delete": "删除...", + "IndexInfoMenu.Title": "信息", + "IndexInfoMenu.Status": "索引状态", + "IndexInfoMenu.Metadata": "索引信息", + "IndexCommand.TextToAnalyze": "文本分析", + "IndexCommand.ShutdownMessage": "输入 ''{0}'' 以关闭 {1} 节点. 关闭的节点无法从此界面重新启动", + "IndexOverview.PageTitle": "索引概览", + "IndexSelector.NameWithDocs": "{0} ({1} 个文档)", + "IndexSelector.SearchIndexForDocs": "搜索 {0} 的文档, 查询条件:", + "FilterBrowser.OutputType": "返回格式: {0}", + "FilterBrowser.OutputSize": "显示数量: {0}", + "Header.ClusterHealth": "集群健康值: {0} ({1} of {2})", + "Header.ClusterNotConnected": "集群健康值: 未连接", + "Header.Connect": "连接", + "Nav.AnyRequest": "复合查询", + "Nav.Browser": "数据浏览", + "Nav.ClusterHealth": "集群健康值", + "Nav.ClusterState": "群集状态", + "Nav.ClusterNodes": "集群节点", + "Nav.Info": "信息", + "Nav.NodeStats": "节点状态", + "Nav.Overview": "概览", + "Nav.Indices": "索引", + "Nav.Plugins": "插件", + "Nav.Status": "状态", + "Nav.Templates": "模板", + "Nav.StructuredQuery": "基本查询", + "NodeActionsMenu.Title": "动作", + "NodeActionsMenu.Shutdown": "关停...", + "NodeInfoMenu.Title": "信息", + "NodeInfoMenu.ClusterNodeInfo": "集群节点信息", + "NodeInfoMenu.NodeStats": "节点状态", + "NodeType.Client": "节点客户端", + "NodeType.Coord": "协调器", + "NodeType.Master": "主节点", + "NodeType.Tribe": "分支结点", + "NodeType.Worker": "工作节点", + "NodeType.Unassigned": "未分配", + "OptimizeForm.OptimizeIndex": "优化 {0}", + "OptimizeForm.MaxSegments": "最大索引段数", + "OptimizeForm.ExpungeDeletes": "只删除被标记为删除的", + "OptimizeForm.FlushAfter": "优化后刷新", + "OptimizeForm.WaitForMerge": "等待合并", + "Overview.PageTitle" : "集群概览", + "Output.JSON": "JSON", + "Output.Table": "Table", + "Output.CSV": "CSV", + "Output.ShowSource": "显示查询语句", + "Preference.SortCluster": "集群排序", + "Sort.ByName": "按名称", + "Sort.ByAddress": "按地址", + "Sort.ByType": "按类型", + "TableResults.Summary": "查询 {1} 个分片中用的 {0} 个. {2} 命中. 耗时 {3} 秒", + "QueryFilter.AllIndices": "所有索引", + "QueryFilter.AnyValue": "任意", + "QueryFilter-Header-Indices": "索引", + "QueryFilter-Header-Types": "类型", + "QueryFilter-Header-Fields": "字段", + "QueryFilter.DateRangeHint.from": "从 : {0}", + "QueryFilter.DateRangeHint.to": " 到 : {0}", + "Query.FailAndUndo": "查询失败. 撤消最近的更改", + "StructuredQuery.ShowRawJson": "显示原始 JSON" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    结果转换器用于返回结果原始JSON的后续处理, 将结果转换为更有用的格式.

    \ +

    转换器应当包含javascript函数体. 函数的返回值将传递给json分析器

    \ +

    Example:
    \ + return root.hits.hits[0];
    \ + 遍历结果并只显示第一个元素
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);
    \ + 将返回整个集群使用的总内存

    \ +

    以下函数可以方便的处理数组与对象
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    当启用重复请求时, prev 参数将会传递给转换器函数. 这将用于比较并累加图形

    \ +

    Example:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;
    \ + 将返回第一个集群节点最近一分钟内的平均负载\ + 将会把结果送人图表以产生一个负载曲线图\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    原始 Json: 将完整的查询结果转换为原始JSON格式

    \ +

    图形视图: 将查询结果图形化, 将查询结果转换为数组值的形式

    \ +

    表格视图: 如果查询是一个搜索, 可以将搜索结果以表格形式显示.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Date 字段接受日期范围的形式查询.

    \ +

    一下格式被支持:

    \ +
      \ +
    • 关键词 / 关键短语
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + 搜索关键字匹配的日期. last year 将搜索过去全年.
    • \ +
    • 范围
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (空格可选, 同等于多个范围修饰词)
      \ + 创建一个指定时间范围的搜索, 将围绕现在 并延伸至过去与未来时间段.
    • \ +
    • DateTime 与 DateTime局部
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + 指定一个特定的日期范围. 2011会搜索整个 2011年, 而 2011-01-18 12:32:45 将只搜索1秒范围内
    • \ +
    • Time 与 Time局部
      \ + 12
      12:32
      12:32:45

      \ + 这些格式只搜索当天的特定时间. 12:32 将搜索当天的那一分钟
    • \ +
    • 日期范围
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + 日期范围是将两个日期格式串 (日期关键字 / DateTime / Time) 用 < 或 -> (效果相同) 分隔. 如果缺少任意一端,那么在这个方向上时间将没有限制.
    • \ +
    • 偏移日期范围
      \ + 2010 -> 1yr
      3mins < now
      \ + 搜索包括指定方向上偏移的日期.
    • \ +
    • 锚定范围
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + 类似于上面的便宜日期,在两个方向上将锚定的日期延长
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css new file mode 100644 index 000000000..be7e15cb3 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css @@ -0,0 +1,1338 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('fonts/fontawesome-webfont.eot?v=4.0.3'); + src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.3333333333333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.2857142857142858em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.142857142857143em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + top: 0.14285714285714285em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.8571428571428572em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-asc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-desc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-reply-all:before { + content: "\f122"; +} +.fa-mail-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js new file mode 100644 index 000000000..bf75939d6 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js @@ -0,0 +1,14500 @@ +/*! + * jQuery JavaScript Library v1.6.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu May 12 15:04:36 2011 -0400 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // (both of which we optimize for) + quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for digits + rdigit = /\d/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.6.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.done( fn ); + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery._Deferred(); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return (new Function( "return " + data ))(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + // (xml & tmp used internally) + parseXML: function( data , xml , tmp ) { + + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + + tmp = xml.documentElement; + + if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + jQuery.error( "Invalid XML: " + data ); + } + + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + + if ( indexOf ) { + return indexOf.call( array, elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can be optionally by executed if its a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +// Expose jQuery to the global object +return jQuery; + +})(); + + +var // Promise methods + promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), + // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + // Create a simple deferred (one callbacks list) + _Deferred: function() { + var // callbacks list + callbacks = [], + // stored [ context , args ] + fired, + // to avoid firing when already doing so + firing, + // flag to know if the deferred has been cancelled + cancelled, + // the deferred itself + deferred = { + + // done( f1, f2, ...) + done: function() { + if ( !cancelled ) { + var args = arguments, + i, + length, + elem, + type, + _fired; + if ( fired ) { + _fired = fired; + fired = 0; + } + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + deferred.done.apply( deferred, elem ); + } else if ( type === "function" ) { + callbacks.push( elem ); + } + } + if ( _fired ) { + deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); + } + } + return this; + }, + + // resolve with given context and args + resolveWith: function( context, args ) { + if ( !cancelled && !fired && !firing ) { + // make sure args are available (#8421) + args = args || []; + firing = 1; + try { + while( callbacks[ 0 ] ) { + callbacks.shift().apply( context, args ); + } + } + finally { + fired = [ context, args ]; + firing = 0; + } + } + return this; + }, + + // resolve with this as context and given arguments + resolve: function() { + deferred.resolveWith( this, arguments ); + return this; + }, + + // Has this deferred been resolved? + isResolved: function() { + return !!( firing || fired ); + }, + + // Cancel + cancel: function() { + cancelled = 1; + callbacks = []; + return this; + } + }; + + return deferred; + }, + + // Full fledged deferred (two callbacks list) + Deferred: function( func ) { + var deferred = jQuery._Deferred(), + failDeferred = jQuery._Deferred(), + promise; + // Add errorDeferred methods, then and promise + jQuery.extend( deferred, { + then: function( doneCallbacks, failCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ); + return this; + }, + always: function() { + return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); + }, + fail: failDeferred.done, + rejectWith: failDeferred.resolveWith, + reject: failDeferred.resolve, + isRejected: failDeferred.isResolved, + pipe: function( fnDone, fnFail ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject ); + } else { + newDefer[ action ]( returned ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + if ( promise ) { + return promise; + } + promise = obj = {}; + } + var i = promiseMethods.length; + while( i-- ) { + obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; + } + return obj; + } + }); + // Make sure only one callback list will be used + deferred.done( failDeferred.cancel ).fail( deferred.cancel ); + // Unexpose cancel + delete deferred.cancel; + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = arguments, + i = 0, + length = args.length, + count = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + // Strange bug in FF4: + // Values changed onto the arguments object sometimes end up as undefined values + // outside the $.when method. Cloning the object into a fresh array solves the issue + deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) ); + } + }; + } + if ( length > 1 ) { + for( ; i < length; i++ ) { + if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return deferred.promise(); + } +}); + + + +jQuery.support = (function() { + + var div = document.createElement( "div" ), + documentElement = document.documentElement, + all, + a, + select, + opt, + input, + marginDiv, + support, + fragment, + body, + bodyStyle, + tds, + events, + eventName, + i, + isSupported; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName( "tbody" ).length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName( "link" ).length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + div.detachEvent( "onclick", click ); + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains it's value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + div.innerHTML = ""; + + // Figure out if the W3C box model works as expected + div.style.width = div.style.paddingLeft = "1px"; + + // We use our own, invisible, body + body = document.createElement( "body" ); + bodyStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + // Set background to avoid IE crashes when removing (#9028) + background: "none" + }; + for ( i in bodyStyle ) { + body.style[ i ] = bodyStyle[ i ]; + } + body.appendChild( div ); + documentElement.insertBefore( body, documentElement.firstChild ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + support.boxModel = div.offsetWidth === 2; + + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( document.defaultView && document.defaultView.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Remove the body element we added + body.innerHTML = ""; + documentElement.removeChild( body ); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + } ) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + return support; +})(); + +// Keep track of boxModel +jQuery.boxModel = jQuery.support.boxModel; + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([a-z])([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; + } else { + id = jQuery.expando; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); + } else { + cache[ id ] = jQuery.extend(cache[ id ], name); + } + } + + thisCache = cache[ id ]; + + // Internal jQuery data is stored in a separate object inside the object's data + // cache in order to avoid key collisions between internal data and user-defined + // data + if ( pvt ) { + if ( !thisCache[ internalKey ] ) { + thisCache[ internalKey ] = {}; + } + + thisCache = thisCache[ internalKey ]; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should + // not attempt to inspect the internal events object using jQuery.data, as this + // internal data object is undocumented and subject to change. + if ( name === "events" && !thisCache[name] ) { + return thisCache[ internalKey ] && thisCache[ internalKey ].events; + } + + return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + if ( thisCache ) { + delete thisCache[ name ]; + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !isEmptyDataObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( pvt ) { + delete cache[ id ][ internalKey ]; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + var internalCache = cache[ id ][ internalKey ]; + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + if ( jQuery.support.deleteExpando || cache != window ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the entire user cache at once because it's faster than + // iterating through each key, but we need to continue to persist internal + // data if it existed + if ( internalCache ) { + cache[ id ] = {}; + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + + cache[ id ][ internalKey ] = internalCache; + + // Otherwise, we need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + } else if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } else { + elem[ jQuery.expando ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 ) { + var attr = this[0].attributes, name; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + !jQuery.isNaN( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON +// property to be considered empty objects; this property always exists in +// order to make sure JSON.stringify does not expose internal metadata +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery.data( elem, deferDataKey, undefined, true ); + if ( defer && + ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && + ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery.data( elem, queueDataKey, undefined, true ) && + !jQuery.data( elem, markDataKey, undefined, true ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.resolve(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = (type || "fx") + "mark"; + jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); + if ( count ) { + jQuery.data( elem, key, count, true ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + if ( elem ) { + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type, undefined, true ); + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data), true ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + defer; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { + count++; + tmp.done( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + rinvalidChar = /\:/, + formHook, boolHook; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class") || "") ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", + setClass = elem.className; + + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + return (elem.value || "").replace(rreturn, ""); + } + + return undefined; + } + + var isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attrFix: { + // Always normalize to ensure hook usage + tabindex: "tabIndex" + }, + + attr: function( elem, name, value, pass ) { + var nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( !("getAttribute" in elem) ) { + return jQuery.prop( elem, name, value ); + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // Normalize the name if needed + name = notxml && jQuery.attrFix[ name ] || name; + + hooks = jQuery.attrHooks[ name ]; + + if ( !hooks ) { + // Use boolHook for boolean attributes + if ( rboolean.test( name ) && + (typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) { + + hooks = boolHook; + + // Use formHook for forms and if the name contains certain characters + } else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { + hooks = formHook; + } + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return undefined; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml ) { + return hooks.get( elem, name ); + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, name ) { + var propName; + if ( elem.nodeType === 1 ) { + name = jQuery.attrFix[ name ] || name; + + if ( jQuery.support.getSetAttribute ) { + // Use removeAttribute in browsers that support it + elem.removeAttribute( name ); + } else { + jQuery.attr( elem, name, "" ); + elem.removeAttributeNode( elem.getAttributeNode( name ) ); + } + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { + elem[ propName ] = false; + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabIndex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // Try to normalize/fix the name + name = notxml && jQuery.propFix[ name ] || name; + + hooks = jQuery.propHooks[ name ]; + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return (elem[ name ] = value); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: {} +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + return elem[ jQuery.propFix[ name ] || name ] ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = value; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// Use the value property for back compat +// Use the formHook for button elements in IE6/7 (#1954) +jQuery.attrHooks.value = { + get: function( elem, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.get( elem, name ); + } + return elem.value; + }, + set: function( elem, value, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !jQuery.support.getSetAttribute ) { + + // propFix is more comprehensive and contains all fixes + jQuery.attrFix = jQuery.propFix; + + // Use this for any attribute on a form in IE6/7 + formHook = jQuery.attrHooks.name = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + // Return undefined if nodeValue is empty string + return ret && ret.nodeValue !== "" ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Check form objects in IE (multiple bugs related) + // Only use nodeValue if the attribute node exists on the form + var ret = elem.getAttributeNode( name ); + if ( ret ) { + ret.nodeValue = value; + return value; + } + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return (elem.style.cssText = "" + value); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }); +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); + } + } + }); +}); + + + + +var hasOwn = Object.prototype.hasOwnProperty, + rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspaces = / /g, + rescape = /[^\w\s.|`]/g, + fcleanup = function( nm ) { + return nm.replace(rescape, "\\$&"); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } else if ( !handler ) { + // Fixes bug #7229. Fix recommended by jdalton + return; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery._data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events, + eventHandle = elemData.handle; + + if ( !events ) { + elemData.events = events = {}; + } + + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + if ( !handleObj.guid ) { + handleObj.guid = handler.guid; + } + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } + + var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem, undefined, true ); + } + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Event object or event type + var type = event.type || event, + namespaces = [], + exclusive; + + if ( type.indexOf("!") >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.exclusive = exclusive; + event.namespace = namespaces.join("."); + event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); + + // triggerHandler() and global events don't bubble or run the default action + if ( onlyHandlers || !elem ) { + event.preventDefault(); + event.stopPropagation(); + } + + // Handle a global trigger + if ( !elem ) { + // TODO: Stop taunting the data cache; remove global events and always attach to document + jQuery.each( jQuery.cache, function() { + // internalKey variable is just used to make it easier to find + // and potentially change this stuff later; currently it just + // points to jQuery.expando + var internalKey = jQuery.expando, + internalCache = this[ internalKey ]; + if ( internalCache && internalCache.events && internalCache.events[ type ] ) { + jQuery.event.trigger( event, data, internalCache.handle.elem ); + } + }); + return; + } + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + event.target = elem; + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + var cur = elem, + // IE doesn't like method names with a colon (#3533, #8272) + ontype = type.indexOf(":") < 0 ? "on" + type : ""; + + // Fire event on the current element, then bubble up the DOM tree + do { + var handle = jQuery._data( cur, "handle" ); + + event.currentTarget = cur; + if ( handle ) { + handle.apply( cur, data ); + } + + // Trigger an inline bound script + if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { + event.result = false; + event.preventDefault(); + } + + // Bubble up to document, then to window + cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; + } while ( cur && !event.isPropagationStopped() ); + + // If nobody prevented the default action, do it now + if ( !event.isDefaultPrevented() ) { + var old, + special = jQuery.event.special[ type ] || {}; + + if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction)() check here because IE6/7 fails that test. + // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. + try { + if ( ontype && elem[ type ] ) { + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + jQuery.event.triggered = type; + elem[ type ](); + } + } catch ( ieError ) {} + + if ( old ) { + elem[ ontype ] = old; + } + + jQuery.event.triggered = undefined; + } + } + + return event.result; + }, + + handle: function( event ) { + event = jQuery.event.fix( event || window.event ); + // Snapshot the handlers list since a called handler may add/remove events. + var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), + run_all = !event.exclusive && !event.namespace, + args = Array.prototype.slice.call( arguments, 0 ); + + // Use the fix-ed Event rather than the (read-only) native event + args[0] = event; + event.currentTarget = this; + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Triggered event must 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event. + if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + // Fixes #1925 where srcElement might not be defined either + event.target = event.srcElement || document; + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var eventDocument = event.target.ownerDocument || document, + doc = eventDocument.documentElement, + body = eventDocument.body; + + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { + event.which = event.charCode != null ? event.charCode : event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, + liveConvert( handleObj.origType, handleObj.selector ), + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + }, + + remove: function( handleObj ) { + jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); + } + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // set the correct event type + event.type = event.data; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + + // Chrome does something similar, the parentNode property + // can be accessed but is null. + if ( parent && parent !== document && !parent.parentNode ) { + return; + } + + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( !jQuery.nodeName( this, "form" ) ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( jQuery.nodeName( elem, "select" ) ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery._data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery._data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + e.liveFired = undefined; + jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + beforedeactivate: testChange, + + click: function( e ) { + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; + + if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { + testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; + + if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information + beforeactivate: function( e ) { + var elem = e.target; + jQuery._data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return rformElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return rformElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; + + // Handle when the input is .focus()'d + changeFilters.focus = changeFilters.beforeactivate; +} + +function trigger( type, elem, args ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + // Don't pass args or remember liveFired; they apply to the donor event. + var event = jQuery.extend( {}, args[ 0 ] ); + event.type = type; + event.originalEvent = {}; + event.liveFired = undefined; + jQuery.event.handle.call( elem, event ); + if ( event.isDefaultPrevented() ) { + args[ 0 ].preventDefault(); + } +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + + function handler( donor ) { + // Donor event is always a native one; fix it and switch its type. + // Let focusin/out handler cancel the donor focus/blur event. + var e = jQuery.event.fix( donor ); + e.type = fix; + e.originalEvent = {}; + jQuery.event.trigger( e, null, e.target ); + if ( e.isDefaultPrevented() ) { + donor.preventDefault(); + } + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + var handler; + + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( arguments.length === 2 || data === false ) { + fn = data; + data = undefined; + } + + if ( name === "one" ) { + handler = function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }; + handler.guid = fn.guid || jQuery.guid++; + } else { + handler = fn; + } + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( typeof types === "object" && !types.preventDefault ) { + for ( var key in types ) { + context[ name ]( key, data, types[key], selector ); + } + + return this; + } + + if ( name === "die" && !types && + origSelector && origSelector.charAt(0) === "." ) { + + context.unbind( origSelector ); + + return this; + } + + if ( data === false || jQuery.isFunction( data ) ) { + fn = data || returnFalse; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( liveMap[ type ] ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + for ( var j = 0, l = context.length; j < l; j++ ) { + jQuery.event.add( context[j], "live." + liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + } + + } else { + // unbind live handler + context.unbind( "live." + liveConvert( type, selector ), fn ); + } + } + + return this; + }; +}); + +function liveHandler( event ) { + var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, + elems = [], + selectors = [], + events = jQuery._data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) + if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { + return; + } + + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + close = match[i]; + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { + elem = close.elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + event.type = handleObj.preType; + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + + // Make sure not to accidentally match a child element with the same selector + if ( related && jQuery.contains( elem, related ) ) { + related = elem; + } + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj, level: close.level }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + + if ( maxLevel && match.level > maxLevel ) { + break; + } + + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + ret = match.handleObj.origHandler.apply( match.elem, arguments ); + + if ( ret === false || event.isPropagationStopped() ) { + maxLevel = match.level; + + if ( ret === false ) { + stop = false; + } + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var match, + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + var first = match[2], + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +Sizzle.getText = function( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); + } + } + + return ret; +}; + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

    "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
    "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( typeof selector === "string" ? + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array + if ( jQuery.isArray( selectors ) ) { + var match, selector, + matches = {}, + level = 1; + + if ( cur && selectors.length ) { + for ( i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[ selector ] ) { + matches[ selector ] = POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[ selector ]; + + if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { + ret.push({ selector: selector, elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ), + // The variable 'args' was introduced in + // https://github.com/jquery/jquery/commit/52a0238 + // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. + // http://code.google.com/p/v8/issues/detail?id=1050 + args = slice.call(arguments); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, args.join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +} + + + + +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
    ", "
    " ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + col: [ 2, "", "
    " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + + + + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json new file mode 100644 index 000000000..4aefb7a11 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json @@ -0,0 +1,31 @@ +{ + "name": "elasticsearch-head", + "version": "0.0.0", + "description": "Front end for an elasticsearch cluster", + "main": "_site/index.html", + "directories": { + "test": "test" + }, + "scripts": { + "test": "grunt jasmine" + }, + "repository": { + "type": "git", + "url": "https://github.com/mobz/elasticsearch-head.git" + }, + "author": "", + "license": "Apache2", + "gitHead": "0c2ac0b5723b493e4454baa7398f386ecb829412", + "readmeFilename": "README.textile", + "devDependencies": { + "grunt": "0.4.5", + "grunt-contrib-concat": "0.4.0", + "grunt-contrib-watch": "0.5.1", + "grunt-contrib-connect": "0.3.0", + "grunt-contrib-copy": "0.5.0", + "grunt-contrib-clean": "0.5.0", + "grunt-contrib-jasmine": "0.6.4", + "karma": "0.12.16", + "grunt-karma": "0.8.3" + } +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties new file mode 100644 index 000000000..37a90649c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties @@ -0,0 +1,4 @@ +description=head - A web front end for an elastic search cluster +version=master +site=true +name=head diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css new file mode 100644 index 000000000..08e2dcf95 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css @@ -0,0 +1,39 @@ +.uiApp-header { + background: #eee; + position: fixed; + width: 100%; + z-index: 9; +} + +.uiApp-header H1 { + margin: -2px 0 -4px 0; + float: left; + padding-right: 25px; +} + +.uiApp-headerMenu { + border-bottom: 1px solid #bbb; + padding: 0px 3px; + height: 22px; +} + +.uiApp-headerMenu .active { + background: white; + border-bottom-color: white; +} + +.uiApp-headerMenuItem { + border: 1px solid #bbb; + padding: 4px 8px 1px ; + margin: 2px 1px 0; + height: 14px; + cursor: pointer; +} + +.uiApp-body { + padding: 51px 0px 0px 0px; +} + +.uiApp-headerNewMenuItem { + color: blue; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js new file mode 100644 index 000000000..036e97f50 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js @@ -0,0 +1,132 @@ +(function( app, i18n ) { + + var ui = app.ns("ui"); + var services = app.ns("services"); + + app.App = ui.AbstractWidget.extend({ + defaults: { + base_uri: null + }, + init: function(parent) { + this._super(); + this.prefs = services.Preferences.instance(); + this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; + if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) { + // XHR request fails if the URL is not ending with a "/" + this.base_uri += "/"; + } + if( this.config.auth_user ) { + var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password ); + $.ajaxSetup({ + headers: { + "Authorization": "Basic " + credentials + } + }); + } + this.cluster = new services.Cluster({ base_uri: this.base_uri }); + this._clusterState = new services.ClusterState({ + cluster: this.cluster + }); + + this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState }); + this.$body = $.joey( this._body_template() ); + this.el = $.joey(this._main_template()); + this.attach( parent ); + this.instances = {}; + this.el.find(".uiApp-headerMenuItem:first").click(); + if( this.config.dashboard ) { + if( this.config.dashboard === "cluster" ) { + var page = this.instances["ClusterOverview"]; + page._refreshButton.set( 5000 ); + } + } + }, + + navigateTo: function( type, config, ev ) { + if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) { + this.showNew( type, config, ev ); + } else { + var ref = type + "0"; + if(! this.instances[ ref ]) { + this.createPage( type, 0, config ); + } + this.show( ref, ev ); + } + }, + + createPage: function( type, id, config ) { + var page = this.instances[ type + id ] = new ui[ type ]( config ); + this.$body.append( page ); + return page; + }, + + show: function( ref, ev ) { + $( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active"); + for(var p in this.instances) { + this.instances[p][ p === ref ? "show" : "hide" ](); + } + }, + + showNew: function( type, config, jEv ) { + var ref, page, $tab, + type_index = 0; + + while ( ! page ) { + ref = type + ( ++type_index ); + if (! ( ref in this.instances ) ) { + page = this.createPage( type, type_index, config ); + } + } + + // Add the tab and its click handlers + $tab = $.joey({ + tag: "DIV", + cls: "uiApp-headerMenuItem pull-left", + text: i18n.text("Nav." + type ) + " " + type_index, + onclick: function( ev ) { this.show( ref, ev ); }.bind(this), + children: [ + { tag: "A", text: " [-]", onclick: function (ev) { + $tab.remove(); + page.remove(); + delete this.instances[ ref ]; + }.bind(this) } + ] + }); + + $('.uiApp-headerMenu').append( $tab ); + $tab.trigger("click"); + }, + + _openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); }, + _openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); }, + _openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev ); }, + _openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); }, + _openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); }, + + _body_template: function() { return ( + { tag: "DIV", id: this.id("body"), cls: "uiApp-body" } + ); }, + + _main_template: function() { + return { tag: "DIV", cls: "uiApp", children: [ + { tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [ + this._header, + { tag: "DIV", cls: "uiApp-headerMenu", children: [ + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [ + { tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' } + ] }, + { tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [ + { tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' } + ] }, + ]} + ]}, + this.$body + ]}; + } + + }); + +})( this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js new file mode 100644 index 000000000..4dd0c0d05 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js @@ -0,0 +1,241 @@ +(function() { + + var window = this, + $ = jQuery; + + function ns( namespace ) { + return (namespace || "").split(".").reduce( function( space, name ) { + return space[ name ] || ( space[ name ] = { ns: ns } ); + }, this ); + } + + var app = ns("app"); + + var acx = ns("acx"); + + /** + * object iterator, returns an array with one element for each property of the object + * @function + */ + acx.eachMap = function(obj, fn, thisp) { + var ret = []; + for(var n in obj) { + ret.push(fn.call(thisp, n, obj[n], obj)); + } + return ret; + }; + + /** + * augments the first argument with the properties of the second and subsequent arguments + * like {@link $.extend} except that existing properties are not overwritten + */ + acx.augment = function() { + var args = Array.prototype.slice.call(arguments), + src = (args.length === 1) ? this : args.shift(), + augf = function(n, v) { + if(! (n in src)) { + src[n] = v; + } + }; + for(var i = 0; i < args.length; i++) { + $.each(args[i], augf); + } + return src; + }; + + /** + * tests whether the argument is an array + * @function + */ + acx.isArray = $.isArray; + + /** + * tests whether the argument is an object + * @function + */ + acx.isObject = function (value) { + return Object.prototype.toString.call(value) == "[object Object]"; + }; + + /** + * tests whether the argument is a function + * @function + */ + acx.isFunction = $.isFunction; + + /** + * tests whether the argument is a date + * @function + */ + acx.isDate = function (value) { + return Object.prototype.toString.call(value) == "[object Date]"; + }; + + /** + * tests whether the argument is a regexp + * @function + */ + acx.isRegExp = function (value) { + return Object.prototype.toString.call(value) == "[object RegExp]"; + }; + + /** + * tests whether the value is blank or empty + * @function + */ + acx.isEmpty = function (value, allowBlank) { + return value === null || value === undefined || ((acx.isArray(value) && !value.length)) || (!allowBlank ? value === '' : false); + }; + + /** + * data type for performing chainable geometry calculations
    + * can be initialised x,y | {x, y} | {left, top} + */ + acx.vector = function(x, y) { + return new acx.vector.prototype.Init(x, y); + }; + + acx.vector.prototype = { + Init : function(x, y) { + x = x || 0; + this.y = isFinite(x.y) ? x.y : (isFinite(x.top) ? x.top : (isFinite(y) ? y : 0)); + this.x = isFinite(x.x) ? x.x : (isFinite(x.left) ? x.left : (isFinite(x) ? x : 0)); + }, + + add : function(i, j) { + var d = acx.vector(i, j); + return new this.Init(this.x + d.x, this.y + d.y); + }, + + sub : function(i, j) { + var d = acx.vector(i, j); + return new this.Init(this.x - d.x, this.y - d.y); + }, + + addX : function(i) { + return new this.Init(this.x + i, this.y); + }, + + addY : function(j) { + return new this.Init(this.x, this.y + j); + }, + + mod : function(fn) { // runs a function against the x and y values + return new this.Init({x: fn.call(this, this.x, "x"), y: fn.call(this, this.y, "y")}); + }, + + /** returns true if this is within a rectangle formed by the points p and q */ + within : function(p, q) { + return ( this.x >= ((p.x < q.x) ? p.x : q.x) && this.x <= ((p.x > q.x) ? p.x : q.x) && + this.y >= ((p.y < q.y) ? p.y : q.y) && this.y <= ((p.y > q.y) ? p.y : q.y) ); + }, + + asOffset : function() { + return { top: this.y, left: this.x }; + }, + + asSize : function() { + return { height: this.y, width: this.x }; + } + }; + + acx.vector.prototype.Init.prototype = acx.vector.prototype; + + /** + * short cut functions for working with vectors and jquery. + * Each function returns the equivalent jquery value in a two dimentional vector + */ + $.fn.vSize = function() { return acx.vector(this.width(), this.height()); }; + $.fn.vOuterSize = function(margin) { return acx.vector(this.outerWidth(margin), this.outerHeight(margin)); }; + $.fn.vScroll = function() { return acx.vector(this.scrollLeft(), this.scrollTop()); }; + $.fn.vOffset = function() { return acx.vector(this.offset()); }; + $.fn.vPosition = function() { return acx.vector(this.position()); }; + $.Event.prototype.vMouse = function() { return acx.vector(this.pageX, this.pageY); }; + + /** + * object extensions (ecma5 compatible) + */ + acx.augment(Object, { + keys: function(obj) { + var ret = []; + for(var n in obj) if(Object.prototype.hasOwnProperty.call(obj, n)) ret.push(n); + return ret; + } + }); + + /** + * Array prototype extensions + */ + acx.augment(Array.prototype, { + 'contains' : function(needle) { + return this.indexOf(needle) !== -1; + }, + + // returns a new array consisting of all the members that are in both arrays + 'intersection' : function(b) { + var ret = []; + for(var i = 0; i < this.length; i++) { + if(b.contains(this[i])) { + ret.push(this[i]); + } + } + return ret; + }, + + 'remove' : function(value) { + var i = this.indexOf(value); + if(i !== -1) { + this.splice(i, 1); + } + } + }); + + /** + * String prototype extensions + */ + acx.augment(String.prototype, { + 'contains' : function(needle) { + return this.indexOf(needle) !== -1; + }, + + 'equalsIgnoreCase' : function(match) { + return this.toLowerCase() === match.toLowerCase(); + }, + + 'escapeHtml' : function() { + return this.replace(/&/g, '&').replace(//g, '>'); + }, + + 'escapeJS' : function() { + var meta = {'"':'\\"', '\\':'\\\\', '/':'\\/', '\b':'\\b', '\f':'\\f', '\n':'\\n', '\r':'\\r', '\t':'\\t'}, + xfrm = function(c) { return meta[c] || "\\u" + c.charCodeAt(0).toString(16).zeroPad(4); }; + return this.replace(new RegExp('(["\\\\\x00-\x1f\x7f-\uffff])', 'g'), xfrm); + }, + + 'escapeRegExp' : function() { + var ret = "", esc = "\\^$*+?.()=|{,}[]-"; + for ( var i = 0; i < this.length; i++) { + ret += (esc.contains(this.charAt(i)) ? "\\" : "") + this.charAt(i); + } + return ret; + }, + + 'zeroPad' : function(len) { + return ("0000000000" + this).substring(this.length - len + 10); + } + }); + + $.fn.forEach = Array.prototype.forEach; + + // joey / jquery integration + $.joey = function( obj ) { + return $( window.joey( obj ) ); + }; + + window.joey.plugins.push( function( obj ) { + if( obj instanceof jQuery ) { + return obj[0]; + } + }); + +})(); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png new file mode 100644 index 000000000..f433ec6d0 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif new file mode 100644 index 000000000..f001e23f7 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css new file mode 100644 index 000000000..29a5f1b69 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css @@ -0,0 +1,44 @@ +BODY { + font-family: Verdana, sans-serif; + font-size: 73%; + padding: 0; + margin: 0; +} + +INPUT, SELECT, TEXTAREA { + border: 1px solid #cecece; + padding: 1px 3px; + background: white; +} + +SELECT { + padding: 0; +} + +.saf SELECT { + margin-top: 0; + margin-bottom: 0; +} + +TEXTAREA, CODE { + font-family: monospace; + font-size: 13px; +} + +BUTTON::-moz-focus-inner { + border: none; +} + +.pull-left { + float: left; +} + +.pull-right { + float: right; +} + +.loading { + background-image: url(loading.gif); + background-repeat: no-repeat; + text-indent: 20px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js new file mode 100644 index 000000000..782d49074 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js @@ -0,0 +1,75 @@ +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.BoolQuery = ux.Observable.extend({ + defaults: { + size: 50 // size of pages to return + }, + init: function() { + this._super(); + this.refuid = 0; + this.refmap = {}; + this.search = { + query: { bool: { must: [], must_not: [], should: [] } }, + from: 0, + size: this.config.size, + sort: [], + aggs: {} + }; + this.defaultClause = this.addClause(); + }, + setSize: function(size) { + this.search.size = parseInt( size, 10 ); + }, + setPage: function(page) { + this.search.from = this.config.size * (page - 1) + 1; + }, + addClause: function(value, field, op, bool) { + bool = bool || "should"; + op = op || "match_all"; + field = field || "_all"; + var clause = this._setClause(value, field, op, bool); + var uqid = "q-" + this.refuid++; + this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool }; + if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) { + this.removeClause(this.defaultClause); + } + this.fire("queryChanged", this, { uqid: uqid, search: this.search} ); + return uqid; // returns reference to inner query object to allow fast updating + }, + removeClause: function(uqid) { + var ref = this.refmap[uqid], + bool = this.search.query.bool[ref.bool]; + var clauseIdx = bool.indexOf(ref.clause); + // Check that this clause hasn't already been removed + if (clauseIdx >=0) { + bool.splice(clauseIdx, 1); + } + }, + _setClause: function(value, field, op, bool) { + var clause = {}, query = {}; + if(op === "match_all") { + } else if(op === "query_string") { + query["default_field"] = field; + query["query"] = value; + } else if(op === "missing") { + op = "constant_score" + var missing = {}, filter = {}; + missing["field"] = field; + filter["missing"] = missing + query["filter"] = filter; + } else { + query[field.substring(field.indexOf(".")+1)] = value; + } + clause[op] = query; + this.search.query.bool[bool].push(clause); + return clause; + }, + getData: function() { + return JSON.stringify(this.search); + } + }); + +})( this.app ); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js new file mode 100644 index 000000000..001d53225 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js @@ -0,0 +1,24 @@ +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.DataSourceInterface = ux.Observable.extend({ + /* + properties + meta = { total: 0 }, + headers = [ { name: "" } ], + data = [ { column: value, column: value } ], + sort = { column: "name", dir: "desc" } + events + data: function( DataSourceInterface ) + */ + _getSummary: function(res) { + this.summary = i18n.text("TableResults.Summary", res._shards.successful, res._shards.total, res.hits.total, (res.took / 1000).toFixed(3)); + }, + _getMeta: function(res) { + this.meta = { total: res.hits.total, shards: res._shards, tool: res.took }; + } + }); + +})( this.app ); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js new file mode 100644 index 000000000..bb420fdfc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js @@ -0,0 +1,172 @@ +(function( app ) { + + /* + notes on elasticsearch terminology used in this project + + indices[index] contains one or more + types[type] contains one or more + documents contain one or more + paths[path] + each path contains one element of data + each path maps to one field + + eg PUT, "/twitter/tweet/1" + { + user: "mobz", + date: "2011-01-01", + message: "You know, for browsing elasticsearch", + name: { + first: "Ben", + last: "Birch" + } + } + + creates + 1 index: twitter + this is the collection of index data + 1 type: tweet + this is the type of document (kind of like a table in sql) + 1 document: /twitter/tweet/1 + this is an actual document in the index ( kind of like a row in sql) + 5 paths: [ ["user"], ["date"], ["message"], ["name","first"], ["name","last"] ] + since documents can be heirarchical this maps a path from a document root to a piece of data + 5 fields: [ "user", "date", "message", "first", "last" ] + this is an indexed 'column' of data. fields are not heirarchical + + the relationship between a path and a field is called a mapping. mappings also contain a wealth of information about how es indexes the field + + notes + 1) a path is stored as an array, the dpath is . . path.join("."), + which can be considered the canonical reference for a mapping + 2) confusingly, es uses the term index for both the collection of indexed data, and the individually indexed fields + so the term index_name is the same as field_name in this sense. + + */ + + var data = app.ns("data"); + var ux = app.ns("ux"); + + var coretype_map = { + "string" : "string", + "keyword" : "string", + "text" : "string", + "byte" : "number", + "short" : "number", + "long" : "number", + "integer" : "number", + "float" : "number", + "double" : "number", + "ip" : "number", + "date" : "date", + "boolean" : "boolean", + "binary" : "binary", + "multi_field" : "multi_field" + }; + + var default_property_map = { + "string" : { "store" : "no", "index" : "analysed" }, + "number" : { "store" : "no", "precision_steps" : 4 }, + "date" : { "store" : "no", "format" : "dateOptionalTime", "index": "yes", "precision_steps": 4 }, + "boolean" : { "store" : "no", "index": "yes" }, + "binary" : { }, + "multi_field" : { } + }; + + // parses metatdata from a cluster, into a bunch of useful data structures + data.MetaData = ux.Observable.extend({ + defaults: { + state: null // (required) response from a /_cluster/state request + }, + init: function() { + this._super(); + this.refresh(this.config.state); + }, + getIndices: function(alias) { + return alias ? this.aliases[alias] : this.indicesList; + }, + // returns an array of strings containing all types that are in all of the indices passed in, or all types + getTypes: function(indices) { + var indices = indices || [], types = []; + this.typesList.forEach(function(type) { + for(var i = 0; i < indices.length; i++) { + if(! this.indices[indices[i]].types.contains(type)) + return; + } + types.push(type); + }, this); + return types; + }, + refresh: function(state) { + // currently metadata expects all like named fields to have the same type, even when from different types and indices + var aliases = this.aliases = {}; + var indices = this.indices = {}; + var types = this.types = {}; + var fields = this.fields = {}; + var paths = this.paths = {}; + + function createField( mapping, index, type, path, name ) { + var dpath = [ index, type ].concat( path ).join( "." ); + var field_name = mapping.index_name || path.join( "." ); + var field = paths[ dpath ] = fields[ field_name ] || $.extend({ + field_name : field_name, + core_type : coretype_map[ mapping.type ], + dpaths : [] + }, default_property_map[ coretype_map[ mapping.type ] ], mapping ); + + if (field.type === "multi_field" && typeof field.fields !== "undefined") { + for (var subField in field.fields) { + field.fields[ subField ] = createField( field.fields[ subField ], index, type, path.concat( subField ), name + "." + subField ); + } + } + if (fields.dpaths) { + field.dpaths.push(dpath); + } + return field; + } + function getFields(properties, type, index, listeners) { + (function procPath(prop, path) { + for (var n in prop) { + if ("properties" in prop[n]) { + procPath( prop[ n ].properties, path.concat( n ) ); + } else { + var field = createField(prop[n], index, type, path.concat(n), n); + listeners.forEach( function( listener ) { + listener[ field.field_name ] = field; + } ); + } + } + })(properties, []); + } + for (var index in state.metadata.indices) { + indices[index] = { + types : [], fields : {}, paths : {}, parents : {} + }; + indices[index].aliases = state.metadata.indices[index].aliases; + indices[index].aliases.forEach(function(alias) { + (aliases[alias] || (aliases[alias] = [])).push(index); + }); + var mapping = state.metadata.indices[index].mappings; + for (var type in mapping) { + indices[index].types.push(type); + if ( type in types) { + types[type].indices.push(index); + } else { + types[type] = { + indices : [index], fields : {} + }; + } + getFields(mapping[type].properties, type, index, [fields, types[type].fields, indices[index].fields]); + if ( typeof mapping[type]._parent !== "undefined") { + indices[index].parents[type] = mapping[type]._parent.type; + } + } + } + + this.aliasesList = Object.keys(aliases); + this.indicesList = Object.keys(indices); + this.typesList = Object.keys(types); + this.fieldsList = Object.keys(fields); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js new file mode 100644 index 000000000..694546e0e --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js @@ -0,0 +1,19 @@ +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.MetaDataFactory = ux.Observable.extend({ + defaults: { + cluster: null // (required) an app.services.Cluster + }, + init: function() { + this._super(); + this.config.cluster.get("_cluster/state", function(data) { + this.metaData = new app.data.MetaData({state: data}); + this.fire("ready", this.metaData, { originalData: data }); // TODO originalData needed for legacy ui.FilterBrowser + }.bind(this)); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js new file mode 100644 index 000000000..a35e53b9b --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js @@ -0,0 +1,35 @@ +(function( $, app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.Model = ux.Observable.extend({ + defaults: { + data: null + }, + init: function() { + this.set( this.config.data ); + }, + set: function( key, value ) { + if( arguments.length === 1 ) { + this._data = $.extend( {}, key ); + } else { + key.split(".").reduce(function( ptr, prop, i, props) { + if(i === (props.length - 1) ) { + ptr[prop] = value; + } else { + if( !(prop in ptr) ) { + ptr[ prop ] = {}; + } + return ptr[prop]; + } + }, this._data ); + } + }, + get: function( key ) { + return key.split(".").reduce( function( ptr, prop ) { + return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined; + }, this._data ); + }, + }); +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js new file mode 100644 index 000000000..fa9d904e1 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js @@ -0,0 +1,74 @@ +describe("app.data.Model", function() { + + var Model = window.app.data.Model; + + it("test setting model does a shallow copy", function() { + var test = {}; + var array = [ 1, 2, 3 ]; + var m = new Model({ + data: { + "foo": "bar", + "test": test, + "array": array + } + }); + expect( m.get("foo") ).toBe("bar"); + expect( m.get("array").length ).toBe( 3 ); + expect( m.get("array")[1] ).toBe( 2 ); + expect( m.get("array") ).toBe( array ); + expect( m.get("test") ).toBe( test ); + }); + + it("should replace model with shallow copy when put with no path", function() { + var m = new Model({ foo: "bar" }); + m.set({ bar: "blat" }); + expect( m.get("foo")).toBe( undefined ); + expect( m.get("bar")).toBe("blat"); + }); + + it("test getting values from deep in a model", function() { + var m = new Model({ + data: { + "foo": { + "bar": { + "baz": { + "quix": "abcdefg" + } + } + } + } + }); + + expect( m.get("foo.bar.baz.quix") ).toBe( "abcdefg" ); + }); + + it("test setting non-existant values creates new values", function() { + var m = new Model({ + data: { + "foo": { + "bar": "abc" + } + } + }); + m.set("foo.bar", "123" ); + m.set("foo.baz", "456" ); + expect( m.get("foo.bar") ).toBe( "123" ); + expect( m.get("foo.baz") ).toBe( "456" ); + }); + + it("test setting values deep in a model", function() { + var m = new Model({ + data: { + "foo": { + "bar": "abc" + } + } + }); + m.set("foo.bar", "123" ); + m.set("foo.baz", "456" ); + m.set("foo.something.else.is.here", "xyz" ); + expect( m.get("foo.something.else.is").here ).toBe( "xyz" ); + expect( m.get("foo.something.else.is.here") ).toBe( "xyz" ); + }); + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js new file mode 100644 index 000000000..41890b383 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js @@ -0,0 +1,203 @@ +(function( app ) { + + var data = app.ns("data"); + var ux = app.ns("ux"); + + data.Query = ux.Observable.extend({ + defaults: { + cluster: null, // (required) instanceof app.services.Cluster + size: 50 // size of pages to return + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.refuid = 0; + this.refmap = {}; + this.indices = []; + this.types = []; + this.search = { + query: { bool: { must: [], must_not: [], should: [] } }, + from: 0, + size: this.config.size, + sort: [], + aggs: {}, + version: true + }; + this.defaultClause = this.addClause(); + this.history = [ this.getState() ]; + }, + clone: function() { + var q = new data.Query({ cluster: this.cluster }); + q.restoreState(this.getState()); + for(var uqid in q.refmap) { + q.removeClause(uqid); + } + return q; + }, + getState: function() { + return $.extend(true, {}, { search: this.search, indices: this.indices, types: this.types }); + }, + restoreState: function(state) { + state = $.extend(true, {}, state || this.history[this.history.length - 1]); + this.indices = state.indices; + this.types = state.types; + this.search = state.search; + }, + getData: function() { + return JSON.stringify(this.search); + }, + query: function() { + var state = this.getState(); + this.cluster.post( + (this.indices.join(",") || "_all") + "/" + ( this.types.length ? this.types.join(",") + "/" : "") + "_search", + this.getData(), + function(results) { + if(results === null) { + alert(i18n.text("Query.FailAndUndo")); + this.restoreState(); + return; + } + this.history.push(state); + + this.fire("results", this, results); + }.bind(this)); + }, + loadParents: function(res,metadata){ + //create data for mget + var data = { docs :[] }; + var indexToTypeToParentIds = {}; + res.hits.hits.forEach(function(hit) { + if (typeof hit.fields != "undefined"){ + if (typeof hit.fields._parent != "undefined"){ + var parentType = metadata.indices[hit._index].parents[hit._type]; + if (typeof indexToTypeToParentIds[hit._index] == "undefined"){ + indexToTypeToParentIds[hit._index] = new Object(); + } + if (typeof indexToTypeToParentIds[hit._index][hit._type] == "undefined"){ + indexToTypeToParentIds[hit._index][hit._type] = new Object(); + } + if (typeof indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] == "undefined"){ + indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] = null; + data.docs.push({ _index:hit._index, _type:parentType, _id:hit.fields._parent}); + } + } + } + }); + + //load parents + var state = this.getState(); + this.cluster.post("_mget",JSON.stringify(data), + function(results) { + if(results === null) { + alert(i18n.text("Query.FailAndUndo")); + this.restoreState(); + return; + } + this.history.push(state); + var indexToTypeToParentIdToHit = new Object(); + results.docs.forEach(function(doc) { + if (typeof indexToTypeToParentIdToHit[doc._index] == "undefined"){ + indexToTypeToParentIdToHit[doc._index] = new Object(); + } + + if (typeof indexToTypeToParentIdToHit[doc._index][doc._type] == "undefined"){ + indexToTypeToParentIdToHit[doc._index][doc._type] = new Object(); + } + + indexToTypeToParentIdToHit[doc._index][doc._type][doc._id] = doc; + }); + + res.hits.hits.forEach(function(hit) { + if (typeof hit.fields != "undefined"){ + if (typeof hit.fields._parent != "undefined"){ + var parentType = metadata.indices[hit._index].parents[hit._type]; + hit._parent = indexToTypeToParentIdToHit[hit._index][parentType][hit.fields._parent]; + } + } + }); + + this.fire("resultsWithParents", this, res); + }.bind(this)); + }, + setPage: function(page) { + this.search.from = this.config.size * (page - 1); + }, + setSort: function(index, desc) { + var sortd = {}; sortd[index] = { reverse: !!desc }; + this.search.sort.unshift( sortd ); + for(var i = 1; i < this.search.sort.length; i++) { + if(Object.keys(this.search.sort[i])[0] === index) { + this.search.sort.splice(i, 1); + break; + } + } + }, + setIndex: function(index, add) { + if(add) { + if(! this.indices.contains(index)) this.indices.push(index); + } else { + this.indices.remove(index); + } + this.fire("setIndex", this, { index: index, add: !!add }); + }, + setType: function(type, add) { + if(add) { + if(! this.types.contains(type)) this.types.push(type); + } else { + this.types.remove(type); + } + this.fire("setType", this, { type: type, add: !!add }); + }, + addClause: function(value, field, op, bool) { + bool = bool || "should"; + op = op || "match_all"; + field = field || "_all"; + var clause = this._setClause(value, field, op, bool); + var uqid = "q-" + this.refuid++; + this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool }; + if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) { + this.removeClause(this.defaultClause); + } + this.fire("queryChanged", this, { uqid: uqid, search: this.search} ); + return uqid; // returns reference to inner query object to allow fast updating + }, + removeClause: function(uqid) { + var ref = this.refmap[uqid], + bool = this.search.query.bool[ref.bool]; + bool.remove(ref.clause); + if(this.search.query.bool.must.length + this.search.query.bool.should.length === 0) { + this.defaultClause = this.addClause(); + } + }, + addAggs: function(aggs) { + var aggsId = "f-" + this.refuid++; + this.search.aggs[aggsId] = aggs; + this.refmap[aggsId] = { aggsId: aggsId, aggs: aggs }; + return aggsId; + }, + removeAggs: function(aggsId) { + delete this.search.aggs[aggsId]; + delete this.refmap[aggsId]; + }, + _setClause: function(value, field, op, bool) { + var clause = {}, query = {}; + if(op === "match_all") { + } else if(op === "query_string") { + query["default_field"] = field; + query["query"] = value; + } else if(op === "missing") { + op = "constant_score" + var missing = {}, filter = {}; + missing["field"] = field; + filter["missing"] = missing + query["filter"] = filter; + } else { + query[field] = value; + } + clause[op] = query; + this.search.query.bool[bool].push(clause); + return clause; + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js new file mode 100644 index 000000000..3e2b45a15 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js @@ -0,0 +1,87 @@ +(function( app ) { + + var data = app.ns("data"); + + data.QueryDataSourceInterface = data.DataSourceInterface.extend({ + defaults: { + metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata + query: null // (required) instanceof app.data.Query the data source + }, + init: function() { + this._super(); + this.config.query.on("results", this._results_handler.bind(this) ); + this.config.query.on("resultsWithParents", this._load_parents.bind(this) ); + }, + _results_handler: function(query, res) { + this._getSummary(res); + this._getMeta(res); + var sort = query.search.sort[0] || { "_score": { reverse: false }}; + var sortField = Object.keys(sort)[0]; + this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") }; + this._getData(res, this.config.metadata); + this.fire("data", this); + }, + _load_parents: function(query, res) { + query.loadParents(res, this.config.metadata); + }, + _getData: function(res, metadata) { + var metaColumns = ["_index", "_type", "_id", "_score"]; + var columns = this.columns = [].concat(metaColumns); + + this.data = res.hits.hits.map(function(hit) { + var row = (function(path, spec, row) { + for(var prop in spec) { + if(acx.isObject(spec[prop])) { + arguments.callee(path.concat(prop), spec[prop], row); + } else if(acx.isArray(spec[prop])) { + if(spec[prop].length) { + arguments.callee(path.concat(prop), spec[prop][0], row) + } + } else { + var dpath = path.concat(prop).join("."); + if(metadata.paths[dpath]) { + var field_name = metadata.paths[dpath].field_name; + if(! columns.contains(field_name)) { + columns.push(field_name); + } + row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString(); + } else { + // TODO: field not in metadata index + } + } + } + return row; + })([ hit._index, hit._type ], hit._source, {}); + metaColumns.forEach(function(n) { row[n] = hit[n]; }); + row._source = hit; + if (typeof hit._parent!= "undefined") { + (function(prefix, path, spec, row) { + for(var prop in spec) { + if(acx.isObject(spec[prop])) { + arguments.callee(prefix, path.concat(prop), spec[prop], row); + } else if(acx.isArray(spec[prop])) { + if(spec[prop].length) { + arguments.callee(prefix, path.concat(prop), spec[prop][0], row) + } + } else { + var dpath = path.concat(prop).join("."); + if(metadata.paths[dpath]) { + var field_name = metadata.paths[dpath].field_name; + var column_name = prefix+"."+field_name; + if(! columns.contains(column_name)) { + columns.push(column_name); + } + row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString(); + } else { + // TODO: field not in metadata index + } + } + } + })(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row); + } + return row; + }, this); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js new file mode 100644 index 000000000..b985b0422 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js @@ -0,0 +1,40 @@ +(function( app ) { + + var data = app.ns("data"); + + data.ResultDataSourceInterface = data.DataSourceInterface.extend({ + results: function(res) { + this._getSummary(res); + this._getMeta(res); + this._getData(res); + this.sort = {}; + this.fire("data", this); + }, + _getData: function(res) { + var columns = this.columns = []; + this.data = res.hits.hits.map(function(hit) { + var row = (function(path, spec, row) { + for(var prop in spec) { + if(acx.isObject(spec[prop])) { + arguments.callee(path.concat(prop), spec[prop], row); + } else if(acx.isArray(spec[prop])) { + if(spec[prop].length) { + arguments.callee(path.concat(prop), spec[prop][0], row) + } + } else { + var dpath = path.concat(prop).join("."); + if(! columns.contains(dpath)) { + columns.push(dpath); + } + row[dpath] = (spec[prop] || "null").toString(); + } + } + return row; + })([ hit._type ], hit, {}); + row._source = hit; + return row; + }, this); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js new file mode 100644 index 000000000..3679dfbbc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js @@ -0,0 +1,177 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "Loading Aggregations...", + "General.Searching": "Searching...", + "General.Search": "Search", + "General.Help": "Help", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "Refresh", + "General.ManualRefresh": "Manual Refresh", + "General.RefreshQuickly": "Refresh quickly", + "General.Refresh5seconds": "Refresh every 5 seconds", + "General.Refresh1minute": "Refresh every minute", + "AliasForm.AliasName": "Alias Name", + "AliasForm.NewAliasForIndex": "New Alias for {0}", + "AliasForm.DeleteAliasMessage": "type ''{0}'' to delete {1}. There is no undo", + "AnyRequest.DisplayOptions" : "Display Options", + "AnyRequest.AsGraph" : "Graph Results", + "AnyRequest.AsJson" : "Show Raw JSON", + "AnyRequest.AsTable" : "Show Search Results Table", + "AnyRequest.History" : "History", + "AnyRequest.RepeatRequest" : "Repeat Request", + "AnyRequest.RepeatRequestSelect" : "Repeat request every ", + "AnyRequest.Transformer" : "Result Transformer", + "AnyRequest.Pretty": "Pretty", + "AnyRequest.Query" : "Query", + "AnyRequest.Request": "Request", + "AnyRequest.Requesting": "Requesting...", + "AnyRequest.ValidateJSON": "Validate JSON", + "Browser.Title": "Browser", + "Browser.ResultSourcePanelTitle": "Result Source", + "Command.DELETE": "DELETE", + "Command.SHUTDOWN": "SHUTDOWN", + "Command.DeleteAliasMessage": "Delete Alias?", + "ClusterOverView.IndexName": "Index Name", + "ClusterOverview.NumShards": "Number of Shards", + "ClusterOverview.NumReplicas": "Number of Replicas", + "ClusterOverview.NewIndex": "New Index", + "IndexActionsMenu.Title": "Actions", + "IndexActionsMenu.NewAlias": "New Alias...", + "IndexActionsMenu.Refresh": "Refresh", + "IndexActionsMenu.Flush": "Flush", + "IndexActionsMenu.Optimize": "Optimize...", + "IndexActionsMenu.Snapshot": "Gateway Snapshot", + "IndexActionsMenu.Analyser": "Test Analyser", + "IndexActionsMenu.Open": "Open", + "IndexActionsMenu.Close": "Close", + "IndexActionsMenu.Delete": "Delete...", + "IndexInfoMenu.Title": "Info", + "IndexInfoMenu.Status": "Index Status", + "IndexInfoMenu.Metadata": "Index Metadata", + "IndexCommand.TextToAnalyze": "Text to Analyse", + "IndexCommand.ShutdownMessage": "type ''{0}'' to shutdown {1}. Node can NOT be restarted from this interface", + "IndexOverview.PageTitle": "Indices Overview", + "IndexSelector.NameWithDocs": "{0} ({1} docs)", + "IndexSelector.SearchIndexForDocs": "Search {0} for documents where:", + "FilterBrowser.OutputType": "Output Results: {0}", + "FilterBrowser.OutputSize": "Number of Results: {0}", + "Header.ClusterHealth": "cluster health: {0} ({1} of {2})", + "Header.ClusterNotConnected": "cluster health: not connected", + "Header.Connect": "Connect", + "Nav.AnyRequest": "Any Request", + "Nav.Browser": "Browser", + "Nav.ClusterHealth": "Cluster Health", + "Nav.ClusterState": "Cluster State", + "Nav.ClusterNodes": "Nodes Info", + "Nav.Info": "Info", + "Nav.NodeStats": "Nodes Stats", + "Nav.Overview": "Overview", + "Nav.Indices": "Indices", + "Nav.Plugins": "Plugins", + "Nav.Status": "Indices Stats", + "Nav.Templates": "Templates", + "Nav.StructuredQuery": "Structured Query", + "NodeActionsMenu.Title": "Actions", + "NodeActionsMenu.Shutdown": "Shutdown...", + "NodeInfoMenu.Title": "Info", + "NodeInfoMenu.ClusterNodeInfo": "Cluster Node Info", + "NodeInfoMenu.NodeStats": "Node Stats", + "NodeType.Client": "Client Node", + "NodeType.Coord": "Coordinator", + "NodeType.Master": "Master Node", + "NodeType.Tribe": "Tribe Node", + "NodeType.Worker": "Worker Node", + "NodeType.Unassigned": "Unassigned", + "OptimizeForm.OptimizeIndex": "Optimize {0}", + "OptimizeForm.MaxSegments": "Maximum # Of Segments", + "OptimizeForm.ExpungeDeletes": "Only Expunge Deletes", + "OptimizeForm.FlushAfter": "Flush After Optimize", + "OptimizeForm.WaitForMerge": "Wait For Merge", + "Overview.PageTitle" : "Cluster Overview", + "Output.JSON": "JSON", + "Output.Table": "Table", + "Output.CSV": "CSV", + "Output.ShowSource": "Show query source", + "Preference.SortCluster": "Sort Cluster", + "Sort.ByName": "By Name", + "Sort.ByAddress": "By Address", + "Sort.ByType": "By Type", + "Preference.SortIndices": "Sort Indices", + "SortIndices.Descending": "Descending", + "SortIndices.Ascending": "Ascending", + "Preference.ViewAliases": "View Aliases", + "ViewAliases.Grouped": "Grouped", + "ViewAliases.List": "List", + "ViewAliases.None": "None", + "Overview.IndexFilter": "Index Filter", + "TableResults.Summary": "Searched {0} of {1} shards. {2} hits. {3} seconds", + "QueryFilter.AllIndices": "All Indices", + "QueryFilter.AnyValue": "any", + "QueryFilter-Header-Indices": "Indices", + "QueryFilter-Header-Types": "Types", + "QueryFilter-Header-Fields": "Fields", + "QueryFilter.DateRangeHint.from": "From : {0}", + "QueryFilter.DateRangeHint.to": " To : {0}", + "Query.FailAndUndo": "Query Failed. Undoing last changes", + "StructuredQuery.ShowRawJson": "Show Raw JSON" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    The Result Transformer can be used to post process the raw json results from a request into a more useful format.

    \ +

    The transformer should contain the body of a javascript function. The return value from the function becomes the new value passed to the json printer

    \ +

    Example:
    \ + return root.hits.hits[0]; would traverse a result set to show just the first match
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); would return the total memory used across an entire cluster

    \ +

    The following functions are available and can be useful processing arrays and objects
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    When Repeat Request is running, an extra parameter called prev is passed to the transformation function. This allows comparisons, and cumulative graphing

    \ +

    Example:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; would return the load average on the first cluster node over the last minute\ + This could be fed into the Graph to produce a load graph for the node\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    Raw Json: shows complete results of the query and transformation in raw JSON format

    \ +

    Graph Results: To produce a graph of your results, use the result transformer to produce an array of values

    \ +

    Search Results Table: If your query is a search, you can display the results of the search in a table.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Date fields accept a natural language query to produce a From and To date that form a range that the results are queried over.

    \ +

    The following formats are supported:

    \ +
      \ +
    • Keywords / Key Phrases
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + searches for dates matching the keyword. last year would search all of last year.
    • \ +
    • Ranges
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (spaces optional, many synonyms for range qualifiers)
      \ + Create a search range centered on now extending into the past and future by the amount specified.
    • \ +
    • DateTime and Partial DateTime
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + these formats specify a specific date range. 2011 would search the whole of 2011, while 2011-01-18 12:32:45 would only search for results in that 1 second range
    • \ +
    • Time and Time Partials
      \ + 12
      12:32
      12:32:45

      \ + these formats search for a particular time during the current day. 12:32 would search that minute during today
    • \ +
    • Date Ranges
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + A Date Range is created by specifying two dates in any format (Keyword / DateTime / Time) separated by < or -> (both do the same thing). If either end of the date range is missing, it is the same as having no constraint in that direction.
    • \ +
    • Date Range using Offset
      \ + 2010 -> 1yr
      3mins < now
      \ + Searches the specified date including the range in the direction specified.
    • \ +
    • Anchored Ranges
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Similar to above except the range is extend in both directions from the anchor date
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js new file mode 100644 index 000000000..2cc9bbb0c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js @@ -0,0 +1,164 @@ +i18n.setKeys({ +// "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs" : "Chargement des facettes...", + "General.Searching": "Recherche en cours...", + "General.Search": "Recherche", + "General.Help": "Aide", +// "General.HelpGlyph": "?", +// "General.CloseGlyph": "X", + "General.RefreshResults": "Rafraîchir", + "General.ManualRefresh": "Rafraîchissement manuel", + "General.RefreshQuickly": "Rafraîchissement rapide", + "General.Refresh5seconds": "Rafraîchissement toutes les 5 secondes", + "General.Refresh1minute": "Rafraîchissement toutes les minutes", + "AliasForm.AliasName": "Alias", + "AliasForm.NewAliasForIndex": "Nouvel Alias pour {0}", + "AliasForm.DeleteAliasMessage": "Entrez ''{0}'' pour effacer {1}. Attention, action irréversible.", + "AnyRequest.DisplayOptions" : "Options d'affichage", + "AnyRequest.AsGraph" : "En graphe", + "AnyRequest.AsJson" : "En JSON brut", + "AnyRequest.AsTable" : "En tableau", + "AnyRequest.History" : "Historique", + "AnyRequest.RepeatRequest" : "Répétition automatique de la requête", + "AnyRequest.RepeatRequestSelect" : "Répéter la requête toutes les ", + "AnyRequest.Transformer" : "Transformation des résultats", +// "AnyRequest.Pretty": "Pretty", + "AnyRequest.Query" : "Recherche", + "AnyRequest.Request": "Requête", + "AnyRequest.Requesting": "Requête en cours...", + "AnyRequest.ValidateJSON": "Valider le JSON", + "Browser.Title": "Navigateur", + "Browser.ResultSourcePanelTitle": "Résultat au format JSON", + "Command.DELETE": "SUPPRIMER", + "Command.SHUTDOWN": "ETEINDRE", + "Command.DeleteAliasMessage": "Supprimer l'Alias?", + "ClusterOverView.IndexName": "Index", + "ClusterOverview.NumShards": "Nombre de shards", + "ClusterOverview.NumReplicas": "Nombre de replica", + "ClusterOverview.NewIndex": "Nouvel Index", +// "IndexActionsMenu.Title": "Actions", + "IndexActionsMenu.NewAlias": "Nouvel Alias...", + "IndexActionsMenu.Refresh": "Rafraîchir", + "IndexActionsMenu.Flush": "Flusher", + "IndexActionsMenu.Optimize": "Optimiser...", + "IndexActionsMenu.Snapshot": "Dupliquer l'index (Snapshot)", + "IndexActionsMenu.Analyser": "Tester un analyseur", + "IndexActionsMenu.Open": "Ouvrir", + "IndexActionsMenu.Close": "Fermer", + "IndexActionsMenu.Delete": "Effacer...", +// "IndexInfoMenu.Title": "Info", + "IndexInfoMenu.Status": "Etat de l'Index", + "IndexInfoMenu.Metadata": "Métadonnées de l'Index", + "IndexCommand.TextToAnalyze": "Texte à analyser", + "IndexCommand.ShutdownMessage": "Entrez ''{0}'' pour éteindre {1}. Le noeud NE PEUT PAS être redémarré depuis cette interface.", +// "IndexSelector.NameWithDocs": "{0} ({1} docs)", + "IndexSelector.SearchIndexForDocs": "Chercher dans {0} les documents correspondant à", + "FilterBrowser.OutputType": "Format d'affichage des résultats {0}", + "FilterBrowser.OutputSize": "Nombre de Résultats: {0}", + "Header.ClusterHealth": "Santé du cluster: {0} ({1} {2})", + "Header.ClusterNotConnected": "Santé du cluster: non connecté", + "Header.Connect": "Se connecter", + "Nav.AnyRequest": "Autres requêtes", + "Nav.StructuredQuery": "Requêtes structurées", + "Nav.Browser": "Navigateur", + "Nav.ClusterHealth": "Santé du cluster", + "Nav.ClusterState": "Etat du cluster", + "Nav.ClusterNodes": "Noeuds du cluster", +// "Nav.Info": "Info", + "Nav.NodeStats": "Statistiques sur les noeuds", + "Nav.Overview": "Aperçu", + "Nav.Indices": "Index", + "Nav.Plugins": "Plugins", + "Nav.Status": "Etat", + "Nav.Templates": "Templates", + "Nav.StructuredQuery": "Recherche Structurée", +// "NodeActionsMenu.Title": "Actions", + "NodeActionsMenu.Shutdown": "Eteindre...", +// "NodeInfoMenu.Title": "Info", + "NodeInfoMenu.ClusterNodeInfo": "Infos sur le noeud du cluster", + "NodeInfoMenu.NodeStats": "Statistiques du noeud", + "NodeType.Client": "Noeud Client", + "NodeType.Coord": "Coordinateur", + "NodeType.Master": "Noeud Master", + "NodeType.Tribe": "Noeud Tribe", + "NodeType.Worker": "Noeud Worker", + "NodeType.Unassigned": "Non assigné", + "OptimizeForm.OptimizeIndex": "Optimiser {0}", + "OptimizeForm.MaxSegments": "Nombre maximum de segments", + "OptimizeForm.ExpungeDeletes": "Seulement purger les suppressions", + "OptimizeForm.FlushAfter": "Flusher après l'optimisation", + "OptimizeForm.WaitForMerge": "Attendre la fin de la fusion", + "Overview.PageTitle" : "Aperçu du cluster", +// "Output.JSON": "JSON", + "Output.Table": "Tableau", + "Output.ShowSource": "Voir la requête source", + "TableResults.Summary": "Recherche sur {0} des {1} shards. {2} résultats. {3} secondes", + "QueryFilter.AllIndices": "Tous les index", + "QueryFilter.AnyValue": "Tout", + "QueryFilter-Header-Indices": "Index", +// "QueryFilter-Header-Types": "Types", + "QueryFilter-Header-Fields": "Champs", + "QueryFilter.DateRangeHint.from": "De : {0}", + "QueryFilter.DateRangeHint.to": " A : {0}", + "Query.FailAndUndo": "Requête en échec. Annulation des dernières modifications.", + "StructuredQuery.ShowRawJson": "Voir le JSON brut" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    Le transformateur de résultats peut être utilisé pour modifier a posteriori les résultats JSON bruts dans un format plus utile.

    \ +

    Le transformateur devrait contenir le corps d'une fonction javascript. La valeur de retour de la fonction devient la nouvelle valeur qui sera passée à l'afficheur des documents JSON.

    \ +

    Exemple:
    \ + return root.hits.hits[0]; ne renverra que le premier élément de l'ensemble des résultats.
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); retournera la mémoire totale utilisée dans l'ensemble du cluster.

    \ +

    Les fonctions suivantes sont disponibles et peuvent vous être utiles pour travailler sur les tableaux et les objets:
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    Lorsque vous activez la répétition automatique de la requête, un paramètre supplémentaire nommé prev est passé à la fonction de transformation. Cela permet les comparaisons et les graphes cumulatifs.

    \ +

    Exemple:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; retournera la charge moyenne du premier noeud du cluster pour la dernière minute écoulée.\ + Cela peut alimenter ensuite le graphe pour produire un graphe de charge du noeud.\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    En JSON brut: affiche les résultats complets de la recherche éventuellement transformée au format JSON brut.

    \ +

    En graphe: pour fabriquer un graphe de vos résultats, utilsez la transformation de résultats pour générer un tableau de valeurs.

    \ +

    En tableau: si votre requête est une recherche, vous pouvez alors afficher les résultats dans un tableau.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Les champs Date acceptent une requête en langage naturel pour produire un écart de date (from/to) correspondant.

    \ +

    Les formats suivants sont acceptés :

    \ +
      \ +
    • Mots clés
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + Cherchera pour des dates correspondant au mot clé. last year cherchera sur toute l'année précédente.
    • \ +
    • Ecarts
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (les espaces sont optionnels et il existe beaucoup de synonymes pour qualifier les écarts)
      \ + Créé un écart de date basé sur l'heure courante (maintenant) avec plus ou moins l'écart indiqué.
    • \ +
    • Dates et Dates partielles
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + Ces formats indiquent un écart de date spécifique. 2011 cherchera sur toute l'année 2011, alors que 2011-01-18 12:32:45 ne cherchera que pour la date précise à la seconde près.
    • \ +
    • Heures et heures partielles
      \ + 12
      12:32
      12:32:45

      \ + Ces formats indiquent un espace de temps pour la date du jour. 12:32 cherchera les éléments d'aujourd'hui à cette minute précise.
    • \ +
    • Ecart de Date
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + Un écart de date est créé en spécifiant deux dates dans n'importe lequel des formats précédents (Mot clé / Dates / Heures) séparées par < ou -> (les deux produisent le même effet). Si la date de fin n'est pas indiquée, alors il n'y aura aucune contrainte de fin.
    • \ +
    • Ecart de date avec décalage
      \ + 2010 -> 1yr
      3mins < now
      \ + Cherche en incluant un décalage de la date dans la direction indiquée.
    • \ +
    • Ecart de date avec bornes
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Similaire à ci-dessus excepté que le décalage est appliqué dans les deux sens à partir de la date indiquée.
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js new file mode 100644 index 000000000..d4b6abff5 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js @@ -0,0 +1,174 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "Carregando Facetas...", + "General.Searching": "Buscando...", + "General.Search": "Busca", + "General.Help": "Ajuda", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "Atualizar", + "General.ManualRefresh": "Atualização Manual", + "General.RefreshQuickly": "Atualização rápida", + "General.Refresh5seconds": "Atualização a cada 5 segundos", + "General.Refresh1minute": "Atualização a cada minuto", + "AliasForm.AliasName": "Apelido", + "AliasForm.NewAliasForIndex": "Novo apelido para {0}", + "AliasForm.DeleteAliasMessage": "digite ''{0}'' para deletar {1}. Não há como voltar atrás", + "AnyRequest.DisplayOptions" : "Mostrar Opções", + "AnyRequest.AsGraph" : "Mostrar como gráfico", + "AnyRequest.AsJson" : "Mostrar JSON bruto", + "AnyRequest.AsTable" : "Mostrar tabela de resultados da consulta", + "AnyRequest.History" : "Histórico", + "AnyRequest.RepeatRequest" : "Refazer requisição", + "AnyRequest.RepeatRequestSelect" : "Repetir requisição a cada ", + "AnyRequest.Transformer" : "Transformador de resultado", + "AnyRequest.Pretty": "Amigável", + "AnyRequest.Query" : "Consulta", + "AnyRequest.Request": "Requisição", + "AnyRequest.Requesting": "Realizando requisição...", + "AnyRequest.ValidateJSON": "Validar JSON", + "Browser.Title": "Navegador", + "Browser.ResultSourcePanelTitle": "Resultado", + "Command.DELETE": "DELETAR", + "Command.SHUTDOWN": "DESLIGAR", + "Command.DeleteAliasMessage": "Remover apelido?", + "ClusterOverView.IndexName": "Nome do índice", + "ClusterOverview.NumShards": "Número de Shards", + "ClusterOverview.NumReplicas": "Número de Réplicas", + "ClusterOverview.NewIndex": "Novo índice", + "IndexActionsMenu.Title": "Ações", + "IndexActionsMenu.NewAlias": "Novo apelido...", + "IndexActionsMenu.Refresh": "Atualizar", + "IndexActionsMenu.Flush": "Flush", + "IndexActionsMenu.Optimize": "Otimizar...", + "IndexActionsMenu.Snapshot": "Snapshot do Gateway", + "IndexActionsMenu.Analyser": "Analizador de teste", + "IndexActionsMenu.Open": "Abrir", + "IndexActionsMenu.Close": "Fechar", + "IndexActionsMenu.Delete": "Deletar...", + "IndexInfoMenu.Title": "Info", + "IndexInfoMenu.Status": "Status do índice", + "IndexInfoMenu.Metadata": "Metadados do índice", + "IndexCommand.TextToAnalyze": "Texto para analizar", + "IndexCommand.ShutdownMessage": "digite ''{0}'' para desligar {1}. Nó NÃO PODE ser reiniciado à partir dessa interface", + "IndexOverview.PageTitle": "Visão geral dos índices", + "IndexSelector.NameWithDocs": "{0} ({1} documentoss)", + "IndexSelector.SearchIndexForDocs": "Busca {0} por documentos onde:", + "FilterBrowser.OutputType": "Resultados: {0}", + "FilterBrowser.OutputSize": "Número de Resultados: {0}", + "Header.ClusterHealth": "saúde do cluster: {0} ({1} {2})", + "Header.ClusterNotConnected": "saúde do cluster: não conectado", + "Header.Connect": "Conectar", + "Nav.AnyRequest": "Qualquer requisição", + "Nav.Browser": "Navegador", + "Nav.ClusterHealth": "Saúde do Cluster", + "Nav.ClusterState": "Estado do Cluster", + "Nav.ClusterNodes": "Nós do Cluster", + "Nav.Info": "Informações", + "Nav.NodeStats": "Estatísticas do nó", + "Nav.Overview": "Visão Geral", + "Nav.Indices": "Índices", + "Nav.Plugins": "Plugins", + "Nav.Status": "Status", + "Nav.Templates": "Modelos", + "Nav.StructuredQuery": "Consulta Estruturada", + "NodeActionsMenu.Title": "Ações", + "NodeActionsMenu.Shutdown": "Desligar...", + "NodeInfoMenu.Title": "Informações", + "NodeInfoMenu.ClusterNodeInfo": "Informações do Nó do Cluster", + "NodeInfoMenu.NodeStats": "Estatísticas do Nó", + "NodeType.Client": "Nó cliente", + "NodeType.Coord": "Coordenador", + "NodeType.Master": "Nó mestre", + "NodeType.Tribe": "Nó tribo", + "NodeType.Worker": "Nó trabalhador", + "NodeType.Unassigned": "Não atribuido", + "OptimizeForm.OptimizeIndex": "Otimizar {0}", + "OptimizeForm.MaxSegments": "# Máximo De Segmentos", + "OptimizeForm.ExpungeDeletes": "Apenas Expurgar Exclusões", + "OptimizeForm.FlushAfter": "Flush após Otimizar", + "OptimizeForm.WaitForMerge": "Esperar Por Merge", + "Overview.PageTitle": "Visão geral do Cluster", + "Output.JSON": "JSON", + "Output.Table": "Tabela", + "Output.CSV": "CSV", + "Output.ShowSource": "Mostrar consulta original", + "Preference.SortCluster": "Ordenar Cluster", + "Sort.ByName": "Por nome", + "Sort.ByAddress": "Por endereço", + "Sort.ByType": "Por tipo", + "Preference.ViewAliases": "Ver Alias", + "ViewAliases.Grouped": "Agrupado", + "ViewAliases.List": "Lista", + "ViewAliases.None": "Nenhum", + "Overview.IndexFilter": "Filtar Índice", + "TableResults.Summary": "Buscado {0} de {1} shards. {2} resultados. {3} segundos", + "QueryFilter.AllIndices": "Todos os Índices", + "QueryFilter.AnyValue": "qualquer", + "QueryFilter-Header-Indices": "Índices", + "QueryFilter-Header-Types": "Tipos", + "QueryFilter-Header-Fields": "Campos", + "QueryFilter.DateRangeHint.from": "De : {0}", + "QueryFilter.DateRangeHint.to": " A : {0}", + "Query.FailAndUndo": "Consulta falhou. Desfazendo últimas alterações", + "StructuredQuery.ShowRawJson": "Mostrar JSON bruto" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    O Transformador de Resultados pode ser usado para transformar os resultados de uma consulta de json bruto para um formato mais útil.

    \ +

    O transformador deve possuir o corpo de uma função javascript. O retorno da função se torna o novo valor passado para o json printer

    \ +

    Exemplo:
    \ + return root.hits.hits[0]; irá alterar a resposta para mostrar apenas o primeiro resultado
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); irá retornar o total de memória utilizada pelo cluster

    \ +

    As seguintes funções estão disponíveis e podem ser úteis no processamento de vetores e objetos
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    Durante a execução da opção Refazer Requisição, um parâmetro extra chamado prev é passado para a função de transformação. Isso permite fazer comparações e marcações cumulativas

    \ +

    Exemplo:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; irá retornar a carga média no primeiro nó do cluster no último minuto\ + Essa informação pode ser inserida no Gráfico para fazer um gráfico de carga do nó\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    Json Bruto: Exibe o resultado completo da consulta e da transformação no formato de JSON bruto

    \ +

    Gráfico de Resultados: Para gerar um gráfico com seus resultados, utilize o tranformador de resultados para produzir um vetor de valores

    \ +

    Tabela de Resultados da Consulta: Se sua consulta for uma busca, você pode exibir seus resultados no formato de uma tabela.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Campos do tipo Data aceitam consultas em linguagem natural (em inglês) para produzir um From e um To de modo a formar um intervalo dentro do qual os resultados são filtrados.

    \ +

    Os seguintes formatos são suportados:

    \ +
      \ +
    • Palavras-chave
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + buscam por datas de acordo com a palavra-chave. last year irá buscar tudo do último ano.
    • \ +
    • Intervalos
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (espaços são opcionais, diversos sinônimos para qualificadores de intervalo)
      \ + Cria um intervalo de busca a partir de agora (now), extendendo este intervalo no passado e no futuro de acordo com intervalo especificado.
    • \ +
    • Data/Hora (DateTime) e Data/Hora parcial
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + esses formatos especificam um intervalo especifico. 2011 irá buscar todo o ano de 2011, enquanto 2011-01-18 12:32:45 irá buscar apenas por resultados dentro deste intervalo de 1 segundo
    • \ +
    • Tempo (Time) e Tempo parcial
      \ + 12
      12:32
      12:32:45

      \ + esses formatos buscam por um horário específico no dia atual. 12:32 irá buscar este minuto específico do dia
    • \ +
    • Intervalos de Data
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + Um intervalo de data é criado especificando-se duas datas em qualquer formato (Palavras-chave, Data/Hora ou Tempo) separados por < ou -> (ambos fazem a mesma coisa). Se a data de início ou fim do intervalo não for especificada é a mesma coisa que não impor limites na busca nesta direção.
    • \ +
    • Intervalo de Data com Deslocamento
      \ + 2010 -> 1yr
      3mins < now
      \ + Busca a data especificada incluindo o intervalo na direção determinada pelo deslocamento
    • \ +
    • Intervalos Bidirecionais
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Idêntico ao exemplo anterior porém o intervalo é extendido em ambas as direções a partir da data especificada
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js new file mode 100644 index 000000000..f61195616 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js @@ -0,0 +1,177 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "Gruplar Yükleniyor...", + "General.Searching": "Aranıyor...", + "General.Search": "Ara", + "General.Help": "Yardım", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "Yenile", + "General.ManualRefresh": "Manuel Yenileme", + "General.RefreshQuickly": "Hızlı yenile", + "General.Refresh5seconds": "5 saniyede bir yenile", + "General.Refresh1minute": "Her dakika yenile", + "AliasForm.AliasName": "Alternatif İsim", + "AliasForm.NewAliasForIndex": "{0} için yeni alternatif isim", + "AliasForm.DeleteAliasMessage": "{1} silmek için ''{0}'' . Geriye dönüş yoktur.", + "AnyRequest.DisplayOptions" : "Seçenekleri Göster", + "AnyRequest.AsGraph" : "Sonuçları Çizdir", + "AnyRequest.AsJson" : "JSON formatında göster", + "AnyRequest.AsTable" : "Arama sonuçlarını tablo halinde göster", + "AnyRequest.History" : "Geçmiş", + "AnyRequest.RepeatRequest" : "İsteği Tekrarla", + "AnyRequest.RepeatRequestSelect" : "İsteği sürekli tekrarla ", + "AnyRequest.Transformer" : "Sonuç Dönüştürücü", + "AnyRequest.Pretty": "Düzenli", + "AnyRequest.Query" : "Sorgu", + "AnyRequest.Request": "Gönder", + "AnyRequest.Requesting": "İsteniyor...", + "AnyRequest.ValidateJSON": "JSON Doğrula", + "Browser.Title": "Browser", + "Browser.ResultSourcePanelTitle": "Sonuç Kaynağı", + "Command.DELETE": "SİL", + "Command.SHUTDOWN": "KAPA", + "Command.DeleteAliasMessage": "Alternatif ismi sil?", + "ClusterOverView.IndexName": "Indeks İsmi", + "ClusterOverview.NumShards": "Sektör Sayısı", + "ClusterOverview.NumReplicas": "Yedek Sayısı", + "ClusterOverview.NewIndex": "Yeni Indeks", + "IndexActionsMenu.Title": "İşlemler", + "IndexActionsMenu.NewAlias": "Yeni Alternatif İsim...", + "IndexActionsMenu.Refresh": "Yenile", + "IndexActionsMenu.Flush": "Boşalt", + "IndexActionsMenu.Optimize": "Optimize et...", + "IndexActionsMenu.Snapshot": "Gateway Snapshot (Kopya Al)", + "IndexActionsMenu.Analyser": "Analizi test et", + "IndexActionsMenu.Open": "Aç", + "IndexActionsMenu.Close": "Kapa", + "IndexActionsMenu.Delete": "Sil...", + "IndexInfoMenu.Title": "Bilgi", + "IndexInfoMenu.Status": "Indeks Durumu", + "IndexInfoMenu.Metadata": "Indeks Metaveri", + "IndexCommand.TextToAnalyze": "Analiz edilecek metin", + "IndexCommand.ShutdownMessage": "{1} kapatmak için ''{0}'' yazın . Nod bu arayüzden tekrar BAŞLATILAMAZ", + "IndexOverview.PageTitle": "Indeksler Genel Bakış", + "IndexSelector.NameWithDocs": "{0} ({1} döküman)", + "IndexSelector.SearchIndexForDocs": "{0} indeksinde ara:", + "FilterBrowser.OutputType": "Sonuç Formatı: {0}", + "FilterBrowser.OutputSize": "Sonuç Sayısı: {0}", + "Header.ClusterHealth": "Küme Durumu: {0} ({1} de {2})", + "Header.ClusterNotConnected": "Küme Durumu: Bağlı Değil", + "Header.Connect": "Bağlan", + "Nav.AnyRequest": "Özel Sorgu", + "Nav.Browser": "Görüntüle", + "Nav.ClusterHealth": "Küme Durumu", + "Nav.ClusterState": "Küme Statüsü", + "Nav.ClusterNodes": "Nod Bilgileri", + "Nav.Info": "Bilgi", + "Nav.NodeStats": "Nod İstatistikleri", + "Nav.Overview": "Genel Bakış", + "Nav.Indices": "Indeksler", + "Nav.Plugins": "Eklentiler", + "Nav.Status": "Indeks İstatistikleri", + "Nav.Templates": "Şablonlar", + "Nav.StructuredQuery": "Yapılandırılmış Sorgu", + "NodeActionsMenu.Title": "İşlemler", + "NodeActionsMenu.Shutdown": "Kapat...", + "NodeInfoMenu.Title": "Bilgi", + "NodeInfoMenu.ClusterNodeInfo": "Küme Nod Bilgileri", + "NodeInfoMenu.NodeStats": "Nod İstatistikleri", + "NodeType.Client": "Client Nod", + "NodeType.Coord": "Coordinator", + "NodeType.Master": "Master Nod", + "NodeType.Tribe": "Tribe Nod", + "NodeType.Worker": "Worker Nod", + "NodeType.Unassigned": "Sahipsiz", + "OptimizeForm.OptimizeIndex": "{0} Optimize Et", + "OptimizeForm.MaxSegments": "Maksimum Segment Sayısı", + "OptimizeForm.ExpungeDeletes": "Silme İşlemi Artıklarını Temizle", + "OptimizeForm.FlushAfter": "Optimize Ettikten Sonra Boşalt", + "OptimizeForm.WaitForMerge": "Birleştirme İçin Bekle", + "Overview.PageTitle" : "Kümeler Genelbakış", + "Output.JSON": "JSON", + "Output.Table": "Tablo", + "Output.CSV": "CSV", + "Output.ShowSource": "Sorgu kaynağını göster", + "Preference.SortCluster": "Kümeyi Sırala", + "Sort.ByName": "İsme göre", + "Sort.ByAddress": "Adrese göre", + "Sort.ByType": "Tipe göre", + "Preference.SortIndices": "Indeksleri sırala", + "SortIndices.Descending": "Azalan", + "SortIndices.Ascending": "Artan", + "Preference.ViewAliases": "Alternatif isimleri görüntüle", + "ViewAliases.Grouped": "Gruplanmış", + "ViewAliases.List": "Liste", + "ViewAliases.None": "Karışık", + "Overview.IndexFilter": "Indeks Filtresi", + "TableResults.Summary": "{0} parçanın {1} tanesi arandı. {2} sonuç. {3} saniye", + "QueryFilter.AllIndices": "Tüm Indeksler", + "QueryFilter.AnyValue": "herhangi", + "QueryFilter-Header-Indices": "Indeksler", + "QueryFilter-Header-Types": "Tipler", + "QueryFilter-Header-Fields": "Alanlar", + "QueryFilter.DateRangeHint.from": "{0}'dan", + "QueryFilter.DateRangeHint.to": " {0}'a", + "Query.FailAndUndo": "Sorgu Başarısız. Son değişiklikler geri alınıyor.", + "StructuredQuery.ShowRawJson": "Formatsız JSON göster" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    Sonuç Dönüştürücü sorgudan dönen JSON sonuçlarını işleyip daha kullanışlı bir formata dönüştürmek için kullanılabilir.

    \ +

    Dönüştürücü içierisinde javascript fonksiyonu tanımlanmalıdır. Bu fonksiyondan dönen yeni sonuç çıktı kısmına yazdırılır.

    \ +

    Örnek:
    \ + return root.hits.hits[0]; sonucu dolaşarak ilk eşleşmeyi göster
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0); tüm kümede kullanılan toplam belleği gösterir

    \ +

    Aşağıdaki fonksiyonlar dizi ve objelerin işlenmesinde yardımcı olması için kullanılabilir
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    Sorgu tekrarlama çalışırken, prev isimli ekstra bir parametre dönüştürücü fonksiyonuna verilir. Bu sayede karşılaştırmalar ve toplu grafik gösterimleri yapılabilir.

    \ +

    Örnek:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la; önceki dakika boyunca kümede bulunan ilk nod üzerindeki averaj yükü verir.\ + Bu sonuç nod için yük grafiği yaratılmasında kullanılabilir.\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    Sade Json: Sorgunun tüm sonuçlarını ve (yapıldıysa) dönüştürüldükten sonraki halini sade JSON formatında gösterir

    \ +

    Sonuçları Çizdir: Sonuçları grafiksel olarak görüntülemek için sonuç dörücüyü kullanarak değerleri dizi haline getirin.

    \ +

    Arama Sonuçları Tablosu: Eğer sorgunuz bir arama ise, sonuçları bir tabloda görüntüleyebilirsiniz.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Tarih alanları ana dile yakın kelimeler kullanarak iki tarih aralığında sorgu yapılabilmesini sağlar.

    \ +

    Aşağıdaki tanımlar kullanılabilir:

    \ +
      \ +
    • Anahtar Kelimeler
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + kelimeleri eşleşen tarihleri verir. Örneğin last year geçen yıl tarihli bütün verileri döndürür.
    • \ +
    • Aralıklar
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (boşluklar isteğe bağlıdır, ayni kelime için farklı yazım şekilleri kullanılabilir)
      \ + Şu anki tarihi (now) baz alarak geçmiş veya ileriki bir tarih aralığındaki kayıtları verir.
    • \ +
    • Tarih ve Kısmi Tarihler
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + bu formatlar spesifik bir tarihi tanımlarlar. 2011 tüm 2011 yılını ararken, 2011-01-18 12:32:45 şeklinde bir sorgu sadece o saniyedeki sonuçları verir.
    • \ +
    • Zaman ve Kısmi Zamanlar
      \ + 12
      12:32
      12:32:45

      \ + bu formatlar gün içerisinde spesifik bir zamanı tanımlarlar. Örneğin 12:32 sadece bu saat ve dakikadaki kayıtları verir.
    • \ +
    • Tarih Aralıkları
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + Tarih aralıkları yukarda belirtilen herhangi bir formatı < or -> ile ayırarak yapılabilir. Eğer aralığın bir tarafı eksikse, sorgu ucu açıkmış gibi davranır.
    • \ +
    • Ofsetli Tarih Aralığı
      \ + 2010 -> 1yr
      3mins < now
      \ + Verilen yöndeki tarih aralığına bakar.
    • \ +
    • Çakılı Aralıklar
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + Yukarıdakiyle ayni fakat belirtilen tarihten her iki yöne de bakılır.
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js new file mode 100644 index 000000000..0038de173 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js @@ -0,0 +1,172 @@ +i18n.setKeys({ + "General.Elasticsearch": "Elasticsearch", + "General.LoadingAggs": "加载聚合查询...", + "General.Searching": "搜索中...", + "General.Search": "搜索", + "General.Help": "帮助", + "General.HelpGlyph": "?", + "General.CloseGlyph": "X", + "General.RefreshResults": "刷新", + "General.ManualRefresh": "手动刷新", + "General.RefreshQuickly": "快速刷新", + "General.Refresh5seconds": "每5秒刷新", + "General.Refresh1minute": "每1分钟刷新", + "AliasForm.AliasName": "别名", + "AliasForm.NewAliasForIndex": "为 {0} 创建新别名", + "AliasForm.DeleteAliasMessage": "输入 ''{0}'' 删除 {1}. 此操作无法恢复", + "AnyRequest.DisplayOptions" : "显示选项", + "AnyRequest.AsGraph" : "图形视图", + "AnyRequest.AsJson" : "原始 JSON", + "AnyRequest.AsTable" : "表格视图", + "AnyRequest.History" : "历史记录", + "AnyRequest.RepeatRequest" : "重复请求", + "AnyRequest.RepeatRequestSelect" : "重复周期 ", + "AnyRequest.Transformer" : "结果转换器", + "AnyRequest.Pretty": "易读", + "AnyRequest.Query" : "查询", + "AnyRequest.Request": "提交请求", + "AnyRequest.Requesting": "请求中...", + "AnyRequest.ValidateJSON": "验证 JSON", + "Browser.Title": "数据浏览", + "Browser.ResultSourcePanelTitle": "原始数据", + "Command.DELETE": "删除", + "Command.SHUTDOWN": "关闭", + "Command.DeleteAliasMessage": "删除别名?", + "ClusterOverView.IndexName": "索引名称", + "ClusterOverview.NumShards": "分片数", + "ClusterOverview.NumReplicas": "副本数", + "ClusterOverview.NewIndex": "新建索引", + "IndexActionsMenu.Title": "动作", + "IndexActionsMenu.NewAlias": "新建别名...", + "IndexActionsMenu.Refresh": "刷新", + "IndexActionsMenu.Flush": "Flush刷新", + "IndexActionsMenu.Optimize": "优化...", + "IndexActionsMenu.Snapshot": "网关快照", + "IndexActionsMenu.Analyser": "测试分析器", + "IndexActionsMenu.Open": "开启", + "IndexActionsMenu.Close": "关闭", + "IndexActionsMenu.Delete": "删除...", + "IndexInfoMenu.Title": "信息", + "IndexInfoMenu.Status": "索引状态", + "IndexInfoMenu.Metadata": "索引信息", + "IndexCommand.TextToAnalyze": "文本分析", + "IndexCommand.ShutdownMessage": "输入 ''{0}'' 以关闭 {1} 节点. 关闭的节点无法从此界面重新启动", + "IndexOverview.PageTitle": "索引概览", + "IndexSelector.NameWithDocs": "{0} ({1} 个文档)", + "IndexSelector.SearchIndexForDocs": "搜索 {0} 的文档, 查询条件:", + "FilterBrowser.OutputType": "返回格式: {0}", + "FilterBrowser.OutputSize": "显示数量: {0}", + "Header.ClusterHealth": "集群健康值: {0} ({1} of {2})", + "Header.ClusterNotConnected": "集群健康值: 未连接", + "Header.Connect": "连接", + "Nav.AnyRequest": "复合查询", + "Nav.Browser": "数据浏览", + "Nav.ClusterHealth": "集群健康值", + "Nav.ClusterState": "群集状态", + "Nav.ClusterNodes": "集群节点", + "Nav.Info": "信息", + "Nav.NodeStats": "节点状态", + "Nav.Overview": "概览", + "Nav.Indices": "索引", + "Nav.Plugins": "插件", + "Nav.Status": "状态", + "Nav.Templates": "模板", + "Nav.StructuredQuery": "基本查询", + "NodeActionsMenu.Title": "动作", + "NodeActionsMenu.Shutdown": "关停...", + "NodeInfoMenu.Title": "信息", + "NodeInfoMenu.ClusterNodeInfo": "集群节点信息", + "NodeInfoMenu.NodeStats": "节点状态", + "NodeType.Client": "节点客户端", + "NodeType.Coord": "协调器", + "NodeType.Master": "主节点", + "NodeType.Tribe": "分支结点", + "NodeType.Worker": "工作节点", + "NodeType.Unassigned": "未分配", + "OptimizeForm.OptimizeIndex": "优化 {0}", + "OptimizeForm.MaxSegments": "最大索引段数", + "OptimizeForm.ExpungeDeletes": "只删除被标记为删除的", + "OptimizeForm.FlushAfter": "优化后刷新", + "OptimizeForm.WaitForMerge": "等待合并", + "Overview.PageTitle" : "集群概览", + "Output.JSON": "JSON", + "Output.Table": "Table", + "Output.CSV": "CSV", + "Output.ShowSource": "显示查询语句", + "Preference.SortCluster": "集群排序", + "Sort.ByName": "按名称", + "Sort.ByAddress": "按地址", + "Sort.ByType": "按类型", + "TableResults.Summary": "查询 {1} 个分片中用的 {0} 个. {2} 命中. 耗时 {3} 秒", + "QueryFilter.AllIndices": "所有索引", + "QueryFilter.AnyValue": "任意", + "QueryFilter-Header-Indices": "索引", + "QueryFilter-Header-Types": "类型", + "QueryFilter-Header-Fields": "字段", + "QueryFilter.DateRangeHint.from": "从 : {0}", + "QueryFilter.DateRangeHint.to": " 到 : {0}", + "Query.FailAndUndo": "查询失败. 撤消最近的更改", + "StructuredQuery.ShowRawJson": "显示原始 JSON" +}); + +i18n.setKeys({ + "AnyRequest.TransformerHelp" : "\ +

    结果转换器用于返回结果原始JSON的后续处理, 将结果转换为更有用的格式.

    \ +

    转换器应当包含javascript函数体. 函数的返回值将传递给json分析器

    \ +

    Example:
    \ + return root.hits.hits[0];
    \ + 遍历结果并只显示第一个元素
    \ + return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);
    \ + 将返回整个集群使用的总内存

    \ +

    以下函数可以方便的处理数组与对象
    \ +

      \ +
    • Object.keys(object) := array
    • \ +
    • array.forEach(function(prop, index))
    • \ +
    • array.map(function(prop, index)) := array
    • \ +
    • array.reduce(function(accumulator, prop, index), initial_value) := final_value
    • \ +
    \ +

    当启用重复请求时, prev 参数将会传递给转换器函数. 这将用于比较并累加图形

    \ +

    Example:
    \ + var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;
    \ + 将返回第一个集群节点最近一分钟内的平均负载\ + 将会把结果送人图表以产生一个负载曲线图\ + " +}); + +i18n.setKeys({ + "AnyRequest.DisplayOptionsHelp" : "\ +

    原始 Json: 将完整的查询结果转换为原始JSON格式

    \ +

    图形视图: 将查询结果图形化, 将查询结果转换为数组值的形式

    \ +

    表格视图: 如果查询是一个搜索, 可以将搜索结果以表格形式显示.

    \ + " +}); + +i18n.setKeys({ + "QueryFilter.DateRangeHelp" : "\ +

    Date 字段接受日期范围的形式查询.

    \ +

    一下格式被支持:

    \ +
      \ +
    • 关键词 / 关键短语
      \ + now
      today
      tomorrow
      yesterday
      last / this / next + week / month / year

      \ + 搜索关键字匹配的日期. last year 将搜索过去全年.
    • \ +
    • 范围
      \ + 1000 secs
      5mins
      1day
      2days
      80d
      9 months
      2yrs
      (空格可选, 同等于多个范围修饰词)
      \ + 创建一个指定时间范围的搜索, 将围绕现在 并延伸至过去与未来时间段.
    • \ +
    • DateTime 与 DateTime局部
      \ + 2011
      2011-01
      2011-01-18
      2011-01-18 12
      2011-01-18 12:32
      2011-01-18 12:32:45

      \ + 指定一个特定的日期范围. 2011会搜索整个 2011年, 而 2011-01-18 12:32:45 将只搜索1秒范围内
    • \ +
    • Time 与 Time局部
      \ + 12
      12:32
      12:32:45

      \ + 这些格式只搜索当天的特定时间. 12:32 将搜索当天的那一分钟
    • \ +
    • 日期范围
      \ + 2010 -> 2011
      last week -> next week
      2011-05 ->
      < now

      \ + 日期范围是将两个日期格式串 (日期关键字 / DateTime / Time) 用 < 或 -> (效果相同) 分隔. 如果缺少任意一端,那么在这个方向上时间将没有限制.
    • \ +
    • 偏移日期范围
      \ + 2010 -> 1yr
      3mins < now
      \ + 搜索包括指定方向上偏移的日期.
    • \ +
    • 锚定范围
      \ + 2010-05-13 05:13 <> 10m
      now <> 1yr
      lastweek <> 1month

      \ + 类似于上面的便宜日期,在两个方向上将锚定的日期延长
    • \ +
    \ + " +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js new file mode 100644 index 000000000..c4ddf6552 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js @@ -0,0 +1,47 @@ +(function( $, app ) { + + var services = app.ns("services"); + var ux = app.ns("ux"); + + function parse_version( v ) { + return v.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1,4).map( function(d) { return parseInt(d || 0, 10); } ); + } + + services.Cluster = ux.Class.extend({ + defaults: { + base_uri: null + }, + init: function() { + this.base_uri = this.config.base_uri; + }, + setVersion: function( v ) { + this.version = v; + this._version_parts = parse_version( v ); + }, + versionAtLeast: function( v ) { + var testVersion = parse_version( v ); + for( var i = 0; i < 3; i++ ) { + if( testVersion[i] !== this._version_parts[i] ) { + return testVersion[i] < this._version_parts[i]; + } + } + return true; + }, + request: function( params ) { + return $.ajax( $.extend({ + url: this.base_uri + params.path, + dataType: "json", + error: function(xhr, type, message) { + if("console" in window) { + console.log({ "XHR Error": type, "message": message }); + } + } + }, params) ); + }, + "get": function(path, success) { return this.request( { type: "GET", path: path, success: success } ); }, + "post": function(path, data, success) { return this.request( { type: "POST", path: path, data: data, success: success } ); }, + "put": function(path, data, success) { return this.request( { type: "PUT", path: path, data: data, success: success } ); }, + "delete": function(path, data, success) { return this.request( { type: "DELETE", path: path, data: data, success: success } ); } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js new file mode 100644 index 000000000..ff4e8a967 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js @@ -0,0 +1,65 @@ +describe("app.services.Cluster", function() { + + var Cluster = window.app.services.Cluster; + var test = window.test; + + var cluster; + + beforeEach( function() { + cluster = new Cluster({ base_uri: "http://localhost:9200/" }); + }); + + describe( "when it is initialised", function() { + + it("should have a localhost base_uri", function() { + expect( cluster.base_uri ).toBe( "http://localhost:9200/" ); + }); + + it("should have no version", function() { + expect( cluster.version ).toBe( undefined ); + }); + + }); + + describe( "setVersion()", function() { + + it("have a version", function() { + cluster.setVersion( "1.12.3-5" ); + expect( cluster.version ).toBe( "1.12.3-5" ); + }); + + }); + + describe("versionAtLeast()", function() { + var vs = [ "0.0.3", "0.13.5", "0.90.3", "1.0.0", "1.1.0", "1.2.3", "1.12.4.rc2", "13.0.0" ]; + + it("should return true for versions that are less than or equal to the current version", function() { + cluster.setVersion("1.12.5"); + expect( cluster.versionAtLeast("1.12.5" ) ).toBe( true ); + expect( cluster.versionAtLeast("1.12.5rc2" ) ).toBe( true ); + expect( cluster.versionAtLeast("1.12.5-6" ) ).toBe( true ); + expect( cluster.versionAtLeast("1.12.5-6.beta7" ) ).toBe( true ); + expect( cluster.versionAtLeast("1.12.4" ) ).toBe( true ); + expect( cluster.versionAtLeast("0.12.4" ) ).toBe( true ); + expect( cluster.versionAtLeast("1.1.8" ) ).toBe( true ); + + for( var i = 0; i < vs.length - 1; i++ ) { + cluster.setVersion( vs[i+1] ); + expect( cluster.versionAtLeast( vs[i] ) ).toBe( true ); + } + }); + + it("should return false for versions that are greater than the current version", function() { + cluster.setVersion("1.12.5"); + expect( cluster.versionAtLeast("1.12.6" ) ).toBe( false ); + expect( cluster.versionAtLeast("1.13.4" ) ).toBe( false ); + expect( cluster.versionAtLeast("2.0.0" ) ).toBe( false ); + + for( var i = 0; i < vs.length - 1; i++ ) { + cluster.setVersion( vs[i] ); + expect( cluster.versionAtLeast( vs[i+1] ) ).toBe( false ); + } + }); + }); + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js new file mode 100644 index 000000000..1d7334e0f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js @@ -0,0 +1,73 @@ + (function( app ) { + + var services = app.ns("services"); + var ux = app.ns("ux"); + + services.ClusterState = ux.Observable.extend({ + defaults: { + cluster: null + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.clusterState = null; + this.status = null; + this.nodeStats = null; + this.clusterNodes = null; + }, + refresh: function() { + var self = this, clusterState, status, nodeStats, clusterNodes, clusterHealth; + function updateModel() { + if( clusterState && status && nodeStats && clusterNodes && clusterHealth ) { + this.clusterState = clusterState; + this.status = status; + this.nodeStats = nodeStats; + this.clusterNodes = clusterNodes; + this.clusterHealth = clusterHealth; + this.fire( "data", this ); + } + } + this.cluster.get("_cluster/state", function( data ) { + clusterState = data; + updateModel.call( self ); + }); + this.cluster.get("_stats", function( data ) { + status = data; + updateModel.call( self ); + }); + this.cluster.get("_nodes/stats", function( data ) { + nodeStats = data; + updateModel.call( self ); + }); + this.cluster.get("_nodes", function( data ) { + clusterNodes = data; + updateModel.call( self ); + }); + this.cluster.get("_cluster/health", function( data ) { + clusterHealth = data; + updateModel.call( self ); + }); + }, + _clusterState_handler: function(state) { + this.clusterState = state; + this.redraw("clusterState"); + }, + _status_handler: function(status) { + this.status = status; + this.redraw("status"); + }, + _clusterNodeStats_handler: function(stats) { + this.nodeStats = stats; + this.redraw("nodeStats"); + }, + _clusterNodes_handler: function(nodes) { + this.clusterNodes = nodes; + this.redraw("clusterNodes"); + }, + _clusterHealth_handler: function(health) { + this.clusterHealth = health; + this.redraw("status"); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js new file mode 100644 index 000000000..b91237c6e --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js @@ -0,0 +1,64 @@ +describe("app.services.ClusterState", function() { + + var ClusterState = window.app.services.ClusterState; + var test = window.test; + + var c; + var dummyData = {}; + var dataEventCallback; + + function expectAllDataToBeNull() { + expect( c.clusterState ).toBe( null ); + expect( c.status ).toBe( null ); + expect( c.nodeStats ).toBe( null ); + expect( c.clusterNodes ).toBe( null ); + } + + beforeEach( function() { + test.cb.use(); + dataEventCallback = jasmine.createSpy("onData"); + c = new ClusterState({ + cluster: { + get: test.cb.createSpy("get", 1, [ dummyData ] ) + }, + onData: dataEventCallback + }); + }); + + describe( "when it is initialised", function() { + + it("should have null data", function() { + expectAllDataToBeNull(); + }); + + }); + + describe( "when refresh is called", function() { + + beforeEach( function() { + c.refresh(); + }); + + it("should not not update models until all network requests have completed", function() { + test.cb.execOne(); + expectAllDataToBeNull(); + test.cb.execOne(); + expectAllDataToBeNull(); + test.cb.execOne(); + expectAllDataToBeNull(); + test.cb.execOne(); + expectAllDataToBeNull(); + test.cb.execOne(); + expect( c.clusterState ).toBe( dummyData ); + expect( c.status ).toBe( dummyData ); + expect( c.nodeStats ).toBe( dummyData ); + expect( c.clusterNodes ).toBe( dummyData ); + }); + + it("should fire a 'data' event when all data is ready", function() { + test.cb.execAll(); + expect( dataEventCallback ).toHaveBeenCalledWith( c ); + }); + }); + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js new file mode 100644 index 000000000..968815d4c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js @@ -0,0 +1,23 @@ +describe("app.services.Preferences", function(){ + +var Preferences = window.app.services.Preferences; + + var prefs; + + beforeEach( function() { + spyOn(window.localStorage, "getItem").and.returnValue( '{"foo":true}' ); + spyOn(window.localStorage, "setItem"); + prefs = Preferences.instance(); + }); + + it("should return a preference from localStorage", function() { + expect( prefs.get("foo") ).toEqual( {foo:true} ); + }); + + it("should set a preference in localStorage", function() { + prefs.set("foo", { foo: false } ); + expect( window.localStorage.setItem ).toHaveBeenCalledWith('foo', '{"foo":false}'); + }); + + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js new file mode 100644 index 000000000..a45eb966d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js @@ -0,0 +1,35 @@ +(function( app ) { + + var ux = app.ns("ux"); + var services = app.ns("services"); + + services.Preferences = ux.Singleton.extend({ + init: function() { + this._storage = window.localStorage; + this._setItem("__version", 1 ); + }, + get: function( key ) { + return this._getItem( key ); + }, + set: function( key, val ) { + return this._setItem( key, val ); + }, + _getItem: function( key ) { + try { + return JSON.parse( this._storage.getItem( key ) ); + } catch(e) { + console.warn( e ); + return undefined; + } + }, + _setItem: function( key, val ) { + try { + return this._storage.setItem( key, JSON.stringify( val ) ); + } catch(e) { + console.warn( e ); + return undefined; + } + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css new file mode 100644 index 000000000..3042e7b37 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css @@ -0,0 +1 @@ +.require { color: #a00; } diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js new file mode 100644 index 000000000..3d629b78d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js @@ -0,0 +1,49 @@ +(function( $, app, joey ) { + + var ui = app.ns("ui"); + + ui.AbstractField = ui.AbstractWidget.extend({ + + defaults: { + name : "", // (required) - name of the field + require: false, // validation requirements (false, true, regexp, function) + value: "", // default value + label: "" // human readable label of this field + }, + + init: function(parent) { + this._super(); + this.el = $.joey(this._main_template()); + this.field = this.el.find("[name="+this.config.name+"]"); + this.label = this.config.label; + this.require = this.config.require; + this.name = this.config.name; + this.val( this.config.value ); + this.attach( parent ); + }, + + val: function( val ) { + if(val === undefined) { + return this.field.val(); + } else { + this.field.val( val ); + return this; + } + }, + + validate: function() { + var val = this.val(), req = this.require; + if( req === false ) { + return true; + } else if( req === true ) { + return val.length > 0; + } else if( req.test && $.isFunction(req.test) ) { + return req.test( val ); + } else if( $.isFunction(req) ) { + return req( val, this ); + } + } + + }); + +})( this.jQuery, this.app, this.joey ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css new file mode 100644 index 000000000..6cce209bc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css @@ -0,0 +1,43 @@ +#uiModal { + background: black; +} + +.uiPanel { + box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black; + position: absolute; + background: #eee; + border: 1px solid #666; +} + +.uiPanel-titleBar { + text-align: center; + font-weight: bold; + padding: 2px 0; + background: rgba(223, 223, 223, 0.75); + background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75)); + background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75)); + border-bottom: 1px solid #bbb; +} + +.uiPanel-close { + cursor: pointer; + border: 1px solid #aaa; + background: #fff; + color: #fff; + float: left; + height: 10px; + left: 3px; + line-height: 9px; + padding: 1px 0; + position: relative; + text-shadow: 0 0 1px #000; + top: 0px; + width: 12px; +} +.uiPanel-close:hover { + background: #eee; +} + +.uiPanel-body { + overflow: auto; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js new file mode 100644 index 000000000..17f62a798 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js @@ -0,0 +1,83 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.AbstractPanel = ui.AbstractWidget.extend({ + defaults: { + body: null, // initial content of the body + modal: true, // create a modal panel - creates a div that blocks interaction with page + height: 'auto', // panel height + width: 400, // panel width (in pixels) + open: false, // show the panel when it is created + parent: 'BODY', // node that panel is attached to + autoRemove: false // remove the panel from the dom and destroy it when the widget is closed + }, + shared: { // shared data for all instances of ui.Panel and decendants + stack: [], // array of all open panels + modal: $( { tag: "DIV", id: "uiModal", css: { opacity: 0.2, position: "absolute", top: "0px", left: "0px" } } ) + }, + init: function() { + this._super(); + }, + open: function( ev ) { + this.el + .css( { visibility: "hidden" } ) + .appendTo( this.config.parent ) + .css( this._getPosition( ev ) ) + .css( { zIndex: (this.shared.stack.length ? (+this.shared.stack[this.shared.stack.length - 1].el.css("zIndex") + 10) : 100) } ) + .css( { visibility: "visible", display: "block" } ); + this.shared.stack.remove(this); + this.shared.stack.push(this); + this._setModal(); + $(document).bind("keyup", this._close_handler ); + this.fire("open", { source: this, event: ev } ); + return this; + }, + close: function() { + var index = this.shared.stack.indexOf(this); + if(index !== -1) { + this.shared.stack.splice(index, 1); + this.el.css( { left: "-2999px" } ); // move the dialog to the left rather than hiding to prevent ie6 rendering artifacts + this._setModal(); + this.fire("close", this ); + if(this.config.autoRemove) { + this.remove(); + } + } + return this; + }, + // close the panel and remove it from the dom, destroying it (you can not reuse the panel after calling remove) + remove: function() { + this.close(); + $(document).unbind("keyup", this._close_handler ); + this._super(); + }, + // starting at the top of the stack, find the first panel that wants a modal and put it just underneath, otherwise remove the modal + _setModal: function() { + for(var stackPtr = this.shared.stack.length - 1; stackPtr >= 0; stackPtr--) { + if(this.shared.stack[stackPtr].config.modal) { + this.shared.modal + .appendTo( document.body ) + .css( { zIndex: this.shared.stack[stackPtr].el.css("zIndex") - 5 } ) + .css( $(document).vSize().asSize() ); + return; + } + } + this.shared.modal.remove(); // no panels that want a modal were found + }, + _getPosition: function() { + return $(window).vSize() // get the current viewport size + .sub(this.el.vSize()) // subtract the size of the panel + .mod(function(s) { return s / 2; }) // divide by 2 (to center it) + .add($(document).vScroll()) // add the current scroll offset + .mod(function(s) { return Math.max(5, s); }) // make sure the panel is not off the edge of the window + .asOffset(); // and return it as a {top, left} object + }, + _close_handler: function( ev ) { + if( ev.type === "keyup" && ev.keyCode !== 27) { return; } // press esc key to close + $(document).unbind("keyup", this._close_handler); + this.close( ev ); + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js new file mode 100644 index 000000000..bf3b4c8b6 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js @@ -0,0 +1,49 @@ +(function( $, joey, app ) { + + var ui = app.ns("ui"); + var ux = app.ns("ux"); + + ui.AbstractWidget = ux.Observable.extend({ + defaults : { + id: null // the id of the widget + }, + + el: null, // this is the jquery wrapped dom element(s) that is the root of the widget + + init: function() { + this._super(); + for(var prop in this) { // automatically bind all the event handlers + if(prop.contains("_handler")) { + this[prop] = this[prop].bind(this); + } + } + }, + + id: function(suffix) { + return this.config.id ? (this.config.id + (suffix ? "-" + suffix : "")) : undefined; + }, + + attach: function( parent, method ) { + if( parent ) { + this.el[ method || "appendTo"]( parent ); + } + this.fire("attached", this ); + return this; + }, + + remove: function() { + this.el.remove(); + this.fire("removed", this ); + this.removeAllObservers(); + this.el = null; + return this; + } + }); + + joey.plugins.push( function( obj ) { + if( obj instanceof ui.AbstractWidget ) { + return obj.el[0]; + } + }); + +})( this.jQuery, this.joey, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css new file mode 100644 index 000000000..f00412cf1 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css @@ -0,0 +1,38 @@ +.uiAnyRequest-request { + float: left; + width: 350px; + padding: 5px; + background: #d8e7ff; + background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff); + background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff); +} + +.uiAnyRequest-request INPUT[type=text], +.uiAnyRequest-request TEXTAREA { + width: 340px; +} + +.anyRequest INPUT[name=path] { + width: 259px; +} + +.uiAnyRequest-out { + margin-left: 365px; +} + +.uiAnyRequest-out P { + margin-top: 0; +} + +.uiAnyRequest-jsonErr { + color: red; +} + +.uiAnyRequest-history { + margin: 0; + padding: 0; + list-style: none; + max-height: 100px; + overflow-x: hidden; + overflow-y: auto; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js new file mode 100644 index 000000000..926bbcced --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js @@ -0,0 +1,235 @@ +(function( $, app, i18n, raphael ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + var services = app.ns("services"); + + ui.AnyRequest = ui.Page.extend({ + defaults: { + cluster: null, // (required) instanceof app.services.Cluster + path: "_search", // default uri to send a request to + query: { query: { match_all: { }}}, + transform: " return root;" // default transformer function (does nothing) + }, + init: function(parent) { + this._super(); + this.prefs = services.Preferences.instance(); + this.history = this.prefs.get("anyRequest-history") || [ { type: "POST", path: this.config.path, query : JSON.stringify(this.config.query), transform: this.config.transform } ]; + this.el = $.joey(this._main_template()); + this.base_uriEl = this.el.find("INPUT[name=base_uri]"); + this.pathEl = this.el.find("INPUT[name=path]"); + this.typeEl = this.el.find("SELECT[name=method]"); + this.dataEl = this.el.find("TEXTAREA[name=body]"); + this.prettyEl = this.el.find("INPUT[name=pretty]"); + this.transformEl = this.el.find("TEXTAREA[name=transform]"); + this.asGraphEl = this.el.find("INPUT[name=asGraph]"); + this.asTableEl = this.el.find("INPUT[name=asTable]"); + this.asJsonEl = this.el.find("INPUT[name=asJson]"); + this.cronEl = this.el.find("SELECT[name=cron]"); + this.outEl = this.el.find("DIV.uiAnyRequest-out"); + this.errEl = this.el.find("DIV.uiAnyRequest-jsonErr"); + this.typeEl.val("GET"); + this.attach(parent); + this.setHistoryItem(this.history[this.history.length - 1]); + }, + setHistoryItem: function(item) { + this.pathEl.val(item.path); + this.typeEl.val(item.type); + this.dataEl.val(item.query); + this.transformEl.val(item.transform); + }, + _request_handler: function( ev ) { + if(! this._validateJson_handler()) { + return; + } + var path = this.pathEl.val(), + type = this.typeEl.val(), + query = JSON.stringify(JSON.parse(this.dataEl.val())), + transform = this.transformEl.val(), + base_uri = this.base_uriEl.val(); + if( ev ) { // if the user click request + if(this.timer) { + window.clearTimeout(this.timer); // stop any cron jobs + } + delete this.prevData; // remove data from previous cron runs + this.outEl.text(i18n.text("AnyRequest.Requesting")); + if( ! /\/$/.test( base_uri )) { + base_uri += "/"; + this.base_uriEl.val( base_uri ); + } + for(var i = 0; i < this.history.length; i++) { + if(this.history[i].path === path && + this.history[i].type === type && + this.history[i].query === query && + this.history[i].transform === transform) { + this.history.splice(i, 1); + } + } + this.history.push({ + path: path, + type: type, + query: query, + transform: transform + }); + this.history.slice(250); // make sure history does not get too large + this.prefs.set( "anyRequest-history", this.history ); + this.el.find("UL.uiAnyRequest-history") + .empty() + .append($( { tag: "UL", children: this.history.map(this._historyItem_template, this) }).children()) + .children().find(":last-child").each(function(i, j) { j.scrollIntoView(false); }).end() + .scrollLeft(0); + } + this.config.cluster.request({ + url: base_uri + path, + type: type, + data: query, + success: this._responseWriter_handler, + error: this._responseError_handler + }); + }, + _responseError_handler: function (response) { + var obj; + try { + obj = JSON.parse(response.responseText); + if (obj) { + this._responseWriter_handler(obj); + } + } catch (err) { + } + }, + _responseWriter_handler: function(data) { + this.outEl.empty(); + try { + data = (new Function("root", "prev", this.transformEl.val()))(data, this.prevData) + } catch(e) { + this.errEl.text(e.message); + return; + } + if(this.asGraphEl.attr("checked")) { + var w = this.outEl.width(); + raphael(this.outEl[0], w - 10, 300) + .g.barchart(10, 10, w - 20, 280, [data]); + } + if(this.asTableEl.attr("checked")) { + try { + var store = new app.data.ResultDataSourceInterface(); + this.outEl.append(new app.ui.ResultTable({ + width: this.outEl.width() - 23, + store: store + } ) ); + store.results(data); + } catch(e) { + this.errEl.text("Results Table Failed: " + e.message); + } + } + if(this.asJsonEl.attr("checked")) { + this.outEl.append(new ui.JsonPretty({ obj: data })); + } + if(this.cronEl.val() > 0) { + this.timer = window.setTimeout(function(){ + this._request_handler(); + }.bind(this), this.cronEl.val()); + } + this.prevData = data; + }, + _validateJson_handler: function( ev ) { + /* if the textarea is empty, we replace its value by an empty JSON object : "{}" and the request goes on as usual */ + var jsonData = this.dataEl.val().trim(); + var j; + if(jsonData === "") { + jsonData = "{}"; + this.dataEl.val( jsonData ); + } + try { + j = JSON.parse(jsonData); + } catch(e) { + this.errEl.text(e.message); + return false; + } + this.errEl.text(""); + if(this.prettyEl.attr("checked")) { + this.dataEl.val(JSON.stringify(j, null, " ")); + } + return true; + }, + _historyClick_handler: function( ev ) { + var item = $( ev.target ).closest( "LI" ).data( "item" ); + this.setHistoryItem( item ); + }, + _main_template: function() { + return { tag: "DIV", cls: "anyRequest", children: [ + { tag: "DIV", cls: "uiAnyRequest-request", children: [ + new app.ui.SidebarSection({ + open: false, + title: i18n.text("AnyRequest.History"), + body: { tag: "UL", onclick: this._historyClick_handler, cls: "uiAnyRequest-history", children: this.history.map(this._historyItem_template, this) } + }), + new app.ui.SidebarSection({ + open: true, + title: i18n.text("AnyRequest.Query"), + body: { tag: "DIV", children: [ + { tag: "INPUT", type: "text", name: "base_uri", value: this.config.cluster.config.base_uri }, + { tag: "BR" }, + { tag: "INPUT", type: "text", name: "path", value: this.config.path }, + { tag: "SELECT", name: "method", children: ["POST", "GET", "PUT", "HEAD", "DELETE"].map(ut.option_template) }, + { tag: "TEXTAREA", name: "body", rows: 20, text: JSON.stringify(this.config.query) }, + { tag: "BUTTON", css: { cssFloat: "right" }, type: "button", children: [ { tag: "B", text: i18n.text("AnyRequest.Request") } ], onclick: this._request_handler }, + { tag: "BUTTON", type: "button", text: i18n.text("AnyRequest.ValidateJSON"), onclick: this._validateJson_handler }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "pretty" }, i18n.text("AnyRequest.Pretty") ] }, + { tag: "DIV", cls: "uiAnyRequest-jsonErr" } + ]} + }), + new app.ui.SidebarSection({ + title: i18n.text("AnyRequest.Transformer"), + help: "AnyRequest.TransformerHelp", + body: { tag: "DIV", children: [ + { tag: "CODE", text: "function(root, prev) {" }, + { tag: "BR" }, + { tag: "TEXTAREA", name: "transform", rows: 5, text: this.config.transform }, + { tag: "BR" }, + { tag: "CODE", text: "}" } + ] } + }), + new app.ui.SidebarSection({ + title: i18n.text("AnyRequest.RepeatRequest"), + body: { tag: "DIV", children: [ + i18n.text("AnyRequest.RepeatRequestSelect"), " ", + { tag: "SELECT", name: "cron", children: [ + { value: 0, text: "do not repeat" }, + { value: 1000, text: "second" }, + { value: 1000 * 2, text: "2 seconds" }, + { value: 1000 * 5, text: "5 seconds" }, + { value: 1000 * 20, text: "20 seconds" }, + { value: 1000 * 60, text: "minute" }, + { value: 1000 * 60 * 10, text: "10 minutes" }, + { value: 1000 * 60 * 60, text: "hour" } + ].map(function(op) { return $.extend({ tag: "OPTION"}, op); }) } + ] } + }), + new app.ui.SidebarSection({ + title: i18n.text("AnyRequest.DisplayOptions"), + help: "AnyRequest.DisplayOptionsHelp", + body: { tag: "DIV", children: [ + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", checked: true, name: "asJson" }, i18n.text("AnyRequest.AsJson") ] }, + { tag: "BR" }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asGraph" }, i18n.text("AnyRequest.AsGraph") ] }, + { tag: "BR" }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asTable" }, i18n.text("AnyRequest.AsTable") ] } + ] } + }) + ] }, + { tag: "DIV", cls: "uiAnyRequest-out" } + ] }; + }, + _historyItem_template: function(item) { + return { tag: "LI", cls: "booble", data: { item: item }, children: [ + { tag: "SPAN", text: item.path }, + " ", + { tag: "EM", text: item.query }, + " ", + { tag: "SPAN", text: item.transform } + ] }; + } + }); + +})( this.jQuery, this.app, this.i18n, this.Raphael ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css new file mode 100644 index 000000000..66e2110a7 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css @@ -0,0 +1,7 @@ +.uiBrowser-filter { + float: left; +} + +.uiBrowser-table { + margin-left: 365px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js new file mode 100644 index 000000000..329aa4d6c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js @@ -0,0 +1,58 @@ +(function( $, app, i18n ){ + + var ui = app.ns("ui"); + var data = app.ns("data"); + + ui.Browser = ui.Page.extend({ + defaults: { + cluster: null // (required) instanceof app.services.Cluster + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.query = new app.data.Query( { cluster: this.cluster } ); + this._refreshButton = new ui.Button({ + label: i18n.text("General.RefreshResults"), + onclick: function( btn ) { + this.query.query(); + }.bind(this) + }); + this.el = $(this._main_template()); + new data.MetaDataFactory({ + cluster: this.cluster, + onReady: function(metadata) { + this.metadata = metadata; + this.store = new data.QueryDataSourceInterface( { metadata: metadata, query: this.query } ); + this.queryFilter = new ui.QueryFilter({ metadata: metadata, query: this.query }); + this.queryFilter.attach(this.el.find("> .uiBrowser-filter") ); + this.resultTable = new ui.ResultTable( { + onHeaderClick: this._changeSort_handler, + store: this.store + } ); + this.resultTable.attach( this.el.find("> .uiBrowser-table") ); + this.updateResults(); + }.bind(this) + }); + }, + updateResults: function() { + this.query.query(); + }, + _changeSort_handler: function(table, wEv) { + this.query.setSort(wEv.column, wEv.dir === "desc"); + this.query.setPage(1); + this.query.query(); + }, + _main_template: function() { + return { tag: "DIV", cls: "uiBrowser", children: [ + new ui.Toolbar({ + label: i18n.text("Browser.Title"), + left: [ ], + right: [ this._refreshButton ] + }), + { tag: "DIV", cls: "uiBrowser-filter" }, + { tag: "DIV", cls: "uiBrowser-table" } + ] }; + } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css new file mode 100644 index 000000000..17123dcd7 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css @@ -0,0 +1,50 @@ +.uiButton { + padding: 0; + border: 0; + margin: 3px; + width: auto; + overflow: visible; + cursor: pointer; + background: transparent; +} + +.uiButton-content { + height: 20px; + border: 1px solid #668dc6; + border-radius: 2px; + background: #96c6eb; + background: -moz-linear-gradient(top, #96c6eb, #5296c7); + background: -webkit-linear-gradient(top, #96c6eb, #5296c7); + color: white; + font-weight: bold; +} + +.moz .uiButton-content { margin: 0 -2px; } + +.uiButton-label { + padding: 2px 6px; + white-space: nowrap; +} +.uiButton:hover .uiButton-content { + background: #2777ba; + background: -moz-linear-gradient(top, #6aaadf, #2777ba); + background: -webkit-linear-gradient(top, #6aaadf, #2777ba); +} +.uiButton.active .uiButton-content, +.uiButton:active .uiButton-content { + background: #2575b7; + background: -moz-linear-gradient(top, #2576b8, #2575b7); + background: -webkit-linear-gradient(top, #2576b8, #2575b7); +} +.uiButton.disabled .uiButton-content, +.uiButton.disabled:active .uiButton-content { + border-color: #c6c6c6; + color: #999999; + background: #ddd; + background: -moz-linear-gradient(top, #ddd, #ddd); + background: -webkit-linear-gradient(top, #ddd, #ddd); +} + +.uiButton.disabled { + cursor: default; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js new file mode 100644 index 000000000..57f83a083 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js @@ -0,0 +1,53 @@ +(function( $, joey, app ) { + + var ui = app.ns("ui"); + + ui.Button = ui.AbstractWidget.extend({ + defaults : { + label: "", // the label text + disabled: false, // create a disabled button + autoDisable: false // automatically disable the button when clicked + }, + + _baseCls: "uiButton", + + init: function(parent) { + this._super(); + this.el = $.joey(this.button_template()) + .bind("click", this.click_handler); + this.config.disabled && this.disable(); + this.attach( parent ); + }, + + click_handler: function(jEv) { + if(! this.disabled) { + this.fire("click", jEv, this); + this.config.autoDisable && this.disable(); + } + }, + + enable: function() { + this.el.removeClass("disabled"); + this.disabled = false; + return this; + }, + + disable: function(disable) { + if(disable === false) { + return this.enable(); + } + this.el.addClass("disabled"); + this.disabled = true; + return this; + }, + + button_template: function() { return ( + { tag: 'BUTTON', type: 'button', id: this.id(), cls: this._baseCls, children: [ + { tag: 'DIV', cls: 'uiButton-content', children: [ + { tag: 'DIV', cls: 'uiButton-label', text: this.config.label } + ] } + ] } + ); } + }); + +})( this.jQuery, this.joey, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js new file mode 100644 index 000000000..060e8f650 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js @@ -0,0 +1,9 @@ +$( function() { + + var ui = window.app.ns("ui"); + + window.builder = function() { + return new ui.Button({ label: "Default" }); + } ; + +}); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js new file mode 100644 index 000000000..d5f50127e --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js @@ -0,0 +1,25 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.CheckField = ui.AbstractField.extend({ + _main_template: function() { return ( + { tag: "DIV", id: this.id(), cls: "uiCheckField", children: [ + { tag: "INPUT", type: "checkbox", name: this.config.name, checked: !!this.config.value } + ] } + ); }, + validate: function() { + return this.val() || ( ! this.require ); + }, + val: function( val ) { + if( val === undefined ) { + return !!this.field.attr( "checked" ); + } else { + this.field.attr( "checked", !!val ); + } + } + }); + +})( this.app ); + + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js new file mode 100644 index 000000000..9a3b3caee --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js @@ -0,0 +1,45 @@ +$( function() { + + var ui = window.app.ns("ui"); + var ux = window.app.ns("ux"); + var ut = window.app.ns("ut"); + + window.builder = function() { + var form = new ux.FieldCollection({ + fields: [ + new ui.CheckField({ + label: "default", + name: "check_default" + }), + new ui.CheckField({ + label: "checked", + name: "check_true", + value: true + }), + new ui.CheckField({ + label: "unchecked", + name: "check_false", + value: false + }), + new ui.CheckField({ + label: "required", + name: "check_required", + require: true + }) + ] + }); + + return ( + { tag: "DIV", children: form.fields.map( function( field ) { + return { tag: "LABEL", cls: "uiPanelForm-field", children: [ + { tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] }, + field + ]}; + }).concat( new ui.Button({ + label: "Evaluate Form", + onclick: function() { console.log( "valid=" + form.validate(), form.getData() ); } + })) } + ); + }; + +}); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js new file mode 100644 index 000000000..26ddc6f63 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js @@ -0,0 +1,34 @@ +describe("app.ui.CheckField", function() { + + var CheckField = window.app.ui.CheckField; + + it("should have a label", function() { + expect( ( new CheckField({ label: "foo" }) ).label ).toBe( "foo" ); + }); + + it("should have a name", function() { + expect( ( new CheckField({ name: "foo" }) ).name ).toBe( "foo" ); + }); + + it("should have a val that is false when then field is not checked", function() { + expect( ( new CheckField({ name: "foo", value: false }) ).val() ).toBe( false ); + }); + + it("should have a val that is true when the field is checked", function() { + expect( ( new CheckField({ name: "foo", value: true }) ).val() ).toBe( true ); + }); + + it("should be valid if the field value is true", function() { + expect( ( new CheckField({ name: "foo", value: true }) ).validate() ).toBe( true ); + }); + + it("should be valid if require is false", function() { + expect( ( new CheckField({ name: "foo", require: false, value: true }) ).validate() ).toBe( true ); + expect( ( new CheckField({ name: "foo", require: false, value: false }) ).validate() ).toBe( true ); + }); + + it("should be invalid if require is true and value is false", function() { + expect( ( new CheckField({ name: "foo", require: true, value: false }) ).validate() ).toBe( false ); + }); + +}); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css new file mode 100644 index 000000000..e5b8fb457 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css @@ -0,0 +1,3 @@ +.uiClusterConnect-uri { + width: 280px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js new file mode 100644 index 000000000..63d097723 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js @@ -0,0 +1,43 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var services = app.ns("services"); + + ui.ClusterConnect = ui.AbstractWidget.extend({ + defaults: { + cluster: null + }, + init: function() { + this._super(); + this.prefs = services.Preferences.instance(); + this.cluster = this.config.cluster; + this.el = $.joey(this._main_template()); + this.cluster.get( "", this._node_handler ); + }, + + _node_handler: function(data) { + if(data) { + this.prefs.set("app-base_uri", this.cluster.base_uri); + } + }, + + _reconnect_handler: function() { + var base_uri = this.el.find(".uiClusterConnect-uri").val(); + $("body").empty().append(new app.App("body", { id: "es", base_uri: base_uri })); + }, + + _main_template: function() { + return { tag: "SPAN", cls: "uiClusterConnect", children: [ + { tag: "INPUT", type: "text", cls: "uiClusterConnect-uri", onkeyup: function( ev ) { + if(ev.which === 13) { + ev.preventDefault(); + this._reconnect_handler(); + } + }.bind(this), id: this.id("baseUri"), value: this.cluster.base_uri }, + { tag: "BUTTON", type: "button", text: i18n.text("Header.Connect"), onclick: this._reconnect_handler } + ]}; + } + }); + +})( this.jQuery, this.app, this.i18n ); + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js new file mode 100644 index 000000000..8b8be82d7 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js @@ -0,0 +1,38 @@ +describe("clusterConnect", function() { + + var ClusterConnect = window.app.ui.ClusterConnect; + + describe("when created", function() { + + var prefs, success_callback, cluster, clusterConnect; + + beforeEach( function() { + prefs = { + set: jasmine.createSpy("set") + }; + spyOn( window.app.services.Preferences, "instance" ).and.callFake( function() { + return prefs; + }); + cluster = { + get: jasmine.createSpy("get").and.callFake( function(uri, success) { + success_callback = success; + }) + }; + clusterConnect = new ClusterConnect({ + base_uri: "http://localhost:9200", + cluster: cluster + }); + }); + + it("should test the connection to the cluster", function() { + expect( cluster.get ).toHaveBeenCalled(); + }); + + it("should store successful connection in preferences", function() { + success_callback("fakePayload"); + expect( prefs.set ).toHaveBeenCalled(); + }); + + }); + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css new file mode 100644 index 000000000..e69de29bb diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js new file mode 100644 index 000000000..745ab42e3 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js @@ -0,0 +1,302 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var services = app.ns("services"); + + // ( master ) master = true, data = true + // ( coordinator ) master = true, data = false + // ( worker ) master = false, data = true; + // ( client ) master = false, data = false; + // http enabled ? + + function nodeSort_name(a, b) { + if (!(a.cluster && b.cluster)) { + return 0; + } + return a.cluster.name.toString().localeCompare( b.cluster.name.toString() ); + } + + function nodeSort_addr( a, b ) { + if (!(a.cluster && b.cluster)) { + return 0; + } + return a.cluster.transport_address.toString().localeCompare( b.cluster.transport_address.toString() ); + } + + function nodeSort_type( a, b ) { + if (!(a.cluster && b.cluster)) { + return 0; + } + if( a.master_node ) { + return -1; + } else if( b.master_node ) { + return 1; + } else if( a.data_node && !b.data_node ) { + return -1; + } else if( b.data_node && !a.data_node ) { + return 1; + } else { + return a.cluster.name.toString().localeCompare( b.cluster.name.toString() ); + } + } + + var NODE_SORT_TYPES = { + "Sort.ByName": nodeSort_name, + "Sort.ByAddress": nodeSort_addr, + "Sort.ByType": nodeSort_type + }; + + function nodeFilter_none( a ) { + return true; + } + + function nodeFilter_clients( a ) { + return (a.master_node || a.data_node ); + } + + + ui.ClusterOverview = ui.Page.extend({ + defaults: { + cluster: null // (reqired) an instanceof app.services.Cluster + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this.prefs = services.Preferences.instance(); + this._clusterState = this.config.clusterState; + this._clusterState.on("data", this.draw_handler ); + this._refreshButton = new ui.RefreshButton({ + onRefresh: this.refresh.bind(this), + onChange: function( btn ) { + if( btn.value === -1 ) { + this.draw_handler(); + } + }.bind( this ) + }); + var nodeSortPref = this.prefs.get("clusterOverview-nodeSort") || Object.keys(NODE_SORT_TYPES)[0]; + this._nodeSort = NODE_SORT_TYPES[ nodeSortPref ]; + this._nodeSortMenu = new ui.MenuButton({ + label: i18n.text( "Preference.SortCluster" ), + menu: new ui.SelectMenuPanel({ + value: nodeSortPref, + items: Object.keys( NODE_SORT_TYPES ).map( function( k ) { + return { text: i18n.text( k ), value: k }; + }), + onSelect: function( panel, event ) { + this._nodeSort = NODE_SORT_TYPES[ event.value ]; + this.prefs.set("clusterOverview-nodeSort", event.value ); + this.draw_handler(); + }.bind(this) + }) + }); + this._indicesSort = this.prefs.get( "clusterOverview-indicesSort") || "desc"; + this._indicesSortMenu = new ui.MenuButton({ + label: i18n.text( "Preference.SortIndices" ), + menu: new ui.SelectMenuPanel({ + value: this._indicesSort, + items: [ + { value: "desc", text: i18n.text( "SortIndices.Descending" ) }, + { value: "asc", text: i18n.text( "SortIndices.Ascending" ) } ], + onSelect: function( panel, event ) { + this._indicesSort = event.value; + this.prefs.set( "clusterOverview-indicesSort", this._indicesSort ); + this.draw_handler(); + }.bind(this) + }) + }); + this._aliasRenderer = this.prefs.get( "clusterOverview-aliasRender" ) || "full"; + this._aliasMenu = new ui.MenuButton({ + label: i18n.text( "Preference.ViewAliases" ), + menu: new ui.SelectMenuPanel({ + value: this._aliasRenderer, + items: [ + { value: "full", text: i18n.text( "ViewAliases.Grouped" ) }, + { value: "list", text: i18n.text( "ViewAliases.List" ) }, + { value: "none", text: i18n.text( "ViewAliases.None" ) } ], + onSelect: function( panel, event ) { + this._aliasRenderer = event.value; + this.prefs.set( "clusterOverview-aliasRender", this._aliasRenderer ); + this.draw_handler(); + }.bind(this) + }) + }); + this._indexFilter = new ui.TextField({ + value: this.prefs.get("clusterOverview-indexFilter"), + placeholder: i18n.text( "Overview.IndexFilter" ), + onchange: function( indexFilter ) { + this.prefs.set("clusterOverview-indexFilter", indexFilter.val() ); + this.draw_handler(); + }.bind(this) + }); + this.el = $(this._main_template()); + this.tablEl = this.el.find(".uiClusterOverview-table"); + this.refresh(); + }, + remove: function() { + this._clusterState.removeObserver( "data", this.draw_handler ); + }, + refresh: function() { + this._refreshButton.disable(); + this._clusterState.refresh(); + }, + draw_handler: function() { + var data = this._clusterState; + var indexFilter; + try { + var indexFilterRe = new RegExp( this._indexFilter.val() ); + indexFilter = function(s) { return indexFilterRe.test(s); }; + } catch(e) { + indexFilter = function() { return true; }; + } + var clusterState = data.clusterState; + var status = data.status; + var nodeStats = data.nodeStats; + var clusterNodes = data.clusterNodes; + var nodes = []; + var indices = []; + var cluster = {}; + var nodeIndices = {}; + var indexIndices = {}, indexIndicesIndex = 0; + function newNode(n) { + return { + name: n, + routings: [], + master_node: clusterState.master_node === n + }; + } + function newIndex(i) { + return { + name: i, + replicas: [] + }; + } + function getIndexForNode(n) { + return nodeIndices[n] = (n in nodeIndices) ? nodeIndices[n] : nodes.push(newNode(n)) - 1; + } + function getIndexForIndex(routings, i) { + var index = indexIndices[i] = (i in indexIndices) ? + (routings[indexIndices[i]] = routings[indexIndices[i]] || newIndex(i)) && indexIndices[i] + : ( ( routings[indexIndicesIndex] = newIndex(i) ) && indexIndicesIndex++ ); + indices[index] = i; + return index; + } + $.each(clusterNodes.nodes, function(name, node) { + getIndexForNode(name); + }); + + var indexNames = []; + $.each(clusterState.routing_table.indices, function(name, index){ + indexNames.push(name); + }); + indexNames.sort(); + if (this._indicesSort === "desc") indexNames.reverse(); + indexNames.filter( indexFilter ).forEach(function(name) { + var indexObject = clusterState.routing_table.indices[name]; + $.each(indexObject.shards, function(name, shard) { + shard.forEach(function(replica){ + var node = replica.node; + if(node === null) { node = "Unassigned"; } + var index = replica.index; + var shard = replica.shard; + var routings = nodes[getIndexForNode(node)].routings; + var indexIndex = getIndexForIndex(routings, index); + var replicas = routings[indexIndex].replicas; + if(node === "Unassigned" || !indexObject.shards[shard]) { + replicas.push({ replica: replica }); + } else { + replicas[shard] = { + replica: replica, + status: indexObject.shards[shard].filter(function(replica) { + return replica.node === node; + })[0] + }; + } + }); + }); + }); + indices = indices.map(function(index){ + return { + name: index, + state: "open", + metadata: clusterState.metadata.indices[index], + status: status.indices[index] + }; + }, this); + $.each(clusterState.metadata.indices, function(name, index) { + if(index.state === "close" && indexFilter( name )) { + indices.push({ + name: name, + state: "close", + metadata: index, + status: null + }); + } + }); + nodes.forEach(function(node) { + node.stats = nodeStats.nodes[node.name]; + var cluster = clusterNodes.nodes[node.name]; + node.cluster = cluster || { name: "" }; + node.data_node = !( cluster && cluster.attributes && cluster.attributes.data === "false" ); + for(var i = 0; i < indices.length; i++) { + node.routings[i] = node.routings[i] || { name: indices[i].name, replicas: [] }; + node.routings[i].max_number_of_shards = indices[i].metadata.settings["index.number_of_shards"]; + node.routings[i].open = indices[i].state === "open"; + } + }); + var aliasesIndex = {}; + var aliases = []; + var indexClone = indices.map(function() { return false; }); + $.each(clusterState.metadata.indices, function(name, index) { + index.aliases.forEach(function(alias) { + var aliasIndex = aliasesIndex[alias] = (alias in aliasesIndex) ? aliasesIndex[alias] : aliases.push( { name: alias, max: -1, min: 999, indices: [].concat(indexClone) }) - 1; + var indexIndex = indexIndices[name]; + var aliasRow = aliases[aliasIndex]; + aliasRow.min = Math.min(aliasRow.min, indexIndex); + aliasRow.max = Math.max(aliasRow.max, indexIndex); + aliasRow.indices[indexIndex] = indices[indexIndex]; + }); + }); + cluster.aliases = aliases; + cluster.nodes = nodes + .filter( nodeFilter_none ) + .sort( this._nodeSort ); + indices.unshift({ name: null }); + this._drawNodesView( cluster, indices ); + this._refreshButton.enable(); + }, + _drawNodesView: function( cluster, indices ) { + this._nodesView && this._nodesView.remove(); + this._nodesView = new ui.NodesView({ + onRedraw: function() { + this.refresh(); + }.bind(this), + interactive: ( this._refreshButton.value === -1 ), + aliasRenderer: this._aliasRenderer, + cluster: this.cluster, + data: { + cluster: cluster, + indices: indices + } + }); + this._nodesView.attach( this.tablEl ); + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiClusterOverview", children: [ + new ui.Toolbar({ + label: i18n.text("Overview.PageTitle"), + left: [ + this._nodeSortMenu, + this._indicesSortMenu, + this._aliasMenu, + this._indexFilter + ], + right: [ + this._refreshButton + ] + }), + { tag: "DIV", cls: "uiClusterOverview-table" } + ] }; + } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js new file mode 100644 index 000000000..2daaf5cc6 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js @@ -0,0 +1,84 @@ +( function( $, app, joey ) { + + var ui = app.ns("ui"); + + var CELL_SEPARATOR = ","; + var CELL_QUOTE = '"'; + var LINE_SEPARATOR = "\r\n"; + + ui.CSVTable = ui.AbstractWidget.extend({ + defaults: { + results: null + }, + _baseCls: "uiCSVTable", + init: function( parent ) { + this._super(); + var results = this.config.results.hits.hits; + var columns = this._parseResults( results ); + this._downloadButton = new ui.Button({ + label: "Generate Download Link", + onclick: this._downloadLinkGenerator_handler + }); + this._downloadLink = $.joey( { tag: "A", text: "download", }); + this._downloadLink.hide(); + this._csvText = this._csv_template( columns, results ); + this.el = $.joey( this._main_template() ); + this.attach( parent ); + }, + _downloadLinkGenerator_handler: function() { + var csvData = new Blob( [ this._csvText ], { type: 'text/csv' }); + var csvURL = URL.createObjectURL( csvData ); + this._downloadLink.attr( "href", csvURL ); + this._downloadLink.show(); + }, + _parseResults: function( results ) { + var columnPaths = {}; + (function parse( path, obj ) { + if( obj instanceof Array ) { + for( var i = 0; i < obj.length; i++ ) { + parse( path, obj[i] ); + } + } else if( typeof obj === "object" ) { + for( var prop in obj ) { + parse( path + "." + prop, obj[ prop ] ); + } + } else { + columnPaths[ path ] = true; + } + })( "root", results ); + var columns = []; + for( var column in columnPaths ) { + columns.push( column.split(".").slice(1) ); + } + return columns; + }, + _main_template: function() { return ( + { tag: "DIV", cls: this._baseCls, id: this.id(), children: [ + this._downloadButton, + this._downloadLink, + { tag: "PRE", text: this._csvText } + ] } + ); }, + _csv_template: function( columns, results ) { + return this._header_template( columns ) + LINE_SEPARATOR + this._results_template( columns, results ); + }, + _header_template: function( columns ) { + return columns.map( function( column ) { + return column.join("."); + }).join( CELL_SEPARATOR ); + }, + _results_template: function( columns, results ) { + return results.map( function( result ) { + return columns.map( function( column ) { + var l = 0, + ptr = result; + while( l !== column.length && ptr != null ) { + ptr = ptr[ column[ l++ ] ]; + } + return ( ptr == null ) ? "" : ( CELL_QUOTE + ptr.toString().replace(/"/g, '""') + CELL_QUOTE ); + }).join( CELL_SEPARATOR ); + }).join( LINE_SEPARATOR ); + } + }); + +})( this.jQuery, this.app, this.joey ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js new file mode 100644 index 000000000..7c750b604 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js @@ -0,0 +1,104 @@ +(function( app, i18n, raphael ) { + + var ui = app.ns("ui"); + + ui.DateHistogram = ui.AbstractWidget.extend({ + defaults: { + printEl: null, // (optional) if supplied, clicking on elements in the histogram changes the query + cluster: null, // (required) + query: null, // (required) the current query + spec: null // (required) // date field spec + }, + init: function() { + this._super(); + this.el = $(this._main_template()); + this.query = this.config.query.clone(); + // check if the index/types have changed and rebuild the histogram + this.config.query.on("results", function(query) { + if(this.queryChanged) { + this.buildHistogram(query); + this.queryChanged = false; + } + }.bind(this)); + this.config.query.on("setIndex", function(query, params) { + this.query.setIndex(params.index, params.add); + this.queryChanged = true; + }.bind(this)); + this.config.query.on("setType", function(query, params) { + this.query.setType(params.type, params.add); + this.queryChanged = true; + }.bind(this)); + this.query.search.size = 0; + this.query.on("results", this._stat_handler); + this.query.on("results", this._aggs_handler); + this.buildHistogram(); + }, + buildHistogram: function(query) { + this.statAggs = this.query.addAggs({ + stats: { field: this.config.spec.field_name } + }); + this.query.query(); + this.query.removeAggs(this.statAggs); + }, + _stat_handler: function(query, results) { + if(! results.aggregations[this.statAggs]) { return; } + this.stats = results.aggregations[this.statAggs]; + // here we are calculating the approximate range that will give us less than 121 columns + var rangeNames = [ "year", "year", "month", "day", "hour", "minute" ]; + var rangeFactors = [100000, 12, 30, 24, 60, 60000 ]; + this.intervalRange = 1; + var range = this.stats.max - this.stats.min; + do { + this.intervalName = rangeNames.pop(); + var factor = rangeFactors.pop(); + this.intervalRange *= factor; + range = range / factor; + } while(range > 70); + this.dateAggs = this.query.addAggs({ + date_histogram : { + field: this.config.spec.field_name, + interval: this.intervalName + } + }); + this.query.query(); + this.query.removeAggs(this.dateAggs); + }, + _aggs_handler: function(query, results) { + if(! results.aggregations[this.dateAggs]) { return; } + var buckets = [], range = this.intervalRange; + var min = Math.floor(this.stats.min / range) * range; + var prec = [ "year", "month", "day", "hour", "minute", "second" ].indexOf(this.intervalName); + results.aggregations[this.dateAggs].buckets.forEach(function(entry) { + buckets[parseInt((entry.key - min) / range , 10)] = entry.doc_count; + }, this); + for(var i = 0; i < buckets.length; i++) { + buckets[i] = buckets[i] || 0; + } + this.el.removeClass("loading"); + var el = this.el.empty(); + var w = el.width(), h = el.height(); + var r = raphael(el[0], w, h ); + var printEl = this.config.printEl; + query = this.config.query; + r.g.barchart(0, 0, w, h, [buckets], { gutter: "0", vgutter: 0 }).hover( + function() { + this.flag = r.g.popup(this.bar.x, h - 5, this.value || "0").insertBefore(this); + }, function() { + this.flag.animate({opacity: 0}, 200, ">", function () {this.remove();}); + } + ).click(function() { + if(printEl) { + printEl.val(window.dateRangeParser.print(min + this.bar.index * range, prec)); + printEl.trigger("keyup"); + query.query(); + } + }); + }, + _main_template: function() { return ( + { tag: "DIV", cls: "uiDateHistogram loading", css: { height: "50px" }, children: [ + i18n.text("General.LoadingAggs") + ] } + ); } + }); + +})( this.app, this.i18n, this.Raphael ); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js new file mode 100644 index 000000000..80176fda8 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js @@ -0,0 +1,22 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.DialogPanel = ui.DraggablePanel.extend({ + _commit_handler: function(jEv) { + this.fire("commit", this, { jEv: jEv }); + }, + _main_template: function() { + var t = this._super(); + t.children.push(this._actionsBar_template()); + return t; + }, + _actionsBar_template: function() { + return { tag: "DIV", cls: "pull-right", children: [ + new app.ui.Button({ label: "Cancel", onclick: this._close_handler }), + new app.ui.Button({ label: "OK", onclick: this._commit_handler }) + ]}; + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js new file mode 100644 index 000000000..ee0a98a14 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js @@ -0,0 +1,42 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.DraggablePanel = ui.AbstractPanel.extend({ + defaults: { + // title: "" // (required) text for the panel title + }, + + _baseCls: "uiPanel", + + init: function() { + this._super(); + this.body = $(this._body_template()); + this.title = $(this._title_template()); + this.el = $.joey( this._main_template() ); + this.el.css( { width: this.config.width } ); + this.dd = new app.ux.DragDrop({ + pickupSelector: this.el.find(".uiPanel-titleBar"), + dragObj: this.el + }); + // open the panel if set in configuration + this.config.open && this.open(); + }, + + setBody: function(body) { + this.body.empty().append(body); + }, + _body_template: function() { return { tag: "DIV", cls: "uiPanel-body", css: { height: this.config.height + (this.config.height === 'auto' ? "" : "px" ) }, children: [ this.config.body ] }; }, + _title_template: function() { return { tag: "SPAN", cls: "uiPanel-title", text: this.config.title }; }, + _main_template: function() { return ( + { tag: "DIV", id: this.id(), cls: this._baseCls, children: [ + { tag: "DIV", cls: "uiPanel-titleBar", children: [ + { tag: "DIV", cls: "uiPanel-close", onclick: this._close_handler, text: "x" }, + this.title + ]}, + this.body + ] } + ); } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css new file mode 100644 index 000000000..d9acccf3b --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css @@ -0,0 +1,9 @@ +.uiFilterBrowser-row * { + margin-right: 0.4em; +} + +.uiFilterBrowser-row BUTTON { + height: 22px; + position: relative; + top: 1px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js new file mode 100644 index 000000000..ca03154d3 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js @@ -0,0 +1,205 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var data = app.ns("data"); + var ut = app.ns("ut"); + + ui.FilterBrowser = ui.AbstractWidget.extend({ + defaults: { + cluster: null, // (required) instanceof app.services.Cluster + index: "" // (required) name of the index to query + }, + + init: function(parent) { + this._super(); + this._cluster = this.config.cluster; + this.el = $(this._main_template()); + this.filtersEl = this.el.find(".uiFilterBrowser-filters"); + this.attach( parent ); + new data.MetaDataFactory({ cluster: this._cluster, onReady: function(metadata, eventData) { + this.metadata = metadata; + this._createFilters_handler(eventData.originalData.metadata.indices); + }.bind(this) }); + }, + + _createFilters_handler: function(data) { + var filters = []; + function scan_properties(path, obj) { + if (obj.properties) { + for (var prop in obj.properties) { + scan_properties(path.concat(prop), obj.properties[prop]); + } + } else { + // handle multi_field + if (obj.fields) { + for (var subField in obj.fields) { + filters.push({ path: (path[path.length - 1] !== subField) ? path.concat(subField) : path, type: obj.fields[subField].type, meta: obj.fields[subField] }); + } + } else { + filters.push({ path: path, type: obj.type, meta: obj }); + } + } + } + for(var type in data[this.config.index].mappings) { + scan_properties([type], data[this.config.index].mappings[type]); + } + + filters.sort( function(a, b) { + var x = a.path.join("."); + var y = b.path.join("."); + return (x < y) ? -1 : (x > y) ? 1 : 0; + }); + + this.filters = [ + { path: ["match_all"], type: "match_all", meta: {} }, + { path: ["_all"], type: "_all", meta: {}} + ].concat(filters); + + this._addFilterRow_handler(); + }, + + _addFilterRow_handler: function() { + this.filtersEl.append(this._filter_template()); + }, + + _removeFilterRow_handler: function(jEv) { + $(jEv.target).closest("DIV.uiFilterBrowser-row").remove(); + if(this.filtersEl.children().length === 0) { + this._addFilterRow_handler(); + } + }, + + _search_handler: function() { + var search = new data.BoolQuery(); + search.setSize( this.el.find(".uiFilterBrowser-outputSize").val() ) + this.fire("startingSearch"); + this.filtersEl.find(".uiFilterBrowser-row").each(function(i, row) { + row = $(row); + var bool = row.find(".bool").val(); + var field = row.find(".field").val(); + var op = row.find(".op").val(); + var value = {}; + if(field === "match_all") { + op = "match_all"; + } else if(op === "range") { + var lowqual = row.find(".lowqual").val(), + highqual = row.find(".highqual").val(); + if(lowqual.length) { + value[row.find(".lowop").val()] = lowqual; + } + if(highqual.length) { + value[row.find(".highop").val()] = highqual; + } + } else if(op === "fuzzy") { + var qual = row.find(".qual").val(), + fuzzyqual = row.find(".fuzzyqual").val(); + if(qual.length) { + value["value"] = qual; + } + if(fuzzyqual.length) { + value[row.find(".fuzzyop").val()] = fuzzyqual; + } + } else { + value = row.find(".qual").val(); + } + search.addClause(value, field, op, bool); + }); + if(this.el.find(".uiFilterBrowser-showSrc").attr("checked")) { + this.fire("searchSource", search.search); + } + this._cluster.post( this.config.index + "/_search", search.getData(), this._results_handler ); + }, + + _results_handler: function( data ) { + var type = this.el.find(".uiFilterBrowser-outputFormat").val(); + this.fire("results", this, { type: type, data: data, metadata: this.metadata }); + }, + + _changeQueryField_handler: function(jEv) { + var select = $(jEv.target); + var spec = select.children(":selected").data("spec"); + select.siblings().remove(".op,.qual,.range,.fuzzy"); + var ops = []; + if(spec.type === 'match_all') { + } else if(spec.type === '_all') { + ops = ["query_string"]; + } else if(spec.type === 'string' || spec.type === 'text' || spec.type === 'keyword') { + ops = ["term", "wildcard", "prefix", "fuzzy", "range", "query_string", "text", "missing"]; + } else if(spec.type === 'long' || spec.type === 'integer' || spec.type === 'float' || + spec.type === 'byte' || spec.type === 'short' || spec.type === 'double') { + ops = ["term", "range", "fuzzy", "query_string", "missing"]; + } else if(spec.type === 'date') { + ops = ["term", "range", "fuzzy", "query_string", "missing"]; + } else if(spec.type === 'geo_point') { + ops = ["missing"]; + } else if(spec.type === 'ip') { + ops = ["term", "range", "fuzzy", "query_string", "missing"]; + } else if(spec.type === 'boolean') { + ops = ["term"] + } + select.after({ tag: "SELECT", cls: "op", onchange: this._changeQueryOp_handler, children: ops.map(ut.option_template) }); + select.next().change(); + }, + + _changeQueryOp_handler: function(jEv) { + var op = $(jEv.target), opv = op.val(); + op.siblings().remove(".qual,.range,.fuzzy"); + if(opv === 'term' || opv === 'wildcard' || opv === 'prefix' || opv === "query_string" || opv === 'text') { + op.after({ tag: "INPUT", cls: "qual", type: "text" }); + } else if(opv === 'range') { + op.after(this._range_template()); + } else if(opv === 'fuzzy') { + op.after(this._fuzzy_template()); + } + }, + + _main_template: function() { + return { tag: "DIV", children: [ + { tag: "DIV", cls: "uiFilterBrowser-filters" }, + { tag: "BUTTON", type: "button", text: i18n.text("General.Search"), onclick: this._search_handler }, + { tag: "LABEL", children: + i18n.complex("FilterBrowser.OutputType", { tag: "SELECT", cls: "uiFilterBrowser-outputFormat", children: [ + { text: i18n.text("Output.Table"), value: "table" }, + { text: i18n.text("Output.JSON"), value: "json" }, + { text: i18n.text("Output.CSV"), value: "csv" } + ].map(function( o ) { return $.extend({ tag: "OPTION" }, o ); } ) } ) + }, + { tag: "LABEL", children: + i18n.complex("FilterBrowser.OutputSize", { tag: "SELECT", cls: "uiFilterBrowser-outputSize", + children: [ "10", "50", "250", "1000", "5000", "25000" ].map( ut.option_template ) + } ) + }, + { tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", cls: "uiFilterBrowser-showSrc" }, i18n.text("Output.ShowSource") ] } + ]}; + }, + + _filter_template: function() { + return { tag: "DIV", cls: "uiFilterBrowser-row", children: [ + { tag: "SELECT", cls: "bool", children: ["must", "must_not", "should"].map(ut.option_template) }, + { tag: "SELECT", cls: "field", onchange: this._changeQueryField_handler, children: this.filters.map(function(f) { + return { tag: "OPTION", data: { spec: f }, value: f.path.join("."), text: f.path.join(".") }; + })}, + { tag: "BUTTON", type: "button", text: "+", onclick: this._addFilterRow_handler }, + { tag: "BUTTON", type: "button", text: "-", onclick: this._removeFilterRow_handler } + ]}; + }, + + _range_template: function() { + return { tag: "SPAN", cls: "range", children: [ + { tag: "SELECT", cls: "lowop", children: ["gt", "gte"].map(ut.option_template) }, + { tag: "INPUT", type: "text", cls: "lowqual" }, + { tag: "SELECT", cls: "highop", children: ["lt", "lte"].map(ut.option_template) }, + { tag: "INPUT", type: "text", cls: "highqual" } + ]}; + }, + + _fuzzy_template: function() { + return { tag: "SPAN", cls: "fuzzy", children: [ + { tag: "INPUT", cls: "qual", type: "text" }, + { tag: "SELECT", cls: "fuzzyop", children: ["max_expansions", "min_similarity"].map(ut.option_template) }, + { tag: "INPUT", cls: "fuzzyqual", type: "text" } + ]}; + } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css new file mode 100644 index 000000000..b61badf12 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css @@ -0,0 +1,10 @@ +.uiHeader { + padding: 3px 10px; +} + +.uiHeader-name, .uiHeader-status { + font-size: 1.2em; + font-weight: bold; + padding: 0 10px; +} + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js new file mode 100644 index 000000000..a6e1155ec --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js @@ -0,0 +1,73 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.Header = ui.AbstractWidget.extend({ + defaults: { + cluster: null, + clusterState: null + }, + _baseCls: "uiHeader", + init: function() { + this._clusterConnect = new ui.ClusterConnect({ + cluster: this.config.cluster + }); + var quicks = [ + { text: i18n.text("Nav.Info"), path: "" }, + { text: i18n.text("Nav.Status"), path: "_stats" }, + { text: i18n.text("Nav.NodeStats"), path: "_nodes/stats" }, + { text: i18n.text("Nav.ClusterNodes"), path: "_nodes" }, + { text: i18n.text("Nav.Plugins"), path: "_nodes/plugins" }, + { text: i18n.text("Nav.ClusterState"), path: "_cluster/state" }, + { text: i18n.text("Nav.ClusterHealth"), path: "_cluster/health" }, + { text: i18n.text("Nav.Templates"), path: "_template" } + ]; + var cluster = this.config.cluster; + var quickPanels = {}; + var menuItems = quicks.map( function( item ) { + return { text: item.text, onclick: function() { + cluster.get( item.path, function( data ) { + quickPanels[ item.path ] && quickPanels[ item.path ].el && quickPanels[ item.path ].remove(); + quickPanels[ item.path ] = new ui.JsonPanel({ + title: item.text, + json: data + }); + } ); + } }; + }, this ); + this._quickMenu = new ui.MenuButton({ + label: i18n.text("NodeInfoMenu.Title"), + menu: new ui.MenuPanel({ + items: menuItems + }) + }); + this.el = $.joey( this._main_template() ); + this.nameEl = this.el.find(".uiHeader-name"); + this.statEl = this.el.find(".uiHeader-status"); + this._clusterState = this.config.clusterState; + this._clusterState.on("data", function( state ) { + var shards = state.status._shards; + var colour = state.clusterHealth.status; + var name = state.clusterState.cluster_name; + this.nameEl.text( name ); + this.statEl + .text( i18n.text("Header.ClusterHealth", colour, shards.successful, shards.total ) ) + .css( "background", colour ); + }.bind(this)); + this.statEl.text( i18n.text("Header.ClusterNotConnected") ).css("background", "grey"); + this._clusterState.refresh(); + }, + _main_template: function() { return ( + { tag: "DIV", cls: this._baseCls, children: [ + this._clusterConnect, + { tag: "SPAN", cls: "uiHeader-name" }, + { tag: "SPAN", cls: "uiHeader-status" }, + { tag: "H1", text: i18n.text("General.Elasticsearch") }, + { tag: "SPAN", cls: "pull-right", children: [ + this._quickMenu + ] } + ] } + ); } + } ); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js new file mode 100644 index 000000000..a76be2dbb --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js @@ -0,0 +1,21 @@ +(function( app ){ + + var ui = app.ns("ui"); + + ui.HelpPanel = ui.InfoPanel.extend({ + defaults: { + ref: "", + open: true, + autoRemove: true, + modal: false, + width: 500, + height: 450, + title: i18n.text("General.Help") + }, + init: function() { + this._super(); + this.body.append(i18n.text(this.config.ref)); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js new file mode 100644 index 000000000..3eab4f5b4 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js @@ -0,0 +1,115 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.IndexOverview = ui.Page.extend({ + defaults: { + cluster: null + }, + init: function() { + this._super(); + this.cluster = this.config.cluster; + this._clusterState = this.config.clusterState; + this._clusterState.on("data", this._refresh_handler ); + this.el = $(this._main_template()); + this._refresh_handler(); + }, + remove: function() { + this._clusterState.removeObserver( "data", this._refresh_handler ); + }, + _refresh_handler: function() { + var state = this._clusterState; + var view = { + indices: acx.eachMap( state.status.indices, function( name, index ) { + return { + name: name, + state: index + }; + }).sort( function( a, b ) { + return a.name < b.name ? -1 : 1; + }) + }; + this._indexViewEl && this._indexViewEl.remove(); + this._indexViewEl = $( this._indexTable_template( view ) ); + this.el.find(".uiIndexOverview-table").append( this._indexViewEl ); + }, + _newIndex_handler: function() { + var fields = new app.ux.FieldCollection({ + fields: [ + new ui.TextField({ label: i18n.text("ClusterOverView.IndexName"), name: "_name", require: true }), + new ui.TextField({ + label: i18n.text("ClusterOverview.NumShards"), + name: "number_of_shards", + value: "5", + require: function( val ) { return parseInt( val, 10 ) >= 1; } + }), + new ui.TextField({ + label: i18n.text("ClusterOverview.NumReplicas"), + name: "number_of_replicas", + value: "1", + require: function( val ) { return parseInt( val, 10 ) >= 0; } + }) + ] + }); + var dialog = new ui.DialogPanel({ + title: i18n.text("ClusterOverview.NewIndex"), + body: new ui.PanelForm({ fields: fields }), + onCommit: function(panel, args) { + if(fields.validate()) { + var data = fields.getData(); + var name = data["_name"]; + delete data["_name"]; + this.config.cluster.put( encodeURIComponent( name ), JSON.stringify({ settings: { index: data } }), function(d) { + dialog.close(); + alert(JSON.stringify(d)); + this._clusterState.refresh(); + }.bind(this) ); + } + }.bind(this) + }).open(); + }, + _indexTable_template: function( view ) { return ( + { tag: "TABLE", cls: "table", children: [ + { tag: "THEAD", children: [ + { tag: "TR", children: [ + { tag: "TH" }, + { tag: "TH", children: [ + { tag: "H3", text: "Size" } + ] }, + { tag: "TH", children: [ + { tag: "H3", text: "Docs" } + ] } + ] } + ] }, + { tag: "TBODY", cls: "striped", children: view.indices.map( this._index_template, this ) } + ] } + ); }, + + _index_template: function( index ) { return ( + { tag: "TR", children: [ + { tag: "TD", children: [ + { tag: "H3", text: index.name } + ] }, + { tag: "TD", text: ut.byteSize_template( index.state.primaries.store.size_in_bytes ) + "/" + ut.byteSize_template( index.state.total.store.size_in_bytes ) }, + { tag: "TD", text: ut.count_template( index.state.primaries.docs.count ) } + ] } + ); }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiIndexOverview", children: [ + new ui.Toolbar({ + label: i18n.text("IndexOverview.PageTitle"), + left: [ + new ui.Button({ + label: i18n.text("ClusterOverview.NewIndex"), + onclick: this._newIndex_handler + }), + ] + }), + { tag: "DIV", cls: "uiIndexOverview-table", children: this._indexViewEl } + ] }; + } + + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js new file mode 100644 index 000000000..7f51d5f74 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js @@ -0,0 +1,45 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.IndexSelector = ui.AbstractWidget.extend({ + init: function(parent) { + this._super(); + this.el = $(this._main_template()); + this.attach( parent ); + this.cluster = this.config.cluster; + this.update(); + }, + update: function() { + this.cluster.get( "_stats", this._update_handler ); + }, + + _update_handler: function(data) { + var options = []; + var index_names = Object.keys(data.indices).sort(); + for(var i=0; i < index_names.length; i++) { + name = index_names[i]; + options.push(this._option_template(name, data.indices[name])); + } + this.el.find(".uiIndexSelector-select").empty().append(this._select_template(options)); + this._indexChanged_handler(); + }, + + _main_template: function() { + return { tag: "DIV", cls: "uiIndexSelector", children: i18n.complex( "IndexSelector.SearchIndexForDocs", { tag: "SPAN", cls: "uiIndexSelector-select" } ) }; + }, + + _indexChanged_handler: function() { + this.fire("indexChanged", this.el.find("SELECT").val()); + }, + + _select_template: function(options) { + return { tag: "SELECT", children: options, onChange: this._indexChanged_handler }; + }, + + _option_template: function(name, index) { + return { tag: "OPTION", value: name, text: i18n.text("IndexSelector.NameWithDocs", name, index.primaries.docs.count ) }; + } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css new file mode 100644 index 000000000..7d4a86c79 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css @@ -0,0 +1,38 @@ + +.uiInfoPanel { + background: rgba(0, 0, 0, 0.75); + color: white; + border-radius: 8px; + padding: 1px; +} +.uiInfoPanel .uiPanel-titleBar { + background: rgba(74, 74, 74, 0.75); + background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75)); + background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75)); + border-radius: 8px 8px 0 0; + padding: 1px 0 2px 0; + border-bottom: 0; +} +.uiInfoPanel .uiPanel-close { + border-radius: 6px; + height: 13px; + width: 13px; + background: #ccc; + left: 3px; + top: 1px; + color: #333; + text-shadow: #222 0 0 1px; + line-height: 11px; + border: 0; + padding: 0; +} +.uiInfoPanel .uiPanel-close:hover { + background: #eee; +} + +.uiInfoPanel .uiPanel-body { + background: transparent; + padding: 20px; + border-radius: 0 0 8px 8px; + border: 1px solid #222; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js new file mode 100644 index 000000000..db2440074 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js @@ -0,0 +1,9 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.InfoPanel = ui.DraggablePanel.extend({ + _baseCls: "uiPanel uiInfoPanel" + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css new file mode 100644 index 000000000..20aff8817 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css @@ -0,0 +1,4 @@ +.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; } +.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; } +.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; } +.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; } diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js new file mode 100644 index 000000000..4e83baade --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js @@ -0,0 +1,24 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.JsonPanel = ui.InfoPanel.extend({ + defaults: { + json: null, // (required) + modal: false, + open: true, + autoRemove: true, + height: 500, + width: 600 + }, + + _baseCls: "uiPanel uiInfoPanel uiJsonPanel", + + _body_template: function() { + var body = this._super(); + body.children = [ new ui.JsonPretty({ obj: this.config.json }) ]; + return body; + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css new file mode 100644 index 000000000..7a1a0ba62 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css @@ -0,0 +1,22 @@ +DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; } +UL.uiJsonPretty-object, +UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; } +UL.uiJsonPretty-object LI, +UL.uiJsonPretty-array LI { padding: 0; margin: 0; } +.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; } +.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; } +.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before, +.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; } +SPAN.uiJsonPretty-string, +SPAN.uiJsonPretty-string A { color: green; } +SPAN.uiJsonPretty-string A { text-decoration: underline;} +SPAN.uiJsonPretty-number { color: blue; } +SPAN.uiJsonPretty-null { color: red; } +SPAN.uiJsonPretty-boolean { color: purple; } +.expando > .uiJsonPretty-name { cursor: pointer; } +.expando > .uiJsonPretty-name:hover { text-decoration: underline; } +.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; } +.uiJsonPretty-minimised > UL { opacity: 0.6; } +.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; } +.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; } + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js new file mode 100644 index 000000000..76820bb39 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js @@ -0,0 +1,89 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.JsonPretty = ui.AbstractWidget.extend({ + defaults: { + obj: null + }, + init: function(parent) { + this._super(); + this.el = $(this._main_template()); + this.attach(parent); + this.el.click(this._click_handler); + }, + + _click_handler: function(jEv) { + var t = $(jEv.target).closest(".uiJsonPretty-name").closest("LI"); + if(t.length === 0 || t.parents(".uiJsonPretty-minimised").length > 0) { return; } + t.toggleClass("uiJsonPretty-minimised"); + jEv.stopPropagation(); + }, + + _main_template: function() { + try { + return { tag: "DIV", cls: "uiJsonPretty", children: this.pretty.parse(this.config.obj) }; + } catch (error) { + throw "JsonPretty error: " + error.message; + } + }, + + pretty: { // from https://github.com/RyanAmos/Pretty-JSON/blob/master/pretty_json.js + "expando" : function(value) { + return (value && (/array|object/i).test(value.constructor.name)) ? "expando" : ""; + }, + "parse": function (member) { + return this[(member == null) ? 'null' : member.constructor.name.toLowerCase()](member); + }, + "null": function (value) { + return this['value']('null', 'null'); + }, + "array": function (value) { + var results = []; + var lastItem = value.length - 1; + value.forEach(function( v, i ) { + results.push({ tag: "LI", cls: this.expando(v), children: [ this['parse'](v) ] }); + if( i !== lastItem ) { + results.push(","); + } + }, this); + return [ "[ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-array", children: results } : null), "]" ]; + }, + "object": function (value) { + var results = []; + var keys = Object.keys( value ); + var lastItem = keys.length - 1; + keys.forEach( function( key, i ) { + var children = [ this['value']( 'name', '"' + key + '"' ), ": ", this['parse']( value[ key ]) ]; + if( i !== lastItem ) { + children.push(","); + } + results.push( { tag: "LI", cls: this.expando( value[ key ] ), children: children } ); + }, this); + return [ "{ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-object", children: results } : null ), "}" ]; + }, + "number": function (value) { + return this['value']('number', value.toString()); + }, + "string": function (value) { + if (/^(http|https|file):\/\/[^\s]+$/.test(value)) { + return this['link']( value ); + } else { + return this['value']('string', '"' + value.toString() + '"'); + } + }, + "boolean": function (value) { + return this['value']('boolean', value.toString()); + }, + "link": function( value ) { + return this['value']("string", { tag: "A", href: value, target: "_blank", text: '"' + value + '"' } ); + }, + "value": function (type, value) { + if (/^(http|https|file):\/\/[^\s]+$/.test(value)) { + } + return { tag: "SPAN", cls: "uiJsonPretty-" + type, text: value }; + } + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css new file mode 100644 index 000000000..21c36bc59 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css @@ -0,0 +1,11 @@ +.uiMenuButton { + display: inline-block; +} + +.uiMenuButton .uiButton-label { + background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7'); + background-position: right 50%; + background-repeat: no-repeat; + padding-right: 17px; + text-align: left; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js new file mode 100644 index 000000000..aa7fc8a84 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js @@ -0,0 +1,22 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.MenuButton = app.ui.Button.extend({ + defaults: { + menu: null + }, + _baseCls: "uiButton uiMenuButton", + init: function(parent) { + this._super(parent); + this.menu = this.config.menu; + this.on("click", this.openMenu_handler); + this.menu.on("open", function() { this.el.addClass("active"); }.bind(this)); + this.menu.on("close", function() { this.el.removeClass("active"); }.bind(this)); + }, + openMenu_handler: function(jEv) { + this.menu && this.menu.open(jEv); + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css new file mode 100644 index 000000000..8236a856f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css @@ -0,0 +1,30 @@ +.uiMenuPanel { + border: 1px solid #668dc6; + position: absolute; + background: #96c6eb; + color: white; +} + +.uiMenuPanel LI { + list-style: none; + border-bottom: 1px solid #668dc6; +} + +.uiMenuPanel LI:hover { + background: #2575b7; +} + +.uiMenuPanel LI:last-child { + border-bottom: 0; +} + +.uiMenuPanel-label { + white-space: nowrap; + padding: 2px 10px 2px 10px; + cursor: pointer; +} + +.disabled .uiMenuPanel-label { + cursor: auto; + color: #888; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js new file mode 100644 index 000000000..631ea5b4c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js @@ -0,0 +1,43 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.MenuPanel = ui.AbstractPanel.extend({ + defaults: { + items: [], // (required) an array of menu items + modal: false + }, + _baseCls: "uiMenuPanel", + init: function() { + this._super(); + this.el = $(this._main_template()); + }, + open: function(jEv) { + this._super(jEv); + var cx = this; setTimeout(function() { $(document).bind("click", cx._close_handler); }, 50); + }, + _getItems: function() { + return this.config.items; + }, + _close_handler: function(jEv) { + this._super(jEv); + $(document).unbind("click", this._close_handler); + }, + _main_template: function() { + return { tag: "DIV", cls: this._baseCls, children: this._getItems().map(this._menuItem_template, this) }; + }, + _menuItem_template: function(item) { + var dx = item.disabled ? { onclick: function() {} } : {}; + return { tag: "LI", cls: "uiMenuPanel-item" + (item.disabled ? " disabled" : "") + (item.selected ? " selected" : ""), children: [ $.extend({ tag: "DIV", cls: "uiMenuPanel-label" }, item, dx ) ] }; + }, + _getPosition: function(jEv) { + var right = !! $(jEv.target).parents(".pull-right").length; + var parent = $(jEv.target).closest("BUTTON"); + return parent.vOffset() + .addY(parent.vSize().y) + .addX( right ? parent.vSize().x - this.el.vOuterSize().x : 0 ) + .asOffset(); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css new file mode 100644 index 000000000..e7a7778f3 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css @@ -0,0 +1,88 @@ +.uiNodesView TH, +.uiNodesView TD { + vertical-align: top; + padding: 2px 20px; +} + +.uiNodesView TH.close, +.uiNodesView TD.close { + color: #888; + background: #f2f2f2; +} + +.uiNodesView .uiMenuButton .uiButton-content { + padding-right: 3px; + border-radius: 8px; + height: 14px; +} + +.uiNodesView .uiMenuButton.active .uiButton-content, +.uiNodesView .uiMenuButton:active .uiButton-content { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; +} + +.uiNodesView .uiMenuButton .uiButton-label { + padding: 0px 17px 0px 7px; +} + +.uiNodesView-hasAlias { + text-align: center; +} +.uiNodesView-hasAlias.max { + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; +} +.uiNodesView-hasAlias.min { + border-top-left-radius: 8px; + border-bottom-left-radius: 8px; +} +.uiNodesView-hasAlias-remove { + float: right; + font-weight: bold; + cursor: pointer; +} + +.uiNodesView TD.uiNodesView-icon { + padding: 20px 0px 15px 20px; +} + +.uiNodesView-node:nth-child(odd) { + background: #eee; +} + +.uiNodesView-routing { + position: relative; + min-width: 90px; +} + +.uiNodesView-nullReplica, +.uiNodesView-replica { + box-sizing: border-box; + cursor: pointer; + float: left; + height: 40px; + width: 35px; + margin: 4px; + border: 2px solid #444; + padding: 2px; + font-size: 32px; + line-height: 32px; + text-align: center; + letter-spacing: -5px; + text-indent: -7px; +} + +.uiNodesView-replica.primary { + border-width: 4px; + line-height: 29px; +} + +.uiNodesView-nullReplica { + border-color: transparent; +} + +.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; } +.uiNodesView-replica.state-INITIALIZING { background: #dddc88; } +.uiNodesView-replica.state-STARTED { background: #99dd88; } +.uiNodesView-replica.state-RELOCATING { background: #dc88dd; } diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js new file mode 100644 index 000000000..08ce1d301 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js @@ -0,0 +1,277 @@ +(function( app, i18n, joey ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.NodesView = ui.AbstractWidget.extend({ + defaults: { + interactive: true, + aliasRenderer: "list", + scaleReplicas: 1, + cluster: null, + data: null + }, + init: function() { + this._super(); + this.interactive = this.config.interactive; + this.cluster = this.config.cluster; + this._aliasRenderFunction = { + "none": this._aliasRender_template_none, + "list": this._aliasRender_template_list, + "full": this._aliasRender_template_full + }[ this.config.aliasRenderer ]; + this._styleSheetEl = joey({ tag: "STYLE", text: ".uiNodesView-nullReplica, .uiNodesView-replica { zoom: " + this.config.scaleReplicas + " }" }); + this.el = $( this._main_template( this.config.data.cluster, this.config.data.indices ) ); + }, + + _newAliasAction_handler: function( index ) { + var fields = new app.ux.FieldCollection({ + fields: [ + new ui.TextField({ label: i18n.text("AliasForm.AliasName"), name: "alias", require: true }) + ] + }); + var dialog = new ui.DialogPanel({ + title: i18n.text("AliasForm.NewAliasForIndexName", index.name), + body: new ui.PanelForm({ fields: fields }), + onCommit: function(panel, args) { + if(fields.validate()) { + var data = fields.getData(); + var command = { + "actions" : [ + { "add" : { "index" : index.name, "alias" : data["alias"] } } + ] + }; + this.config.cluster.post('_aliases', JSON.stringify(command), function(d) { + dialog.close(); + alert(JSON.stringify(d)); + this.fire("redraw"); + }.bind(this) ); + } + }.bind(this) + }).open(); + }, + _postIndexAction_handler: function(action, index, redraw) { + this.cluster.post(encodeURIComponent( index.name ) + "/" + encodeURIComponent( action ), null, function(r) { + alert(JSON.stringify(r)); + redraw && this.fire("redraw"); + }.bind(this)); + }, + _optimizeIndex_handler: function(index) { + var fields = new app.ux.FieldCollection({ + fields: [ + new ui.TextField({ label: i18n.text("OptimizeForm.MaxSegments"), name: "max_num_segments", value: "1", require: true }), + new ui.CheckField({ label: i18n.text("OptimizeForm.ExpungeDeletes"), name: "only_expunge_deletes", value: false }), + new ui.CheckField({ label: i18n.text("OptimizeForm.FlushAfter"), name: "flush", value: true }), + new ui.CheckField({ label: i18n.text("OptimizeForm.WaitForMerge"), name: "wait_for_merge", value: false }) + ] + }); + var dialog = new ui.DialogPanel({ + title: i18n.text("OptimizeForm.OptimizeIndex", index.name), + body: new ui.PanelForm({ fields: fields }), + onCommit: function( panel, args ) { + if(fields.validate()) { + this.cluster.post(encodeURIComponent( index.name ) + "/_optimize", fields.getData(), function(r) { + alert(JSON.stringify(r)); + }); + dialog.close(); + } + }.bind(this) + }).open(); + }, + _testAnalyser_handler: function(index) { + this.cluster.get(encodeURIComponent( index.name ) + "/_analyze?text=" + encodeURIComponent( prompt( i18n.text("IndexCommand.TextToAnalyze") ) ), function(r) { + alert(JSON.stringify(r, true, " ")); + }); + }, + _deleteIndexAction_handler: function(index) { + if( prompt( i18n.text("AliasForm.DeleteAliasMessage", i18n.text("Command.DELETE"), index.name ) ) === i18n.text("Command.DELETE") ) { + this.cluster["delete"](encodeURIComponent( index.name ), null, function(r) { + alert(JSON.stringify(r)); + this.fire("redraw"); + }.bind(this) ); + } + }, + _shutdownNode_handler: function(node) { + if(prompt( i18n.text("IndexCommand.ShutdownMessage", i18n.text("Command.SHUTDOWN"), node.cluster.name ) ) === i18n.text("Command.SHUTDOWN") ) { + this.cluster.post( "_cluster/nodes/" + encodeURIComponent( node.name ) + "/_shutdown", null, function(r) { + alert(JSON.stringify(r)); + this.fire("redraw"); + }.bind(this)); + } + }, + _deleteAliasAction_handler: function( index, alias ) { + if( confirm( i18n.text("Command.DeleteAliasMessage" ) ) ) { + var command = { + "actions" : [ + { "remove" : { "index" : index.name, "alias" : alias.name } } + ] + }; + this.config.cluster.post('_aliases', JSON.stringify(command), function(d) { + alert(JSON.stringify(d)); + this.fire("redraw"); + }.bind(this) ); + } + }, + + _replica_template: function(replica) { + var r = replica.replica; + return { tag: "DIV", + cls: "uiNodesView-replica" + (r.primary ? " primary" : "") + ( " state-" + r.state ), + text: r.shard.toString(), + onclick: function() { new ui.JsonPanel({ + json: replica.status || r, + title: r.index + "/" + r.node + " [" + r.shard + "]" }); + } + }; + }, + _routing_template: function(routing) { + var cell = { tag: "TD", cls: "uiNodesView-routing" + (routing.open ? "" : " close"), children: [] }; + for(var i = 0; i < routing.replicas.length; i++) { + if(i % routing.max_number_of_shards === 0 && i > 0) { + cell.children.push({ tag: "BR" }); + } + if( routing.replicas[i] ) { + cell.children.push(this._replica_template(routing.replicas[i])); + } else { + cell.children.push( { tag: "DIV", cls: "uiNodesView-nullReplica" } ); + } + } + return cell; + }, + _nodeControls_template: function( node ) { return ( + { tag: "DIV", cls: "uiNodesView-controls", children: [ + new ui.MenuButton({ + label: i18n.text("NodeInfoMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("NodeInfoMenu.ClusterNodeInfo"), onclick: function() { new ui.JsonPanel({ json: node.cluster, title: node.name });} }, + { text: i18n.text("NodeInfoMenu.NodeStats"), onclick: function() { new ui.JsonPanel({ json: node.stats, title: node.name });} } + ] + }) + }), + new ui.MenuButton({ + label: i18n.text("NodeActionsMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("NodeActionsMenu.Shutdown"), onclick: function() { this._shutdownNode_handler(node); }.bind(this) } + ] + }) + }) + ] } + ); }, + _nodeIcon_template: function( node ) { + var icon, alt; + if( node.name === "Unassigned" ) { + icon = "fa-exclamation-triangle"; + alt = i18n.text( "NodeType.Unassigned" ); + } else if( node.cluster.settings && "tribe" in node.cluster.settings) { + icon = "fa-sitemap"; + alt = i18n.text("NodeType.Tribe" ); + } else { + icon = "fa-" + (node.master_node ? "star" : "circle") + (node.data_node ? "" : "-o" ); + alt = i18n.text( node.master_node ? ( node.data_node ? "NodeType.Master" : "NodeType.Coord" ) : ( node.data_node ? "NodeType.Worker" : "NodeType.Client" ) ); + } + return { tag: "TD", title: alt, cls: "uiNodesView-icon", children: [ + { tag: "SPAN", cls: "fa fa-2x " + icon } + ] }; + }, + _node_template: function(node) { + return { tag: "TR", cls: "uiNodesView-node" + (node.master_node ? " master": ""), children: [ + this._nodeIcon_template( node ), + { tag: "TH", children: node.name === "Unassigned" ? [ + { tag: "H3", text: node.name } + ] : [ + { tag: "H3", text: node.cluster.name }, + { tag: "DIV", text: node.cluster.hostname }, + this.interactive ? this._nodeControls_template( node ) : null + ] } + ].concat(node.routings.map(this._routing_template, this))}; + }, + _indexHeaderControls_template: function( index ) { return ( + { tag: "DIV", cls: "uiNodesView-controls", children: [ + new ui.MenuButton({ + label: i18n.text("IndexInfoMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("IndexInfoMenu.Status"), onclick: function() { new ui.JsonPanel({ json: index.status, title: index.name }); } }, + { text: i18n.text("IndexInfoMenu.Metadata"), onclick: function() { new ui.JsonPanel({ json: index.metadata, title: index.name }); } } + ] + }) + }), + new ui.MenuButton({ + label: i18n.text("IndexActionsMenu.Title"), + menu: new ui.MenuPanel({ + items: [ + { text: i18n.text("IndexActionsMenu.NewAlias"), onclick: function() { this._newAliasAction_handler(index); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Refresh"), onclick: function() { this._postIndexAction_handler("_refresh", index, false); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Flush"), onclick: function() { this._postIndexAction_handler("_flush", index, false); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Optimize"), onclick: function () { this._optimizeIndex_handler(index); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Snapshot"), disabled: closed, onclick: function() { this._postIndexAction_handler("_gateway/snapshot", index, false); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Analyser"), onclick: function() { this._testAnalyser_handler(index); }.bind(this) }, + { text: (index.state === "close") ? i18n.text("IndexActionsMenu.Open") : i18n.text("IndexActionsMenu.Close"), onclick: function() { this._postIndexAction_handler((index.state === "close") ? "_open" : "_close", index, true); }.bind(this) }, + { text: i18n.text("IndexActionsMenu.Delete"), onclick: function() { this._deleteIndexAction_handler(index); }.bind(this) } + ] + }) + }) + ] } + ); }, + _indexHeader_template: function( index ) { + var closed = index.state === "close"; + var line1 = closed ? "index: close" : ( "size: " + (index.status && index.status.primaries && index.status.total ? ut.byteSize_template( index.status.primaries.store.size_in_bytes ) + " (" + ut.byteSize_template( index.status.total.store.size_in_bytes ) + ")" : "unknown" ) ); + var line2 = closed ? "\u00A0" : ( "docs: " + (index.status && index.status.primaries && index.status.primaries.docs && index.status.total && index.status.total.docs ? index.status.primaries.docs.count.toLocaleString() + " (" + (index.status.total.docs.count + index.status.total.docs.deleted).toLocaleString() + ")" : "unknown" ) ); + return index.name ? { tag: "TH", cls: (closed ? "close" : ""), children: [ + { tag: "H3", text: index.name }, + { tag: "DIV", text: line1 }, + { tag: "DIV", text: line2 }, + this.interactive ? this._indexHeaderControls_template( index ) : null + ] } : [ { tag: "TD" }, { tag: "TH" } ]; + }, + _aliasRender_template_none: function( cluster, indices ) { + return null; + }, + _aliasRender_template_list: function( cluster, indices ) { + return cluster.aliases.length && { tag: "TBODY", children: [ + { tag: "TR", children: [ + { tag: "TD" } + ].concat( indices.map( function( index ) { + return { tag: "TD", children: index.metadata && index.metadata.aliases.map( function( alias ) { + return { tag: "LI", text: alias }; + } ) }; + })) } + ] }; + }, + _aliasRender_template_full: function( cluster, indices ) { + return cluster.aliases.length && { tag: "TBODY", children: cluster.aliases.map( function(alias, row) { + return { tag: "TR", children: [ { tag: "TD" },{ tag: "TD" } ].concat(alias.indices.map(function(index, i) { + if (index) { + return { + tag: "TD", + css: { background: "#" + "9ce9c7fc9".substr((row+6)%7,3) }, + cls: "uiNodesView-hasAlias" + ( alias.min === i ? " min" : "" ) + ( alias.max === i ? " max" : "" ), + text: alias.name, + children: this.interactive ? [ + { tag: 'SPAN', + text: i18n.text("General.CloseGlyph"), + cls: 'uiNodesView-hasAlias-remove', + onclick: this._deleteAliasAction_handler.bind( this, index, alias ) + } + ]: null + }; + } else { + return { tag: "TD" }; + } + }, this ) ) }; + }, this ) }; + }, + _main_template: function(cluster, indices) { + return { tag: "TABLE", cls: "table uiNodesView", children: [ + this._styleSheetEl, + { tag: "THEAD", children: [ { tag: "TR", children: indices.map(this._indexHeader_template, this) } ] }, + this._aliasRenderFunction( cluster, indices ), + { tag: "TBODY", children: cluster.nodes.map(this._node_template, this) } + ] }; + } + + }); + +})( this.app, this.i18n, this.joey ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js new file mode 100644 index 000000000..9049163b0 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js @@ -0,0 +1,17 @@ +$( function() { + + var ui = window.app.ns("ui"); + + var data = { + "cluster":{"nodes":[{"name":"cqTmT9GLSlSWx-B7pvM--w","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":10328420,"max_doc":10329720,"deleted_docs":4},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346979,"name":"Elathan","transport_address":"inet[/127.0.0.1:9301]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"277b","size_in_bytes":277,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":0,"index_time":"0s","index_time_in_millis":0,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":6,"query_time":"19ms","query_time_in_millis":19,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":10,"total_time":"0s","total_time_in_millis":0},"flush":{"total":186,"total_time":"9.1s","total_time_in_millis":9191},"warmer":{"current":0,"total":3,"total_time":"6ms","total_time_in_millis":6},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346979,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4065169408,"used":"4.2gb","used_in_bytes":4524765184,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4426321920,"actual_used":"3.8gb","actual_used_in_bytes":4163612672},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346979,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":172614,"user":"2.3m","user_in_millis":142295,"total":"5.2m","total_in_millis":314909},"mem":{"resident":"21.6mb","resident_in_bytes":22728704,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3900530688}},"jvm":{"timestamp":1381790346980,"uptime":"4d","uptime_in_millis":349028405,"mem":{"heap_used":"31.3mb","heap_used_in_bytes":32851896,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"39.3mb","non_heap_used_in_bytes":41210896,"non_heap_committed":"63.7mb","non_heap_committed_in_bytes":66809856,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2120704,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2131520,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"24mb","used_in_bytes":25224136,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"816.5kb","used_in_bytes":836128,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"6.4mb","used_in_bytes":6791632,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"8.2mb","peak_used_in_bytes":8653824,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.2mb","used_in_bytes":39090192,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.2mb","peak_used_in_bytes":39090192,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":51,"peak_count":56},"gc":{"collection_count":43,"collection_time":"374ms","collection_time_in_millis":374,"collectors":{"ParNew":{"collection_count":41,"collection_time":"374ms","collection_time_in_millis":374},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":3,"completed":7505},"index":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"merge":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":16},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":188},"search":{"threads":6,"queue":0,"active":0,"rejected":0,"largest":6,"completed":6},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":1,"rejected":0,"largest":5,"completed":8593},"refresh":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438878,"out_segs":7330495,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790347004,"data":[{"path":"/var/elasticsearch/es2/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":155197,"rx_size":"6.9mb","rx_size_in_bytes":7339947,"tx_count":155195,"tx_size":"11.6mb","tx_size_in_bytes":12251491},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Elathan","transport_address":"inet[/127.0.0.1:9301]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9203]"}},{"name":"jw4owU-ZQgOYdM7ElauDTg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346963,"name":"Numinus","transport_address":"inet[/127.0.0.1:9303]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"178b","size_in_bytes":178,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"50ms","index_time_in_millis":50,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"32ms","query_time_in_millis":32,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"66ms","total_time_in_millis":66},"flush":{"total":218,"total_time":"5.6s","total_time_in_millis":5697},"warmer":{"current":0,"total":2,"total_time":"4ms","total_time_in_millis":4},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346963,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058091520,"used":"4.2gb","used_in_bytes":4531843072,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419244032,"actual_used":"3.8gb","actual_used_in_bytes":4170690560},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346963,"open_file_descriptors":264,"cpu":{"percent":0,"sys":"2.9m","sys_in_millis":174208,"user":"2.3m","user_in_millis":139440,"total":"5.2m","total_in_millis":313648},"mem":{"resident":"27.2mb","resident_in_bytes":28606464,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3903823872}},"jvm":{"timestamp":1381790346978,"uptime":"4d","uptime_in_millis":349026382,"mem":{"heap_used":"12.8mb","heap_used_in_bytes":13428352,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"39.8mb","non_heap_used_in_bytes":41791784,"non_heap_committed":"55.2mb","non_heap_committed_in_bytes":57950208,"pools":{"Code Cache":{"used":"1.9mb","used_in_bytes":2065280,"max":"48mb","max_in_bytes":50331648,"peak_used":"1.9mb","peak_used_in_bytes":2074880,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"2.4mb","used_in_bytes":2564176,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"646.5kb","used_in_bytes":662048,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2.8mb","peak_used_in_bytes":3029584,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"9.7mb","used_in_bytes":10202128,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"9.7mb","peak_used_in_bytes":10202128,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.8mb","used_in_bytes":39726504,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.8mb","peak_used_in_bytes":39726504,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":60,"peak_count":66},"gc":{"collection_count":42,"collection_time":"512ms","collection_time_in_millis":512,"collectors":{"ParNew":{"collection_count":40,"collection_time":"512ms","collection_time_in_millis":512},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":3,"completed":7490},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":18},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":221},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":12},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":3,"queue":0,"active":1,"rejected":0,"largest":5,"completed":8597},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438878,"out_segs":7330495,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346992,"data":[{"path":"/var/elasticsearch/es4/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":155179,"rx_size":"7mb","rx_size_in_bytes":7341687,"tx_count":155177,"tx_size":"11.6mb","tx_size_in_bytes":12249878},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Numinus","transport_address":"inet[/127.0.0.1:9303]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9202]"}},{"name":"SwCmq0QKQuShZcJAbuW8OQ","routings":[{"name":"_river","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"status":{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"1.6s","total_time_in_millis":1632}}}],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,null,{"replica":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346944,"name":"Ameridroid","transport_address":"inet[/127.0.0.1:9305]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"257b","size_in_bytes":257,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":6,"index_time":"64ms","index_time_in_millis":64,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"27ms","query_time_in_millis":27,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":10,"total_time":"113ms","total_time_in_millis":113},"flush":{"total":241,"total_time":"5.5s","total_time_in_millis":5553},"warmer":{"current":0,"total":3,"total_time":"4ms","total_time_in_millis":4},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346944,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4059074560,"used":"4.2gb","used_in_bytes":4530860032,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419702784,"actual_used":"3.8gb","actual_used_in_bytes":4170231808},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346944,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":171912,"user":"2.3m","user_in_millis":143905,"total":"5.2m","total_in_millis":315817},"mem":{"resident":"30.4mb","resident_in_bytes":31936512,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3905077248}},"jvm":{"timestamp":1381790346944,"uptime":"4d","uptime_in_millis":349024271,"mem":{"heap_used":"16.6mb","heap_used_in_bytes":17485968,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"39.7mb","non_heap_used_in_bytes":41733256,"non_heap_committed":"40.4mb","non_heap_committed_in_bytes":42405888,"pools":{"Code Cache":{"used":"1.9mb","used_in_bytes":2018624,"max":"48mb","max_in_bytes":50331648,"peak_used":"1.9mb","peak_used_in_bytes":2029504,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"5.9mb","used_in_bytes":6242912,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"489.7kb","used_in_bytes":501496,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"10.2mb","used_in_bytes":10741560,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"10.2mb","peak_used_in_bytes":10741560,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.8mb","used_in_bytes":39714632,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.8mb","peak_used_in_bytes":39714632,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":63,"peak_count":70},"gc":{"collection_count":61,"collection_time":"533ms","collection_time_in_millis":533,"collectors":{"ParNew":{"collection_count":61,"collection_time":"533ms","collection_time_in_millis":533},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7504},"index":{"threads":4,"queue":0,"active":0,"rejected":0,"largest":4,"completed":6},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":23},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":241},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":12},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":4,"queue":0,"active":1,"rejected":0,"largest":5,"completed":10284},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438844,"out_segs":7330461,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346959,"data":[{"path":"/var/elasticsearch/es6/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231240040448,"available":"215.1gb","available_in_bytes":230977896448,"disk_reads":2641849,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593058816,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156880,"rx_size":"7mb","rx_size_in_bytes":7431874,"tx_count":156877,"tx_size":"11.9mb","tx_size_in_bytes":12480678},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Ameridroid","transport_address":"inet[/127.0.0.1:9305]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9205]"}},{"name":"aBuoaKR5QVCfUZHgrJEfVg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,null,{"replica":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346945,"name":"Immortus","transport_address":"inet[/127.0.0.1:9302]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"277b","size_in_bytes":277,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"59ms","index_time_in_millis":59,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"27ms","query_time_in_millis":27,"query_current":0,"fetch_total":1,"fetch_time":"9ms","fetch_time_in_millis":9,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"72ms","total_time_in_millis":72},"flush":{"total":239,"total_time":"6.3s","total_time_in_millis":6363},"warmer":{"current":0,"total":3,"total_time":"8ms","total_time_in_millis":8},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346963,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058099712,"used":"4.2gb","used_in_bytes":4531834880,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419252224,"actual_used":"3.8gb","actual_used_in_bytes":4170682368},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346963,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.9m","sys_in_millis":174105,"user":"2.4m","user_in_millis":145373,"total":"5.3m","total_in_millis":319478},"mem":{"resident":"29mb","resident_in_bytes":30453760,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3912540160}},"jvm":{"timestamp":1381790346963,"uptime":"4d","uptime_in_millis":349027381,"mem":{"heap_used":"28.5mb","heap_used_in_bytes":29980664,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"40mb","non_heap_used_in_bytes":42021480,"non_heap_committed":"65.6mb","non_heap_committed_in_bytes":68853760,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2183808,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2193408,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"23.8mb","used_in_bytes":25026800,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"464.1kb","used_in_bytes":475296,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"4.2mb","used_in_bytes":4478568,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"12.4mb","peak_used_in_bytes":13054208,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.9mb","used_in_bytes":39837672,"max":"82mb","max_in_bytes":85983232,"peak_used":"38.2mb","peak_used_in_bytes":40134632,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":62,"peak_count":67},"gc":{"collection_count":80,"collection_time":"561ms","collection_time_in_millis":561,"collectors":{"ParNew":{"collection_count":78,"collection_time":"557ms","collection_time_in_millis":557},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"4ms","collection_time_in_millis":4}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7528},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":26},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":242},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":13},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":2,"rejected":0,"largest":5,"completed":10288},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438862,"out_segs":7330479,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346977,"data":[{"path":"/var/elasticsearch/es3/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241089024,"available":"215.1gb","available_in_bytes":230978945024,"disk_reads":2641854,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593402880,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156920,"rx_size":"7.1mb","rx_size_in_bytes":7451979,"tx_count":156915,"tx_size":"11.9mb","tx_size_in_bytes":12499329},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Immortus","transport_address":"inet[/127.0.0.1:9302]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9201]"}},{"name":"3Rbfod0sS9eZ6VrOkY0JKw","routings":[{"name":"_river","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"status":{"routing":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"833ms","total_time_in_millis":833}}}],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":true,"stats":{"timestamp":1381790346938,"name":"Steel Serpent","transport_address":"inet[server/127.0.0.1:9300]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"237b","size_in_bytes":237,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"59ms","index_time_in_millis":59,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"32ms","query_time_in_millis":32,"query_current":0,"fetch_total":3,"fetch_time":"5ms","fetch_time_in_millis":5,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":6,"total_time":"58ms","total_time_in_millis":58},"flush":{"total":240,"total_time":"4.3s","total_time_in_millis":4339},"warmer":{"current":0,"total":3,"total_time":"8ms","total_time_in_millis":8},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346938,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4062093312,"used":"4.2gb","used_in_bytes":4527841280,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4422721536,"actual_used":"3.8gb","actual_used_in_bytes":4167213056},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346938,"open_file_descriptors":272,"cpu":{"percent":0,"sys":"3.3m","sys_in_millis":200578,"user":"3.2m","user_in_millis":192613,"total":"6.5m","total_in_millis":393191},"mem":{"resident":"43.8mb","resident_in_bytes":46018560,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3910467584}},"jvm":{"timestamp":1381790346938,"uptime":"4d","uptime_in_millis":349029191,"mem":{"heap_used":"28.9mb","heap_used_in_bytes":30381984,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"42.9mb","non_heap_used_in_bytes":45068896,"non_heap_committed":"43.3mb","non_heap_committed_in_bytes":45420544,"pools":{"Code Cache":{"used":"3.3mb","used_in_bytes":3534656,"max":"48mb","max_in_bytes":50331648,"peak_used":"3.3mb","peak_used_in_bytes":3545408,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"15.6mb","used_in_bytes":16402808,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"44.9kb","used_in_bytes":46016,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"13.2mb","used_in_bytes":13933160,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"13.2mb","peak_used_in_bytes":13933160,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"39.6mb","used_in_bytes":41534240,"max":"82mb","max_in_bytes":85983232,"peak_used":"39.6mb","peak_used_in_bytes":41534240,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":64,"peak_count":68},"gc":{"collection_count":272,"collection_time":"967ms","collection_time_in_millis":967,"collectors":{"ParNew":{"collection_count":272,"collection_time":"967ms","collection_time_in_millis":967},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":4,"completed":9499},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":21},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":241},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":15},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":1,"rejected":0,"largest":5,"completed":15207},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438818,"out_segs":7330435,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346956,"data":[{"path":"/var/elasticsearch/es1/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231240040448,"available":"215.1gb","available_in_bytes":230977896448,"disk_reads":2641849,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593058816,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":780551,"rx_size":"59mb","rx_size_in_bytes":61929023,"tx_count":780563,"tx_size":"35.2mb","tx_size_in_bytes":36961925},"http":{"current_open":6,"total_opened":201}},"cluster":{"name":"Steel Serpent","transport_address":"inet[server/127.0.0.1:9300]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9200]"}},{"name":"PO1wHIidQo-w7sGHaYHvjg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346964,"name":"Thumbelina","transport_address":"inet[/127.0.0.1:9304]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"178b","size_in_bytes":178,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":4,"index_time":"55ms","index_time_in_millis":55,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":6,"query_time":"21ms","query_time_in_millis":21,"query_current":0,"fetch_total":2,"fetch_time":"10ms","fetch_time_in_millis":10,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"81ms","total_time_in_millis":81},"flush":{"total":198,"total_time":"3.6s","total_time_in_millis":3662},"warmer":{"current":0,"total":2,"total_time":"3ms","total_time_in_millis":3},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346964,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058308608,"used":"4.2gb","used_in_bytes":4531625984,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419461120,"actual_used":"3.8gb","actual_used_in_bytes":4170473472},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346964,"open_file_descriptors":264,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":172378,"user":"2.3m","user_in_millis":140227,"total":"5.2m","total_in_millis":312605},"mem":{"resident":"28.5mb","resident_in_bytes":29892608,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3904798720}},"jvm":{"timestamp":1381790346976,"uptime":"4d","uptime_in_millis":349025339,"mem":{"heap_used":"20.8mb","heap_used_in_bytes":21889120,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"40.2mb","non_heap_used_in_bytes":42232320,"non_heap_committed":"40.8mb","non_heap_committed_in_bytes":42799104,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2125312,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2134912,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"8.4mb","used_in_bytes":8836504,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"659.3kb","used_in_bytes":675192,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"11.8mb","used_in_bytes":12377424,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"11.8mb","peak_used_in_bytes":12377424,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"38.2mb","used_in_bytes":40107008,"max":"82mb","max_in_bytes":85983232,"peak_used":"38.2mb","peak_used_in_bytes":40107008,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":59,"peak_count":65},"gc":{"collection_count":61,"collection_time":"632ms","collection_time_in_millis":632,"collectors":{"ParNew":{"collection_count":61,"collection_time":"632ms","collection_time_in_millis":632},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7515},"index":{"threads":4,"queue":0,"active":0,"rejected":0,"largest":4,"completed":4},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":22},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":198},"search":{"threads":8,"queue":0,"active":0,"rejected":0,"largest":8,"completed":8},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":4,"queue":0,"active":1,"rejected":0,"largest":5,"completed":10266},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438872,"out_segs":7330489,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790347016,"data":[{"path":"/var/elasticsearch/es5/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156869,"rx_size":"7mb","rx_size_in_bytes":7444733,"tx_count":156866,"tx_size":"11.9mb","tx_size_in_bytes":12497730},"http":{"current_open":0,"total_opened":2}},"cluster":{"name":"Thumbelina","transport_address":"inet[/127.0.0.1:9304]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9204]"}}],"aliases":[{"name":"search","max":3,"min":1,"indices":[false,{"name":"ag_01","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"1.4s","total_time_in_millis":1435},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}},{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}},{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}]}}},{"name":"ag_02","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"3","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"297b","primary_size_in_bytes":297,"size":"534b","size_in_bytes":534},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":3,"total_time":"0s","total_time_in_millis":0},"flush":{"total":20,"total_time":"340ms","total_time_in_millis":340},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}],"1":[{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}},{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}],"2":[{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}},{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}]}}},{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},false]},{"name":"live","max":3,"min":3,"indices":[false,false,false,{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},false]}]}, + "indices":[{"name":null},{"name":"_river","state":"open","metadata":{"state":"open","settings":{"index.version.created":"900599","index.number_of_replicas":"1","index.number_of_shards":"1"},"mappings":{},"aliases":[]},"status":{"index":{"primary_size":"79b","primary_size_in_bytes":79,"size":"158b","size_in_bytes":158},"translog":{"operations":0},"docs":{"num_docs":1,"max_doc":1,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":124,"total_time":"2.4s","total_time_in_millis":2465},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":187162420,"max_doc":187171320,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"1.6s","total_time_in_millis":1632}},{"routing":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":187162420,"max_doc":187171320,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"833ms","total_time_in_millis":833}}]}}},{"name":"ag_01","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":18716242,"max_doc":18717132,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"1.4s","total_time_in_millis":1435},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}},{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}},{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}]}}},{"name":"ag_02","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"3","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"297b","primary_size_in_bytes":297,"size":"534b","size_in_bytes":534},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":3,"total_time":"0s","total_time_in_millis":0},"flush":{"total":20,"total_time":"340ms","total_time_in_millis":340},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}],"1":[{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}},{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}],"2":[{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}},{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}]}}},{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},{"name":"twitter_river","state":"close","metadata":{"state":"close","settings":{"index.number_of_replicas":"1","index.version.created":"900599","index.number_of_shards":"5"},"mappings":{"status":{"properties":{"text":{"type":"string"},"location":{"properties":{"lon":{"type":"double"},"lat":{"type":"double"}}},"link":{"properties":{"start":{"type":"long"},"expand_url":{"type":"string"},"display_url":{"type":"string"},"url":{"type":"string"},"end":{"type":"long"}}},"hashtag":{"properties":{"text":{"type":"string"},"start":{"type":"long"},"end":{"type":"long"}}},"truncated":{"type":"boolean"},"source":{"type":"string"},"retweet":{"properties":{"id":{"type":"long"},"user_screen_name":{"type":"string"},"retweet_count":{"type":"long"},"user_id":{"type":"long"}}},"created_at":{"format":"dateOptionalTime","type":"date"},"retweet_count":{"type":"long"},"in_reply":{"properties":{"user_screen_name":{"type":"string"},"status":{"type":"long"},"user_id":{"type":"long"}}},"mention":{"properties":{"id":{"type":"long"},"start":{"type":"long"},"name":{"type":"string"},"screen_name":{"type":"string"},"end":{"type":"long"}}},"place":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"country_code":{"type":"string"},"url":{"type":"string"},"full_name":{"type":"string"},"country":{"type":"string"}}},"user":{"properties":{"id":{"type":"long"},"profile_image_url_https":{"type":"string"},"location":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"screen_name":{"type":"string"},"profile_image_url":{"type":"string"}}}}}},"aliases":[]},"status":null}] + }; + + window.builder = function() { + return new ui.NodesView({ + interactive: true, + data: data + }); + }; + +}); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js new file mode 100644 index 000000000..8c5eb70a9 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js @@ -0,0 +1,14 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.Page = ui.AbstractWidget.extend({ + show: function() { + this.el.show(); + }, + hide: function() { + this.el.hide(); + } + }); + +})( this.app ); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css new file mode 100644 index 000000000..cd4138e23 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css @@ -0,0 +1,12 @@ +.uiPanelForm-field { + display: block; + padding: 2px 0; + clear: both; +} + +.uiPanelForm-label { + float: left; + width: 200px; + padding: 3px 7px; + text-align: right; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js new file mode 100644 index 000000000..8ed4fe7f0 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js @@ -0,0 +1,26 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.PanelForm = ui.AbstractWidget.extend({ + defaults: { + fields: null // (required) instanceof app.ux.FieldCollection + }, + init: function(parent) { + this._super(); + this.el = $.joey(this._main_template()); + this.attach( parent ); + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiPanelForm", children: this.config.fields.fields.map(this._field_template, this) }; + }, + _field_template: function(field) { + return { tag: "LABEL", cls: "uiPanelForm-field", children: [ + { tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] }, + field + ]}; + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css new file mode 100644 index 000000000..dfe055cd7 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css @@ -0,0 +1,62 @@ +.uiQueryFilter { + width: 350px; + padding: 5px; + background: #d8e7ff; + background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff); + background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff); +} + +.uiQueryFilter DIV.uiQueryFilter-section { + margin-bottom: 5px; +} + +.uiQueryFilter HEADER { + display: block; + font-variant: small-caps; + font-weight: bold; + margin: 5px 0; +} + +.uiQueryFilter-aliases SELECT { + width: 100%; +} + +.uiQueryFilter-booble { + cursor: pointer; + background: #e8f1ff; + border: 1px solid #e8f1ff; + border-radius: 5px; + padding: 1px 4px; + margin-bottom: 1px; + overflow: hidden; + white-space: nowrap; +} + +.uiQueryFilter-booble.selected { + background: #dae3f0; + border-top: 1px solid #c8d4e6; + border-left: 1px solid #c8d4e6; + border-bottom: 1px solid #ffffff; + border-right: 1px solid #ffffff; +} + +.uiQueryFilter-filterName { + background-color: #cbdfff; + margin-bottom: 4px; + padding: 3px; + cursor: pointer; +} + +.uiQueryFilter-filters INPUT { + width: 300px; +} + +.uiQueryFilter-subMultiFields { + padding-left: 10px; +} + +.uiQueryFilter-rangeHintFrom, +.uiQueryFilter-rangeHintTo { + margin: 0; + opacity: 0.75; +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js new file mode 100644 index 000000000..bd449a0b7 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js @@ -0,0 +1,277 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var ut = app.ns("ut"); + + ui.QueryFilter = ui.AbstractWidget.extend({ + defaults: { + metadata: null, // (required) instanceof app.data.MetaData + query: null // (required) instanceof app.data.Query that the filters will act apon + }, + init: function() { + this._super(); + this.metadata = this.config.metadata; + this.query = this.config.query; + this.el = $(this._main_template()); + }, + helpTypeMap: { + "date" : "QueryFilter.DateRangeHelp" + }, + requestUpdate: function(jEv) { + if(jEv && jEv.originalEvent) { // we only want to update on real user interaction not generated events + this.query.setPage(1); + this.query.query(); + } + }, + getSpec: function(fieldName) { + return this.metadata.fields[fieldName]; + }, + _selectAlias_handler: function(jEv) { + var indices = (jEv.target.selectedIndex === 0) ? [] : this.metadata.getIndices($(jEv.target).val()); + $(".uiQueryFilter-index").each(function(i, el) { + var jEl = $(el); + if(indices.contains(jEl.text()) !== jEl.hasClass("selected")) { + jEl.click(); + } + }); + this.requestUpdate(jEv); + }, + _selectIndex_handler: function(jEv) { + var jEl = $(jEv.target).closest(".uiQueryFilter-index"); + jEl.toggleClass("selected"); + var selected = jEl.hasClass("selected"); + this.query.setIndex(jEl.text(), selected); + if(selected) { + var types = this.metadata.getTypes(this.query.indices); + this.el.find("DIV.uiQueryFilter-type.selected").each(function(n, el) { + if(! types.contains($(el).text())) { + $(el).click(); + } + }); + } + this.requestUpdate(jEv); + }, + _selectType_handler: function(jEv) { + var jEl = $(jEv.target).closest(".uiQueryFilter-type"); + jEl.toggleClass("selected"); + var type = jEl.text(), selected = jEl.hasClass("selected"); + this.query.setType(type, selected); + if(selected) { + var indices = this.metadata.types[type].indices; + // es throws a 500 if searching an index for a type it does not contain - so we prevent that + this.el.find("DIV.uiQueryFilter-index.selected").each(function(n, el) { + if(! indices.contains($(el).text())) { + $(el).click(); + } + }); + // es throws a 500 if you specify types from different indices with _all + jEl.siblings(".uiQueryFilter-type.selected").forEach(function(el) { + if(this.metadata.types[$(el).text()].indices.intersection(indices).length === 0) { + $(el).click(); + } + }, this); + } + this.requestUpdate(jEv); + }, + _openFilter_handler: function(section) { + var field_name = section.config.title; + if(! section.loaded) { + var spec = this.getSpec(field_name); + if(spec.core_type === "string") { + section.body.append(this._textFilter_template(spec)); + } else if(spec.core_type === "date") { + section.body.append(this._dateFilter_template(spec)); + section.body.append(new ui.DateHistogram({ printEl: section.body.find("INPUT"), cluster: this.cluster, query: this.query, spec: spec })); + } else if(spec.core_type === "number") { + section.body.append(this._numericFilter_template(spec)); + } else if(spec.core_type === 'boolean') { + section.body.append(this._booleanFilter_template(spec)); + } else if (spec.core_type === 'multi_field') { + section.body.append(this._multiFieldFilter_template(section, spec)); + } + section.loaded = true; + } + section.on("animComplete", function(section) { section.body.find("INPUT").focus(); }); + }, + _textFilterChange_handler: function(jEv) { + var jEl = $(jEv.target).closest("INPUT"); + var val = jEl.val(); + var spec = jEl.data("spec"); + var uqids = jEl.data("uqids") || []; + uqids.forEach(function(uqid) { + uqid && this.query.removeClause(uqid); + }, this); + if(val.length) { + if(jEl[0] === document.activeElement && jEl[0].selectionStart === jEl[0].selectionEnd) { + val = val.replace(new RegExp("(.{"+jEl[0].selectionStart+"})"), "$&*"); + } + uqids = val.split(/\s+/).map(function(term) { + // Figure out the actual field name - needed for multi_field, because + // querying for "field.field" will not work. Simply "field" must be used + // if nothing is aliased. + var fieldNameParts = spec.field_name.split('.'); + var part = fieldNameParts.length - 1; + var name = fieldNameParts[part]; + while (part >= 1) { + if (fieldNameParts[part] !== fieldNameParts[part - 1]) { + name = fieldNameParts[part - 1] + "." + name; + } + part--; + } + return term && this.query.addClause(term, name, "wildcard", "must"); + }, this); + } + jEl.data("uqids", uqids); + this.requestUpdate(jEv); + }, + _dateFilterChange_handler: function(jEv) { + var jEl = $(jEv.target).closest("INPUT"); + var val = jEl.val(); + var spec = jEl.data("spec"); + var uqid = jEl.data("uqid") || null; + var range = window.dateRangeParser.parse(val); + var lastRange = jEl.data("lastRange"); + if(!range || (lastRange && lastRange.start === range.start && lastRange.end === range.end)) { + return; + } + uqid && this.query.removeClause(uqid); + if((range.start && range.end) === null) { + uqid = null; + } else { + var value = {}; + if( range.start ) { + value["gte"] = range.start; + } + if( range.end ) { + value["lte"] = range.end; + } + uqid = this.query.addClause( value, spec.field_name, "range", "must"); + } + jEl.data("lastRange", range); + jEl.siblings(".uiQueryFilter-rangeHintFrom") + .text(i18n.text("QueryFilter.DateRangeHint.from", range.start && new Date(range.start).toUTCString())); + jEl.siblings(".uiQueryFilter-rangeHintTo") + .text(i18n.text("QueryFilter.DateRangeHint.to", range.end && new Date(range.end).toUTCString())); + jEl.data("uqid", uqid); + this.requestUpdate(jEv); + }, + _numericFilterChange_handler: function(jEv) { + var jEl = $(jEv.target).closest("INPUT"); + var val = jEl.val(); + var spec = jEl.data("spec"); + var uqid = jEl.data("uqid") || null; + var lastRange = jEl.data("lastRange"); + var range = (function(val) { + var ops = val.split(/->|<>|/.test(val)) { + return { gte: (ops[0] - ops[1]), lte: (ops[0] + ops[1]) }; + } else if(/->| 0 ) { + this._timer = window.setInterval( this._refresh_handler, this.value ); + } + }, + _click_handler: function() { + this._refresh_handler(); + }, + _select_handler: function( el, event ) { + this.set( event.value ); + this.fire("change", this ); + }, + _refresh_handler: function() { + this.fire("refresh", this ); + }, + _getItems: function() { + return [ + { text: i18n.text("General.ManualRefresh"), value: -1 }, + { text: i18n.text("General.RefreshQuickly"), value: 100 }, + { text: i18n.text("General.Refresh5seconds"), value: 5000 }, + { text: i18n.text("General.Refresh1minute"), value: 60000 } + ]; + } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js new file mode 100644 index 000000000..c37df9c90 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js @@ -0,0 +1,12 @@ +$( function() { + + var ui = window.app.ns("ui"); + + window.builder = function() { + return new ui.RefreshButton({ + onRefresh: function() { console.log("-> refresh", arguments ); }, + onChange: function() { console.log("-> change", arguments ); } + }); + }; + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js new file mode 100644 index 000000000..8cc325f42 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js @@ -0,0 +1,92 @@ +describe("app.ui.RefreshButton", function() { + + var RefreshButton = window.app.ui.RefreshButton; + + var r, refresh_handler, change_handler; + + function openMenuPanel( button, label ) { + button.el.find("BUTTON").eq(1).click(); + $(".uiMenuPanel-label:contains(" + label + ")").click(); + test.clock.tick(); // menuPanel -> bind _close_handler + } + + + beforeEach( function() { + test.clock.steal(); + refresh_handler = jasmine.createSpy("refresh_handler"); + change_handler = jasmine.createSpy("change_handler"); + r = new RefreshButton({ + onRefresh: refresh_handler, + onChange: change_handler + }); + r.attach( document.body ); + }); + + afterEach( function() { + r.remove(); + test.clock.restore(); + }); + + it("should have an initial default value", function() { + expect( r.value ).toBe( -1 ); + }); + + it("should fire a refresh event after clicking the refresh button ", function() { + r.el.find("BUTTON").eq(0).click(); + + expect( refresh_handler ).toHaveBeenCalled(); + }); + + it("should change the refresh rate when set it called", function() { + r.set( 100 ); + expect( r.value ).toBe( 100 ); + }); + + it("should set an interval when rate is set to a positive value", function() { + r.set( 100 ); + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 1 ); + }); + + it("should not set an interval when rate is set to a non positive value", function() { + r.set( -1 ); + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 0 ); + }); + + it("should fire a refresh event on intervals if refresh menu item is set to quickly", function() { + openMenuPanel( r, "quickly" ); + + expect( refresh_handler.calls.count() ).toBe( 0 ); + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 1 ); + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 2 ); + }); + + it("should not fire refresh events when user selects Manual", function() { + + openMenuPanel( r, "quickly" ); + + expect( refresh_handler.calls.count() ).toBe( 0 ); + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 1 ); + + openMenuPanel( r, "Manual" ); + + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 1 ); + test.clock.tick(); + expect( refresh_handler.calls.count() ).toBe( 1 ); + }); + + it("should fire a change event when a new refresh rate is selected", function() { + openMenuPanel( r, "quickly" ); + expect( change_handler.calls.count() ).toBe( 1 ); + expect( r.value ).toBe( 100 ); + openMenuPanel( r, "Manual" ); + expect( change_handler.calls.count() ).toBe( 2 ); + expect( r.value ).toBe( -1 ); + }); + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js new file mode 100644 index 000000000..6c7cf558d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js @@ -0,0 +1,55 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.ResultTable = ui.Table.extend({ + defaults: { + width: 500, + height: 400 + }, + + init: function() { + this._super(); + this.on("rowClick", this._showPreview_handler); + this.selectedRow = null; + $(document).bind("keydown", this._nav_handler); + }, + remove: function() { + $(document).unbind("keydown", this._nav_handler); + this._super(); + }, + attach: function(parent) { + if(parent) { + var height = parent.height() || ( $(document).height() - parent.offset().top - 41 ); // 41 = height in px of .uiTable-tools + uiTable-header + var width = parent.width(); + this.el.width( width ); + this.body.width( width ).height( height ); + } + this._super(parent); + }, + showPreview: function(row) { + row.addClass("selected"); + this.preview = new app.ui.JsonPanel({ + title: i18n.text("Browser.ResultSourcePanelTitle"), + json: row.data("row")._source, + onClose: function() { row.removeClass("selected"); } + }); + }, + _nav_handler: function(jEv) { + if(jEv.keyCode !== 40 && jEv.keyCode !== 38) { + return; + } + this.selectedRow && this.preview && this.preview.remove(); + if(jEv.keyCode === 40) { // up arrow + this.selectedRow = this.selectedRow ? this.selectedRow.next("TR") : this.body.find("TR:first"); + } else if(jEv.keyCode === 38) { // down arrow + this.selectedRow = this.selectedRow ? this.selectedRow.prev("TR") : this.body.find("TR:last"); + } + this.selectedRow && this.showPreview(this.selectedRow); + }, + _showPreview_handler: function(obj, data) { + this.showPreview(this.selectedRow = data.row); + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css new file mode 100644 index 000000000..7315527df --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css @@ -0,0 +1,11 @@ +.uiSelectMenuPanel .uiMenuPanel-label { + margin-left: 1em; + padding-left: 4px; +} + +.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before { + content: "\2713"; + width: 12px; + margin-left: -12px; + display: inline-block; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js new file mode 100644 index 000000000..8cbecc56c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js @@ -0,0 +1,33 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.SelectMenuPanel = ui.MenuPanel.extend({ + defaults: { + items: [], // (required) an array of menu items + value: null + }, + _baseCls: "uiSelectMenuPanel uiMenuPanel", + init: function() { + this.value = this.config.value; + this._super(); + }, + _getItems: function() { + return this.config.items.map( function( item ) { + return { + text: item.text, + selected: this.value === item.value, + onclick: function( jEv ) { + var el = $( jEv.target ).closest("LI"); + el.parent().children().removeClass("selected"); + el.addClass("selected"); + this.fire( "select", this, { value: item.value } ); + this.value = item.value; + }.bind(this) + }; + }, this ); + + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css new file mode 100644 index 000000000..654389fcd --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css @@ -0,0 +1,28 @@ +.uiSidebarSection-head { + background-color: #b9cfff; + background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg=='); + background-repeat: no-repeat; + background-position: 2px 5px; + margin-bottom: 1px; + padding: 3px 3px 3px 17px; + cursor: pointer; +} + +.shown > .uiSidebarSection-head { + background-position: 2px -13px; +} + +.uiSidebarSection-body { + margin-bottom: 3px; + display: none; +} + +.uiSidebarSection-help { + text-shadow: #228 1px 1px 2px; + color: blue; + cursor: pointer; +} + +.uiSidebarSection-help:hover { + text-decoration: underline; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js new file mode 100644 index 000000000..d5ab98449 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js @@ -0,0 +1,41 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + + ui.SidebarSection = ui.AbstractWidget.extend({ + defaults: { + title: "", + help: null, + body: null, + open: false + }, + init: function() { + this._super(); + this.el = $.joey( this._main_template() ); + this.body = this.el.children(".uiSidebarSection-body"); + this.config.open && ( this.el.addClass("shown") && this.body.css("display", "block") ); + }, + _showSection_handler: function( ev ) { + var shown = $( ev.target ).closest(".uiSidebarSection") + .toggleClass("shown") + .children(".uiSidebarSection-body").slideToggle(200, function() { this.fire("animComplete", this); }.bind(this)) + .end() + .hasClass("shown"); + this.fire(shown ? "show" : "hide", this); + }, + _showHelp_handler: function( ev ) { + new ui.HelpPanel({ref: this.config.help}); + ev.stopPropagation(); + }, + _main_template: function() { return ( + { tag: "DIV", cls: "uiSidebarSection", children: [ + (this.config.title && { tag: "DIV", cls: "uiSidebarSection-head", onclick: this._showSection_handler, children: [ + this.config.title, + ( this.config.help && { tag: "SPAN", cls: "uiSidebarSection-help pull-right", onclick: this._showHelp_handler, text: i18n.text("General.HelpGlyph") } ) + ] }), + { tag: "DIV", cls: "uiSidebarSection-body", children: [ this.config.body ] } + ] } + ); } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css new file mode 100644 index 000000000..e8d275296 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css @@ -0,0 +1,33 @@ +.uiSplitButton { + white-space: nowrap; +} + +.uiSplitButton .uiButton:first-child { + margin-right: 0; + display: inline-block; +} + +.uiSplitButton .uiButton:first-child .uiButton-content { + border-right-width: 1; + border-right-color: #5296c7; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.uiSplitButton .uiMenuButton { + margin-left: 0; +} + +.uiSplitButton .uiButton:last-child .uiButton-content { + border-radius: 2px; + border-left-width: 1; + border-left-color: #96c6eb; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + height: 20px; +} + +.uiSplitButton .uiButton:last-child .uiButton-label { + padding: 2px 17px 2px 6px; + margin-left: -8px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js new file mode 100644 index 000000000..8785b99c5 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js @@ -0,0 +1,54 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.SplitButton = ui.AbstractWidget.extend({ + defaults: { + items: [], + label: "" + }, + _baseCls: "uiSplitButton", + init: function( parent ) { + this._super( parent ); + this.value = null; + this.button = new ui.Button({ + label: this.config.label, + onclick: this._click_handler + }); + this.menu = new ui.SelectMenuPanel({ + value: this.config.value, + items: this._getItems(), + onSelect: this._select_handler + }); + this.menuButton = new ui.MenuButton({ + label: "\u00a0", + menu: this.menu + }); + this.el = $.joey(this._main_template()); + }, + remove: function() { + this.menu.remove(); + }, + disable: function() { + this.button.disable(); + }, + enable: function() { + this.button.enable(); + }, + _click_handler: function() { + this.fire("click", this, { value: this.value } ); + }, + _select_handler: function( panel, event ) { + this.fire( "select", this, event ); + }, + _getItems: function() { + return this.config.items; + }, + _main_template: function() { + return { tag: "DIV", cls: this._baseCls, children: [ + this.button, this.menuButton + ] }; + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js new file mode 100644 index 000000000..76b6fa2dc --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js @@ -0,0 +1,16 @@ +$( function() { + + var ui = window.app.ns("ui"); + + window.builder = function() { + return new ui.SplitButton({ + label: "Default", + items: [ + { label: "Action" }, + { label: "Another Action" }, + { label: "Selected", selected: true } + ] + }); + }; + +}); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css new file mode 100644 index 000000000..502204587 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css @@ -0,0 +1,7 @@ +.uiStructuredQuery { + padding: 10px; +} + +.uiStructuredQuery-out { + min-height: 30px; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js new file mode 100644 index 000000000..aeb4b6b8f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js @@ -0,0 +1,95 @@ +(function( $, app, i18n ) { + + var ui = app.ns("ui"); + var data = app.ns("data"); + + var StructuredQuery = ui.AbstractWidget.extend({ + defaults: { + cluster: null // (required) instanceof app.services.Cluster + }, + _baseCls: "uiStructuredQuery", + init: function(parent) { + this._super(); + this.selector = new ui.IndexSelector({ + onIndexChanged: this._indexChanged_handler, + cluster: this.config.cluster + }); + this.el = $(this._main_template()); + this.out = this.el.find("DIV.uiStructuredQuery-out"); + this.attach( parent ); + }, + + _indexChanged_handler: function( index ) { + this.filter && this.filter.remove(); + this.filter = new ui.FilterBrowser({ + cluster: this.config.cluster, + index: index, + onStartingSearch: function() { this.el.find("DIV.uiStructuredQuery-out").text( i18n.text("General.Searching") ); this.el.find("DIV.uiStructuredQuery-src").hide(); }.bind(this), + onSearchSource: this._searchSource_handler, + onResults: this._results_handler + }); + this.el.find(".uiStructuredQuery-body").append(this.filter); + }, + + _results_handler: function( filter, event ) { + var typeMap = { + "json": this._jsonResults_handler, + "table": this._tableResults_handler, + "csv": this._csvResults_handler + }; + typeMap[ event.type ].call( this, event.data, event.metadata ); + }, + _jsonResults_handler: function( results ) { + this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.JsonPretty({ obj: results })); + }, + _csvResults_handler: function( results ) { + this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.CSVTable({ results: results })); + }, + _tableResults_handler: function( results, metadata ) { + // hack up a QueryDataSourceInterface so that StructuredQuery keeps working without using a Query object + var qdi = new data.QueryDataSourceInterface({ metadata: metadata, query: new data.Query() }); + var tab = new ui.Table( { + store: qdi, + height: 400, + width: this.out.innerWidth() + } ).attach(this.out.empty()); + qdi._results_handler(qdi.config.query, results); + }, + + _showRawJSON : function() { + if($("#rawJsonText").length === 0) { + var hiddenButton = $("#showRawJSON"); + var jsonText = $({tag: "P", type: "p", id: "rawJsonText"}); + jsonText.text(hiddenButton[0].value); + hiddenButton.parent().append(jsonText); + } + }, + + _searchSource_handler: function(src) { + var searchSourceDiv = this.el.find("DIV.uiStructuredQuery-src"); + searchSourceDiv.empty().append(new app.ui.JsonPretty({ obj: src })); + if(typeof JSON !== "undefined") { + var showRawJSON = $({ tag: "BUTTON", type: "button", text: i18n.text("StructuredQuery.ShowRawJson"), id: "showRawJSON", value: JSON.stringify(src), onclick: this._showRawJSON }); + searchSourceDiv.append(showRawJSON); + } + searchSourceDiv.show(); + }, + + _main_template: function() { + return { tag: "DIV", cls: this._baseCls, children: [ + this.selector, + { tag: "DIV", cls: "uiStructuredQuery-body" }, + { tag: "DIV", cls: "uiStructuredQuery-src", css: { display: "none" } }, + { tag: "DIV", cls: "uiStructuredQuery-out" } + ]}; + } + }); + + ui.StructuredQuery = ui.Page.extend({ + init: function() { + this.q = new StructuredQuery( this.config ); + this.el = this.q.el; + } + }); + +})( this.jQuery, this.app, this.i18n ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css new file mode 100644 index 000000000..ea8e0cfd4 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css @@ -0,0 +1,92 @@ +.uiTable TABLE { + border-collapse: collapse; +} + +.uiTable-body { + overflow-y: scroll; + overflow-x: auto; +} + +.uiTable-headers { + overflow-x: hidden; +} + +.uiTable-body TD { + white-space: nowrap; +} + +.uiTable-body .uiTable-header-row TH, +.uiTable-body .uiTable-header-row TH DIV { + padding-top: 0; + padding-bottom: 0; +} + +.uiTable-body .uiTable-header-cell > DIV { + height: 0; + overflow: hidden; +} + +.uiTable-headercell-menu { + float: right; +} + +.uiTable-tools { + padding: 3px 4px; + height: 14px; +} + +.uiTable-header-row { + background: #ddd; + background: -moz-linear-gradient(top, #eee, #ccc); + background: -webkit-linear-gradient(top, #eee, #ccc); +} + +.uiTable-headercell-text { + margin-right: 20px; +} + +.uiTable-headercell-menu { + display: none; +} + +.uiTable-header-row TH { + border-right: 1px solid #bbb; + padding: 0; + text-align: left; +} + +.uiTable-header-row TH > DIV { + padding: 3px 4px; + border-right: 1px solid #eee; +} + +.uiTable-headerEndCap > DIV { + width: 19px; +} + +.uiTable-header-row .uiTable-sort { + background: #ccc; + background: -moz-linear-gradient(top, #bebebe, #ccc); + background: -webkit-linear-gradient(top, #bebebe, #ccc); +} +.uiTable-header-row TH.uiTable-sort > DIV { + border-right: 1px solid #ccc; +} + +.uiTable-sort .uiTable-headercell-menu { + display: block; +} + +.uiTable TABLE TD { + border-right: 1px solid transparent; + padding: 3px 4px; +} + +.uiTable-body TABLE TR:nth-child(even) { + background: #f3f3f3; +} + +.uiTable-body TABLE TR.selected { + color: white; + background: #6060f1; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js new file mode 100644 index 000000000..eb847a056 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js @@ -0,0 +1,102 @@ +( function( $, app ) { + + var ui = app.ns("ui"); + + ui.Table = ui.AbstractWidget.extend({ + defaults: { + store: null, // (required) implements interface app.data.DataSourceInterface + height: 0, + width: 0 + }, + _baseCls: "uiTable", + init: function(parent) { + this._super(); + this.initElements(parent); + this.config.store.on("data", this._data_handler); + }, + attach: function(parent) { + if(parent) { + this._super(parent); + this._reflow(); + } + }, + initElements: function(parent) { + this.el = $.joey(this._main_template()); + this.body = this.el.find(".uiTable-body"); + this.headers = this.el.find(".uiTable-headers"); + this.tools = this.el.find(".uiTable-tools"); + this.attach( parent ); + }, + _data_handler: function(store) { + this.tools.text(store.summary); + this.headers.empty().append(this._header_template(store.columns)); + this.body.empty().append(this._body_template(store.data, store.columns)); + this._reflow(); + }, + _reflow: function() { + var firstCol = this.body.find("TR:first TH.uiTable-header-cell > DIV"), + headers = this.headers.find("TR:first TH.uiTable-header-cell > DIV"); + for(var i = 0; i < headers.length; i++) { + $(headers[i]).width( $(firstCol[i]).width() ); + } + this._scroll_handler(); + }, + _scroll_handler: function(ev) { + this.el.find(".uiTable-headers").scrollLeft(this.body.scrollLeft()); + }, + _dataClick_handler: function(ev) { + var row = $(ev.target).closest("TR"); + if(row.length) { + this.fire("rowClick", this, { row: row } ); + } + }, + _headerClick_handler: function(ev) { + var header = $(ev.target).closest("TH.uiTable-header-cell"); + if(header.length) { + this.fire("headerClick", this, { header: header, column: header.data("column"), dir: header.data("dir") }); + } + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), css: { width: this.config.width + "px" }, cls: this._baseCls, children: [ + { tag: "DIV", cls: "uiTable-tools" }, + { tag: "DIV", cls: "uiTable-headers", onclick: this._headerClick_handler }, + { tag: "DIV", cls: "uiTable-body", + onclick: this._dataClick_handler, + onscroll: this._scroll_handler, + css: { height: this.config.height + "px", width: this.config.width + "px" } + } + ] }; + }, + _header_template: function(columns) { + var ret = { tag: "TABLE", children: [ this._headerRow_template(columns) ] }; + ret.children[0].children.push(this._headerEndCap_template()); + return ret; + }, + _headerRow_template: function(columns) { + return { tag: "TR", cls: "uiTable-header-row", children: columns.map(function(column) { + var dir = ((this.config.store.sort.column === column) && this.config.store.sort.dir) || "none"; + return { tag: "TH", data: { column: column, dir: dir }, cls: "uiTable-header-cell" + ((dir !== "none") ? " uiTable-sort" : ""), children: [ + { tag: "DIV", children: [ + { tag: "DIV", cls: "uiTable-headercell-menu", text: dir === "asc" ? "\u25b2" : "\u25bc" }, + { tag: "DIV", cls: "uiTable-headercell-text", text: column } + ]} + ]}; + }, this)}; + }, + _headerEndCap_template: function() { + return { tag: "TH", cls: "uiTable-headerEndCap", children: [ { tag: "DIV" } ] }; + }, + _body_template: function(data, columns) { + return { tag: "TABLE", children: [] + .concat(this._headerRow_template(columns)) + .concat(data.map(function(row) { + return { tag: "TR", data: { row: row }, cls: "uiTable-row", children: columns.map(function(column){ + return { tag: "TD", cls: "uiTable-cell", children: [ { tag: "DIV", text: (row[column] || "").toString() } ] }; + })}; + })) + }; + } + + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js new file mode 100644 index 000000000..c7348962d --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js @@ -0,0 +1,24 @@ +(function( app ) { + + var ui = app.ns("ui"); + + ui.TextField = ui.AbstractField.extend({ + init: function() { + this._super(); + }, + _keyup_handler: function() { + this.fire("change", this ); + }, + _main_template: function() { + return { tag: "DIV", id: this.id(), cls: "uiField uiTextField", children: [ + { tag: "INPUT", + type: "text", + name: this.config.name, + placeholder: this.config.placeholder, + onkeyup: this._keyup_handler + } + ]}; + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js new file mode 100644 index 000000000..25790d489 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js @@ -0,0 +1,13 @@ +$( function() { + + var ui = window.app.ns("ui"); + + window.builder = function() { return ( + { tag: "DIV", children: [ + new ui.TextField({}), + new ui.TextField({ placeholder: "placeholder" }), + new ui.TextField({ onchange: function( tf ) { console.log( tf.val() ); } }) + ] } + ); }; + +}); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css new file mode 100644 index 000000000..e5cf72f1f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css @@ -0,0 +1,24 @@ +.uiToolbar { + height: 28px; + background: #fdfefe; + background: -moz-linear-gradient(top, #fdfefe, #eaedef); + background: -webkit-linear-gradient(top, #fdfefe, #eaedef); + border-bottom: 1px solid #d2d5d7; + padding: 3px 10px; +} + +.uiToolbar H2 { + display: inline-block; + font-size: 120%; + margin: 0; + padding: 5px 20px 5px 0; +} + +.uiToolbar .uiTextField { + display: inline-block; +} + +.uiToolbar .uiTextField INPUT { + padding-top: 2px; + padding-bottom: 5px; +} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js new file mode 100644 index 000000000..d64eefe32 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js @@ -0,0 +1,25 @@ +(function( $, app ) { + + var ui = app.ns("ui"); + + ui.Toolbar = ui.AbstractWidget.extend({ + defaults: { + label: "", + left: [], + right: [] + }, + init: function(parent) { + this._super(); + this.el = $.joey(this._main_template()); + }, + _main_template: function() { + return { tag: "DIV", cls: "uiToolbar", children: [ + { tag: "DIV", cls: "pull-left", children: [ + { tag: "H2", text: this.config.label } + ].concat(this.config.left) }, + { tag: "DIV", cls: "pull-right", children: this.config.right } + ]}; + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js new file mode 100644 index 000000000..80142637c --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js @@ -0,0 +1,50 @@ +/** + * base class for creating inheritable classes + * based on resigs 'Simple Javascript Inheritance Class' (based on base2 and prototypejs) + * modified with static super and auto config + * @name Class + * @constructor + */ +(function( $, app ){ + + var ux = app.ns("ux"); + + var initializing = false, fnTest = /\b_super\b/; + + ux.Class = function(){}; + + ux.Class.extend = function(prop) { + function Class() { + if(!initializing) { + var args = Array.prototype.slice.call(arguments); + this.config = $.extend( function(t) { // automatically construct a config object based on defaults and last item passed into the constructor + return $.extend(t._proto && t._proto() && arguments.callee(t._proto()) || {}, t.defaults); + } (this) , args.pop() ); + this.init && this.init.apply(this, args); // automatically run the init function when class created + } + } + + initializing = true; + var prototype = new this(); + initializing = false; + + var _super = this.prototype; + prototype._proto = function() { + return _super; + }; + + for(var name in prop) { + prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ? + (function(name, fn){ + return function() { this._super = _super[name]; return fn.apply(this, arguments); }; + })(name, prop[name]) : prop[name]; + } + + Class.prototype = prototype; + Class.constructor = Class; + + Class.extend = arguments.callee; // make class extendable + + return Class; + }; +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js new file mode 100644 index 000000000..17ca9be1f --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js @@ -0,0 +1,124 @@ +(function( $, app ) { + + var ux = app.ns("ux"); + + /** + * Provides drag and drop functionality
    + * a DragDrop instance is created for each usage pattern and then used over and over again
    + * first a dragObj is defined - this is the jquery node that will be dragged around
    + * second, the event callbacks are defined - these allow you control the ui during dragging and run functions when successfully dropping
    + * thirdly drop targets are defined - this is a list of DOM nodes, the constructor works in one of two modes: + *
  • without targets - objects can be picked up and dragged around, dragStart and dragStop events fire
  • + *
  • with targets - as objects are dragged over targets dragOver, dragOut and DragDrop events fire + * to start dragging call the DragDrop.pickup_handler() function, dragging stops when the mouse is released. + * @constructor + * The following options are supported + *
    targetSelector
    + *
    an argument passed directly to jquery to create a list of targets, as such it can be a CSS style selector, or an array of DOM nodes
    if target selector is null the DragDrop does Drag only and will not fire dragOver dragOut and dragDrop events
    + *
    pickupSelector
    + *
    a jquery selector. The pickup_handler is automatically bound to matched elements (eg clicking on these elements starts the drag). if pickupSelector is null, the pickup_handler must be manually bound $(el).bind("mousedown", dragdrop.pickup_handler)
    + *
    dragObj
    + *
    the jQuery element to drag around when pickup is called. If not defined, dragObj must be set in onDragStart
    + *
    draggingClass
    + *
    the class(es) added to items when they are being dragged
    + * The following observables are supported + *
    dragStart
    + *
    a callback when start to drag
    function(jEv)
    + *
    dragOver
    + *
    a callback when we drag into a target
    function(jEl)
    + *
    dragOut
    + *
    a callback when we drag out of a target, or when we drop over a target
    function(jEl)
    + *
    dragDrop
    + *
    a callback when we drop on a target
    function(jEl)
    + *
    dragStop
    + *
    a callback when we stop dragging
    function(jEv)
    + */ + ux.DragDrop = ux.Observable.extend({ + defaults : { + targetsSelector : null, + pickupSelector: null, + dragObj : null, + draggingClass : "dragging" + }, + + init: function(options) { + this._super(); // call the class initialiser + + this.drag_handler = this.drag.bind(this); + this.drop_handler = this.drop.bind(this); + this.pickup_handler = this.pickup.bind(this); + this.targets = []; + this.dragObj = null; + this.dragObjOffset = null; + this.currentTarget = null; + if(this.config.pickupSelector) { + $(this.config.pickupSelector).bind("mousedown", this.pickup_handler); + } + }, + + drag : function(jEv) { + jEv.preventDefault(); + var mloc = acx.vector( this.lockX || jEv.pageX, this.lockY || jEv.pageY ); + this.dragObj.css(mloc.add(this.dragObjOffset).asOffset()); + if(this.targets.length === 0) { + return; + } + if(this.currentTarget !== null && mloc.within(this.currentTarget[1], this.currentTarget[2])) { + return; + } + if(this.currentTarget !== null) { + this.fire('dragOut', this.currentTarget[0]); + this.currentTarget = null; + } + for(var i = 0; i < this.targets.length; i++) { + if(mloc.within(this.targets[i][1], this.targets[i][2])) { + this.currentTarget = this.targets[i]; + break; + } + } + if(this.currentTarget !== null) { + this.fire('dragOver', this.currentTarget[0]); + } + }, + + drop : function(jEv) { + $(document).unbind("mousemove", this.drag_handler); + $(document).unbind("mouseup", this.drop_handler); + this.dragObj.removeClass(this.config.draggingClass); + if(this.currentTarget !== null) { + this.fire('dragOut', this.currentTarget[0]); + this.fire('dragDrop', this.currentTarget[0]); + } + this.fire('dragStop', jEv); + this.dragObj = null; + }, + + pickup : function(jEv, opts) { + $.extend(this.config, opts); + this.fire('dragStart', jEv); + this.dragObj = this.dragObj || this.config.dragObj; + this.dragObjOffset = this.config.dragObjOffset || acx.vector(this.dragObj.offset()).sub(jEv.pageX, jEv.pageY); + this.lockX = this.config.lockX ? jEv.pageX : 0; + this.lockY = this.config.lockY ? jEv.pageY : 0; + this.dragObj.addClass(this.config.draggingClass); + if(!this.dragObj.get(0).parentNode || this.dragObj.get(0).parentNode.nodeType === 11) { // 11 = document fragment + $(document.body).append(this.dragObj); + } + if(this.config.targetsSelector) { + this.currentTarget = null; + var targets = ( this.targets = [] ); + // create an array of elements optimised for rapid collision detection calculation + $(this.config.targetsSelector).each(function(i, el) { + var jEl = $(el); + var tl = acx.vector(jEl.offset()); + var br = tl.add(jEl.width(), jEl.height()); + targets.push([jEl, tl, br]); + }); + } + $(document).bind("mousemove", this.drag_handler); + $(document).bind("mouseup", this.drop_handler); + this.drag_handler(jEv); + } + }); + +})( this.jQuery, this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js new file mode 100644 index 000000000..ce4064f45 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js @@ -0,0 +1,25 @@ +(function( app ) { + + var ux = app.ns("ux"); + + ux.FieldCollection = ux.Observable.extend({ + defaults: { + fields: [] // the collection of fields + }, + init: function() { + this._super(); + this.fields = this.config.fields; + }, + validate: function() { + return this.fields.reduce(function(r, field) { + return r && field.validate(); + }, true); + }, + getData: function(type) { + return this.fields.reduce(function(r, field) { + r[field.name] = field.val(); return r; + }, {}); + } + }); + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js new file mode 100644 index 000000000..013039787 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js @@ -0,0 +1,46 @@ +(function( app ) { + + var ux = app.ns("ux"); + + ux.Observable = ux.Class.extend((function() { + return { + init: function() { + this.observers = {}; + for( var opt in this.config ) { // automatically install observers that are defined in the configuration + if( opt.indexOf( 'on' ) === 0 ) { + this.on( opt.substring(2) , this.config[ opt ] ); + } + } + }, + _getObs: function( type ) { + return ( this.observers[ type.toLowerCase() ] || ( this.observers[ type.toLowerCase() ] = [] ) ); + }, + on: function( type, fn, params, thisp ) { + this._getObs( type ).push( { "cb" : fn, "args" : params || [] , "cx" : thisp || this } ); + return this; + }, + fire: function( type ) { + var params = Array.prototype.slice.call( arguments, 1 ); + this._getObs( type ).slice().forEach( function( ob ) { + ob["cb"].apply( ob["cx"], ob["args"].concat( params ) ); + } ); + return this; + }, + removeAllObservers: function() { + this.observers = {}; + }, + removeObserver: function( type, fn ) { + var obs = this._getObs( type ), + index = obs.reduce( function(p, t, i) { return (t.cb === fn) ? i : p; }, -1 ); + if(index !== -1) { + obs.splice( index, 1 ); + } + return this; // make observable functions chainable + }, + hasObserver: function( type ) { + return !! this._getObs( type ).length; + } + }; + })()); + +})( this.app ); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js new file mode 100644 index 000000000..953e4a095 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js @@ -0,0 +1,21 @@ +(function( app ) { + + var ux = app.ns("ux"); + + var extend = ux.Observable.extend; + var instance = function() { + if( ! ("me" in this) ) { + this.me = new this(); + } + return this.me; + }; + + ux.Singleton = ux.Observable.extend({}); + + ux.Singleton.extend = function() { + var Self = extend.apply( this, arguments ); + Self.instance = instance; + return Self; + }; + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js new file mode 100644 index 000000000..96ef6a282 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js @@ -0,0 +1,41 @@ +describe("app.ux.singleton", function(){ + +var Singleton = window.app.ux.Singleton; + + describe("creating a singleton", function() { + var X = Singleton.extend({ + foo: function() { + return "bar"; + } + }); + + var Y = Singleton.extend({ + bar: function() { + return "baz"; + } + }); + + it("should have properties like a normal class", function() { + var a = X.instance(); + + expect( a instanceof X ).toBe( true ); + expect( a.foo() ).toBe( "bar" ); + }); + + it("should return single instance each time instance() is called", function() { + var a = X.instance(); + var b = X.instance(); + + expect( a ).toBe( b ); + }); + + it("should not share instances with different singletons", function() { + var a = X.instance(); + var c = Y.instance(); + + expect( a ).not.toBe( c ); + }); + + }); + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css new file mode 100644 index 000000000..7d829c4ce --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css @@ -0,0 +1,20 @@ +TABLE.table { + border-collapse: collapse; +} + + +TABLE.table TH { + font-weight: normal; + text-align: left; + vertical-align: middle; +} + +TABLE.table TBODY.striped TR:nth-child(odd) { + background: #eee; +} + +TABLE.table H3 { + margin: 0; + font-weight: bold; + font-size: 140%; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js new file mode 100644 index 000000000..db76b1326 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js @@ -0,0 +1,81 @@ +describe("app.ut.byteSize_template", function() { + + describe("byteSize_template()", function() { + var byteSize_template = window.app.ut.byteSize_template; + + it("should postfix with a B and have not decimal for number less than 1000", function() { + expect( byteSize_template( 0 ) ).toBe( "0B" ); + expect( byteSize_template( 1 ) ).toBe( "1B" ); + expect( byteSize_template( 10 ) ).toBe( "10B" ); + expect( byteSize_template( 100 ) ).toBe( "100B" ); + expect( byteSize_template( 999 ) ).toBe( "999B" ); + }); + + it("should have 0.xxX for values between 1000 and 1023", function() { + expect( byteSize_template( 1000 ) ).toBe( "0.98ki" ); + expect( byteSize_template( 1024 * 1000 ) ).toBe( "0.98Mi" ); + }); + + it("should always have three significant digits", function() { + expect( byteSize_template( 1023 ) ).toBe( "1.00ki" ); + expect( byteSize_template( 1024 ) ).toBe( "1.00ki" ); + expect( byteSize_template( 1025 ) ).toBe( "1.00ki" ); + expect( byteSize_template( 1024 * 5 ) ).toBe( "5.00ki" ); + expect( byteSize_template( 1024 * 55 ) ).toBe( "55.0ki" ); + expect( byteSize_template( 1024 * 555 ) ).toBe( "555ki" ); + }); + + it("should have the correct postfix", function() { + expect( byteSize_template( 3 * Math.pow( 1024, 1) ) ).toBe( "3.00ki" ); + expect( byteSize_template( 3 * Math.pow( 1024, 2) ) ).toBe( "3.00Mi" ); + expect( byteSize_template( 3 * Math.pow( 1024, 3) ) ).toBe( "3.00Gi" ); + expect( byteSize_template( 3 * Math.pow( 1024, 4) ) ).toBe( "3.00Ti" ); + expect( byteSize_template( 3 * Math.pow( 1024, 5) ) ).toBe( "3.00Pi" ); + expect( byteSize_template( 3 * Math.pow( 1024, 6) ) ).toBe( "3.00Ei" ); + expect( byteSize_template( 3 * Math.pow( 1024, 7) ) ).toBe( "3.00Zi" ); + expect( byteSize_template( 3 * Math.pow( 1024, 8) ) ).toBe( "3.00Yi" ); + }); + + it("should show an overflow for stupidly big numbers", function() { + expect( byteSize_template( 3 * Math.pow( 1024, 10) ) ).toBe( "3.00..E" ); + }); + }); + + describe("count_template()", function() { + var count_template = window.app.ut.count_template; + + it("should not postfix and not decimal for number less than 1000", function() { + expect( count_template( 0 ) ).toBe( "0" ); + expect( count_template( 1 ) ).toBe( "1" ); + expect( count_template( 10 ) ).toBe( "10" ); + expect( count_template( 100 ) ).toBe( "100" ); + expect( count_template( 999 ) ).toBe( "999" ); + }); + + it("should always have three significant digits", function() { + expect( count_template( 1000 ) ).toBe( "1.00k" ); + expect( count_template( 1005 ) ).toBe( "1.00k" ); + expect( count_template( 1055 ) ).toBe( "1.05k" ); + expect( count_template( 1000 * 5 ) ).toBe( "5.00k" ); + expect( count_template( 1000 * 55 ) ).toBe( "55.0k" ); + expect( count_template( 1000 * 555 ) ).toBe( "555k" ); + }); + + it("should have the correct postfix", function() { + expect( count_template( 3 * Math.pow( 1000, 1) ) ).toBe( "3.00k" ); + expect( count_template( 3 * Math.pow( 1000, 2) ) ).toBe( "3.00M" ); + expect( count_template( 3 * Math.pow( 1000, 3) ) ).toBe( "3.00G" ); + expect( count_template( 3 * Math.pow( 1000, 4) ) ).toBe( "3.00T" ); + expect( count_template( 3 * Math.pow( 1000, 5) ) ).toBe( "3.00P" ); + expect( count_template( 3 * Math.pow( 1000, 6) ) ).toBe( "3.00E" ); + expect( count_template( 3 * Math.pow( 1000, 7) ) ).toBe( "3.00Z" ); + expect( count_template( 3 * Math.pow( 1000, 8) ) ).toBe( "3.00Y" ); + }); + + it("should show an overflow for stupidly big numbers", function() { + expect( count_template( 3 * Math.pow( 1000, 10) ) ).toBe( "3.00..E" ); + }); + }); + + +}); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js new file mode 100644 index 000000000..3fdb5087a --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js @@ -0,0 +1,32 @@ +(function( app ) { + + var ut = app.ns("ut"); + + ut.option_template = function(v) { return { tag: "OPTION", value: v, text: v }; }; + + ut.require_template = function(f) { return f.require ? { tag: "SPAN", cls: "require", text: "*" } : null; }; + + + var sib_prefix = ['B','ki','Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi']; + + ut.byteSize_template = function(n) { + var i = 0; + while( n >= 1000 ) { + i++; + n /= 1024; + } + return (i === 0 ? n.toString() : n.toFixed( 3 - parseInt(n,10).toString().length )) + ( sib_prefix[ i ] || "..E" ); + }; + + var sid_prefix = ['','k','M', 'G', 'T', 'P', 'E', 'Z', 'Y']; + + ut.count_template = function(n) { + var i = 0; + while( n >= 1000 ) { + i++; + n /= 1000; + } + return i === 0 ? n.toString() : ( n.toFixed( 3 - parseInt(n,10).toString().length ) + ( sid_prefix[ i ] || "..E" ) ); + }; + +})( this.app ); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js new file mode 100644 index 000000000..b8095fd61 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js @@ -0,0 +1,203 @@ +/*! + * date-range-parser.js + * Contributed to the Apache Software Foundation by: + * Ben Birch - Aconex + * fork me at https://github.com/mobz/date-range-parser + +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. + +*/ + +(function() { + + var drp = window.dateRangeParser = {}; + + drp.defaultRange = 1000 * 60 * 60 * 24; + + drp.now = null; // set a different value for now than the time at function invocation + + drp.parse = function(v) { + try { + var r = drp._parse(v); + r.end && r.end--; // remove 1 millisecond from the final end range + } catch(e) { + r = null; + } + return r; + }; + + drp.print = function(t, p) { + var format = ["", "-", "-", " ", ":", ":", "."]; + var da = makeArray(t); + var str = ""; + for(var i = 0; i <= p; i++) { + str += format[i] + (da[i] < 10 ? "0" : "") + da[i]; + } + return str; + }; + + (function() { + drp._relTokens = {}; + + var values = { + "yr" : 365*24*60*60*1000, + "mon" : 31*24*60*60*1000, + "day" : 24*60*60*1000, + "hr" : 60*60*1000, + "min" : 60*1000, + "sec" : 1000 + }; + + var alias_lu = { + "yr" : "y,yr,yrs,year,years", + "mon" : "mo,mon,mos,mons,month,months", + "day" : "d,dy,dys,day,days", + "hr" : "h,hr,hrs,hour,hours", + "min" : "m,min,mins,minute,minutes", + "sec" : "s,sec,secs,second,seconds" + }; + + for(var key in alias_lu) { + if(alias_lu.hasOwnProperty(key)) { + var aliases = alias_lu[key].split(","); + for(var i = 0; i < aliases.length; i++) { + drp._relTokens[aliases[i]] = values[key]; + } + } + } + })(); + + function makeArray(d) { + var da = new Date(d); + return [ da.getUTCFullYear(), da.getUTCMonth()+1, da.getUTCDate(), da.getUTCHours(), da.getUTCMinutes(), da.getUTCSeconds(), da.getUTCMilliseconds() ]; + } + + function fromArray(a) { + var d = [].concat(a); d[1]--; + return Date.UTC.apply(null, d); + } + + drp._parse = function parse(v) { + var now = this.now || new Date().getTime(); + + function precArray(d, p, offset) { + var tn = makeArray(d); + tn[p] += offset || 0; + for(var i = p+1; i < 7; i++) { + tn[i] = i < 3 ? 1 : 0; + } + return tn; + } + function makePrecRange(dt, p, r) { + var ret = { }; + ret.start = fromArray(dt); + dt[p] += r || 1; + ret.end = fromArray(dt); + return ret; + } + function procTerm(term) { + var m = term.replace(/\s/g, "").toLowerCase().match(/^([a-z ]+)$|^([ 0-9:-]+)$|^(\d+[a-z]+)$/); + if(m[1]) { // matches ([a-z ]+) + function dra(p, o, r) { + var dt = precArray(now, p, o); + if(r) { + dt[2] -= new Date(fromArray(dt)).getUTCDay(); + } + return makePrecRange(dt, p, r); + } + switch( m[1]) { + case "now" : return { start: now, end: now, now: now }; + case "today" : return dra( 2, 0 ); + case "thisweek" : return dra( 2, 0, 7 ); + case "thismonth" : return dra( 1, 0 ); + case "thisyear" : return dra( 0, 0 ); + case "yesterday" : return dra( 2, -1 ); + case "lastweek" : return dra( 2, -7, 7 ); + case "lastmonth" : return dra( 1, -1 ); + case "lastyear" : return dra( 0, -1 ); + case "tomorrow" : return dra( 2, 1 ); + case "nextweek" : return dra( 2, 7, 7 ); + case "nextmonth" : return dra( 1, 1 ); + case "nextyear" : return dra(0, 1 ); + } + throw "unknown token " + m[1]; + } else if(m[2]) { // matches ([ 0-9:-]+) + dn = makeArray(now); + var dt = m[2].match(/^(?:(\d{4})(?:\-(\d\d))?(?:\-(\d\d))?)? ?(?:(\d{1,2})(?:\:(\d\d)(?:\:(\d\d))?)?)?$/); + dt.shift(); + for(var p = 0, z = false, i = 0; i < 7; i++) { + if(dt[i]) { + dn[i] = parseInt(dt[i], 10); + p = i; + z = true; + } else { + if(z) + dn[i] = i < 3 ? 1 : 0; + } + } + return makePrecRange(dn, p); + } else if(m[3]) { // matches (\d+[a-z]{1,4}) + var dr = m[3].match(/(\d+)\s*([a-z]+)/i); + var n = parseInt(dr[1], 10); + return { rel: n * drp._relTokens[dr[2]] }; + } + throw "unknown term " + term; + } + + if(!v) { + return { start: null, end: null }; + } + var terms = v.split(/\s*([^<>]*[^<>-])?\s*(->|<>|<)?\s*([^<>]+)?\s*/); + + var term1 = terms[1] ? procTerm(terms[1]) : null; + var op = terms[2] || ""; + var term2 = terms[3] ? procTerm(terms[3]) : null; + + if(op === "<" || op === "->" ) { + if(term1 && !term2) { + return { start: term1.start, end: null }; + } else if(!term1 && term2) { + return { start: null, end: term2.end }; + } else { + if(term2.rel) { + return { start: term1.start, end: term1.end + term2.rel }; + } else if(term1.rel) { + return { start: term2.start - term1.rel, end: term2.end }; + } else { + return { start: term1.start, end: term2.end }; + } + } + } else if(op === "<>") { + if(!term2) { + return { start: term1.start - drp.defaultRange, end: term1.end + drp.defaultRange } + } else { + if(! ("rel" in term2)) throw "second term did not hav a range"; + return { start: term1.start - term2.rel, end: term1.end + term2.rel }; + } + } else { + if(term1.rel) { + return { start: now - term1.rel, end: now + term1.rel }; + } else if(term1.now) { + return { start: term1.now - drp.defaultRange, end: term1.now + drp.defaultRange }; + } else { + return { start: term1.start, end: term1.end }; + } + } + throw "could not process value " + v; + }; +})(); \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css new file mode 100644 index 000000000..be7e15cb3 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css @@ -0,0 +1,1338 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('fonts/fontawesome-webfont.eot?v=4.0.3'); + src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +.fa { + display: inline-block; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.3333333333333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.2857142857142858em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.142857142857143em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.142857142857143em; + width: 2.142857142857143em; + top: 0.14285714285714285em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.8571428571428572em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -o-transform: rotate(0deg); + } + 100% { + -o-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +.fa-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-asc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-desc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-reply-all:before { + content: "\f122"; +} +.fa-mail-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css new file mode 100644 index 000000000..449d6ac55 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 000000000..8b0f54e47 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot new file mode 100755 index 000000000..7c79c6a6b Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg new file mode 100755 index 000000000..45fdf3383 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg @@ -0,0 +1,414 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100755 index 000000000..e89738de5 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff new file mode 100755 index 000000000..8c1748aab Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js new file mode 100644 index 000000000..2568aa0e9 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js @@ -0,0 +1,5205 @@ +/*! + * Raphael 1.5.2 - JavaScript Vector Library + * + * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com) + * Licensed under the MIT (http://raphaeljs.com/license.html) license. + * from fork at git@github.com:mobz/g.raphael.git + */ +(function () { + function R() { + if (R.is(arguments[0], array)) { + var a = arguments[0], + cnv = create[apply](R, a.splice(0, 3 + R.is(a[0], nu))), + res = cnv.set(); + for (var i = 0, ii = a[length]; i < ii; i++) { + var j = a[i] || {}; + elements[has](j.type) && res[push](cnv[j.type]().attr(j)); + } + return res; + } + return create[apply](R, arguments); + } + R.version = "1.5.2"; + var separator = /[, ]+/, + elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1}, + formatrg = /\{(\d+)\}/g, + proto = "prototype", + has = "hasOwnProperty", + doc = document, + win = window, + oldRaphael = { + was: Object[proto][has].call(win, "Raphael"), + is: win.Raphael + }, + Paper = function () { + this.customAttributes = {}; + }, + paperproto, + appendChild = "appendChild", + apply = "apply", + concat = "concat", + supportsTouch = "createTouch" in doc, + E = "", + S = " ", + Str = String, + split = "split", + events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[split](S), + touchMap = { + mousedown: "touchstart", + mousemove: "touchmove", + mouseup: "touchend" + }, + join = "join", + length = "length", + lowerCase = Str[proto].toLowerCase, + math = Math, + mmax = math.max, + mmin = math.min, + abs = math.abs, + pow = math.pow, + PI = math.PI, + nu = "number", + string = "string", + array = "array", + toString = "toString", + fillString = "fill", + objectToString = Object[proto][toString], + paper = {}, + push = "push", + ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i, + colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i, + isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1}, + bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/, + round = math.round, + setAttribute = "setAttribute", + toFloat = parseFloat, + toInt = parseInt, + ms = " progid:DXImageTransform.Microsoft", + upperCase = Str[proto].toUpperCase, + availableAttrs = {blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0}, + availableAnimAttrs = {along: "along", blur: nu, "clip-rect": "csv", cx: nu, cy: nu, fill: "colour", "fill-opacity": nu, "font-size": nu, height: nu, opacity: nu, path: "path", r: nu, rotation: "csv", rx: nu, ry: nu, scale: "csv", stroke: "colour", "stroke-opacity": nu, "stroke-width": nu, translation: "csv", width: nu, x: nu, y: nu}, + rp = "replace", + animKeyFrames= /^(from|to|\d+%?)$/, + commaSpaces = /\s*,\s*/, + hsrg = {hs: 1, rg: 1}, + p2s = /,?([achlmqrstvxz]),?/gi, + pathCommand = /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig, + pathValues = /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig, + radial_gradient = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/, + sortByKey = function (a, b) { + return a.key - b.key; + }; + + R.type = (win.SVGAngle || doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML"); + if (R.type == "VML") { + var d = doc.createElement("div"), + b; + d.innerHTML = ''; + b = d.firstChild; + b.style.behavior = "url(#default#VML)"; + if (!(b && typeof b.adj == "object")) { + return R.type = null; + } + d = null; + } + R.svg = !(R.vml = R.type == "VML"); + Paper[proto] = R[proto]; + paperproto = Paper[proto]; + R._id = 0; + R._oid = 0; + R.fn = {}; + R.is = function (o, type) { + type = lowerCase.call(type); + if (type == "finite") { + return !isnan[has](+o); + } + return (type == "null" && o === null) || + (type == typeof o) || + (type == "object" && o === Object(o)) || + (type == "array" && Array.isArray && Array.isArray(o)) || + objectToString.call(o).slice(8, -1).toLowerCase() == type; + }; + R.angle = function (x1, y1, x2, y2, x3, y3) { + if (x3 == null) { + var x = x1 - x2, + y = y1 - y2; + if (!x && !y) { + return 0; + } + return ((x < 0) * 180 + math.atan(-y / -x) * 180 / PI + 360) % 360; + } else { + return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3); + } + }; + R.rad = function (deg) { + return deg % 360 * PI / 180; + }; + R.deg = function (rad) { + return rad * 180 / PI % 360; + }; + R.snapTo = function (values, value, tolerance) { + tolerance = R.is(tolerance, "finite") ? tolerance : 10; + if (R.is(values, array)) { + var i = values.length; + while (i--) if (abs(values[i] - value) <= tolerance) { + return values[i]; + } + } else { + values = +values; + var rem = value % values; + if (rem < tolerance) { + return value - rem; + } + if (rem > values - tolerance) { + return value - rem + values; + } + } + return value; + }; + function createUUID() { + // http://www.ietf.org/rfc/rfc4122.txt + var s = [], + i = 0; + for (; i < 32; i++) { + s[i] = (~~(math.random() * 16))[toString](16); + } + s[12] = 4; // bits 12-15 of the time_hi_and_version field to 0010 + s[16] = ((s[16] & 3) | 8)[toString](16); // bits 6-7 of the clock_seq_hi_and_reserved to 01 + return "r-" + s[join](""); + } + + R.setWindow = function (newwin) { + win = newwin; + doc = win.document; + }; + // colour utilities + var toHex = function (color) { + if (R.vml) { + // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/ + var trim = /^\s+|\s+$/g; + var bod; + try { + var docum = new ActiveXObject("htmlfile"); + docum.write(""); + docum.close(); + bod = docum.body; + } catch(e) { + bod = createPopup().document.body; + } + var range = bod.createTextRange(); + toHex = cacher(function (color) { + try { + bod.style.color = Str(color)[rp](trim, E); + var value = range.queryCommandValue("ForeColor"); + value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16); + return "#" + ("000000" + value[toString](16)).slice(-6); + } catch(e) { + return "none"; + } + }); + } else { + var i = doc.createElement("i"); + i.title = "Rapha\xebl Colour Picker"; + i.style.display = "none"; + doc.body[appendChild](i); + toHex = cacher(function (color) { + i.style.color = color; + return doc.defaultView.getComputedStyle(i, E).getPropertyValue("color"); + }); + } + return toHex(color); + }, + hsbtoString = function () { + return "hsb(" + [this.h, this.s, this.b] + ")"; + }, + hsltoString = function () { + return "hsl(" + [this.h, this.s, this.l] + ")"; + }, + rgbtoString = function () { + return this.hex; + }; + R.hsb2rgb = function (h, s, b, o) { + if (R.is(h, "object") && "h" in h && "s" in h && "b" in h) { + b = h.b; + s = h.s; + h = h.h; + o = h.o; + } + return R.hsl2rgb(h, s, b / 2, o); + }; + R.hsl2rgb = function (h, s, l, o) { + if (R.is(h, "object") && "h" in h && "s" in h && "l" in h) { + l = h.l; + s = h.s; + h = h.h; + } + if (h > 1 || s > 1 || l > 1) { + h /= 360; + s /= 100; + l /= 100; + } + var rgb = {}, + channels = ["r", "g", "b"], + t2, t1, t3, r, g, b; + if (!s) { + rgb = { + r: l, + g: l, + b: l + }; + } else { + if (l < .5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + t1 = 2 * l - t2; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + t3 < 0 && t3++; + t3 > 1 && t3--; + if (t3 * 6 < 1) { + rgb[channels[i]] = t1 + (t2 - t1) * 6 * t3; + } else if (t3 * 2 < 1) { + rgb[channels[i]] = t2; + } else if (t3 * 3 < 2) { + rgb[channels[i]] = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + rgb[channels[i]] = t1; + } + } + } + rgb.r *= 255; + rgb.g *= 255; + rgb.b *= 255; + rgb.hex = "#" + (16777216 | rgb.b | (rgb.g << 8) | (rgb.r << 16)).toString(16).slice(1); + R.is(o, "finite") && (rgb.opacity = o); + rgb.toString = rgbtoString; + return rgb; + }; + R.rgb2hsb = function (red, green, blue) { + if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) { + blue = red.b; + green = red.g; + red = red.r; + } + if (green == null && R.is(red, string)) { + var clr = R.getRGB(red); + red = clr.r; + green = clr.g; + blue = clr.b; + } + if (red > 1 || green > 1 || blue > 1) { + red /= 255; + green /= 255; + blue /= 255; + } + var max = mmax(red, green, blue), + min = mmin(red, green, blue), + hue, + saturation, + brightness = max; + if (min == max) { + return {h: 0, s: 0, b: max, toString: hsbtoString}; + } else { + var delta = (max - min); + saturation = delta / max; + if (red == max) { + hue = (green - blue) / delta; + } else if (green == max) { + hue = 2 + ((blue - red) / delta); + } else { + hue = 4 + ((red - green) / delta); + } + hue /= 6; + hue < 0 && hue++; + hue > 1 && hue--; + } + return {h: hue, s: saturation, b: brightness, toString: hsbtoString}; + }; + R.rgb2hsl = function (red, green, blue) { + if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) { + blue = red.b; + green = red.g; + red = red.r; + } + if (green == null && R.is(red, string)) { + var clr = R.getRGB(red); + red = clr.r; + green = clr.g; + blue = clr.b; + } + if (red > 1 || green > 1 || blue > 1) { + red /= 255; + green /= 255; + blue /= 255; + } + var max = mmax(red, green, blue), + min = mmin(red, green, blue), + h, + s, + l = (max + min) / 2, + hsl; + if (min == max) { + hsl = {h: 0, s: 0, l: l}; + } else { + var delta = max - min; + s = l < .5 ? delta / (max + min) : delta / (2 - max - min); + if (red == max) { + h = (green - blue) / delta; + } else if (green == max) { + h = 2 + (blue - red) / delta; + } else { + h = 4 + (red - green) / delta; + } + h /= 6; + h < 0 && h++; + h > 1 && h--; + hsl = {h: h, s: s, l: l}; + } + hsl.toString = hsltoString; + return hsl; + }; + R._path2string = function () { + return this.join(",")[rp](p2s, "$1"); + }; + function cacher(f, scope, postprocessor) { + function newf() { + var arg = Array[proto].slice.call(arguments, 0), + args = arg[join]("\u25ba"), + cache = newf.cache = newf.cache || {}, + count = newf.count = newf.count || []; + if (cache[has](args)) { + return postprocessor ? postprocessor(cache[args]) : cache[args]; + } + count[length] >= 1e3 && delete cache[count.shift()]; + count[push](args); + cache[args] = f[apply](scope, arg); + return postprocessor ? postprocessor(cache[args]) : cache[args]; + } + return newf; + } + + R.getRGB = cacher(function (colour) { + if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) { + return {r: -1, g: -1, b: -1, hex: "none", error: 1}; + } + if (colour == "none") { + return {r: -1, g: -1, b: -1, hex: "none"}; + } + !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour)); + var res, + red, + green, + blue, + opacity, + t, + values, + rgb = colour.match(colourRegExp); + if (rgb) { + if (rgb[2]) { + blue = toInt(rgb[2].substring(5), 16); + green = toInt(rgb[2].substring(3, 5), 16); + red = toInt(rgb[2].substring(1, 3), 16); + } + if (rgb[3]) { + blue = toInt((t = rgb[3].charAt(3)) + t, 16); + green = toInt((t = rgb[3].charAt(2)) + t, 16); + red = toInt((t = rgb[3].charAt(1)) + t, 16); + } + if (rgb[4]) { + values = rgb[4][split](commaSpaces); + red = toFloat(values[0]); + values[0].slice(-1) == "%" && (red *= 2.55); + green = toFloat(values[1]); + values[1].slice(-1) == "%" && (green *= 2.55); + blue = toFloat(values[2]); + values[2].slice(-1) == "%" && (blue *= 2.55); + rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3])); + values[3] && values[3].slice(-1) == "%" && (opacity /= 100); + } + if (rgb[5]) { + values = rgb[5][split](commaSpaces); + red = toFloat(values[0]); + values[0].slice(-1) == "%" && (red *= 2.55); + green = toFloat(values[1]); + values[1].slice(-1) == "%" && (green *= 2.55); + blue = toFloat(values[2]); + values[2].slice(-1) == "%" && (blue *= 2.55); + (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360); + rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3])); + values[3] && values[3].slice(-1) == "%" && (opacity /= 100); + return R.hsb2rgb(red, green, blue, opacity); + } + if (rgb[6]) { + values = rgb[6][split](commaSpaces); + red = toFloat(values[0]); + values[0].slice(-1) == "%" && (red *= 2.55); + green = toFloat(values[1]); + values[1].slice(-1) == "%" && (green *= 2.55); + blue = toFloat(values[2]); + values[2].slice(-1) == "%" && (blue *= 2.55); + (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360); + rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3])); + values[3] && values[3].slice(-1) == "%" && (opacity /= 100); + return R.hsl2rgb(red, green, blue, opacity); + } + rgb = {r: red, g: green, b: blue}; + rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1); + R.is(opacity, "finite") && (rgb.opacity = opacity); + return rgb; + } + return {r: -1, g: -1, b: -1, hex: "none", error: 1}; + }, R); + R.getColor = function (value) { + var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75}, + rgb = this.hsb2rgb(start.h, start.s, start.b); + start.h += .075; + if (start.h > 1) { + start.h = 0; + start.s -= .2; + start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b}); + } + return rgb.hex; + }; + R.getColor.reset = function () { + delete this.start; + }; + // path utilities + R.parsePathString = cacher(function (pathString) { + if (!pathString) { + return null; + } + var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0}, + data = []; + if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption + data = pathClone(pathString); + } + if (!data[length]) { + Str(pathString)[rp](pathCommand, function (a, b, c) { + var params = [], + name = lowerCase.call(b); + c[rp](pathValues, function (a, b) { + b && params[push](+b); + }); + if (name == "m" && params[length] > 2) { + data[push]([b][concat](params.splice(0, 2))); + name = "l"; + b = b == "m" ? "l" : "L"; + } + while (params[length] >= paramCounts[name]) { + data[push]([b][concat](params.splice(0, paramCounts[name]))); + if (!paramCounts[name]) { + break; + } + } + }); + } + data[toString] = R._path2string; + return data; + }); + R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) { + var t1 = 1 - t, + x = pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x, + y = pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y, + mx = p1x + 2 * t * (c1x - p1x) + t * t * (c2x - 2 * c1x + p1x), + my = p1y + 2 * t * (c1y - p1y) + t * t * (c2y - 2 * c1y + p1y), + nx = c1x + 2 * t * (c2x - c1x) + t * t * (p2x - 2 * c2x + c1x), + ny = c1y + 2 * t * (c2y - c1y) + t * t * (p2y - 2 * c2y + c1y), + ax = (1 - t) * p1x + t * c1x, + ay = (1 - t) * p1y + t * c1y, + cx = (1 - t) * c2x + t * p2x, + cy = (1 - t) * c2y + t * p2y, + alpha = (90 - math.atan((mx - nx) / (my - ny)) * 180 / PI); + (mx > nx || my < ny) && (alpha += 180); + return {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha}; + }; + var pathDimensions = cacher(function (path) { + if (!path) { + return {x: 0, y: 0, width: 0, height: 0}; + } + path = path2curve(path); + var x = 0, + y = 0, + X = [], + Y = [], + p; + for (var i = 0, ii = path[length]; i < ii; i++) { + p = path[i]; + if (p[0] == "M") { + x = p[1]; + y = p[2]; + X[push](x); + Y[push](y); + } else { + var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]); + X = X[concat](dim.min.x, dim.max.x); + Y = Y[concat](dim.min.y, dim.max.y); + x = p[5]; + y = p[6]; + } + } + var xmin = mmin[apply](0, X), + ymin = mmin[apply](0, Y); + return { + x: xmin, + y: ymin, + width: mmax[apply](0, X) - xmin, + height: mmax[apply](0, Y) - ymin + }; + }), + pathClone = function (pathArray) { + var res = []; + if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption + pathArray = R.parsePathString(pathArray); + } + for (var i = 0, ii = pathArray[length]; i < ii; i++) { + res[i] = []; + for (var j = 0, jj = pathArray[i][length]; j < jj; j++) { + res[i][j] = pathArray[i][j]; + } + } + res[toString] = R._path2string; + return res; + }, + pathToRelative = cacher(function (pathArray) { + if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption + pathArray = R.parsePathString(pathArray); + } + var res = [], + x = 0, + y = 0, + mx = 0, + my = 0, + start = 0; + if (pathArray[0][0] == "M") { + x = pathArray[0][1]; + y = pathArray[0][2]; + mx = x; + my = y; + start++; + res[push](["M", x, y]); + } + for (var i = start, ii = pathArray[length]; i < ii; i++) { + var r = res[i] = [], + pa = pathArray[i]; + if (pa[0] != lowerCase.call(pa[0])) { + r[0] = lowerCase.call(pa[0]); + switch (r[0]) { + case "a": + r[1] = pa[1]; + r[2] = pa[2]; + r[3] = pa[3]; + r[4] = pa[4]; + r[5] = pa[5]; + r[6] = +(pa[6] - x).toFixed(3); + r[7] = +(pa[7] - y).toFixed(3); + break; + case "v": + r[1] = +(pa[1] - y).toFixed(3); + break; + case "m": + mx = pa[1]; + my = pa[2]; + default: + for (var j = 1, jj = pa[length]; j < jj; j++) { + r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3); + } + } + } else { + r = res[i] = []; + if (pa[0] == "m") { + mx = pa[1] + x; + my = pa[2] + y; + } + for (var k = 0, kk = pa[length]; k < kk; k++) { + res[i][k] = pa[k]; + } + } + var len = res[i][length]; + switch (res[i][0]) { + case "z": + x = mx; + y = my; + break; + case "h": + x += +res[i][len - 1]; + break; + case "v": + y += +res[i][len - 1]; + break; + default: + x += +res[i][len - 2]; + y += +res[i][len - 1]; + } + } + res[toString] = R._path2string; + return res; + }, 0, pathClone), + pathToAbsolute = cacher(function (pathArray) { + if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption + pathArray = R.parsePathString(pathArray); + } + var res = [], + x = 0, + y = 0, + mx = 0, + my = 0, + start = 0; + if (pathArray[0][0] == "M") { + x = +pathArray[0][1]; + y = +pathArray[0][2]; + mx = x; + my = y; + start++; + res[0] = ["M", x, y]; + } + for (var i = start, ii = pathArray[length]; i < ii; i++) { + var r = res[i] = [], + pa = pathArray[i]; + if (pa[0] != upperCase.call(pa[0])) { + r[0] = upperCase.call(pa[0]); + switch (r[0]) { + case "A": + r[1] = pa[1]; + r[2] = pa[2]; + r[3] = pa[3]; + r[4] = pa[4]; + r[5] = pa[5]; + r[6] = +(pa[6] + x); + r[7] = +(pa[7] + y); + break; + case "V": + r[1] = +pa[1] + y; + break; + case "H": + r[1] = +pa[1] + x; + break; + case "M": + mx = +pa[1] + x; + my = +pa[2] + y; + default: + for (var j = 1, jj = pa[length]; j < jj; j++) { + r[j] = +pa[j] + ((j % 2) ? x : y); + } + } + } else { + for (var k = 0, kk = pa[length]; k < kk; k++) { + res[i][k] = pa[k]; + } + } + switch (r[0]) { + case "Z": + x = mx; + y = my; + break; + case "H": + x = r[1]; + break; + case "V": + y = r[1]; + break; + case "M": + mx = res[i][res[i][length] - 2]; + my = res[i][res[i][length] - 1]; + default: + x = res[i][res[i][length] - 2]; + y = res[i][res[i][length] - 1]; + } + } + res[toString] = R._path2string; + return res; + }, null, pathClone), + l2c = function (x1, y1, x2, y2) { + return [x1, y1, x2, y2, x2, y2]; + }, + q2c = function (x1, y1, ax, ay, x2, y2) { + var _13 = 1 / 3, + _23 = 2 / 3; + return [ + _13 * x1 + _23 * ax, + _13 * y1 + _23 * ay, + _13 * x2 + _23 * ax, + _13 * y2 + _23 * ay, + x2, + y2 + ]; + }, + a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) { + // for more information of where this math came from visit: + // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes + var _120 = PI * 120 / 180, + rad = PI / 180 * (+angle || 0), + res = [], + xy, + rotate = cacher(function (x, y, rad) { + var X = x * math.cos(rad) - y * math.sin(rad), + Y = x * math.sin(rad) + y * math.cos(rad); + return {x: X, y: Y}; + }); + if (!recursive) { + xy = rotate(x1, y1, -rad); + x1 = xy.x; + y1 = xy.y; + xy = rotate(x2, y2, -rad); + x2 = xy.x; + y2 = xy.y; + var cos = math.cos(PI / 180 * angle), + sin = math.sin(PI / 180 * angle), + x = (x1 - x2) / 2, + y = (y1 - y2) / 2; + var h = (x * x) / (rx * rx) + (y * y) / (ry * ry); + if (h > 1) { + h = math.sqrt(h); + rx = h * rx; + ry = h * ry; + } + var rx2 = rx * rx, + ry2 = ry * ry, + k = (large_arc_flag == sweep_flag ? -1 : 1) * + math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))), + cx = k * rx * y / ry + (x1 + x2) / 2, + cy = k * -ry * x / rx + (y1 + y2) / 2, + f1 = math.asin(((y1 - cy) / ry).toFixed(9)), + f2 = math.asin(((y2 - cy) / ry).toFixed(9)); + + f1 = x1 < cx ? PI - f1 : f1; + f2 = x2 < cx ? PI - f2 : f2; + f1 < 0 && (f1 = PI * 2 + f1); + f2 < 0 && (f2 = PI * 2 + f2); + if (sweep_flag && f1 > f2) { + f1 = f1 - PI * 2; + } + if (!sweep_flag && f2 > f1) { + f2 = f2 - PI * 2; + } + } else { + f1 = recursive[0]; + f2 = recursive[1]; + cx = recursive[2]; + cy = recursive[3]; + } + var df = f2 - f1; + if (abs(df) > _120) { + var f2old = f2, + x2old = x2, + y2old = y2; + f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1); + x2 = cx + rx * math.cos(f2); + y2 = cy + ry * math.sin(f2); + res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]); + } + df = f2 - f1; + var c1 = math.cos(f1), + s1 = math.sin(f1), + c2 = math.cos(f2), + s2 = math.sin(f2), + t = math.tan(df / 4), + hx = 4 / 3 * rx * t, + hy = 4 / 3 * ry * t, + m1 = [x1, y1], + m2 = [x1 + hx * s1, y1 - hy * c1], + m3 = [x2 + hx * s2, y2 - hy * c2], + m4 = [x2, y2]; + m2[0] = 2 * m1[0] - m2[0]; + m2[1] = 2 * m1[1] - m2[1]; + if (recursive) { + return [m2, m3, m4][concat](res); + } else { + res = [m2, m3, m4][concat](res)[join]()[split](","); + var newres = []; + for (var i = 0, ii = res[length]; i < ii; i++) { + newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x; + } + return newres; + } + }, + findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) { + var t1 = 1 - t; + return { + x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x, + y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y + }; + }, + curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) { + var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x), + b = 2 * (c1x - p1x) - 2 * (c2x - c1x), + c = p1x - c1x, + t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a, + t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a, + y = [p1y, p2y], + x = [p1x, p2x], + dot; + abs(t1) > "1e12" && (t1 = .5); + abs(t2) > "1e12" && (t2 = .5); + if (t1 > 0 && t1 < 1) { + dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1); + x[push](dot.x); + y[push](dot.y); + } + if (t2 > 0 && t2 < 1) { + dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2); + x[push](dot.x); + y[push](dot.y); + } + a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y); + b = 2 * (c1y - p1y) - 2 * (c2y - c1y); + c = p1y - c1y; + t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a; + t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a; + abs(t1) > "1e12" && (t1 = .5); + abs(t2) > "1e12" && (t2 = .5); + if (t1 > 0 && t1 < 1) { + dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1); + x[push](dot.x); + y[push](dot.y); + } + if (t2 > 0 && t2 < 1) { + dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2); + x[push](dot.x); + y[push](dot.y); + } + return { + min: {x: mmin[apply](0, x), y: mmin[apply](0, y)}, + max: {x: mmax[apply](0, x), y: mmax[apply](0, y)} + }; + }), + path2curve = cacher(function (path, path2) { + var p = pathToAbsolute(path), + p2 = path2 && pathToAbsolute(path2), + attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, + attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, + processPath = function (path, d) { + var nx, ny; + if (!path) { + return ["C", d.x, d.y, d.x, d.y, d.x, d.y]; + } + !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null); + switch (path[0]) { + case "M": + d.X = path[1]; + d.Y = path[2]; + break; + case "A": + path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1)))); + break; + case "S": + nx = d.x + (d.x - (d.bx || d.x)); + ny = d.y + (d.y - (d.by || d.y)); + path = ["C", nx, ny][concat](path.slice(1)); + break; + case "T": + d.qx = d.x + (d.x - (d.qx || d.x)); + d.qy = d.y + (d.y - (d.qy || d.y)); + path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2])); + break; + case "Q": + d.qx = path[1]; + d.qy = path[2]; + path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4])); + break; + case "L": + path = ["C"][concat](l2c(d.x, d.y, path[1], path[2])); + break; + case "H": + path = ["C"][concat](l2c(d.x, d.y, path[1], d.y)); + break; + case "V": + path = ["C"][concat](l2c(d.x, d.y, d.x, path[1])); + break; + case "Z": + path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y)); + break; + } + return path; + }, + fixArc = function (pp, i) { + if (pp[i][length] > 7) { + pp[i].shift(); + var pi = pp[i]; + while (pi[length]) { + pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6))); + } + pp.splice(i, 1); + ii = mmax(p[length], p2 && p2[length] || 0); + } + }, + fixM = function (path1, path2, a1, a2, i) { + if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") { + path2.splice(i, 0, ["M", a2.x, a2.y]); + a1.bx = 0; + a1.by = 0; + a1.x = path1[i][1]; + a1.y = path1[i][2]; + ii = mmax(p[length], p2 && p2[length] || 0); + } + }; + for (var i = 0, ii = mmax(p[length], p2 && p2[length] || 0); i < ii; i++) { + p[i] = processPath(p[i], attrs); + fixArc(p, i); + p2 && (p2[i] = processPath(p2[i], attrs2)); + p2 && fixArc(p2, i); + fixM(p, p2, attrs, attrs2, i); + fixM(p2, p, attrs2, attrs, i); + var seg = p[i], + seg2 = p2 && p2[i], + seglen = seg[length], + seg2len = p2 && seg2[length]; + attrs.x = seg[seglen - 2]; + attrs.y = seg[seglen - 1]; + attrs.bx = toFloat(seg[seglen - 4]) || attrs.x; + attrs.by = toFloat(seg[seglen - 3]) || attrs.y; + attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x); + attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y); + attrs2.x = p2 && seg2[seg2len - 2]; + attrs2.y = p2 && seg2[seg2len - 1]; + } + return p2 ? [p, p2] : p; + }, null, pathClone), + parseDots = cacher(function (gradient) { + var dots = []; + for (var i = 0, ii = gradient[length]; i < ii; i++) { + var dot = {}, + par = gradient[i].match(/^([^:]*):?([\d\.]*)/); + dot.color = R.getRGB(par[1]); + if (dot.color.error) { + return null; + } + dot.color = dot.color.hex; + par[2] && (dot.offset = par[2] + "%"); + dots[push](dot); + } + for (i = 1, ii = dots[length] - 1; i < ii; i++) { + if (!dots[i].offset) { + var start = toFloat(dots[i - 1].offset || 0), + end = 0; + for (var j = i + 1; j < ii; j++) { + if (dots[j].offset) { + end = dots[j].offset; + break; + } + } + if (!end) { + end = 100; + j = ii; + } + end = toFloat(end); + var d = (end - start) / (j - i + 1); + for (; i < j; i++) { + start += d; + dots[i].offset = start + "%"; + } + } + } + return dots; + }), + getContainer = function (x, y, w, h) { + var container; + if (R.is(x, string) || R.is(x, "object")) { + container = R.is(x, string) ? doc.getElementById(x) : x; + if (container.tagName) { + if (y == null) { + return { + container: container, + width: container.style.pixelWidth || container.offsetWidth, + height: container.style.pixelHeight || container.offsetHeight + }; + } else { + return {container: container, width: y, height: w}; + } + } + } else { + return {container: 1, x: x, y: y, width: w, height: h}; + } + }, + plugins = function (con, add) { + var that = this; + for (var prop in add) { + if (add[has](prop) && !(prop in con)) { + switch (typeof add[prop]) { + case "function": + (function (f) { + con[prop] = con === that ? f : function () { return f[apply](that, arguments); }; + })(add[prop]); + break; + case "object": + con[prop] = con[prop] || {}; + plugins.call(this, con[prop], add[prop]); + break; + default: + con[prop] = add[prop]; + break; + } + } + } + }, + tear = function (el, paper) { + el == paper.top && (paper.top = el.prev); + el == paper.bottom && (paper.bottom = el.next); + el.next && (el.next.prev = el.prev); + el.prev && (el.prev.next = el.next); + }, + tofront = function (el, paper) { + if (paper.top === el) { + return; + } + tear(el, paper); + el.next = null; + el.prev = paper.top; + paper.top.next = el; + paper.top = el; + }, + toback = function (el, paper) { + if (paper.bottom === el) { + return; + } + tear(el, paper); + el.next = paper.bottom; + el.prev = null; + paper.bottom.prev = el; + paper.bottom = el; + }, + insertafter = function (el, el2, paper) { + tear(el, paper); + el2 == paper.top && (paper.top = el); + el2.next && (el2.next.prev = el); + el.next = el2.next; + el.prev = el2; + el2.next = el; + }, + insertbefore = function (el, el2, paper) { + tear(el, paper); + el2 == paper.bottom && (paper.bottom = el); + el2.prev && (el2.prev.next = el); + el.prev = el2.prev; + el2.prev = el; + el.next = el2; + }, + removed = function (methodname) { + return function () { + throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object"); + }; + }; + R.pathToRelative = pathToRelative; + // SVG + if (R.svg) { + paperproto.svgns = "http://www.w3.org/2000/svg"; + paperproto.xlink = "http://www.w3.org/1999/xlink"; + round = function (num) { + return +num + (~~num === num) * .5; + }; + var $ = function (el, attr) { + if (attr) { + for (var key in attr) { + if (attr[has](key)) { + el[setAttribute](key, Str(attr[key])); + } + } + } else { + el = doc.createElementNS(paperproto.svgns, el); + el.style.webkitTapHighlightColor = "rgba(0,0,0,0)"; + return el; + } + }; + R[toString] = function () { + return "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version; + }; + var thePath = function (pathString, SVG) { + var el = $("path"); + SVG.canvas && SVG.canvas[appendChild](el); + var p = new Element(el, SVG); + p.type = "path"; + setFillAndStroke(p, {fill: "none", stroke: "#000", path: pathString}); + return p; + }; + var addGradientFill = function (o, gradient, SVG) { + var type = "linear", + fx = .5, fy = .5, + s = o.style; + gradient = Str(gradient)[rp](radial_gradient, function (all, _fx, _fy) { + type = "radial"; + if (_fx && _fy) { + fx = toFloat(_fx); + fy = toFloat(_fy); + var dir = ((fy > .5) * 2 - 1); + pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && + (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) && + fy != .5 && + (fy = fy.toFixed(5) - 1e-5 * dir); + } + return E; + }); + gradient = gradient[split](/\s*\-\s*/); + if (type == "linear") { + var angle = gradient.shift(); + angle = -toFloat(angle); + if (isNaN(angle)) { + return null; + } + var vector = [0, 0, math.cos(angle * PI / 180), math.sin(angle * PI / 180)], + max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1); + vector[2] *= max; + vector[3] *= max; + if (vector[2] < 0) { + vector[0] = -vector[2]; + vector[2] = 0; + } + if (vector[3] < 0) { + vector[1] = -vector[3]; + vector[3] = 0; + } + } + var dots = parseDots(gradient); + if (!dots) { + return null; + } + var id = o.getAttribute(fillString); + id = id.match(/^url\(#(.*)\)$/); + id && SVG.defs.removeChild(doc.getElementById(id[1])); + + var el = $(type + "Gradient"); + el.id = createUUID(); + $(el, type == "radial" ? {fx: fx, fy: fy} : {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]}); + SVG.defs[appendChild](el); + for (var i = 0, ii = dots[length]; i < ii; i++) { + var stop = $("stop"); + $(stop, { + offset: dots[i].offset ? dots[i].offset : !i ? "0%" : "100%", + "stop-color": dots[i].color || "#fff" + }); + el[appendChild](stop); + } + $(o, { + fill: "url(#" + el.id + ")", + opacity: 1, + "fill-opacity": 1 + }); + s.fill = E; + s.opacity = 1; + s.fillOpacity = 1; + return 1; + }; + var updatePosition = function (o) { + var bbox = o.getBBox(); + $(o.pattern, {patternTransform: R.format("translate({0},{1})", bbox.x, bbox.y)}); + }; + var setFillAndStroke = function (o, params) { + var dasharray = { + "": [0], + "none": [0], + "-": [3, 1], + ".": [1, 1], + "-.": [3, 1, 1, 1], + "-..": [3, 1, 1, 1, 1, 1], + ". ": [1, 3], + "- ": [4, 3], + "--": [8, 3], + "- .": [4, 3, 1, 3], + "--.": [8, 3, 1, 3], + "--..": [8, 3, 1, 3, 1, 3] + }, + node = o.node, + attrs = o.attrs, + rot = o.rotate(), + addDashes = function (o, value) { + value = dasharray[lowerCase.call(value)]; + if (value) { + var width = o.attrs["stroke-width"] || "1", + butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0, + dashes = []; + var i = value[length]; + while (i--) { + dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt; + } + $(node, {"stroke-dasharray": dashes[join](",")}); + } + }; + params[has]("rotation") && (rot = params.rotation); + var rotxy = Str(rot)[split](separator); + if (!(rotxy.length - 1)) { + rotxy = null; + } else { + rotxy[1] = +rotxy[1]; + rotxy[2] = +rotxy[2]; + } + toFloat(rot) && o.rotate(0, true); + for (var att in params) { + if (params[has](att)) { + if (!availableAttrs[has](att)) { + continue; + } + var value = params[att]; + attrs[att] = value; + switch (att) { + case "blur": + o.blur(value); + break; + case "rotation": + o.rotate(value, true); + break; + case "href": + case "title": + case "target": + var pn = node.parentNode; + if (lowerCase.call(pn.tagName) != "a") { + var hl = $("a"); + pn.insertBefore(hl, node); + hl[appendChild](node); + pn = hl; + } + if (att == "target" && value == "blank") { + pn.setAttributeNS(o.paper.xlink, "show", "new"); + } else { + pn.setAttributeNS(o.paper.xlink, att, value); + } + break; + case "cursor": + node.style.cursor = value; + break; + case "clip-rect": + var rect = Str(value)[split](separator); + if (rect[length] == 4) { + o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode); + var el = $("clipPath"), + rc = $("rect"); + el.id = createUUID(); + $(rc, { + x: rect[0], + y: rect[1], + width: rect[2], + height: rect[3] + }); + el[appendChild](rc); + o.paper.defs[appendChild](el); + $(node, {"clip-path": "url(#" + el.id + ")"}); + o.clip = rc; + } + if (!value) { + var clip = doc.getElementById(node.getAttribute("clip-path")[rp](/(^url\(#|\)$)/g, E)); + clip && clip.parentNode.removeChild(clip); + $(node, {"clip-path": E}); + delete o.clip; + } + break; + case "path": + if (o.type == "path") { + $(node, {d: value ? attrs.path = pathToAbsolute(value) : "M0,0"}); + } + break; + case "width": + node[setAttribute](att, value); + if (attrs.fx) { + att = "x"; + value = attrs.x; + } else { + break; + } + case "x": + if (attrs.fx) { + value = -attrs.x - (attrs.width || 0); + } + case "rx": + if (att == "rx" && o.type == "rect") { + break; + } + case "cx": + rotxy && (att == "x" || att == "cx") && (rotxy[1] += value - attrs[att]); + node[setAttribute](att, value); + o.pattern && updatePosition(o); + break; + case "height": + node[setAttribute](att, value); + if (attrs.fy) { + att = "y"; + value = attrs.y; + } else { + break; + } + case "y": + if (attrs.fy) { + value = -attrs.y - (attrs.height || 0); + } + case "ry": + if (att == "ry" && o.type == "rect") { + break; + } + case "cy": + rotxy && (att == "y" || att == "cy") && (rotxy[2] += value - attrs[att]); + node[setAttribute](att, value); + o.pattern && updatePosition(o); + break; + case "r": + if (o.type == "rect") { + $(node, {rx: value, ry: value}); + } else { + node[setAttribute](att, value); + } + break; + case "src": + if (o.type == "image") { + node.setAttributeNS(o.paper.xlink, "href", value); + } + break; + case "stroke-width": + node.style.strokeWidth = value; + // Need following line for Firefox + node[setAttribute](att, value); + if (attrs["stroke-dasharray"]) { + addDashes(o, attrs["stroke-dasharray"]); + } + break; + case "stroke-dasharray": + addDashes(o, value); + break; + case "translation": + var xy = Str(value)[split](separator); + xy[0] = +xy[0] || 0; + xy[1] = +xy[1] || 0; + if (rotxy) { + rotxy[1] += xy[0]; + rotxy[2] += xy[1]; + } + translate.call(o, xy[0], xy[1]); + break; + case "scale": + xy = Str(value)[split](separator); + o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, isNaN(toFloat(xy[2])) ? null : +xy[2], isNaN(toFloat(xy[3])) ? null : +xy[3]); + break; + case fillString: + var isURL = Str(value).match(ISURL); + if (isURL) { + el = $("pattern"); + var ig = $("image"); + el.id = createUUID(); + $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1}); + $(ig, {x: 0, y: 0}); + ig.setAttributeNS(o.paper.xlink, "href", isURL[1]); + el[appendChild](ig); + + var img = doc.createElement("img"); + img.style.cssText = "position:absolute;left:-9999em;top-9999em"; + img.onload = function () { + $(el, {width: this.offsetWidth, height: this.offsetHeight}); + $(ig, {width: this.offsetWidth, height: this.offsetHeight}); + doc.body.removeChild(this); + o.paper.safari(); + }; + doc.body[appendChild](img); + img.src = isURL[1]; + o.paper.defs[appendChild](el); + node.style.fill = "url(#" + el.id + ")"; + $(node, {fill: "url(#" + el.id + ")"}); + o.pattern = el; + o.pattern && updatePosition(o); + break; + } + var clr = R.getRGB(value); + if (!clr.error) { + delete params.gradient; + delete attrs.gradient; + !R.is(attrs.opacity, "undefined") && + R.is(params.opacity, "undefined") && + $(node, {opacity: attrs.opacity}); + !R.is(attrs["fill-opacity"], "undefined") && + R.is(params["fill-opacity"], "undefined") && + $(node, {"fill-opacity": attrs["fill-opacity"]}); + } else if ((({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper)) { + attrs.gradient = value; + attrs.fill = "none"; + break; + } + clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity}); + case "stroke": + clr = R.getRGB(value); + node[setAttribute](att, clr.hex); + att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity}); + break; + case "gradient": + (({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper); + break; + case "opacity": + if (attrs.gradient && !attrs[has]("stroke-opacity")) { + $(node, {"stroke-opacity": value > 1 ? value / 100 : value}); + } + // fall + case "fill-opacity": + if (attrs.gradient) { + var gradient = doc.getElementById(node.getAttribute(fillString)[rp](/^url\(#|\)$/g, E)); + if (gradient) { + var stops = gradient.getElementsByTagName("stop"); + stops[stops[length] - 1][setAttribute]("stop-opacity", value); + } + break; + } + default: + att == "font-size" && (value = toInt(value, 10) + "px"); + var cssrule = att[rp](/(\-.)/g, function (w) { + return upperCase.call(w.substring(1)); + }); + node.style[cssrule] = value; + // Need following line for Firefox + node[setAttribute](att, value); + break; + } + } + } + + tuneText(o, params); + if (rotxy) { + o.rotate(rotxy.join(S)); + } else { + toFloat(rot) && o.rotate(rot, true); + } + }; + var leading = 1.2, + tuneText = function (el, params) { + if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) { + return; + } + var a = el.attrs, + node = el.node, + fontSize = node.firstChild ? toInt(doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10; + + if (params[has]("text")) { + a.text = params.text; + while (node.firstChild) { + node.removeChild(node.firstChild); + } + var texts = Str(params.text)[split]("\n"); + for (var i = 0, ii = texts[length]; i < ii; i++) if (texts[i]) { + var tspan = $("tspan"); + i && $(tspan, {dy: fontSize * leading, x: a.x}); + tspan[appendChild](doc.createTextNode(texts[i])); + node[appendChild](tspan); + } + } else { + texts = node.getElementsByTagName("tspan"); + for (i = 0, ii = texts[length]; i < ii; i++) { + i && $(texts[i], {dy: fontSize * leading, x: a.x}); + } + } + $(node, {y: a.y}); + var bb = el.getBBox(), + dif = a.y - (bb.y + bb.height / 2); + dif && R.is(dif, "finite") && $(node, {y: a.y + dif}); + }, + Element = function (node, svg) { + var X = 0, + Y = 0; + this[0] = node; + this.id = R._oid++; + this.node = node; + node.raphael = this; + this.paper = svg; + this.attrs = this.attrs || {}; + this.transformations = []; // rotate, translate, scale + this._ = { + tx: 0, + ty: 0, + rt: {deg: 0, cx: 0, cy: 0}, + sx: 1, + sy: 1 + }; + !svg.bottom && (svg.bottom = this); + this.prev = svg.top; + svg.top && (svg.top.next = this); + svg.top = this; + this.next = null; + }; + var elproto = Element[proto]; + Element[proto].rotate = function (deg, cx, cy) { + if (this.removed) { + return this; + } + if (deg == null) { + if (this._.rt.cx) { + return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S); + } + return this._.rt.deg; + } + var bbox = this.getBBox(); + deg = Str(deg)[split](separator); + if (deg[length] - 1) { + cx = toFloat(deg[1]); + cy = toFloat(deg[2]); + } + deg = toFloat(deg[0]); + if (cx != null && cx !== false) { + this._.rt.deg = deg; + } else { + this._.rt.deg += deg; + } + (cy == null) && (cx = null); + this._.rt.cx = cx; + this._.rt.cy = cy; + cx = cx == null ? bbox.x + bbox.width / 2 : cx; + cy = cy == null ? bbox.y + bbox.height / 2 : cy; + if (this._.rt.deg) { + this.transformations[0] = R.format("rotate({0} {1} {2})", this._.rt.deg, cx, cy); + this.clip && $(this.clip, {transform: R.format("rotate({0} {1} {2})", -this._.rt.deg, cx, cy)}); + } else { + this.transformations[0] = E; + this.clip && $(this.clip, {transform: E}); + } + $(this.node, {transform: this.transformations[join](S)}); + return this; + }; + Element[proto].hide = function () { + !this.removed && (this.node.style.display = "none"); + return this; + }; + Element[proto].show = function () { + !this.removed && (this.node.style.display = ""); + return this; + }; + Element[proto].remove = function () { + if (this.removed) { + return; + } + tear(this, this.paper); + this.node.parentNode.removeChild(this.node); + for (var i in this) { + delete this[i]; + } + this.removed = true; + }; + Element[proto].getBBox = function () { + if (this.removed) { + return this; + } + if (this.type == "path") { + return pathDimensions(this.attrs.path); + } + if (this.node.style.display == "none") { + this.show(); + var hide = true; + } + var bbox = {}; + try { + bbox = this.node.getBBox(); + } catch(e) { + // Firefox 3.0.x plays badly here + } finally { + bbox = bbox || {}; + } + if (this.type == "text") { + bbox = {x: bbox.x, y: Infinity, width: 0, height: 0}; + for (var i = 0, ii = this.node.getNumberOfChars(); i < ii; i++) { + var bb = this.node.getExtentOfChar(i); + (bb.y < bbox.y) && (bbox.y = bb.y); + (bb.y + bb.height - bbox.y > bbox.height) && (bbox.height = bb.y + bb.height - bbox.y); + (bb.x + bb.width - bbox.x > bbox.width) && (bbox.width = bb.x + bb.width - bbox.x); + } + } + hide && this.hide(); + return bbox; + }; + Element[proto].attr = function (name, value) { + if (this.removed) { + return this; + } + if (name == null) { + var res = {}; + for (var i in this.attrs) if (this.attrs[has](i)) { + res[i] = this.attrs[i]; + } + this._.rt.deg && (res.rotation = this.rotate()); + (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale()); + res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient; + return res; + } + if (value == null && R.is(name, string)) { + if (name == "translation") { + return translate.call(this); + } + if (name == "rotation") { + return this.rotate(); + } + if (name == "scale") { + return this.scale(); + } + if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) { + return this.attrs.gradient; + } + return this.attrs[name]; + } + if (value == null && R.is(name, array)) { + var values = {}; + for (var j = 0, jj = name.length; j < jj; j++) { + values[name[j]] = this.attr(name[j]); + } + return values; + } + if (value != null) { + var params = {}; + params[name] = value; + } else if (name != null && R.is(name, "object")) { + params = name; + } + for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { + var par = this.paper.customAttributes[key].apply(this, [][concat](params[key])); + this.attrs[key] = params[key]; + for (var subkey in par) if (par[has](subkey)) { + params[subkey] = par[subkey]; + } + } + setFillAndStroke(this, params); + return this; + }; + Element[proto].toFront = function () { + if (this.removed) { + return this; + } + this.node.parentNode[appendChild](this.node); + var svg = this.paper; + svg.top != this && tofront(this, svg); + return this; + }; + Element[proto].toBack = function () { + if (this.removed) { + return this; + } + if (this.node.parentNode.firstChild != this.node) { + this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild); + toback(this, this.paper); + var svg = this.paper; + } + return this; + }; + Element[proto].insertAfter = function (element) { + if (this.removed) { + return this; + } + var node = element.node || element[element.length - 1].node; + if (node.nextSibling) { + node.parentNode.insertBefore(this.node, node.nextSibling); + } else { + node.parentNode[appendChild](this.node); + } + insertafter(this, element, this.paper); + return this; + }; + Element[proto].insertBefore = function (element) { + if (this.removed) { + return this; + } + var node = element.node || element[0].node; + node.parentNode.insertBefore(this.node, node); + insertbefore(this, element, this.paper); + return this; + }; + Element[proto].blur = function (size) { + // Experimental. No Safari support. Use it on your own risk. + var t = this; + if (+size !== 0) { + var fltr = $("filter"), + blur = $("feGaussianBlur"); + t.attrs.blur = size; + fltr.id = createUUID(); + $(blur, {stdDeviation: +size || 1.5}); + fltr.appendChild(blur); + t.paper.defs.appendChild(fltr); + t._blur = fltr; + $(t.node, {filter: "url(#" + fltr.id + ")"}); + } else { + if (t._blur) { + t._blur.parentNode.removeChild(t._blur); + delete t._blur; + delete t.attrs.blur; + } + t.node.removeAttribute("filter"); + } + }; + var theCircle = function (svg, x, y, r) { + var el = $("circle"); + svg.canvas && svg.canvas[appendChild](el); + var res = new Element(el, svg); + res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"}; + res.type = "circle"; + $(el, res.attrs); + return res; + }, + theRect = function (svg, x, y, w, h, r) { + var el = $("rect"); + svg.canvas && svg.canvas[appendChild](el); + var res = new Element(el, svg); + res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"}; + res.type = "rect"; + $(el, res.attrs); + return res; + }, + theEllipse = function (svg, x, y, rx, ry) { + var el = $("ellipse"); + svg.canvas && svg.canvas[appendChild](el); + var res = new Element(el, svg); + res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"}; + res.type = "ellipse"; + $(el, res.attrs); + return res; + }, + theImage = function (svg, src, x, y, w, h) { + var el = $("image"); + $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"}); + el.setAttributeNS(svg.xlink, "href", src); + svg.canvas && svg.canvas[appendChild](el); + var res = new Element(el, svg); + res.attrs = {x: x, y: y, width: w, height: h, src: src}; + res.type = "image"; + return res; + }, + theText = function (svg, x, y, text) { + var el = $("text"); + $(el, {x: x, y: y, "text-anchor": "middle"}); + svg.canvas && svg.canvas[appendChild](el); + var res = new Element(el, svg); + res.attrs = {x: x, y: y, "text-anchor": "middle", text: text, font: availableAttrs.font, stroke: "none", fill: "#000"}; + res.type = "text"; + setFillAndStroke(res, res.attrs); + return res; + }, + setSize = function (width, height) { + this.width = width || this.width; + this.height = height || this.height; + this.canvas[setAttribute]("width", this.width); + this.canvas[setAttribute]("height", this.height); + return this; + }, + create = function () { + var con = getContainer[apply](0, arguments), + container = con && con.container, + x = con.x, + y = con.y, + width = con.width, + height = con.height; + if (!container) { + throw new Error("SVG container not found."); + } + var cnvs = $("svg"); + x = x || 0; + y = y || 0; + width = width || 512; + height = height || 342; + $(cnvs, { + xmlns: "http://www.w3.org/2000/svg", + version: 1.1, + width: width, + height: height + }); + if (container == 1) { + cnvs.style.cssText = "position:absolute;left:" + x + "px;top:" + y + "px"; + doc.body[appendChild](cnvs); + } else { + if (container.firstChild) { + container.insertBefore(cnvs, container.firstChild); + } else { + container[appendChild](cnvs); + } + } + container = new Paper; + container.width = width; + container.height = height; + container.canvas = cnvs; + plugins.call(container, container, R.fn); + container.clear(); + return container; + }; + paperproto.clear = function () { + var c = this.canvas; + while (c.firstChild) { + c.removeChild(c.firstChild); + } + this.bottom = this.top = null; + (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\xebl")); + c[appendChild](this.desc); + c[appendChild](this.defs = $("defs")); + }; + paperproto.remove = function () { + this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas); + for (var i in this) { + this[i] = removed(i); + } + }; + } + + // VML + if (R.vml) { + var map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"}, + bites = /([clmz]),?([^clmz]*)/gi, + blurregexp = / progid:\S+Blur\([^\)]+\)/g, + val = /-?[^,\s-]+/g, + coordsize = 1e3 + S + 1e3, + zoom = 10, + pathlike = {path: 1, rect: 1}, + path2vml = function (path) { + var total = /[ahqstv]/ig, + command = pathToAbsolute; + Str(path).match(total) && (command = path2curve); + total = /[clmz]/g; + if (command == pathToAbsolute && !Str(path).match(total)) { + var res = Str(path)[rp](bites, function (all, command, args) { + var vals = [], + isMove = lowerCase.call(command) == "m", + res = map[command]; + args[rp](val, function (value) { + if (isMove && vals[length] == 2) { + res += vals + map[command == "m" ? "l" : "L"]; + vals = []; + } + vals[push](round(value * zoom)); + }); + return res + vals; + }); + return res; + } + var pa = command(path), p, r; + res = []; + for (var i = 0, ii = pa[length]; i < ii; i++) { + p = pa[i]; + r = lowerCase.call(pa[i][0]); + r == "z" && (r = "x"); + for (var j = 1, jj = p[length]; j < jj; j++) { + r += round(p[j] * zoom) + (j != jj - 1 ? "," : E); + } + res[push](r); + } + return res[join](S); + }; + + R[toString] = function () { + return "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version; + }; + thePath = function (pathString, vml) { + var g = createNode("group"); + g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px"; + g.coordsize = vml.coordsize; + g.coordorigin = vml.coordorigin; + var el = createNode("shape"), ol = el.style; + ol.width = vml.width + "px"; + ol.height = vml.height + "px"; + el.coordsize = coordsize; + el.coordorigin = vml.coordorigin; + g[appendChild](el); + var p = new Element(el, g, vml), + attr = {fill: "none", stroke: "#000"}; + pathString && (attr.path = pathString); + p.type = "path"; + p.path = []; + p.Path = E; + setFillAndStroke(p, attr); + vml.canvas[appendChild](g); + return p; + }; + setFillAndStroke = function (o, params) { + o.attrs = o.attrs || {}; + var node = o.node, + a = o.attrs, + s = node.style, + xy, + newpath = (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.r != a.r) && o.type == "rect", + res = o; + + for (var par in params) if (params[has](par)) { + a[par] = params[par]; + } + if (newpath) { + a.path = rectPath(a.x, a.y, a.width, a.height, a.r); + o.X = a.x; + o.Y = a.y; + o.W = a.width; + o.H = a.height; + } + params.href && (node.href = params.href); + params.title && (node.title = params.title); + params.target && (node.target = params.target); + params.cursor && (s.cursor = params.cursor); + "blur" in params && o.blur(params.blur); + if (params.path && o.type == "path" || newpath) { + node.path = path2vml(a.path); + } + if (params.rotation != null) { + o.rotate(params.rotation, true); + } + if (params.translation) { + xy = Str(params.translation)[split](separator); + translate.call(o, xy[0], xy[1]); + if (o._.rt.cx != null) { + o._.rt.cx +=+ xy[0]; + o._.rt.cy +=+ xy[1]; + o.setBox(o.attrs, xy[0], xy[1]); + } + } + if (params.scale) { + xy = Str(params.scale)[split](separator); + o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, +xy[2] || null, +xy[3] || null); + } + if ("clip-rect" in params) { + var rect = Str(params["clip-rect"])[split](separator); + if (rect[length] == 4) { + rect[2] = +rect[2] + (+rect[0]); + rect[3] = +rect[3] + (+rect[1]); + var div = node.clipRect || doc.createElement("div"), + dstyle = div.style, + group = node.parentNode; + dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect); + if (!node.clipRect) { + dstyle.position = "absolute"; + dstyle.top = 0; + dstyle.left = 0; + dstyle.width = o.paper.width + "px"; + dstyle.height = o.paper.height + "px"; + group.parentNode.insertBefore(div, group); + div[appendChild](group); + node.clipRect = div; + } + } + if (!params["clip-rect"]) { + node.clipRect && (node.clipRect.style.clip = E); + } + } + if (o.type == "image" && params.src) { + node.src = params.src; + } + if (o.type == "image" && params.opacity) { + node.filterOpacity = ms + ".Alpha(opacity=" + (params.opacity * 100) + ")"; + s.filter = (node.filterMatrix || E) + (node.filterOpacity || E); + } + params.font && (s.font = params.font); + params["font-family"] && (s.fontFamily = '"' + params["font-family"][split](",")[0][rp](/^['"]+|['"]+$/g, E) + '"'); + params["font-size"] && (s.fontSize = params["font-size"]); + params["font-weight"] && (s.fontWeight = params["font-weight"]); + params["font-style"] && (s.fontStyle = params["font-style"]); + if (params.opacity != null || + params["stroke-width"] != null || + params.fill != null || + params.stroke != null || + params["stroke-width"] != null || + params["stroke-opacity"] != null || + params["fill-opacity"] != null || + params["stroke-dasharray"] != null || + params["stroke-miterlimit"] != null || + params["stroke-linejoin"] != null || + params["stroke-linecap"] != null) { + node = o.shape || node; + var fill = (node.getElementsByTagName(fillString) && node.getElementsByTagName(fillString)[0]), + newfill = false; + !fill && (newfill = fill = createNode(fillString)); + if ("fill-opacity" in params || "opacity" in params) { + var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1); + opacity = mmin(mmax(opacity, 0), 1); + fill.opacity = opacity; + } + params.fill && (fill.on = true); + if (fill.on == null || params.fill == "none") { + fill.on = false; + } + if (fill.on && params.fill) { + var isURL = params.fill.match(ISURL); + if (isURL) { + fill.src = isURL[1]; + fill.type = "tile"; + } else { + fill.color = R.getRGB(params.fill).hex; + fill.src = E; + fill.type = "solid"; + if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill)) { + a.fill = "none"; + a.gradient = params.fill; + } + } + } + newfill && node[appendChild](fill); + var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]), + newstroke = false; + !stroke && (newstroke = stroke = createNode("stroke")); + if ((params.stroke && params.stroke != "none") || + params["stroke-width"] || + params["stroke-opacity"] != null || + params["stroke-dasharray"] || + params["stroke-miterlimit"] || + params["stroke-linejoin"] || + params["stroke-linecap"]) { + stroke.on = true; + } + (params.stroke == "none" || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false); + var strokeColor = R.getRGB(params.stroke); + stroke.on && params.stroke && (stroke.color = strokeColor.hex); + opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1); + var width = (toFloat(params["stroke-width"]) || 1) * .75; + opacity = mmin(mmax(opacity, 0), 1); + params["stroke-width"] == null && (width = a["stroke-width"]); + params["stroke-width"] && (stroke.weight = width); + width && width < 1 && (opacity *= width) && (stroke.weight = 1); + stroke.opacity = opacity; + + params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter"); + stroke.miterlimit = params["stroke-miterlimit"] || 8; + params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round"); + if (params["stroke-dasharray"]) { + var dasharray = { + "-": "shortdash", + ".": "shortdot", + "-.": "shortdashdot", + "-..": "shortdashdotdot", + ". ": "dot", + "- ": "dash", + "--": "longdash", + "- .": "dashdot", + "--.": "longdashdot", + "--..": "longdashdotdot" + }; + stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E; + } + newstroke && node[appendChild](stroke); + } + if (res.type == "text") { + s = res.paper.span.style; + a.font && (s.font = a.font); + a["font-family"] && (s.fontFamily = a["font-family"]); + a["font-size"] && (s.fontSize = a["font-size"]); + a["font-weight"] && (s.fontWeight = a["font-weight"]); + a["font-style"] && (s.fontStyle = a["font-style"]); + res.node.string && (res.paper.span.innerHTML = Str(res.node.string)[rp](/")); + res.W = a.w = res.paper.span.offsetWidth; + res.H = a.h = res.paper.span.offsetHeight; + res.X = a.x; + res.Y = a.y + round(res.H / 2); + + // text-anchor emulationm + switch (a["text-anchor"]) { + case "start": + res.node.style["v-text-align"] = "left"; + res.bbx = round(res.W / 2); + break; + case "end": + res.node.style["v-text-align"] = "right"; + res.bbx = -round(res.W / 2); + break; + default: + res.node.style["v-text-align"] = "center"; + break; + } + } + }; + addGradientFill = function (o, gradient) { + o.attrs = o.attrs || {}; + var attrs = o.attrs, + fill, + type = "linear", + fxfy = ".5 .5"; + o.attrs.gradient = gradient; + gradient = Str(gradient)[rp](radial_gradient, function (all, fx, fy) { + type = "radial"; + if (fx && fy) { + fx = toFloat(fx); + fy = toFloat(fy); + pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5); + fxfy = fx + S + fy; + } + return E; + }); + gradient = gradient[split](/\s*\-\s*/); + if (type == "linear") { + var angle = gradient.shift(); + angle = -toFloat(angle); + if (isNaN(angle)) { + return null; + } + } + var dots = parseDots(gradient); + if (!dots) { + return null; + } + o = o.shape || o.node; + fill = o.getElementsByTagName(fillString)[0] || createNode(fillString); + !fill.parentNode && o.appendChild(fill); + if (dots[length]) { + fill.on = true; + fill.method = "none"; + fill.color = dots[0].color; + fill.color2 = dots[dots[length] - 1].color; + var clrs = []; + for (var i = 0, ii = dots[length]; i < ii; i++) { + dots[i].offset && clrs[push](dots[i].offset + S + dots[i].color); + } + fill.colors && (fill.colors.value = clrs[length] ? clrs[join]() : "0% " + fill.color); + if (type == "radial") { + fill.type = "gradientradial"; + fill.focus = "100%"; + fill.focussize = fxfy; + fill.focusposition = fxfy; + } else { + fill.type = "gradient"; + fill.angle = (270 - angle) % 360; + } + } + return 1; + }; + Element = function (node, group, vml) { + var Rotation = 0, + RotX = 0, + RotY = 0, + Scale = 1; + this[0] = node; + this.id = R._oid++; + this.node = node; + node.raphael = this; + this.X = 0; + this.Y = 0; + this.attrs = {}; + this.Group = group; + this.paper = vml; + this._ = { + tx: 0, + ty: 0, + rt: {deg:0}, + sx: 1, + sy: 1 + }; + !vml.bottom && (vml.bottom = this); + this.prev = vml.top; + vml.top && (vml.top.next = this); + vml.top = this; + this.next = null; + }; + elproto = Element[proto]; + elproto.rotate = function (deg, cx, cy) { + if (this.removed) { + return this; + } + if (deg == null) { + if (this._.rt.cx) { + return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S); + } + return this._.rt.deg; + } + deg = Str(deg)[split](separator); + if (deg[length] - 1) { + cx = toFloat(deg[1]); + cy = toFloat(deg[2]); + } + deg = toFloat(deg[0]); + if (cx != null) { + this._.rt.deg = deg; + } else { + this._.rt.deg += deg; + } + cy == null && (cx = null); + this._.rt.cx = cx; + this._.rt.cy = cy; + this.setBox(this.attrs, cx, cy); + this.Group.style.rotation = this._.rt.deg; + // gradient fix for rotation. TODO + // var fill = (this.shape || this.node).getElementsByTagName(fillString); + // fill = fill[0] || {}; + // var b = ((360 - this._.rt.deg) - 270) % 360; + // !R.is(fill.angle, "undefined") && (fill.angle = b); + return this; + }; + elproto.setBox = function (params, cx, cy) { + if (this.removed) { + return this; + } + var gs = this.Group.style, + os = (this.shape && this.shape.style) || this.node.style; + params = params || {}; + for (var i in params) if (params[has](i)) { + this.attrs[i] = params[i]; + } + cx = cx || this._.rt.cx; + cy = cy || this._.rt.cy; + var attr = this.attrs, + x, + y, + w, + h; + switch (this.type) { + case "circle": + x = attr.cx - attr.r; + y = attr.cy - attr.r; + w = h = attr.r * 2; + break; + case "ellipse": + x = attr.cx - attr.rx; + y = attr.cy - attr.ry; + w = attr.rx * 2; + h = attr.ry * 2; + break; + case "image": + x = +attr.x; + y = +attr.y; + w = attr.width || 0; + h = attr.height || 0; + break; + case "text": + this.textpath.v = ["m", round(attr.x), ", ", round(attr.y - 2), "l", round(attr.x) + 1, ", ", round(attr.y - 2)][join](E); + x = attr.x - round(this.W / 2); + y = attr.y - this.H / 2; + w = this.W; + h = this.H; + break; + case "rect": + case "path": + if (!this.attrs.path) { + x = 0; + y = 0; + w = this.paper.width; + h = this.paper.height; + } else { + var dim = pathDimensions(this.attrs.path); + x = dim.x; + y = dim.y; + w = dim.width; + h = dim.height; + } + break; + default: + x = 0; + y = 0; + w = this.paper.width; + h = this.paper.height; + break; + } + cx = (cx == null) ? x + w / 2 : cx; + cy = (cy == null) ? y + h / 2 : cy; + var left = cx - this.paper.width / 2, + top = cy - this.paper.height / 2, t; + gs.left != (t = left + "px") && (gs.left = t); + gs.top != (t = top + "px") && (gs.top = t); + this.X = pathlike[has](this.type) ? -left : x; + this.Y = pathlike[has](this.type) ? -top : y; + this.W = w; + this.H = h; + if (pathlike[has](this.type)) { + os.left != (t = -left * zoom + "px") && (os.left = t); + os.top != (t = -top * zoom + "px") && (os.top = t); + } else if (this.type == "text") { + os.left != (t = -left + "px") && (os.left = t); + os.top != (t = -top + "px") && (os.top = t); + } else { + gs.width != (t = this.paper.width + "px") && (gs.width = t); + gs.height != (t = this.paper.height + "px") && (gs.height = t); + os.left != (t = x - left + "px") && (os.left = t); + os.top != (t = y - top + "px") && (os.top = t); + os.width != (t = w + "px") && (os.width = t); + os.height != (t = h + "px") && (os.height = t); + } + }; + elproto.hide = function () { + !this.removed && (this.Group.style.display = "none"); + return this; + }; + elproto.show = function () { + !this.removed && (this.Group.style.display = "block"); + return this; + }; + elproto.getBBox = function () { + if (this.removed) { + return this; + } + if (pathlike[has](this.type)) { + return pathDimensions(this.attrs.path); + } + return { + x: this.X + (this.bbx || 0), + y: this.Y, + width: this.W, + height: this.H + }; + }; + elproto.remove = function () { + if (this.removed) { + return; + } + tear(this, this.paper); + this.node.parentNode.removeChild(this.node); + this.Group.parentNode.removeChild(this.Group); + this.shape && this.shape.parentNode.removeChild(this.shape); + for (var i in this) { + delete this[i]; + } + this.removed = true; + }; + elproto.attr = function (name, value) { + if (this.removed) { + return this; + } + if (name == null) { + var res = {}; + for (var i in this.attrs) if (this.attrs[has](i)) { + res[i] = this.attrs[i]; + } + this._.rt.deg && (res.rotation = this.rotate()); + (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale()); + res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient; + return res; + } + if (value == null && R.is(name, "string")) { + if (name == "translation") { + return translate.call(this); + } + if (name == "rotation") { + return this.rotate(); + } + if (name == "scale") { + return this.scale(); + } + if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) { + return this.attrs.gradient; + } + return this.attrs[name]; + } + if (this.attrs && value == null && R.is(name, array)) { + var ii, values = {}; + for (i = 0, ii = name[length]; i < ii; i++) { + values[name[i]] = this.attr(name[i]); + } + return values; + } + var params; + if (value != null) { + params = {}; + params[name] = value; + } + value == null && R.is(name, "object") && (params = name); + if (params) { + for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { + var par = this.paper.customAttributes[key].apply(this, [][concat](params[key])); + this.attrs[key] = params[key]; + for (var subkey in par) if (par[has](subkey)) { + params[subkey] = par[subkey]; + } + } + if (params.text && this.type == "text") { + this.node.string = params.text; + } + setFillAndStroke(this, params); + if (params.gradient && (({circle: 1, ellipse: 1})[has](this.type) || Str(params.gradient).charAt() != "r")) { + addGradientFill(this, params.gradient); + } + (!pathlike[has](this.type) || this._.rt.deg) && this.setBox(this.attrs); + } + return this; + }; + elproto.toFront = function () { + !this.removed && this.Group.parentNode[appendChild](this.Group); + this.paper.top != this && tofront(this, this.paper); + return this; + }; + elproto.toBack = function () { + if (this.removed) { + return this; + } + if (this.Group.parentNode.firstChild != this.Group) { + this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild); + toback(this, this.paper); + } + return this; + }; + elproto.insertAfter = function (element) { + if (this.removed) { + return this; + } + if (element.constructor == Set) { + element = element[element.length - 1]; + } + if (element.Group.nextSibling) { + element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling); + } else { + element.Group.parentNode[appendChild](this.Group); + } + insertafter(this, element, this.paper); + return this; + }; + elproto.insertBefore = function (element) { + if (this.removed) { + return this; + } + if (element.constructor == Set) { + element = element[0]; + } + element.Group.parentNode.insertBefore(this.Group, element.Group); + insertbefore(this, element, this.paper); + return this; + }; + elproto.blur = function (size) { + var s = this.node.runtimeStyle, + f = s.filter; + f = f.replace(blurregexp, E); + if (+size !== 0) { + this.attrs.blur = size; + s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")"; + s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5)); + } else { + s.filter = f; + s.margin = 0; + delete this.attrs.blur; + } + }; + + theCircle = function (vml, x, y, r) { + var g = createNode("group"), + o = createNode("oval"), + ol = o.style; + g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px"; + g.coordsize = coordsize; + g.coordorigin = vml.coordorigin; + g[appendChild](o); + var res = new Element(o, g, vml); + res.type = "circle"; + setFillAndStroke(res, {stroke: "#000", fill: "none"}); + res.attrs.cx = x; + res.attrs.cy = y; + res.attrs.r = r; + res.setBox({x: x - r, y: y - r, width: r * 2, height: r * 2}); + vml.canvas[appendChild](g); + return res; + }; + function rectPath(x, y, w, h, r) { + if (r) { + return R.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", x + r, y, w - r * 2, r, -r, h - r * 2, r * 2 - w, r * 2 - h); + } else { + return R.format("M{0},{1}l{2},0,0,{3},{4},0z", x, y, w, h, -w); + } + } + theRect = function (vml, x, y, w, h, r) { + var path = rectPath(x, y, w, h, r), + res = vml.path(path), + a = res.attrs; + res.X = a.x = x; + res.Y = a.y = y; + res.W = a.width = w; + res.H = a.height = h; + a.r = r; + a.path = path; + res.type = "rect"; + return res; + }; + theEllipse = function (vml, x, y, rx, ry) { + var g = createNode("group"), + o = createNode("oval"), + ol = o.style; + g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px"; + g.coordsize = coordsize; + g.coordorigin = vml.coordorigin; + g[appendChild](o); + var res = new Element(o, g, vml); + res.type = "ellipse"; + setFillAndStroke(res, {stroke: "#000"}); + res.attrs.cx = x; + res.attrs.cy = y; + res.attrs.rx = rx; + res.attrs.ry = ry; + res.setBox({x: x - rx, y: y - ry, width: rx * 2, height: ry * 2}); + vml.canvas[appendChild](g); + return res; + }; + theImage = function (vml, src, x, y, w, h) { + var g = createNode("group"), + o = createNode("image"); + g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px"; + g.coordsize = coordsize; + g.coordorigin = vml.coordorigin; + o.src = src; + g[appendChild](o); + var res = new Element(o, g, vml); + res.type = "image"; + res.attrs.src = src; + res.attrs.x = x; + res.attrs.y = y; + res.attrs.w = w; + res.attrs.h = h; + res.setBox({x: x, y: y, width: w, height: h}); + vml.canvas[appendChild](g); + return res; + }; + theText = function (vml, x, y, text) { + var g = createNode("group"), + el = createNode("shape"), + ol = el.style, + path = createNode("path"), + ps = path.style, + o = createNode("textpath"); + g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px"; + g.coordsize = coordsize; + g.coordorigin = vml.coordorigin; + path.v = R.format("m{0},{1}l{2},{1}", round(x * 10), round(y * 10), round(x * 10) + 1); + path.textpathok = true; + ol.width = vml.width; + ol.height = vml.height; + o.string = Str(text); + o.on = true; + el[appendChild](o); + el[appendChild](path); + g[appendChild](el); + var res = new Element(o, g, vml); + res.shape = el; + res.textpath = path; + res.type = "text"; + res.attrs.text = text; + res.attrs.x = x; + res.attrs.y = y; + res.attrs.w = 1; + res.attrs.h = 1; + setFillAndStroke(res, {font: availableAttrs.font, stroke: "none", fill: "#000"}); + res.setBox(); + vml.canvas[appendChild](g); + return res; + }; + setSize = function (width, height) { + var cs = this.canvas.style; + width == +width && (width += "px"); + height == +height && (height += "px"); + cs.width = width; + cs.height = height; + cs.clip = "rect(0 " + width + " " + height + " 0)"; + return this; + }; + var createNode; + doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); + try { + !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"); + createNode = function (tagName) { + return doc.createElement(''); + }; + } catch (e) { + createNode = function (tagName) { + return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">'); + }; + } + create = function () { + var con = getContainer[apply](0, arguments), + container = con.container, + height = con.height, + s, + width = con.width, + x = con.x, + y = con.y; + if (!container) { + throw new Error("VML container not found."); + } + var res = new Paper, + c = res.canvas = doc.createElement("div"), + cs = c.style; + x = x || 0; + y = y || 0; + width = width || 512; + height = height || 342; + width == +width && (width += "px"); + height == +height && (height += "px"); + res.width = 1e3; + res.height = 1e3; + res.coordsize = zoom * 1e3 + S + zoom * 1e3; + res.coordorigin = "0 0"; + res.span = doc.createElement("span"); + res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;"; + c[appendChild](res.span); + cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height); + if (container == 1) { + doc.body[appendChild](c); + cs.left = x + "px"; + cs.top = y + "px"; + cs.position = "absolute"; + } else { + if (container.firstChild) { + container.insertBefore(c, container.firstChild); + } else { + container[appendChild](c); + } + } + plugins.call(res, res, R.fn); + return res; + }; + paperproto.clear = function () { + this.canvas.innerHTML = E; + this.span = doc.createElement("span"); + this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;"; + this.canvas[appendChild](this.span); + this.bottom = this.top = null; + }; + paperproto.remove = function () { + this.canvas.parentNode.removeChild(this.canvas); + for (var i in this) { + this[i] = removed(i); + } + return true; + }; + } + + // rest + // WebKit rendering bug workaround method + var version = navigator.userAgent.match(/Version\/(.*?)\s/); + if ((navigator.vendor == "Apple Computer, Inc.") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == "iP")) { + paperproto.safari = function () { + var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"}); + win.setTimeout(function () {rect.remove();}); + }; + } else { + paperproto.safari = function () {}; + } + + // Events + var preventDefault = function () { + this.returnValue = false; + }, + preventTouch = function () { + return this.originalEvent.preventDefault(); + }, + stopPropagation = function () { + this.cancelBubble = true; + }, + stopTouch = function () { + return this.originalEvent.stopPropagation(); + }, + addEvent = (function () { + if (doc.addEventListener) { + return function (obj, type, fn, element) { + var realName = supportsTouch && touchMap[type] ? touchMap[type] : type; + var f = function (e) { + if (supportsTouch && touchMap[has](type)) { + for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) { + if (e.targetTouches[i].target == obj) { + var olde = e; + e = e.targetTouches[i]; + e.originalEvent = olde; + e.preventDefault = preventTouch; + e.stopPropagation = stopTouch; + break; + } + } + } + return fn.call(element, e); + }; + obj.addEventListener(realName, f, false); + return function () { + obj.removeEventListener(realName, f, false); + return true; + }; + }; + } else if (doc.attachEvent) { + return function (obj, type, fn, element) { + var f = function (e) { + e = e || win.event; + e.preventDefault = e.preventDefault || preventDefault; + e.stopPropagation = e.stopPropagation || stopPropagation; + return fn.call(element, e); + }; + obj.attachEvent("on" + type, f); + var detacher = function () { + obj.detachEvent("on" + type, f); + return true; + }; + return detacher; + }; + } + })(), + drag = [], + dragMove = function (e) { + var x = e.clientX, + y = e.clientY, + scrollY = doc.documentElement.scrollTop || doc.body.scrollTop, + scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft, + dragi, + j = drag.length; + while (j--) { + dragi = drag[j]; + if (supportsTouch) { + var i = e.touches.length, + touch; + while (i--) { + touch = e.touches[i]; + if (touch.identifier == dragi.el._drag.id) { + x = touch.clientX; + y = touch.clientY; + (e.originalEvent ? e.originalEvent : e).preventDefault(); + break; + } + } + } else { + e.preventDefault(); + } + x += scrollX; + y += scrollY; + dragi.move && dragi.move.call(dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e); + } + }, + dragUp = function (e) { + R.unmousemove(dragMove).unmouseup(dragUp); + var i = drag.length, + dragi; + while (i--) { + dragi = drag[i]; + dragi.el._drag = {}; + dragi.end && dragi.end.call(dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e); + } + drag = []; + }; + for (var i = events[length]; i--;) { + (function (eventName) { + R[eventName] = Element[proto][eventName] = function (fn, scope) { + if (R.is(fn, "function")) { + this.events = this.events || []; + this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || doc, eventName, fn, scope || this)}); + } + return this; + }; + R["un" + eventName] = Element[proto]["un" + eventName] = function (fn) { + var events = this.events, + l = events[length]; + while (l--) if (events[l].name == eventName && events[l].f == fn) { + events[l].unbind(); + events.splice(l, 1); + !events.length && delete this.events; + return this; + } + return this; + }; + })(events[i]); + } + elproto.hover = function (f_in, f_out, scope_in, scope_out) { + return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in); + }; + elproto.unhover = function (f_in, f_out) { + return this.unmouseover(f_in).unmouseout(f_out); + }; + elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) { + this._drag = {}; + this.mousedown(function (e) { + (e.originalEvent || e).preventDefault(); + var scrollY = doc.documentElement.scrollTop || doc.body.scrollTop, + scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft; + this._drag.x = e.clientX + scrollX; + this._drag.y = e.clientY + scrollY; + this._drag.id = e.identifier; + onstart && onstart.call(start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e); + !drag.length && R.mousemove(dragMove).mouseup(dragUp); + drag.push({el: this, move: onmove, end: onend, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope}); + }); + return this; + }; + elproto.undrag = function (onmove, onstart, onend) { + var i = drag.length; + while (i--) { + drag[i].el == this && (drag[i].move == onmove && drag[i].end == onend) && drag.splice(i++, 1); + } + !drag.length && R.unmousemove(dragMove).unmouseup(dragUp); + }; + paperproto.circle = function (x, y, r) { + return theCircle(this, x || 0, y || 0, r || 0); + }; + paperproto.rect = function (x, y, w, h, r) { + return theRect(this, x || 0, y || 0, w || 0, h || 0, r || 0); + }; + paperproto.ellipse = function (x, y, rx, ry) { + return theEllipse(this, x || 0, y || 0, rx || 0, ry || 0); + }; + paperproto.path = function (pathString) { + pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E); + return thePath(R.format[apply](R, arguments), this); + }; + paperproto.image = function (src, x, y, w, h) { + return theImage(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0); + }; + paperproto.text = function (x, y, text) { + return theText(this, x || 0, y || 0, Str(text)); + }; + paperproto.set = function (itemsArray) { + arguments[length] > 1 && (itemsArray = Array[proto].splice.call(arguments, 0, arguments[length])); + return new Set(itemsArray); + }; + paperproto.setSize = setSize; + paperproto.top = paperproto.bottom = null; + paperproto.raphael = R; + function x_y() { + return this.x + S + this.y; + } + elproto.resetScale = function () { + if (this.removed) { + return this; + } + this._.sx = 1; + this._.sy = 1; + this.attrs.scale = "1 1"; + }; + elproto.scale = function (x, y, cx, cy) { + if (this.removed) { + return this; + } + if (x == null && y == null) { + return { + x: this._.sx, + y: this._.sy, + toString: x_y + }; + } + y = y || x; + !+y && (y = x); + var dx, + dy, + dcx, + dcy, + a = this.attrs; + if (x != 0) { + var bb = this.getBBox(), + rcx = bb.x + bb.width / 2, + rcy = bb.y + bb.height / 2, + kx = abs(x / this._.sx), + ky = abs(y / this._.sy); + cx = (+cx || cx == 0) ? cx : rcx; + cy = (+cy || cy == 0) ? cy : rcy; + var posx = this._.sx > 0, + posy = this._.sy > 0, + dirx = ~~(x / abs(x)), + diry = ~~(y / abs(y)), + dkx = kx * dirx, + dky = ky * diry, + s = this.node.style, + ncx = cx + abs(rcx - cx) * dkx * (rcx > cx == posx ? 1 : -1), + ncy = cy + abs(rcy - cy) * dky * (rcy > cy == posy ? 1 : -1), + fr = (x * dirx > y * diry ? ky : kx); + switch (this.type) { + case "rect": + case "image": + var neww = a.width * kx, + newh = a.height * ky; + this.attr({ + height: newh, + r: a.r * fr, + width: neww, + x: ncx - neww / 2, + y: ncy - newh / 2 + }); + break; + case "circle": + case "ellipse": + this.attr({ + rx: a.rx * kx, + ry: a.ry * ky, + r: a.r * fr, + cx: ncx, + cy: ncy + }); + break; + case "text": + this.attr({ + x: ncx, + y: ncy + }); + break; + case "path": + var path = pathToRelative(a.path), + skip = true, + fx = posx ? dkx : kx, + fy = posy ? dky : ky; + for (var i = 0, ii = path[length]; i < ii; i++) { + var p = path[i], + P0 = upperCase.call(p[0]); + if (P0 == "M" && skip) { + continue; + } else { + skip = false; + } + if (P0 == "A") { + p[path[i][length] - 2] *= fx; + p[path[i][length] - 1] *= fy; + p[1] *= kx; + p[2] *= ky; + p[5] = +(dirx + diry ? !!+p[5] : !+p[5]); + } else if (P0 == "H") { + for (var j = 1, jj = p[length]; j < jj; j++) { + p[j] *= fx; + } + } else if (P0 == "V") { + for (j = 1, jj = p[length]; j < jj; j++) { + p[j] *= fy; + } + } else { + for (j = 1, jj = p[length]; j < jj; j++) { + p[j] *= (j % 2) ? fx : fy; + } + } + } + var dim2 = pathDimensions(path); + dx = ncx - dim2.x - dim2.width / 2; + dy = ncy - dim2.y - dim2.height / 2; + path[0][1] += dx; + path[0][2] += dy; + this.attr({path: path}); + break; + } + if (this.type in {text: 1, image:1} && (dirx != 1 || diry != 1)) { + if (this.transformations) { + this.transformations[2] = "scale("[concat](dirx, ",", diry, ")"); + this.node[setAttribute]("transform", this.transformations[join](S)); + dx = (dirx == -1) ? -a.x - (neww || 0) : a.x; + dy = (diry == -1) ? -a.y - (newh || 0) : a.y; + this.attr({x: dx, y: dy}); + a.fx = dirx - 1; + a.fy = diry - 1; + } else { + this.node.filterMatrix = ms + ".Matrix(M11="[concat](dirx, + ", M12=0, M21=0, M22=", diry, + ", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')"); + s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E); + } + } else { + if (this.transformations) { + this.transformations[2] = E; + this.node[setAttribute]("transform", this.transformations[join](S)); + a.fx = 0; + a.fy = 0; + } else { + this.node.filterMatrix = E; + s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E); + } + } + a.scale = [x, y, cx, cy][join](S); + this._.sx = x; + this._.sy = y; + } + return this; + }; + elproto.clone = function () { + if (this.removed) { + return null; + } + var attr = this.attr(); + delete attr.scale; + delete attr.translation; + return this.paper[this.type]().attr(attr); + }; + var curveslengths = {}, + getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) { + var len = 0, + precision = 100, + name = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y].join(), + cache = curveslengths[name], + old, dot; + !cache && (curveslengths[name] = cache = {data: []}); + cache.timer && clearTimeout(cache.timer); + cache.timer = setTimeout(function () {delete curveslengths[name];}, 2000); + if (length != null) { + var total = getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y); + precision = ~~total * 10; + } + for (var i = 0; i < precision + 1; i++) { + if (cache.data[length] > i) { + dot = cache.data[i * precision]; + } else { + dot = R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, i / precision); + cache.data[i] = dot; + } + i && (len += pow(pow(old.x - dot.x, 2) + pow(old.y - dot.y, 2), .5)); + if (length != null && len >= length) { + return dot; + } + old = dot; + } + if (length == null) { + return len; + } + }, + getLengthFactory = function (istotal, subpath) { + return function (path, length, onlystart) { + path = path2curve(path); + var x, y, p, l, sp = "", subpaths = {}, point, + len = 0; + for (var i = 0, ii = path.length; i < ii; i++) { + p = path[i]; + if (p[0] == "M") { + x = +p[1]; + y = +p[2]; + } else { + l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]); + if (len + l > length) { + if (subpath && !subpaths.start) { + point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len); + sp += ["C", point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y]; + if (onlystart) {return sp;} + subpaths.start = sp; + sp = ["M", point.x, point.y + "C", point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]][join](); + len += l; + x = +p[5]; + y = +p[6]; + continue; + } + if (!istotal && !subpath) { + point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len); + return {x: point.x, y: point.y, alpha: point.alpha}; + } + } + len += l; + x = +p[5]; + y = +p[6]; + } + sp += p; + } + subpaths.end = sp; + point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[1], p[2], p[3], p[4], p[5], p[6], 1); + point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha}); + return point; + }; + }; + var getTotalLength = getLengthFactory(1), + getPointAtLength = getLengthFactory(), + getSubpathsAtLength = getLengthFactory(0, 1); + elproto.getTotalLength = function () { + if (this.type != "path") {return;} + if (this.node.getTotalLength) { + return this.node.getTotalLength(); + } + return getTotalLength(this.attrs.path); + }; + elproto.getPointAtLength = function (length) { + if (this.type != "path") {return;} + return getPointAtLength(this.attrs.path, length); + }; + elproto.getSubpath = function (from, to) { + if (this.type != "path") {return;} + if (abs(this.getTotalLength() - to) < "1e-6") { + return getSubpathsAtLength(this.attrs.path, from).end; + } + var a = getSubpathsAtLength(this.attrs.path, to, 1); + return from ? getSubpathsAtLength(a, from).end : a; + }; + + // animation easing formulas + R.easing_formulas = { + linear: function (n) { + return n; + }, + "<": function (n) { + return pow(n, 3); + }, + ">": function (n) { + return pow(n - 1, 3) + 1; + }, + "<>": function (n) { + n = n * 2; + if (n < 1) { + return pow(n, 3) / 2; + } + n -= 2; + return (pow(n, 3) + 2) / 2; + }, + backIn: function (n) { + var s = 1.70158; + return n * n * ((s + 1) * n - s); + }, + backOut: function (n) { + n = n - 1; + var s = 1.70158; + return n * n * ((s + 1) * n + s) + 1; + }, + elastic: function (n) { + if (n == 0 || n == 1) { + return n; + } + var p = .3, + s = p / 4; + return pow(2, -10 * n) * math.sin((n - s) * (2 * PI) / p) + 1; + }, + bounce: function (n) { + var s = 7.5625, + p = 2.75, + l; + if (n < (1 / p)) { + l = s * n * n; + } else { + if (n < (2 / p)) { + n -= (1.5 / p); + l = s * n * n + .75; + } else { + if (n < (2.5 / p)) { + n -= (2.25 / p); + l = s * n * n + .9375; + } else { + n -= (2.625 / p); + l = s * n * n + .984375; + } + } + } + return l; + } + }; + + var animationElements = [], + animation = function () { + var Now = +new Date; + for (var l = 0; l < animationElements[length]; l++) { + var e = animationElements[l]; + if (e.stop || e.el.removed) { + continue; + } + var time = Now - e.start, + ms = e.ms, + easing = e.easing, + from = e.from, + diff = e.diff, + to = e.to, + t = e.t, + that = e.el, + set = {}, + now; + if (time < ms) { + var pos = easing(time / ms); + for (var attr in from) if (from[has](attr)) { + switch (availableAnimAttrs[attr]) { + case "along": + now = pos * ms * diff[attr]; + to.back && (now = to.len - now); + var point = getPointAtLength(to[attr], now); + that.translate(diff.sx - diff.x || 0, diff.sy - diff.y || 0); + diff.x = point.x; + diff.y = point.y; + that.translate(point.x - diff.sx, point.y - diff.sy); + to.rot && that.rotate(diff.r + point.alpha, point.x, point.y); + break; + case nu: + now = +from[attr] + pos * ms * diff[attr]; + break; + case "colour": + now = "rgb(" + [ + upto255(round(from[attr].r + pos * ms * diff[attr].r)), + upto255(round(from[attr].g + pos * ms * diff[attr].g)), + upto255(round(from[attr].b + pos * ms * diff[attr].b)) + ][join](",") + ")"; + break; + case "path": + now = []; + for (var i = 0, ii = from[attr][length]; i < ii; i++) { + now[i] = [from[attr][i][0]]; + for (var j = 1, jj = from[attr][i][length]; j < jj; j++) { + now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j]; + } + now[i] = now[i][join](S); + } + now = now[join](S); + break; + case "csv": + switch (attr) { + case "translation": + var x = pos * ms * diff[attr][0] - t.x, + y = pos * ms * diff[attr][1] - t.y; + t.x += x; + t.y += y; + now = x + S + y; + break; + case "rotation": + now = +from[attr][0] + pos * ms * diff[attr][0]; + from[attr][1] && (now += "," + from[attr][1] + "," + from[attr][2]); + break; + case "scale": + now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in to[attr] ? to[attr][2] : E), (3 in to[attr] ? to[attr][3] : E)][join](S); + break; + case "clip-rect": + now = []; + i = 4; + while (i--) { + now[i] = +from[attr][i] + pos * ms * diff[attr][i]; + } + break; + } + break; + default: + var from2 = [].concat(from[attr]); + now = []; + i = that.paper.customAttributes[attr].length; + while (i--) { + now[i] = +from2[i] + pos * ms * diff[attr][i]; + } + break; + } + set[attr] = now; + } + that.attr(set); + that._run && that._run.call(that); + } else { + if (to.along) { + point = getPointAtLength(to.along, to.len * !to.back); + that.translate(diff.sx - (diff.x || 0) + point.x - diff.sx, diff.sy - (diff.y || 0) + point.y - diff.sy); + to.rot && that.rotate(diff.r + point.alpha, point.x, point.y); + } + (t.x || t.y) && that.translate(-t.x, -t.y); + to.scale && (to.scale += E); + that.attr(to); + animationElements.splice(l--, 1); + } + } + R.svg && that && that.paper && that.paper.safari(); + animationElements[length] && setTimeout(animation); + }, + keyframesRun = function (attr, element, time, prev, prevcallback) { + var dif = time - prev; + element.timeouts.push(setTimeout(function () { + R.is(prevcallback, "function") && prevcallback.call(element); + element.animate(attr, dif, attr.easing); + }, prev)); + }, + upto255 = function (color) { + return mmax(mmin(color, 255), 0); + }, + translate = function (x, y) { + if (x == null) { + return {x: this._.tx, y: this._.ty, toString: x_y}; + } + this._.tx += +x; + this._.ty += +y; + switch (this.type) { + case "circle": + case "ellipse": + this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy}); + break; + case "rect": + case "image": + case "text": + this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y}); + break; + case "path": + var path = pathToRelative(this.attrs.path); + path[0][1] += +x; + path[0][2] += +y; + this.attr({path: path}); + break; + } + return this; + }; + elproto.animateWith = function (element, params, ms, easing, callback) { + for (var i = 0, ii = animationElements.length; i < ii; i++) { + if (animationElements[i].el.id == element.id) { + params.start = animationElements[i].start; + } + } + return this.animate(params, ms, easing, callback); + }; + elproto.animateAlong = along(); + elproto.animateAlongBack = along(1); + function along(isBack) { + return function (path, ms, rotate, callback) { + var params = {back: isBack}; + R.is(rotate, "function") ? (callback = rotate) : (params.rot = rotate); + path && path.constructor == Element && (path = path.attrs.path); + path && (params.along = path); + return this.animate(params, ms, callback); + }; + } + function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) { + var cx = 3 * p1x, + bx = 3 * (p2x - p1x) - cx, + ax = 1 - cx - bx, + cy = 3 * p1y, + by = 3 * (p2y - p1y) - cy, + ay = 1 - cy - by; + function sampleCurveX(t) { + return ((ax * t + bx) * t + cx) * t; + } + function solve(x, epsilon) { + var t = solveCurveX(x, epsilon); + return ((ay * t + by) * t + cy) * t; + } + function solveCurveX(x, epsilon) { + var t0, t1, t2, x2, d2, i; + for(t2 = x, i = 0; i < 8; i++) { + x2 = sampleCurveX(t2) - x; + if (abs(x2) < epsilon) { + return t2; + } + d2 = (3 * ax * t2 + 2 * bx) * t2 + cx; + if (abs(d2) < 1e-6) { + break; + } + t2 = t2 - x2 / d2; + } + t0 = 0; + t1 = 1; + t2 = x; + if (t2 < t0) { + return t0; + } + if (t2 > t1) { + return t1; + } + while (t0 < t1) { + x2 = sampleCurveX(t2); + if (abs(x2 - x) < epsilon) { + return t2; + } + if (x > x2) { + t0 = t2; + } else { + t1 = t2; + } + t2 = (t1 - t0) / 2 + t0; + } + return t2; + } + return solve(t, 1 / (200 * duration)); + } + elproto.onAnimation = function (f) { + this._run = f || 0; + return this; + }; + elproto.animate = function (params, ms, easing, callback) { + var element = this; + element.timeouts = element.timeouts || []; + if (R.is(easing, "function") || !easing) { + callback = easing || null; + } + if (element.removed) { + callback && callback.call(element); + return element; + } + var from = {}, + to = {}, + animateable = false, + diff = {}; + for (var attr in params) if (params[has](attr)) { + if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) { + animateable = true; + from[attr] = element.attr(attr); + (from[attr] == null) && (from[attr] = availableAttrs[attr]); + to[attr] = params[attr]; + switch (availableAnimAttrs[attr]) { + case "along": + var len = getTotalLength(params[attr]); + var point = getPointAtLength(params[attr], len * !!params.back); + var bb = element.getBBox(); + diff[attr] = len / ms; + diff.tx = bb.x; + diff.ty = bb.y; + diff.sx = point.x; + diff.sy = point.y; + to.rot = params.rot; + to.back = params.back; + to.len = len; + params.rot && (diff.r = toFloat(element.rotate()) || 0); + break; + case nu: + diff[attr] = (to[attr] - from[attr]) / ms; + break; + case "colour": + from[attr] = R.getRGB(from[attr]); + var toColour = R.getRGB(to[attr]); + diff[attr] = { + r: (toColour.r - from[attr].r) / ms, + g: (toColour.g - from[attr].g) / ms, + b: (toColour.b - from[attr].b) / ms + }; + break; + case "path": + var pathes = path2curve(from[attr], to[attr]); + from[attr] = pathes[0]; + var toPath = pathes[1]; + diff[attr] = []; + for (var i = 0, ii = from[attr][length]; i < ii; i++) { + diff[attr][i] = [0]; + for (var j = 1, jj = from[attr][i][length]; j < jj; j++) { + diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms; + } + } + break; + case "csv": + var values = Str(params[attr])[split](separator), + from2 = Str(from[attr])[split](separator); + switch (attr) { + case "translation": + from[attr] = [0, 0]; + diff[attr] = [values[0] / ms, values[1] / ms]; + break; + case "rotation": + from[attr] = (from2[1] == values[1] && from2[2] == values[2]) ? from2 : [0, values[1], values[2]]; + diff[attr] = [(values[0] - from[attr][0]) / ms, 0, 0]; + break; + case "scale": + params[attr] = values; + from[attr] = Str(from[attr])[split](separator); + diff[attr] = [(values[0] - from[attr][0]) / ms, (values[1] - from[attr][1]) / ms, 0, 0]; + break; + case "clip-rect": + from[attr] = Str(from[attr])[split](separator); + diff[attr] = []; + i = 4; + while (i--) { + diff[attr][i] = (values[i] - from[attr][i]) / ms; + } + break; + } + to[attr] = values; + break; + default: + values = [].concat(params[attr]); + from2 = [].concat(from[attr]); + diff[attr] = []; + i = element.paper.customAttributes[attr][length]; + while (i--) { + diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms; + } + break; + } + } + } + if (!animateable) { + var attrs = [], + lastcall; + for (var key in params) if (params[has](key) && animKeyFrames.test(key)) { + attr = {value: params[key]}; + key == "from" && (key = 0); + key == "to" && (key = 100); + attr.key = toInt(key, 10); + attrs.push(attr); + } + attrs.sort(sortByKey); + if (attrs[0].key) { + attrs.unshift({key: 0, value: element.attrs}); + } + for (i = 0, ii = attrs[length]; i < ii; i++) { + keyframesRun(attrs[i].value, element, ms / 100 * attrs[i].key, ms / 100 * (attrs[i - 1] && attrs[i - 1].key || 0), attrs[i - 1] && attrs[i - 1].value.callback); + } + lastcall = attrs[attrs[length] - 1].value.callback; + if (lastcall) { + element.timeouts.push(setTimeout(function () {lastcall.call(element);}, ms)); + } + } else { + var easyeasy = R.easing_formulas[easing]; + if (!easyeasy) { + easyeasy = Str(easing).match(bezierrg); + if (easyeasy && easyeasy[length] == 5) { + var curve = easyeasy; + easyeasy = function (t) { + return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms); + }; + } else { + easyeasy = function (t) { + return t; + }; + } + } + animationElements.push({ + start: params.start || +new Date, + ms: ms, + easing: easyeasy, + from: from, + diff: diff, + to: to, + el: element, + t: {x: 0, y: 0} + }); + R.is(callback, "function") && (element._ac = setTimeout(function () { + callback.call(element); + }, ms)); + animationElements[length] == 1 && setTimeout(animation); + } + return this; + }; + elproto.stop = function () { + for (var i = 0; i < animationElements.length; i++) { + animationElements[i].el.id == this.id && animationElements.splice(i--, 1); + } + for (i = 0, ii = this.timeouts && this.timeouts.length; i < ii; i++) { + clearTimeout(this.timeouts[i]); + } + this.timeouts = []; + clearTimeout(this._ac); + delete this._ac; + return this; + }; + elproto.translate = function (x, y) { + return this.attr({translation: x + " " + y}); + }; + elproto[toString] = function () { + return "Rapha\xebl\u2019s object"; + }; + R.ae = animationElements; + + // Set + var Set = function (items) { + this.items = []; + this[length] = 0; + this.type = "set"; + if (items) { + for (var i = 0, ii = items[length]; i < ii; i++) { + if (items[i] && (items[i].constructor == Element || items[i].constructor == Set)) { + this[this.items[length]] = this.items[this.items[length]] = items[i]; + this[length]++; + } + } + } + }; + Set[proto][push] = function () { + var item, + len; + for (var i = 0, ii = arguments[length]; i < ii; i++) { + item = arguments[i]; + if (item && (item.constructor == Element || item.constructor == Set)) { + len = this.items[length]; + this[len] = this.items[len] = item; + this[length]++; + } + } + return this; + }; + Set[proto].pop = function () { + delete this[this[length]--]; + return this.items.pop(); + }; + for (var method in elproto) if (elproto[has](method)) { + Set[proto][method] = (function (methodname) { + return function () { + for (var i = 0, ii = this.items[length]; i < ii; i++) { + this.items[i][methodname][apply](this.items[i], arguments); + } + return this; + }; + })(method); + } + Set[proto].attr = function (name, value) { + if (name && R.is(name, array) && R.is(name[0], "object")) { + for (var j = 0, jj = name[length]; j < jj; j++) { + this.items[j].attr(name[j]); + } + } else { + for (var i = 0, ii = this.items[length]; i < ii; i++) { + this.items[i].attr(name, value); + } + } + return this; + }; + Set[proto].animate = function (params, ms, easing, callback) { + (R.is(easing, "function") || !easing) && (callback = easing || null); + var len = this.items[length], + i = len, + item, + set = this, + collector; + callback && (collector = function () { + !--len && callback.call(set); + }); + easing = R.is(easing, string) ? easing : collector; + item = this.items[--i].animate(params, ms, easing, collector); + while (i--) { + this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, params, ms, easing, collector); + } + return this; + }; + Set[proto].insertAfter = function (el) { + var i = this.items[length]; + while (i--) { + this.items[i].insertAfter(el); + } + return this; + }; + Set[proto].getBBox = function () { + var x = [], + y = [], + w = [], + h = []; + for (var i = this.items[length]; i--;) { + var box = this.items[i].getBBox(); + x[push](box.x); + y[push](box.y); + w[push](box.x + box.width); + h[push](box.y + box.height); + } + x = mmin[apply](0, x); + y = mmin[apply](0, y); + return { + x: x, + y: y, + width: mmax[apply](0, w) - x, + height: mmax[apply](0, h) - y + }; + }; + Set[proto].clone = function (s) { + s = new Set; + for (var i = 0, ii = this.items[length]; i < ii; i++) { + s[push](this.items[i].clone()); + } + return s; + }; + + R.registerFont = function (font) { + if (!font.face) { + return font; + } + this.fonts = this.fonts || {}; + var fontcopy = { + w: font.w, + face: {}, + glyphs: {} + }, + family = font.face["font-family"]; + for (var prop in font.face) if (font.face[has](prop)) { + fontcopy.face[prop] = font.face[prop]; + } + if (this.fonts[family]) { + this.fonts[family][push](fontcopy); + } else { + this.fonts[family] = [fontcopy]; + } + if (!font.svg) { + fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10); + for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) { + var path = font.glyphs[glyph]; + fontcopy.glyphs[glyph] = { + w: path.w, + k: {}, + d: path.d && "M" + path.d[rp](/[mlcxtrv]/g, function (command) { + return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M"; + }) + "z" + }; + if (path.k) { + for (var k in path.k) if (path[has](k)) { + fontcopy.glyphs[glyph].k[k] = path.k[k]; + } + } + } + } + return font; + }; + paperproto.getFont = function (family, weight, style, stretch) { + stretch = stretch || "normal"; + style = style || "normal"; + weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400; + if (!R.fonts) { + return; + } + var font = R.fonts[family]; + if (!font) { + var name = new RegExp("(^|\\s)" + family[rp](/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i"); + for (var fontName in R.fonts) if (R.fonts[has](fontName)) { + if (name.test(fontName)) { + font = R.fonts[fontName]; + break; + } + } + } + var thefont; + if (font) { + for (var i = 0, ii = font[length]; i < ii; i++) { + thefont = font[i]; + if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) { + break; + } + } + } + return thefont; + }; + paperproto.print = function (x, y, string, font, size, origin, letter_spacing) { + origin = origin || "middle"; // baseline|middle + letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1); + var out = this.set(), + letters = Str(string)[split](E), + shift = 0, + path = E, + scale; + R.is(font, string) && (font = this.getFont(font)); + if (font) { + scale = (size || 16) / font.face["units-per-em"]; + var bb = font.face.bbox.split(separator), + top = +bb[0], + height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2); + for (var i = 0, ii = letters[length]; i < ii; i++) { + var prev = i && font.glyphs[letters[i - 1]] || {}, + curr = font.glyphs[letters[i]]; + shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0; + curr && curr.d && out[push](this.path(curr.d).attr({fill: "#000", stroke: "none", translation: [shift, 0]})); + } + out.scale(scale, scale, top, height).translate(x - top, y - height); + } + return out; + }; + + R.format = function (token, params) { + var args = R.is(params, array) ? [0][concat](params) : arguments; + token && R.is(token, string) && args[length] - 1 && (token = token[rp](formatrg, function (str, i) { + return args[++i] == null ? E : args[i]; + })); + return token || E; + }; + R.ninja = function () { + oldRaphael.was ? (win.Raphael = oldRaphael.is) : delete Raphael; + return R; + }; + R.el = elproto; + R.st = Set[proto]; + + oldRaphael.was ? (win.Raphael = R) : (Raphael = R); +})();/*! + * g.Raphael 0.4.1 - Charting library, based on Raphaël + * + * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ + + +(function () { + var mmax = Math.max, + mmin = Math.min; + Raphael.fn.g = Raphael.fn.g || {}; + Raphael.fn.g.markers = { + disc: "disc", + o: "disc", + flower: "flower", + f: "flower", + diamond: "diamond", + d: "diamond", + square: "square", + s: "square", + triangle: "triangle", + t: "triangle", + star: "star", + "*": "star", + cross: "cross", + x: "cross", + plus: "plus", + "+": "plus", + arrow: "arrow", + "->": "arrow" + }; + Raphael.fn.g.shim = {stroke: "none", fill: "#000", "fill-opacity": 0}; + Raphael.fn.g.txtattr = {font: "12px Arial, sans-serif"}; + Raphael.fn.g.colors = []; + var hues = [.6, .2, .05, .1333, .75, 0]; + for (var i = 0; i < 10; i++) { + if (i < hues.length) { + Raphael.fn.g.colors.push("hsb(" + hues[i] + ", .75, .75)"); + } else { + Raphael.fn.g.colors.push("hsb(" + hues[i - hues.length] + ", 1, .5)"); + } + } + Raphael.fn.g.text = function (x, y, text) { + return this.text(x, y, text).attr(this.g.txtattr); + }; + Raphael.fn.g.labelise = function (label, val, total) { + if (label) { + return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) { + if (value) { + return (+val).toFixed(value.replace(/^#+\.?/g, "").length); + } + if (percent) { + return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%"; + } + }); + } else { + return (+val).toFixed(0); + } + }; + + Raphael.fn.g.finger = function (x, y, width, height, dir, ending, isPath) { + // dir 0 for horisontal and 1 for vertical + if ((dir && !height) || (!dir && !width)) { + return isPath ? "" : this.path(); + } + ending = {square: "square", sharp: "sharp", soft: "soft"}[ending] || "round"; + var path; + height = Math.round(height); + width = Math.round(width); + x = Math.round(x); + y = Math.round(y); + switch (ending) { + case "round": + if (!dir) { + var r = ~~(height / 2); + if (width < r) { + r = width; + path = ["M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z"]; + } else { + path = ["M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z"]; + } + } else { + r = ~~(width / 2); + if (height < r) { + r = height; + path = ["M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z"]; + } else { + path = ["M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z"]; + } + } + break; + case "sharp": + if (!dir) { + var half = ~~(height / 2); + path = ["M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z"]; + } else { + half = ~~(width / 2); + path = ["M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z"]; + } + break; + case "square": + if (!dir) { + path = ["M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z"]; + } else { + path = ["M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z"]; + } + break; + case "soft": + if (!dir) { + r = mmin(width, Math.round(height / 5)); + path = ["M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z"]; + } else { + r = mmin(Math.round(width / 5), height); + path = ["M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z"]; + } + } + if (isPath) { + return path.join(","); + } else { + return this.path(path); + } + }; + + // Symbols + Raphael.fn.g.disc = function (cx, cy, r) { + return this.circle(cx, cy, r); + }; + Raphael.fn.g.line = function (cx, cy, r) { + return this.rect(cx - r, cy - r / 5, 2 * r, 2 * r / 5); + }; + Raphael.fn.g.square = function (cx, cy, r) { + r = r * .7; + return this.rect(cx - r, cy - r, 2 * r, 2 * r); + }; + Raphael.fn.g.triangle = function (cx, cy, r) { + r *= 1.75; + return this.path("M".concat(cx, ",", cy, "m0-", r * .58, "l", r * .5, ",", r * .87, "-", r, ",0z")); + }; + Raphael.fn.g.diamond = function (cx, cy, r) { + return this.path(["M", cx, cy - r, "l", r, r, -r, r, -r, -r, r, -r, "z"]); + }; + Raphael.fn.g.flower = function (cx, cy, r, n) { + r = r * 1.25; + var rout = r, + rin = rout * .5; + n = +n < 3 || !n ? 5 : n; + var points = ["M", cx, cy + rin, "Q"], + R; + for (var i = 1; i < n * 2 + 1; i++) { + R = i % 2 ? rout : rin; + points = points.concat([+(cx + R * Math.sin(i * Math.PI / n)).toFixed(3), +(cy + R * Math.cos(i * Math.PI / n)).toFixed(3)]); + } + points.push("z"); + return this.path(points.join(",")); + }; + Raphael.fn.g.star = function (cx, cy, r, r2, rays) { + r2 = r2 || r * .382; + rays = rays || 5; + var points = ["M", cx, cy + r2, "L"], + R; + for (var i = 1; i < rays * 2; i++) { + R = i % 2 ? r : r2; + points = points.concat([(cx + R * Math.sin(i * Math.PI / rays)), (cy + R * Math.cos(i * Math.PI / rays))]); + } + points.push("z"); + return this.path(points.join(",")); + }; + Raphael.fn.g.cross = function (cx, cy, r) { + r = r / 2.5; + return this.path("M".concat(cx - r, ",", cy, "l", [-r, -r, r, -r, r, r, r, -r, r, r, -r, r, r, r, -r, r, -r, -r, -r, r, -r, -r, "z"])); + }; + Raphael.fn.g.plus = function (cx, cy, r) { + r = r / 2; + return this.path("M".concat(cx - r / 2, ",", cy - r / 2, "l", [0, -r, r, 0, 0, r, r, 0, 0, r, -r, 0, 0, r, -r, 0, 0, -r, -r, 0, 0, -r, "z"])); + }; + Raphael.fn.g.arrow = function (cx, cy, r) { + return this.path("M".concat(cx - r * .7, ",", cy - r * .4, "l", [r * .6, 0, 0, -r * .4, r, r * .8, -r, r * .8, 0, -r * .4, -r * .6, 0], "z")); + }; + + // Tooltips + Raphael.fn.g.tag = function (x, y, text, angle, r) { + angle = angle || 0; + r = r == null ? 5 : r; + text = text == null ? "$9.99" : text; + var R = .5522 * r, + res = this.set(), + d = 3; + res.push(this.path().attr({fill: "#000", stroke: "#000"})); + res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"})); + res.update = function () { + this.rotate(0, x, y); + var bb = this[1].getBBox(); + if (bb.height >= r * 2) { + this[0].attr({path: ["M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d].join(",")}); + } else { + var dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2)); + this[0].attr({path: ["M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d].join(",")}); + } + this[1].attr({x: x + r + d + bb.width / 2, y: y}); + angle = (360 - angle) % 360; + this.rotate(angle, x, y); + angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]}); + return this; + }; + res.update(); + return res; + }; + Raphael.fn.g.popupit = function (x, y, set, dir, size) { + dir = dir == null ? 2 : dir; + size = size || 5; + x = Math.round(x); + y = Math.round(y); + var bb = set.getBBox(), + w = Math.round(bb.width / 2), + h = Math.round(bb.height / 2), + dx = [0, w + size * 2, 0, -w - size * 2], + dy = [-h * 2 - size * 3, -h - size, 0, -h - size], + p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size, + "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size, + "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size, + "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size, + "l", -mmax(w - size, 0), 0, "z"].join(","), + xy = [{x: x, y: y + size * 2 + h}, {x: x - size * 2 - w, y: y}, {x: x, y: y - size * 2 - h}, {x: x + size * 2 + w, y: y}][dir]; + set.translate(xy.x - w - bb.x, xy.y - h - bb.y); + return this.path(p).attr({fill: "#000", stroke: "none"}).insertBefore(set.node ? set : set[0]); + }; + Raphael.fn.g.popup = function (x, y, text, dir, size) { + dir = dir == null ? 2 : dir > 3 ? 3 : dir; + size = size || 5; + text = text || "$9.99"; + var res = this.set(), + d = 3; + res.push(this.path().attr({fill: "#000", stroke: "#000"})); + res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"})); + res.update = function (X, Y, withAnimation) { + X = X || x; + Y = Y || y; + var bb = this[1].getBBox(), + w = bb.width / 2, + h = bb.height / 2, + dx = [0, w + size * 2, 0, -w - size * 2], + dy = [-h * 2 - size * 3, -h - size, 0, -h - size], + p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size, + "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size, + "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size, + "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size, + "l", -mmax(w - size, 0), 0, "z"].join(","), + xy = [{x: X, y: Y + size * 2 + h}, {x: X - size * 2 - w, y: Y}, {x: X, y: Y - size * 2 - h}, {x: X + size * 2 + w, y: Y}][dir]; + xy.path = p; + if (withAnimation) { + this.animate(xy, 500, ">"); + } else { + this.attr(xy); + } + return this; + }; + return res.update(x, y); + }; + Raphael.fn.g.flag = function (x, y, text, angle) { + angle = angle || 0; + text = text || "$9.99"; + var res = this.set(), + d = 3; + res.push(this.path().attr({fill: "#000", stroke: "#000"})); + res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"})); + res.update = function (x, y) { + this.rotate(0, x, y); + var bb = this[1].getBBox(), + h = bb.height / 2; + this[0].attr({path: ["M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z"].join(",")}); + this[1].attr({x: x + h + d + bb.width / 2, y: y}); + angle = 360 - angle; + this.rotate(angle, x, y); + angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]}); + return this; + }; + return res.update(x, y); + }; + Raphael.fn.g.label = function (x, y, text) { + var res = this.set(); + res.push(this.rect(x, y, 10, 10).attr({stroke: "none", fill: "#000"})); + res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff"})); + res.update = function () { + var bb = this[1].getBBox(), + r = mmin(bb.width + 10, bb.height + 10) / 2; + this[0].attr({x: bb.x - r / 2, y: bb.y - r / 2, width: bb.width + r, height: bb.height + r, r: r}); + }; + res.update(); + return res; + }; + Raphael.fn.g.labelit = function (set) { + var bb = set.getBBox(), + r = mmin(20, bb.width + 10, bb.height + 10) / 2; + return this.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({stroke: "none", fill: "#000"}).insertBefore(set.node ? set : set[0]); + }; + Raphael.fn.g.drop = function (x, y, text, size, angle) { + size = size || 30; + angle = angle || 0; + var res = this.set(); + res.push(this.path(["M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z"]).attr({fill: "#000", stroke: "none", rotation: [22.5 - angle, x, y]})); + angle = (angle + 90) * Math.PI / 180; + res.push(this.text(x + size * Math.sin(angle), y + size * Math.cos(angle), text).attr(this.g.txtattr).attr({"font-size": size * 12 / 30, fill: "#fff"})); + res.drop = res[0]; + res.text = res[1]; + return res; + }; + Raphael.fn.g.blob = function (x, y, text, angle, size) { + angle = (+angle + 1 ? angle : 45) + 90; + size = size || 12; + var rad = Math.PI / 180, + fontSize = size * 12 / 12; + var res = this.set(); + res.push(this.path().attr({fill: "#000", stroke: "none"})); + res.push(this.text(x + size * Math.sin((angle) * rad), y + size * Math.cos((angle) * rad) - fontSize / 2, text).attr(this.g.txtattr).attr({"font-size": fontSize, fill: "#fff"})); + res.update = function (X, Y, withAnimation) { + X = X || x; + Y = Y || y; + var bb = this[1].getBBox(), + w = mmax(bb.width + fontSize, size * 25 / 12), + h = mmax(bb.height + fontSize, size * 25 / 12), + x2 = X + size * Math.sin((angle - 22.5) * rad), + y2 = Y + size * Math.cos((angle - 22.5) * rad), + x1 = X + size * Math.sin((angle + 22.5) * rad), + y1 = Y + size * Math.cos((angle + 22.5) * rad), + dx = (x1 - x2) / 2, + dy = (y1 - y2) / 2, + rx = w / 2, + ry = h / 2, + k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)), + cx = k * rx * dy / ry + (x1 + x2) / 2, + cy = k * -ry * dx / rx + (y1 + y2) / 2; + if (withAnimation) { + this.animate({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")}, 500, ">"); + } else { + this.attr({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")}); + } + return this; + }; + res.update(x, y); + return res; + }; + + Raphael.fn.g.colorValue = function (value, total, s, b) { + return "hsb(" + [mmin((1 - value / total) * .4, 1), s || .75, b || .75] + ")"; + }; + + Raphael.fn.g.snapEnds = function (from, to, steps) { + var f = from, + t = to; + if (f == t) { + return {from: f, to: t, power: 0}; + } + function round(a) { + return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.round(a); + } + var d = (t - f) / steps, + r = ~~(d), + R = r, + i = 0; + if (r) { + while (R) { + i--; + R = ~~(d * Math.pow(10, i)) / Math.pow(10, i); + } + i ++; + } else { + while (!r) { + i = i || 1; + r = ~~(d * Math.pow(10, i)) / Math.pow(10, i); + i++; + } + i && i--; + } + t = round(to * Math.pow(10, i)) / Math.pow(10, i); + if (t < to) { + t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i); + } + f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i); + return {from: f, to: t, power: i}; + }; + Raphael.fn.g.axis = function (x, y, length, from, to, steps, orientation, labels, type, dashsize) { + dashsize = dashsize == null ? 2 : dashsize; + type = type || "t"; + steps = steps || 10; + var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0], + ends = this.g.snapEnds(from, to, steps), + f = ends.from, + t = ends.to, + i = ends.power, + j = 0, + text = this.set(); + d = (t - f) / steps; + var label = f, + rnd = i > 0 ? i : 0; + dx = length / steps; + if (+orientation == 1 || +orientation == 3) { + var Y = y, + addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1)); + while (Y >= y - length) { + type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0])); + text.push(this.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"})); + label += d; + Y -= dx; + } + if (Math.round(Y + dx - (y - length))) { + type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0])); + text.push(this.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"})); + } + } else { + label = f; + rnd = (i > 0) * i; + addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation); + var X = x, + dx = length / steps, + txt = 0, + prev = 0; + while (X <= x + length) { + type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1])); + text.push(txt = this.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr)); + var bb = txt.getBBox(); + if (prev >= bb.x - 5) { + text.pop(text.length - 1).remove(); + } else { + prev = bb.x + bb.width; + } + label += d; + X += dx; + } + if (Math.round(X - dx - x - length)) { + type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1])); + text.push(this.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr)); + } + } + var res = this.path(path); + res.text = text; + res.all = this.set([res, text]); + res.remove = function () { + this.text.remove(); + this.constructor.prototype.remove.call(this); + }; + return res; + }; + + Raphael.el.lighter = function (times) { + times = times || 2; + var fs = [this.attrs.fill, this.attrs.stroke]; + this.fs = this.fs || [fs[0], fs[1]]; + fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex); + fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex); + fs[0].b = mmin(fs[0].b * times, 1); + fs[0].s = fs[0].s / times; + fs[1].b = mmin(fs[1].b * times, 1); + fs[1].s = fs[1].s / times; + this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"}); + }; + Raphael.el.darker = function (times) { + times = times || 2; + var fs = [this.attrs.fill, this.attrs.stroke]; + this.fs = this.fs || [fs[0], fs[1]]; + fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex); + fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex); + fs[0].s = mmin(fs[0].s * times, 1); + fs[0].b = fs[0].b / times; + fs[1].s = mmin(fs[1].s * times, 1); + fs[1].b = fs[1].b / times; + this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"}); + }; + Raphael.el.original = function () { + if (this.fs) { + this.attr({fill: this.fs[0], stroke: this.fs[1]}); + delete this.fs; + } + }; +})();/*! + * g.Raphael 0.4.1 - Charting library, based on Raphaël + * + * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +Raphael.fn.g.barchart = function (x, y, width, height, values, opts) { + opts = opts || {}; + var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square", + gutter = parseFloat(opts.gutter || "20%"), + chart = this.set(), + bars = this.set(), + covers = this.set(), + covers2 = this.set(), + total = Math.max.apply(Math, values), + stacktotal = [], + paper = this, + multi = 0, + colors = opts.colors || this.g.colors, + len = values.length; + if (this.raphael.is(values[0], "array")) { + total = []; + multi = len; + len = 0; + for (var i = values.length; i--;) { + bars.push(this.set()); + total.push(Math.max.apply(Math, values[i])); + len = Math.max(len, values[i].length); + } + if (opts.stacked) { + for (var i = len; i--;) { + var tot = 0; + for (var j = values.length; j--;) { + tot +=+ values[j][i] || 0; + } + stacktotal.push(tot); + } + } + for (var i = values.length; i--;) { + if (values[i].length < len) { + for (var j = len; j--;) { + values[i].push(0); + } + } + } + total = Math.max.apply(Math, opts.stacked ? stacktotal : total); + } + + total = (opts.to) || total; + var barwidth = width / (len * (100 + gutter) + gutter) * 100, + barhgutter = barwidth * gutter / 100, + barvgutter = opts.vgutter == null ? 20 : opts.vgutter, + stack = [], + X = x + barhgutter, + Y = (height - 2 * barvgutter) / total; + if (!opts.stretch) { + barhgutter = Math.round(barhgutter); + barwidth = Math.floor(barwidth); + } + !opts.stacked && (barwidth /= multi || 1); + for (var i = 0; i < len; i++) { + stack = []; + for (var j = 0; j < (multi || 1); j++) { + var h = Math.round((multi ? values[j][i] : values[i]) * Y), + top = y + height - barvgutter - h, + bar = this.g.finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type).attr({stroke: "none", fill: colors[multi ? j : i]}); + if (multi) { + bars[j].push(bar); + } else { + bars.push(bar); + } + bar.y = top; + bar.x = Math.round(X + barwidth / 2); + bar.w = barwidth; + bar.h = h; + bar.index = i; + bar.value = multi ? values[j][i] : values[i]; + if (!opts.stacked) { + X += barwidth; + } else { + stack.push(bar); + } + } + if (opts.stacked) { + var cvr; + covers2.push(cvr = this.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(this.g.shim)); + cvr.bars = this.set(); + var size = 0; + for (var s = stack.length; s--;) { + stack[s].toFront(); + } + for (var s = 0, ss = stack.length; s < ss; s++) { + var bar = stack[s], + cover, + h = (size + bar.value) * Y, + path = this.g.finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1); + cvr.bars.push(bar); + size && bar.attr({path: path}); + bar.h = h; + bar.y = y + height - barvgutter - !!size * .5 - h; + covers.push(cover = this.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(this.g.shim)); + cover.bar = bar; + cover.value = bar.value; + size += bar.value; + } + X += barwidth; + } + X += barhgutter; + } + covers2.toFront(); + X = x + barhgutter; + if (!opts.stacked) { + for (var i = 0; i < len; i++) { + for (var j = 0; j < (multi || 1); j++) { + var cover; + covers.push(cover = this.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(this.g.shim)); + cover.bar = multi ? bars[j][i] : bars[i]; + cover.value = cover.bar.value; + X += barwidth; + } + X += barhgutter; + } + } + chart.label = function (labels, isBottom, rotate) { + labels = labels || []; + isBottom = isBottom == undefined ? true : isBottom; + rotate = rotate == undefined ? false : rotate; + this.labels = paper.set(); + var L, l = -Infinity; + if (opts.stacked) { + for (var i = 0; i < len; i++) { + var tot = 0; + for (var j = 0; j < (multi || 1); j++) { + tot += multi ? values[j][i] : values[i]; + if (j == 0) { + var label = paper.g.labelise(labels[j][i], tot, total); + L = paper.g.text(bars[j][i].x, isBottom ? y + height - barvgutter / 2 : bars[j][i].y - 10, label); + if (rotate) { + L.rotate(90); + } + var bb = L.getBBox(); + if (bb.x - 7 < l) { + L.remove(); + } else { + this.labels.push(L); + l = bb.x + (rotate ? bb.height : bb.width); + } + } + } + } + } else { + for (var i = 0; i < len; i++) { + for (var j = 0; j < (multi || 1); j++) { + // did not remove the loop because don't yet know whether to accept multi array input for arrays + var label = paper.g.labelise(multi ? labels[0] && labels[0][i] : labels[i], multi ? values[0][i] : values[i], total); + L = paper.g.text(bars[0][i].x, isBottom ? y + 5 + height - barvgutter / 2 : bars[0][i].y - 10, label); + if (rotate) { + L.rotate(90); + // If we rotated it, we need to move it as well. Still have to use the width + // to get the "length" of the label, divided it in two and shift down. + L.translate(0, (L.getBBox().width / 2)); + } + var bb = L.getBBox(); +// if (bb.x - 7 < l) { + if (bb.x - (this.getBBox().width) < l) { + L.remove(); + } else { + this.labels.push(L); + l = bb.x + (rotate ? bb.height : bb.width); + } + } + } + } + return this; + }; + chart.hover = function (fin, fout) { + covers2.hide(); + covers.show(); + covers.mouseover(fin).mouseout(fout); + return this; + }; + chart.hoverColumn = function (fin, fout) { + covers.hide(); + covers2.show(); + fout = fout || function () {}; + covers2.mouseover(fin).mouseout(fout); + return this; + }; + chart.click = function (f) { + covers2.hide(); + covers.show(); + covers.click(f); + return this; + }; + chart.each = function (f) { + if (!Raphael.is(f, "function")) { + return this; + } + for (var i = covers.length; i--;) { + f.call(covers[i]); + } + return this; + }; + chart.eachColumn = function (f) { + if (!Raphael.is(f, "function")) { + return this; + } + for (var i = covers2.length; i--;) { + f.call(covers2[i]); + } + return this; + }; + chart.clickColumn = function (f) { + covers.hide(); + covers2.show(); + covers2.click(f); + return this; + }; + chart.push(bars, covers, covers2); + chart.bars = bars; + chart.covers = covers; + return chart; +}; +Raphael.fn.g.hbarchart = function (x, y, width, height, values, opts) { + opts = opts || {}; + var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square", + gutter = parseFloat(opts.gutter || "20%"), + chart = this.set(), + bars = this.set(), + covers = this.set(), + covers2 = this.set(), + total = Math.max.apply(Math, values), + stacktotal = [], + paper = this, + multi = 0, + colors = opts.colors || this.g.colors, + len = values.length; + if (this.raphael.is(values[0], "array")) { + total = []; + multi = len; + len = 0; + for (var i = values.length; i--;) { + bars.push(this.set()); + total.push(Math.max.apply(Math, values[i])); + len = Math.max(len, values[i].length); + } + if (opts.stacked) { + for (var i = len; i--;) { + var tot = 0; + for (var j = values.length; j--;) { + tot +=+ values[j][i] || 0; + } + stacktotal.push(tot); + } + } + for (var i = values.length; i--;) { + if (values[i].length < len) { + for (var j = len; j--;) { + values[i].push(0); + } + } + } + total = Math.max.apply(Math, opts.stacked ? stacktotal : total); + } + + total = (opts.to) || total; + var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100), + bargutter = Math.floor(barheight * gutter / 100), + stack = [], + Y = y + bargutter, + X = (width - 1) / total; + !opts.stacked && (barheight /= multi || 1); + for (var i = 0; i < len; i++) { + stack = []; + for (var j = 0; j < (multi || 1); j++) { + var val = multi ? values[j][i] : values[i], + bar = this.g.finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type).attr({stroke: "none", fill: colors[multi ? j : i]}); + if (multi) { + bars[j].push(bar); + } else { + bars.push(bar); + } + bar.x = x + Math.round(val * X); + bar.y = Y + barheight / 2; + bar.w = Math.round(val * X); + bar.h = barheight; + bar.value = +val; + if (!opts.stacked) { + Y += barheight; + } else { + stack.push(bar); + } + } + if (opts.stacked) { + var cvr = this.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(this.g.shim); + covers2.push(cvr); + cvr.bars = this.set(); + var size = 0; + for (var s = stack.length; s--;) { + stack[s].toFront(); + } + for (var s = 0, ss = stack.length; s < ss; s++) { + var bar = stack[s], + cover, + val = Math.round((size + bar.value) * X), + path = this.g.finger(x, bar.y, val, barheight - 1, false, type, 1); + cvr.bars.push(bar); + size && bar.attr({path: path}); + bar.w = val; + bar.x = x + val; + covers.push(cover = this.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(this.g.shim)); + cover.bar = bar; + size += bar.value; + } + Y += barheight; + } + Y += bargutter; + } + covers2.toFront(); + Y = y + bargutter; + if (!opts.stacked) { + for (var i = 0; i < len; i++) { + for (var j = 0; j < (multi || 1); j++) { + var cover = this.rect(x, Y, width, barheight).attr(this.g.shim); + covers.push(cover); + cover.bar = multi ? bars[j][i] : bars[i]; + cover.value = cover.bar.value; + Y += barheight; + } + Y += bargutter; + } + } + chart.label = function (labels, isRight) { + labels = labels || []; + this.labels = paper.set(); + for (var i = 0; i < len; i++) { + for (var j = 0; j < multi; j++) { + var label = paper.g.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total); + var X = isRight ? bars[i * (multi || 1) + j].x - barheight / 2 + 3 : x + 5, + A = isRight ? "end" : "start", + L; + this.labels.push(L = paper.g.text(X, bars[i * (multi || 1) + j].y, label).attr({"text-anchor": A}).insertBefore(covers[0])); + if (L.getBBox().x < x + 5) { + L.attr({x: x + 5, "text-anchor": "start"}); + } else { + bars[i * (multi || 1) + j].label = L; + } + } + } + return this; + }; + chart.hover = function (fin, fout) { + covers2.hide(); + covers.show(); + fout = fout || function () {}; + covers.mouseover(fin).mouseout(fout); + return this; + }; + chart.hoverColumn = function (fin, fout) { + covers.hide(); + covers2.show(); + fout = fout || function () {}; + covers2.mouseover(fin).mouseout(fout); + return this; + }; + chart.each = function (f) { + if (!Raphael.is(f, "function")) { + return this; + } + for (var i = covers.length; i--;) { + f.call(covers[i]); + } + return this; + }; + chart.eachColumn = function (f) { + if (!Raphael.is(f, "function")) { + return this; + } + for (var i = covers2.length; i--;) { + f.call(covers2[i]); + } + return this; + }; + chart.click = function (f) { + covers2.hide(); + covers.show(); + covers.click(f); + return this; + }; + chart.clickColumn = function (f) { + covers.hide(); + covers2.show(); + covers2.click(f); + return this; + }; + chart.push(bars, covers, covers2); + chart.bars = bars; + chart.covers = covers; + return chart; +}; +/*! + * g.Raphael 0.4.1 - Charting library, based on Raphaël + * + * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +Raphael.fn.g.dotchart = function (x, y, width, height, valuesx, valuesy, size, opts) { + function drawAxis(ax) { + +ax[0] && (ax[0] = paper.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t")); + +ax[1] && (ax[1] = paper.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t")); + +ax[2] && (ax[2] = paper.g.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t")); + +ax[3] && (ax[3] = paper.g.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t")); + } + opts = opts || {}; + var xdim = this.g.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1), + minx = xdim.from, + maxx = xdim.to, + gutter = opts.gutter || 10, + ydim = this.g.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1), + miny = ydim.from, + maxy = ydim.to, + len = Math.max(valuesx.length, valuesy.length, size.length), + symbol = this.g.markers[opts.symbol] || "disc", + res = this.set(), + series = this.set(), + max = opts.max || 100, + top = Math.max.apply(Math, size), + R = [], + paper = this, + k = Math.sqrt(top / Math.PI) * 2 / max; + + for (var i = 0; i < len; i++) { + R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max); + } + gutter = Math.max.apply(Math, R.concat(gutter)); + var axis = this.set(), + maxR = Math.max.apply(Math, R); + if (opts.axis) { + var ax = (opts.axis + "").split(/[,\s]+/); + drawAxis(ax); + var g = [], b = []; + for (var i = 0, ii = ax.length; i < ii; i++) { + var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0; + g[i] = bb + gutter; + b[i] = bb; + } + gutter = Math.max.apply(Math, g.concat(gutter)); + for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) { + ax[i].remove(); + ax[i] = 1; + } + drawAxis(ax); + for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) { + axis.push(ax[i].all); + } + res.axis = axis; + } + var kx = (width - gutter * 2) / ((maxx - minx) || 1), + ky = (height - gutter * 2) / ((maxy - miny) || 1); + for (var i = 0, ii = valuesy.length; i < ii; i++) { + var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol, + X = x + gutter + (valuesx[i] - minx) * kx, + Y = y + height - gutter - (valuesy[i] - miny) * ky; + sym && R[i] && series.push(this.g[sym](X, Y, R[i]).attr({fill: opts.heat ? this.g.colorValue(R[i], maxR) : Raphael.fn.g.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none"})); + } + var covers = this.set(); + for (var i = 0, ii = valuesy.length; i < ii; i++) { + var X = x + gutter + (valuesx[i] - minx) * kx, + Y = y + height - gutter - (valuesy[i] - miny) * ky; + covers.push(this.circle(X, Y, maxR).attr(this.g.shim)); + opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]}); + covers[i].r = +R[i].toFixed(3); + covers[i].x = +X.toFixed(3); + covers[i].y = +Y.toFixed(3); + covers[i].X = valuesx[i]; + covers[i].Y = valuesy[i]; + covers[i].value = size[i] || 0; + covers[i].dot = series[i]; + } + res.covers = covers; + res.series = series; + res.push(series, axis, covers); + res.hover = function (fin, fout) { + covers.mouseover(fin).mouseout(fout); + return this; + }; + res.click = function (f) { + covers.click(f); + return this; + }; + res.each = function (f) { + if (!Raphael.is(f, "function")) { + return this; + } + for (var i = covers.length; i--;) { + f.call(covers[i]); + } + return this; + }; + res.href = function (map) { + var cover; + for (var i = covers.length; i--;) { + cover = covers[i]; + if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) { + cover.attr({href: map.href}); + } + } + }; + return res; +}; +/*! + * g.Raphael 0.4.2 - Charting library, based on Raphaël + * + * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +Raphael.fn.g.linechart = function (x, y, width, height, valuesx, valuesy, opts) { + function shrink(values, dim) { + var k = values.length / dim, + j = 0, + l = k, + sum = 0, + res = []; + while (j < values.length) { + l--; + if (l < 0) { + sum += values[j] * (1 + l); + res.push(sum / k); + sum = values[j++] * -l; + l += k; + } else { + sum += values[j++]; + } + } + return res; + } + function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) { + var l1 = (p2x - p1x) / 2, + l2 = (p3x - p2x) / 2, + a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)), + b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y)); + a = p1y < p2y ? Math.PI - a : a; + b = p3y < p2y ? Math.PI - b : b; + var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2, + dx1 = l1 * Math.sin(alpha + a), + dy1 = l1 * Math.cos(alpha + a), + dx2 = l2 * Math.sin(alpha + b), + dy2 = l2 * Math.cos(alpha + b); + return { + x1: p2x - dx1, + y1: p2y + dy1, + x2: p2x + dx2, + y2: p2y + dy2 + }; + } + opts = opts || {}; + if (!this.raphael.is(valuesx[0], "array")) { + valuesx = [valuesx]; + } + if (!this.raphael.is(valuesy[0], "array")) { + valuesy = [valuesy]; + } + var gutter = opts.gutter || 10, + len = Math.max(valuesx[0].length, valuesy[0].length), + symbol = opts.symbol || "", + colors = opts.colors || Raphael.fn.g.colors, + that = this, + columns = null, + dots = null, + chart = this.set(), + path = []; + + for (var i = 0, ii = valuesy.length; i < ii; i++) { + len = Math.max(len, valuesy[i].length); + } + var shades = this.set(); + for (i = 0, ii = valuesy.length; i < ii; i++) { + if (opts.shade) { + shades.push(this.path().attr({stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3})); + } + if (valuesy[i].length > width - 2 * gutter) { + valuesy[i] = shrink(valuesy[i], width - 2 * gutter); + len = width - 2 * gutter; + } + if (valuesx[i] && valuesx[i].length > width - 2 * gutter) { + valuesx[i] = shrink(valuesx[i], width - 2 * gutter); + } + } + var allx = Array.prototype.concat.apply([], valuesx), + ally = Array.prototype.concat.apply([], valuesy), + xdim = this.g.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1); + if(opts.clip) { + var minx = opts.minx || xdim.from, + maxx = opts.maxx || xdim.to, + ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1), + miny = opts.miny || ydim.from, + maxy = opts.maxy || ydim.to; + } else { + var minx = opts.minx && Math.min(opts.minx, xdim.from) || xdim.from, + maxx = opts.maxx && Math.max(opts.maxx, xdimt.to) || xdim.to, + ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1), + miny = opts.miny && Math.min(opts.miny, ydim.from) || ydim.from, + maxy = opts.maxy && Math.max(opts.maxy, ydim.to) || ydim.to; + } + kx = (width - gutter * 2) / ((maxx - minx) || 1), + ky = (height - gutter * 2) / ((maxy - miny) || 1); + + var lines = this.set(), + symbols = this.set(), + line; + for (i = 0, ii = valuesy.length; i < ii; i++) { + if (!opts.nostroke) { + lines.push(line = this.path().attr({ + stroke: colors[i], + "stroke-width": opts.width || 2, + "stroke-linejoin": "round", + "stroke-linecap": "round", + "stroke-dasharray": opts.dash || "" + })); + } + var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol, + symset = this.set(); + path = []; + for (var j = 0, jj = valuesy[i].length; j < jj; j++) { + var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx, + Y = y + height - gutter - (valuesy[i][j] - miny) * ky; + (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(this.g[Raphael.fn.g.markers[this.raphael.is(sym, "array") ? sym[j] : sym]](X, Y, (opts.width || 2) * 3).attr({fill: colors[i], stroke: "none"})); + if (opts.smooth) { + if (j && j != jj - 1) { + var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx, + Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky, + X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx, + Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky; + var a = getAnchors(X0, Y0, X, Y, X2, Y2); + path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]); + } + if (!j) { + path = ["M", X, Y, "C", X, Y]; + } + } else { + path = path.concat([j ? "L" : "M", X, Y]); + } + } + if (opts.smooth) { + path = path.concat([X, Y, X, Y]); + } + symbols.push(symset); + if (opts.shade) { + shades[i].attr({path: path.concat(["L", X, y + height - gutter, "L", x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",")}); + } + !opts.nostroke && line.attr({path: path.join(","), 'clip-rect': [x + gutter, y + gutter, width - 2 * gutter, height - 2 * gutter].join(",")}); + } + + function createColumns(f) { + // unite Xs together + var Xs = []; + for (var i = 0, ii = valuesx.length; i < ii; i++) { + Xs = Xs.concat(valuesx[i]); + } + Xs.sort(function(a,b) { return a - b; }); + // remove duplicates + var Xs2 = [], + xs = []; + for (i = 0, ii = Xs.length; i < ii; i++) { + Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx); + } + Xs = Xs2; + ii = Xs.length; + var cvrs = f || that.set(); + for (i = 0; i < ii; i++) { + var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2, + w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2, + C; + f ? (C = {}) : cvrs.push(C = that.rect(X - 1, y, Math.max(w + 1, 1), height).attr({stroke: "none", fill: "#000", opacity: 0})); + C.values = []; + C.symbols = that.set(); + C.y = []; + C.x = xs[i]; + C.axis = Xs[i]; + for (var j = 0, jj = valuesy.length; j < jj; j++) { + Xs2 = valuesx[j] || valuesx[0]; + for (var k = 0, kk = Xs2.length; k < kk; k++) { + if (Xs2[k] == Xs[i]) { + C.values.push(valuesy[j][k]); + C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky); + C.symbols.push(chart.symbols[j][k]); + } + } + } + f && f.call(C); + } + !f && (columns = cvrs); + } + function createDots(f) { + var cvrs = f || that.set(), + C; + for (var i = 0, ii = valuesy.length; i < ii; i++) { + for (var j = 0, jj = valuesy[i].length; j < jj; j++) { + var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx, + nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx, + Y = y + height - gutter - (valuesy[i][j] - miny) * ky; + f ? (C = {}) : cvrs.push(C = that.circle(X, Y, Math.abs(nearX - X) / 2).attr({stroke: "none", fill: "#000", opacity: 0})); + C.x = X; + C.y = Y; + C.value = valuesy[i][j]; + C.line = chart.lines[i]; + C.shade = chart.shades[i]; + C.symbol = chart.symbols[i][j]; + C.symbols = chart.symbols[i]; + C.axis = (valuesx[i] || valuesx[0])[j]; + f && f.call(C); + } + } + !f && (dots = cvrs); + } + + var axis = this.set(); + if (opts.axis) { + var ax = (opts.axis + "").split(/[,\s]+/); + +ax[0] && axis.push(this.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t")); + +ax[1] && axis.push(this.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t")); + +ax[2] && axis.push(this.g.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t")); + +ax[3] && axis.push(this.g.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t")); + } + + chart.push(lines, shades, symbols, axis, columns, dots); + chart.lines = lines; + chart.shades = shades; + chart.symbols = symbols; + chart.axis = axis; + chart.hoverColumn = function (fin, fout) { + !columns && createColumns(); + columns.mouseover(fin).mouseout(fout); + return this; + }; + chart.clickColumn = function (f) { + !columns && createColumns(); + columns.click(f); + return this; + }; + chart.hrefColumn = function (cols) { + var hrefs = that.raphael.is(arguments[0], "array") ? arguments[0] : arguments; + if (!(arguments.length - 1) && typeof cols == "object") { + for (var x in cols) { + for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) { + columns[i].attr("href", cols[x]); + } + } + } + !columns && createColumns(); + for (i = 0, ii = hrefs.length; i < ii; i++) { + columns[i] && columns[i].attr("href", hrefs[i]); + } + return this; + }; + chart.hover = function (fin, fout) { + !dots && createDots(); + dots.mouseover(fin).mouseout(fout); + return this; + }; + chart.click = function (f) { + !dots && createDots(); + dots.click(f); + return this; + }; + chart.each = function (f) { + createDots(f); + return this; + }; + chart.eachColumn = function (f) { + createColumns(f); + return this; + }; + return chart; +}; +/*! + * g.Raphael 0.4.1 - Charting library, based on Raphaël + * + * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) + * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. + */ +Raphael.fn.g.piechart = function (cx, cy, r, values, opts) { + opts = opts || {}; + var paper = this, + sectors = [], + covers = this.set(), + chart = this.set(), + series = this.set(), + order = [], + len = values.length, + angle = 0, + total = 0, + others = 0, + cut = 9, + defcut = true; + + var sum = 0; + for (var i = 0; i < len; i++) + sum += values[i]; + var single = false; + var single_index = -1; + for (var i = 0; i < len; i++) + if (sum == values[i]) { + single = true; + single_index = i; + break; + } + if (len == 1 || single == true) { + for(var i = 0; i < len; i++) { + var radius = 0.1; + if (i == single_index) { + radius = r; + } + series.push(this.circle(cx, cy, radius).attr({fill: opts.colors && opts.colors[i] || this.g.colors[i], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth})); + covers.push(this.circle(cx, cy, radius).attr({href: opts.href ? opts.href[i] : null}).attr(this.g.shim)); + values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }}; + series[i].middle = {x: cx, y: cy}; + series[i].mangle = 180; + } + total = values[single_index]; + } else { + function sector(cx, cy, r, startAngle, endAngle, fill) { + var rad = Math.PI / 180, + x1 = cx + r * Math.cos(-startAngle * rad), + x2 = cx + r * Math.cos(-endAngle * rad), + xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad), + y1 = cy + r * Math.sin(-startAngle * rad), + y2 = cy + r * Math.sin(-endAngle * rad), + ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad), + res = ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z"]; + res.middle = {x: xm, y: ym}; + return res; + } + for (var i = 0; i < len; i++) { + total += values[i]; + values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }}; + } + values.sort(function (a, b) { + return b.value - a.value; + }); + for (i = 0; i < len; i++) { + if (defcut && values[i] * 360 / total <= 1.5) { + cut = i; + defcut = false; + } + if (i > cut) { + defcut = false; + values[cut].value += values[i]; + values[cut].others = true; + others = values[cut].value; + } + } + len = Math.min(cut + 1, values.length); + others && values.splice(len) && (values[cut].others = true); + for (i = 0; i < len; i++) { + var valueOrder = values[i].order; + var mangle = angle - 360 * values[i] / total / 2; + if (!i) { + angle = 90 - mangle; + mangle = angle - 360 * values[i] / total / 2; + } + if (opts.init) { + var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(","); + } + var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total); + var p = this.path(opts.init ? ipath : path).attr({fill: opts.colors && opts.colors[valueOrder] || this.g.colors[valueOrder] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round"}); + p.value = values[i]; + p.middle = path.middle; + p.mangle = mangle; + sectors.push(p); + series.push(p); + opts.init && p.animate({path: path.join(",")}, (+opts.init - 1) || 1000, ">"); + } + for (i = 0; i < len; i++) { + p = paper.path(sectors[i].attr("path")).attr(this.g.shim); + var valueOrder = values[i].order; + opts.href && opts.href[valueOrder] && p.attr({href: opts.href[valueOrder]}); + //p.attr = function () {}; // this breaks translate! + covers.push(p); + } + } + + chart.hover = function (fin, fout) { + fout = fout || function () {}; + var that = this; + for (var i = 0; i < len; i++) { + (function (sector, cover, j) { + var o = { + sector: sector, + cover: cover, + cx: cx, + cy: cy, + mx: sector.middle.x, + my: sector.middle.y, + mangle: sector.mangle, + r: r, + value: values[j], + total: total, + label: that.labels && that.labels[j] + }; + cover.mouseover(function () { + fin.call(o); + }).mouseout(function () { + fout.call(o); + }); + })(series[i], covers[i], i); + } + return this; + }; + // x: where label could be put + // y: where label could be put + // value: value to show + // total: total number to count % + chart.each = function (f) { + var that = this; + for (var i = 0; i < len; i++) { + (function (sector, cover, j) { + var o = { + sector: sector, + cover: cover, + cx: cx, + cy: cy, + x: sector.middle.x, + y: sector.middle.y, + mangle: sector.mangle, + r: r, + value: values[j], + total: total, + label: that.labels && that.labels[j] + }; + f.call(o); + })(series[i], covers[i], i); + } + return this; + }; + chart.click = function (f) { + var that = this; + for (var i = 0; i < len; i++) { + (function (sector, cover, j) { + var o = { + sector: sector, + cover: cover, + cx: cx, + cy: cy, + mx: sector.middle.x, + my: sector.middle.y, + mangle: sector.mangle, + r: r, + value: values[j], + total: total, + label: that.labels && that.labels[j] + }; + cover.click(function () { f.call(o); }); + })(series[i], covers[i], i); + } + return this; + }; + chart.inject = function (element) { + element.insertBefore(covers[0]); + }; + var legend = function (labels, otherslabel, mark, dir) { + var x = cx + r + r / 5, + y = cy, + h = y + 10; + labels = labels || []; + dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east"; + mark = paper.g.markers[mark && mark.toLowerCase()] || "disc"; + chart.labels = paper.set(); + for (var i = 0; i < len; i++) { + var clr = series[i].attr("fill"), + j = values[i].order, + txt; + values[i].others && (labels[j] = otherslabel || "Others"); + labels[j] = paper.g.labelise(labels[j], values[i], total); + chart.labels.push(paper.set()); + chart.labels[i].push(paper.g[mark](x + 5, h, 5).attr({fill: clr, stroke: "none"})); + chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(paper.g.txtattr).attr({fill: opts.legendcolor || "#000", "text-anchor": "start"})); + covers[i].label = chart.labels[i]; + h += txt.getBBox().height * 1.2; + } + var bb = chart.labels.getBBox(), + tr = { + east: [0, -bb.height / 2], + west: [-bb.width - 2 * r - 20, -bb.height / 2], + north: [-r - bb.width / 2, -r - bb.height - 10], + south: [-r - bb.width / 2, r + 10] + }[dir]; + chart.labels.translate.apply(chart.labels, tr); + chart.push(chart.labels); + }; + if (opts.legend) { + legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos); + } + chart.push(series, covers); + chart.series = series; + chart.covers = covers; + + var w = paper.width, + h = paper.height, + bb = chart.getBBox(), + tr = [(w - bb.width)/2 - bb.x, (h - bb.height)/2 - bb.y]; + cx += tr[0]; + cy += tr[1]; + chart.translate.apply(chart, tr); + return chart; +}; diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js new file mode 100644 index 000000000..de0fc5178 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js @@ -0,0 +1,93 @@ +(function() { + /** + * provides text formatting and i18n key storage features
    + * implements most of the Sun Java MessageFormat functionality. + * @see Sun's Documentation + */ + + var keys = {}; + + var format = function(message, args) { + var substitute = function() { + var format = arguments[1].split(','); + var substr = escape(args[format.shift()]); + if(format.length === 0) { + return substr; // simple substitution eg {0} + } + switch(format.shift()) { + case "number" : return (new Number(substr)).toLocaleString(); + case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch + case "time" : return (new Date(+substr)).toLocaleTimeString(); // eg i18n.text("Key", +(new Date())); for current time + } + var styles = format.join("").split("|").map(function(style) { + return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/); + }); + var match = styles[0][3]; + for(var i=0; i)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for digits + rdigit = /\d/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.6.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.done( fn ); + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery._Deferred(); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return (new Function( "return " + data ))(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + // (xml & tmp used internally) + parseXML: function( data , xml , tmp ) { + + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + + tmp = xml.documentElement; + + if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + jQuery.error( "Invalid XML: " + data ); + } + + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + + if ( indexOf ) { + return indexOf.call( array, elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can be optionally by executed if its a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +// Expose jQuery to the global object +return jQuery; + +})(); + + +var // Promise methods + promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), + // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + // Create a simple deferred (one callbacks list) + _Deferred: function() { + var // callbacks list + callbacks = [], + // stored [ context , args ] + fired, + // to avoid firing when already doing so + firing, + // flag to know if the deferred has been cancelled + cancelled, + // the deferred itself + deferred = { + + // done( f1, f2, ...) + done: function() { + if ( !cancelled ) { + var args = arguments, + i, + length, + elem, + type, + _fired; + if ( fired ) { + _fired = fired; + fired = 0; + } + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + deferred.done.apply( deferred, elem ); + } else if ( type === "function" ) { + callbacks.push( elem ); + } + } + if ( _fired ) { + deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); + } + } + return this; + }, + + // resolve with given context and args + resolveWith: function( context, args ) { + if ( !cancelled && !fired && !firing ) { + // make sure args are available (#8421) + args = args || []; + firing = 1; + try { + while( callbacks[ 0 ] ) { + callbacks.shift().apply( context, args ); + } + } + finally { + fired = [ context, args ]; + firing = 0; + } + } + return this; + }, + + // resolve with this as context and given arguments + resolve: function() { + deferred.resolveWith( this, arguments ); + return this; + }, + + // Has this deferred been resolved? + isResolved: function() { + return !!( firing || fired ); + }, + + // Cancel + cancel: function() { + cancelled = 1; + callbacks = []; + return this; + } + }; + + return deferred; + }, + + // Full fledged deferred (two callbacks list) + Deferred: function( func ) { + var deferred = jQuery._Deferred(), + failDeferred = jQuery._Deferred(), + promise; + // Add errorDeferred methods, then and promise + jQuery.extend( deferred, { + then: function( doneCallbacks, failCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ); + return this; + }, + always: function() { + return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); + }, + fail: failDeferred.done, + rejectWith: failDeferred.resolveWith, + reject: failDeferred.resolve, + isRejected: failDeferred.isResolved, + pipe: function( fnDone, fnFail ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject ); + } else { + newDefer[ action ]( returned ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + if ( promise ) { + return promise; + } + promise = obj = {}; + } + var i = promiseMethods.length; + while( i-- ) { + obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; + } + return obj; + } + }); + // Make sure only one callback list will be used + deferred.done( failDeferred.cancel ).fail( deferred.cancel ); + // Unexpose cancel + delete deferred.cancel; + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = arguments, + i = 0, + length = args.length, + count = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + // Strange bug in FF4: + // Values changed onto the arguments object sometimes end up as undefined values + // outside the $.when method. Cloning the object into a fresh array solves the issue + deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) ); + } + }; + } + if ( length > 1 ) { + for( ; i < length; i++ ) { + if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return deferred.promise(); + } +}); + + + +jQuery.support = (function() { + + var div = document.createElement( "div" ), + documentElement = document.documentElement, + all, + a, + select, + opt, + input, + marginDiv, + support, + fragment, + body, + bodyStyle, + tds, + events, + eventName, + i, + isSupported; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
    a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName( "tbody" ).length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName( "link" ).length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + div.detachEvent( "onclick", click ); + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains it's value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + div.innerHTML = ""; + + // Figure out if the W3C box model works as expected + div.style.width = div.style.paddingLeft = "1px"; + + // We use our own, invisible, body + body = document.createElement( "body" ); + bodyStyle = { + visibility: "hidden", + width: 0, + height: 0, + border: 0, + margin: 0, + // Set background to avoid IE crashes when removing (#9028) + background: "none" + }; + for ( i in bodyStyle ) { + body.style[ i ] = bodyStyle[ i ]; + } + body.appendChild( div ); + documentElement.insertBefore( body, documentElement.firstChild ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + support.boxModel = div.offsetWidth === 2; + + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
    "; + support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); + } + + div.innerHTML = "
    t
    "; + tds = div.getElementsByTagName( "td" ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + div.innerHTML = ""; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( document.defaultView && document.defaultView.getComputedStyle ) { + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + // Remove the body element we added + body.innerHTML = ""; + documentElement.removeChild( body ); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for( i in { + submit: 1, + change: 1, + focusin: 1 + } ) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + return support; +})(); + +// Keep track of boxModel +jQuery.boxModel = jQuery.support.boxModel; + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([a-z])([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; + } else { + id = jQuery.expando; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); + } else { + cache[ id ] = jQuery.extend(cache[ id ], name); + } + } + + thisCache = cache[ id ]; + + // Internal jQuery data is stored in a separate object inside the object's data + // cache in order to avoid key collisions between internal data and user-defined + // data + if ( pvt ) { + if ( !thisCache[ internalKey ] ) { + thisCache[ internalKey ] = {}; + } + + thisCache = thisCache[ internalKey ]; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should + // not attempt to inspect the internal events object using jQuery.data, as this + // internal data object is undocumented and subject to change. + if ( name === "events" && !thisCache[name] ) { + return thisCache[ internalKey ] && thisCache[ internalKey ].events; + } + + return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + if ( thisCache ) { + delete thisCache[ name ]; + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !isEmptyDataObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( pvt ) { + delete cache[ id ][ internalKey ]; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + var internalCache = cache[ id ][ internalKey ]; + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + if ( jQuery.support.deleteExpando || cache != window ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the entire user cache at once because it's faster than + // iterating through each key, but we need to continue to persist internal + // data if it existed + if ( internalCache ) { + cache[ id ] = {}; + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + + cache[ id ][ internalKey ] = internalCache; + + // Otherwise, we need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + } else if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } else { + elem[ jQuery.expando ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 ) { + var attr = this[0].attributes, name; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( this[0], name, data[ name ] ); + } + } + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + !jQuery.isNaN( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON +// property to be considered empty objects; this property always exists in +// order to make sure JSON.stringify does not expose internal metadata +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery.data( elem, deferDataKey, undefined, true ); + if ( defer && + ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && + ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery.data( elem, queueDataKey, undefined, true ) && + !jQuery.data( elem, markDataKey, undefined, true ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.resolve(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = (type || "fx") + "mark"; + jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); + if ( count ) { + jQuery.data( elem, key, count, true ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + if ( elem ) { + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type, undefined, true ); + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery.data( elem, type, jQuery.makeArray(data), true ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + defer; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { + count++; + tmp.done( resolve ); + } + } + resolve(); + return defer.promise(); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + rinvalidChar = /\:/, + formHook, boolHook; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.prop ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class") || "") ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", + setClass = elem.className; + + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split( rspace ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + return (elem.value || "").replace(rreturn, ""); + } + + return undefined; + } + + var isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attrFix: { + // Always normalize to ensure hook usage + tabindex: "tabIndex" + }, + + attr: function( elem, name, value, pass ) { + var nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( !("getAttribute" in elem) ) { + return jQuery.prop( elem, name, value ); + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // Normalize the name if needed + name = notxml && jQuery.attrFix[ name ] || name; + + hooks = jQuery.attrHooks[ name ]; + + if ( !hooks ) { + // Use boolHook for boolean attributes + if ( rboolean.test( name ) && + (typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) { + + hooks = boolHook; + + // Use formHook for forms and if the name contains certain characters + } else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { + hooks = formHook; + } + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return undefined; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml ) { + return hooks.get( elem, name ); + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, name ) { + var propName; + if ( elem.nodeType === 1 ) { + name = jQuery.attrFix[ name ] || name; + + if ( jQuery.support.getSetAttribute ) { + // Use removeAttribute in browsers that support it + elem.removeAttribute( name ); + } else { + jQuery.attr( elem, name, "" ); + elem.removeAttributeNode( elem.getAttributeNode( name ) ); + } + + // Set corresponding property to false for boolean attributes + if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { + elem[ propName ] = false; + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabIndex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return undefined; + } + + var ret, hooks, + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // Try to normalize/fix the name + name = notxml && jQuery.propFix[ name ] || name; + + hooks = jQuery.propHooks[ name ]; + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return (elem[ name ] = value); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: {} +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + return elem[ jQuery.propFix[ name ] || name ] ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = value; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// Use the value property for back compat +// Use the formHook for button elements in IE6/7 (#1954) +jQuery.attrHooks.value = { + get: function( elem, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.get( elem, name ); + } + return elem.value; + }, + set: function( elem, value, name ) { + if ( formHook && jQuery.nodeName( elem, "button" ) ) { + return formHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !jQuery.support.getSetAttribute ) { + + // propFix is more comprehensive and contains all fixes + jQuery.attrFix = jQuery.propFix; + + // Use this for any attribute on a form in IE6/7 + formHook = jQuery.attrHooks.name = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + // Return undefined if nodeValue is empty string + return ret && ret.nodeValue !== "" ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Check form objects in IE (multiple bugs related) + // Only use nodeValue if the attribute node exists on the form + var ret = elem.getAttributeNode( name ); + if ( ret ) { + ret.nodeValue = value; + return value; + } + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return (elem.style.cssText = "" + value); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }); +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); + } + } + }); +}); + + + + +var hasOwn = Object.prototype.hasOwnProperty, + rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspaces = / /g, + rescape = /[^\w\s.|`]/g, + fcleanup = function( nm ) { + return nm.replace(rescape, "\\$&"); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } else if ( !handler ) { + // Fixes bug #7229. Fix recommended by jdalton + return; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery._data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events, + eventHandle = elemData.handle; + + if ( !events ) { + elemData.events = events = {}; + } + + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + if ( !handleObj.guid ) { + handleObj.guid = handler.guid; + } + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } + + var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem, undefined, true ); + } + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Event object or event type + var type = event.type || event, + namespaces = [], + exclusive; + + if ( type.indexOf("!") >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.exclusive = exclusive; + event.namespace = namespaces.join("."); + event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); + + // triggerHandler() and global events don't bubble or run the default action + if ( onlyHandlers || !elem ) { + event.preventDefault(); + event.stopPropagation(); + } + + // Handle a global trigger + if ( !elem ) { + // TODO: Stop taunting the data cache; remove global events and always attach to document + jQuery.each( jQuery.cache, function() { + // internalKey variable is just used to make it easier to find + // and potentially change this stuff later; currently it just + // points to jQuery.expando + var internalKey = jQuery.expando, + internalCache = this[ internalKey ]; + if ( internalCache && internalCache.events && internalCache.events[ type ] ) { + jQuery.event.trigger( event, data, internalCache.handle.elem ); + } + }); + return; + } + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + event.target = elem; + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + var cur = elem, + // IE doesn't like method names with a colon (#3533, #8272) + ontype = type.indexOf(":") < 0 ? "on" + type : ""; + + // Fire event on the current element, then bubble up the DOM tree + do { + var handle = jQuery._data( cur, "handle" ); + + event.currentTarget = cur; + if ( handle ) { + handle.apply( cur, data ); + } + + // Trigger an inline bound script + if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { + event.result = false; + event.preventDefault(); + } + + // Bubble up to document, then to window + cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; + } while ( cur && !event.isPropagationStopped() ); + + // If nobody prevented the default action, do it now + if ( !event.isDefaultPrevented() ) { + var old, + special = jQuery.event.special[ type ] || {}; + + if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction)() check here because IE6/7 fails that test. + // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. + try { + if ( ontype && elem[ type ] ) { + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + jQuery.event.triggered = type; + elem[ type ](); + } + } catch ( ieError ) {} + + if ( old ) { + elem[ ontype ] = old; + } + + jQuery.event.triggered = undefined; + } + } + + return event.result; + }, + + handle: function( event ) { + event = jQuery.event.fix( event || window.event ); + // Snapshot the handlers list since a called handler may add/remove events. + var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), + run_all = !event.exclusive && !event.namespace, + args = Array.prototype.slice.call( arguments, 0 ); + + // Use the fix-ed Event rather than the (read-only) native event + args[0] = event; + event.currentTarget = this; + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Triggered event must 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event. + if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + // Fixes #1925 where srcElement might not be defined either + event.target = event.srcElement || document; + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var eventDocument = event.target.ownerDocument || document, + doc = eventDocument.documentElement, + body = eventDocument.body; + + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { + event.which = event.charCode != null ? event.charCode : event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, + liveConvert( handleObj.origType, handleObj.selector ), + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + }, + + remove: function( handleObj ) { + jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); + } + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // set the correct event type + event.type = event.data; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + + // Chrome does something similar, the parentNode property + // can be accessed but is null. + if ( parent && parent !== document && !parent.parentNode ) { + return; + } + + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( !jQuery.nodeName( this, "form" ) ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( jQuery.nodeName( elem, "select" ) ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery._data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery._data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + e.liveFired = undefined; + jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + beforedeactivate: testChange, + + click: function( e ) { + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; + + if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { + testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; + + if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information + beforeactivate: function( e ) { + var elem = e.target; + jQuery._data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return rformElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return rformElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; + + // Handle when the input is .focus()'d + changeFilters.focus = changeFilters.beforeactivate; +} + +function trigger( type, elem, args ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + // Don't pass args or remember liveFired; they apply to the donor event. + var event = jQuery.extend( {}, args[ 0 ] ); + event.type = type; + event.originalEvent = {}; + event.liveFired = undefined; + jQuery.event.handle.call( elem, event ); + if ( event.isDefaultPrevented() ) { + args[ 0 ].preventDefault(); + } +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + + function handler( donor ) { + // Donor event is always a native one; fix it and switch its type. + // Let focusin/out handler cancel the donor focus/blur event. + var e = jQuery.event.fix( donor ); + e.type = fix; + e.originalEvent = {}; + jQuery.event.trigger( e, null, e.target ); + if ( e.isDefaultPrevented() ) { + donor.preventDefault(); + } + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + var handler; + + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( arguments.length === 2 || data === false ) { + fn = data; + data = undefined; + } + + if ( name === "one" ) { + handler = function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }; + handler.guid = fn.guid || jQuery.guid++; + } else { + handler = fn; + } + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( typeof types === "object" && !types.preventDefault ) { + for ( var key in types ) { + context[ name ]( key, data, types[key], selector ); + } + + return this; + } + + if ( name === "die" && !types && + origSelector && origSelector.charAt(0) === "." ) { + + context.unbind( origSelector ); + + return this; + } + + if ( data === false || jQuery.isFunction( data ) ) { + fn = data || returnFalse; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( liveMap[ type ] ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + for ( var j = 0, l = context.length; j < l; j++ ) { + jQuery.event.add( context[j], "live." + liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + } + + } else { + // unbind live handler + context.unbind( "live." + liveConvert( type, selector ), fn ); + } + } + + return this; + }; +}); + +function liveHandler( event ) { + var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, + elems = [], + selectors = [], + events = jQuery._data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) + if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { + return; + } + + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + close = match[i]; + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { + elem = close.elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + event.type = handleObj.preType; + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + + // Make sure not to accidentally match a child element with the same selector + if ( related && jQuery.contains( elem, related ) ) { + related = elem; + } + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj, level: close.level }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + + if ( maxLevel && match.level > maxLevel ) { + break; + } + + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + ret = match.handleObj.origHandler.apply( match.elem, arguments ); + + if ( ret === false || event.isPropagationStopped() ) { + maxLevel = match.level; + + if ( ret === false ) { + stop = false; + } + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var match, + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + var first = match[2], + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +Sizzle.getText = function( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); + } + } + + return ret; +}; + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

    "; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
    "; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( typeof selector === "string" ? + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array + if ( jQuery.isArray( selectors ) ) { + var match, selector, + matches = {}, + level = 1; + + if ( cur && selectors.length ) { + for ( i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[ selector ] ) { + matches[ selector ] = POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[ selector ]; + + if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { + ret.push({ selector: selector, elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ), + // The variable 'args' was introduced in + // https://github.com/jquery/jquery/commit/52a0238 + // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. + // http://code.google.com/p/v8/issues/detail?id=1050 + args = slice.call(arguments); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, args.join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +} + + + + +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
    ", "
    " ], + thead: [ 1, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + col: [ 2, "", "
    " ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + + + + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh new file mode 100755 index 000000000..917d896ca --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +curl -XDELETE 'http://localhost:9200/conflicting_field_type' +echo +curl -XPUT 'http://localhost:9200/conflicting_field_type' +echo +curl -XPUT 'http://localhost:9200/conflicting_field_type/map1/_mapping' -d '{ + "map1": { + "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"], + "_all": { + "enabled": true, + "store": "yes" + }, + "properties": { + "field1": { + "type": "date", + "store": "yes", + "format": "yyyyMMddHHmmssSSS", + "include_in_all": false + } + } + } +}' +echo +curl -XPUT 'http://localhost:9200/conflicting_field_type/map2/_mapping' -d '{ + "map2": { + "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"], + "_all": { + "enabled": true, + "store": "yes" + }, + "properties": { + "field1": { + "type": "string", + "store": "yes", + "term_vector": "yes", + "include_in_all": false + } + } + } +}' +echo +curl -XPUT 'http://localhost:9200/conflicting_field_type/map1/1' -d '{ + "field1" : "20110214172449000" +}' +echo +curl -XPUT 'http://localhost:9200/conflicting_field_type/map2/2' -d '{ + "field1" : "Test map2 with string type field" +}' +echo \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh new file mode 100644 index 000000000..878964c54 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +curl -XDELETE 'http://localhost:9200/conflicting_field_type' +echo +curl -XDELETE 'http://localhost:9200/twitter' +echo diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh new file mode 100755 index 000000000..562346275 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh @@ -0,0 +1,75 @@ +curl -XDELETE 'http://localhost:9200/multi_field_type' +echo +curl -XPUT 'http://localhost:9200/multi_field_type' +echo +curl -XPUT 'http://localhost:9200/multi_field_type/map1/_mapping' -d '{ + "map1": { + "properties": { + "field1": { + "type": "string", + "store": "yes" + }, + "field2": { + "type": "multi_field", + "path": "full", + "fields": { + "field2": { "type": "string" }, + "alt_name": { "type": "string" }, + "alt_name2": { "type": "string" } + } + }, + "field3": { + "type": "multi_field", + "path": "just_name", + "fields": { + "field3": { "type": "string" }, + "foobar": { "type": "string" } + } + }, + "field4": { + "type": "multi_field", + "path": "just_name", + "fields": { + "field4": { "type": "string" }, + "foobar": { "type": "string" } + } + }, + "field5": { + "type": "string" + } + } + } +}' +echo +curl -XPUT 'http://localhost:9200/multi_field_type/map1/1' -d '{ + "field1": "Whats the dogs name", + "field2": "Max", + "field3": "Hey Janelle, whats wrong with Wolfie? I can hear him barking", + "field4": "Wolfies fine, honey, Wolfies just fine. Where are you", + "field5": "Your foster parents are dead" +}' +echo +curl -XPUT 'http://localhost:9200/multi_field_type/map1/2' -d '{ + "field1": "Nice night for a walk, eh", + "field2": "Nice night for a walk", + "field3": "Wash day tomorrow? Nothing clean, right?", + "field4": "Nothing clean. Right", + "field5": "Hey, I think this guys a couple cans short of a six-pack" +}' +echo +curl -XPUT 'http://localhost:9200/multi_field_type/map1/3' -d '{ + "field1": "The 600 series had rubber skin. We spotted them easy, but these are new. They look human... sweat, bad breath, everything. Very hard to spot. I had to wait till he moved on you before I could zero him", + "field2": "Look... I am not stupid, you know. They cannot make things like that yet.", + "field3": "Not yet. Not for about 40 years", + "field4": "Are you saying its from the future?", + "field5": "One possible future. From your point of view... I dont know tech stuff" +}' +echo +curl -XPUT 'http://localhost:9200/multi_field_type/map1/4' -d '{ + "field1": "Did you see this war?", + "field2": "No. I grew up after. In the ruins... starving... hiding from H-Ks", + "field3": "H-Ks?", + "field4": "Hunter-Killers. Patrol machines built in automated factories. Most of us were rounded up, put in camps for orderly disposal", + "field5": "This is burned in by laser scan. Some of us were kept alive... to work... loading bodies. The disposal units ran night and day. We were that close to going out forever. But there was one man who taught us to fight, to storm the wire of the camps, to smash those metal motherfuckers into junk. He turned it around. He brought us back from the brink. His name is Connor. John Connor. Your son, Sarah, your unborn son" +}' +echo diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh new file mode 100755 index 000000000..165246aab --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +curl -XDELETE 'http://localhost:9200/twitter' +echo +curl -XPUT 'http://localhost:9200/twitter' +echo +curl -XPUT 'http://localhost:9200/twitter/_mapping' -d '{ + "tweet": { + "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"], + "properties" : { + "user" : { "type" : "string", "index" : "not_analyzed" }, + "message" : { "type" : "string" }, + "postDate" : { "type" : "date" }, + "srcAddr" : { "type" : "ip" }, + "priority" : { "type" : "integer", null_value: 1 }, + "rank" : { "type" : "float", null_value: 1.0 }, + "loc" : { "type": "geo_point" } + } + } +}' +echo +curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{ + "user" : "mobz", + "message" : "developing a tool to search with", + "postDate" : "20110220100330", + "srcAddr" : "203.19.74.11", + "loc" : "-37.86,144.90" +}' +echo +curl -XPUT 'http://localhost:9200/twitter/tweet/2' -d '{ + "user" : "mobz", + "message" : "you know, for elastic search", + "postDate" : "20110220095900", + "srcAddr" : "203.19.74.11", + "loc" : "-37.86,144.90" +}' +echo +curl -XPUT 'http://localhost:9200/twitter/tweet/3' -d '{ + "user" : "mobz", + "message" : "lets take some matilda bay", + "postDate" : "20110221171330", + "srcAddr" : "203.19.74.11", + "loc" : "-37.86,144.90" +}' +echo \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh new file mode 100755 index 000000000..e55c66537 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh @@ -0,0 +1,28 @@ +curl -XDELETE 'http://localhost:9200/twitter_river' +echo +curl -XDELETE 'http://localhost:9200/_river/twitter_river' +echo +curl -XPUT 'http://localhost:9200/twitter_river' +echo +read -p "consumer key: " consumer_key +read -p "consumer secret: " consumer_secret +read -p "access token: " access_token +read -p "access token secret: " access_token_secret +curl -XPUT 'localhost:9200/_river/twitter_river/_meta' -d ' +{ + "type" : "twitter", + "twitter" : { + "oauth": { + "consumer_key": "'${consumer_key}'", + "consumer_secret": "'${consumer_secret}'", + "access_token": "'${access_token}'", + "access_token_secret": "'${access_token_secret}'" + } + }, + "index": { + "index": "twitter_river", + "type": "status", + "buk_size": 100 + } +}' +echo \ No newline at end of file diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html new file mode 100644 index 000000000..eecfc0a6a --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html @@ -0,0 +1,54 @@ + + + + + + Elasticsearch UI Performance Testing Harness + + + + + + + + + +
    + + + +
    +
    + + diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js new file mode 100644 index 000000000..55ba80d92 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js @@ -0,0 +1,81 @@ +// find *Spec.js files in the src directory next to the corresponding source file + +var test = window.test = {}; + +test.cb = (function( jasmine ) { + var callbacks = []; + + return { + use: function() { + callbacks = []; + }, + createSpy: function( name, arg, data, context ) { + return jasmine.createSpy( name ).and.callFake( function() { + callbacks.push( { cb: arguments[ arg || 0 ], data: data, context: context } ); + }); + }, + execOne: function() { + var exec = callbacks.shift(); + exec.cb.apply( exec.context, exec.data ); + }, + execAll: function() { + while( callbacks.length ) { + this.execOne(); + } + } + }; +})( this.jasmine ); + + +test.clock = ( function() { + var id = 0, timers, saved; + var names = [ "setTimeout", "setInterval", "clearTimeout", "clearInterval" ]; + var byNext = function( a, b ) { return a.next - b.next; }; + var mocks = { + setTimeout: function( fn, t ) { + timers.push( { id: id, fn: fn, next: t, t: t, type: "t" } ); + return id++; + }, + clearTimeout: function( id ) { + timers = timers.filter( function( timer ) { return timer.id !== id; } ); + }, + setInterval: function( fn, t ) { + timers.push( { id: id, fn: fn, next: t, t: t, type: "i" } ); + return id++; + }, + clearInterval: function( id ) { + timers = timers.filter( function( timer ) { return timer.id !== id; } ); + } + }; + + return { + steal: function() { + timers = []; + saved = {}; + names.forEach( function( n ) { + saved[n] = window[n]; + window[n] = mocks[n]; + }); + }, + restore: function() { + names.forEach( function( n ) { + window[n] = saved[n]; + }); + timers = null; + saved = null; + }, + tick: function() { + if( timers.length ) { + timers.sort( byNext ); + var t0 = timers[0]; + if( t0.type === "t" ) { + timers.shift(); + } else { + t0.next += t0.t; + } + t0.fn(); + } + } + }; + +})(); diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip new file mode 100644 index 000000000..736533923 Binary files /dev/null and b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip differ diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties b/sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties new file mode 100644 index 000000000..5a8d43145 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/src/test/resources/simplelogger.properties @@ -0,0 +1,37 @@ +# SLF4J's SimpleLogger configuration file +# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err. + +# Default logging detail level for all instances of SimpleLogger. +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, defaults to "info". +org.slf4j.simpleLogger.defaultLogLevel=info + +# Logging detail level for a SimpleLogger instance named "xxx.yyy.zzz". +# Must be one of ("trace", "debug", "info", "warn", or "error"). +# If not specified, the default logging detail level is used. +# org.slf4j.simpleLogger.log.xxx.yyy=debug +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager=debug +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.Resources=info +org.slf4j.simpleLogger.log.org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.container=trace + +# Set to true if you want the current date and time to be included in output messages. +# Default is false, and will output the number of milliseconds elapsed since startup. +#org.slf4j.simpleLogger.showDateTime=false + +# The date and time format to be used in the output messages. +# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. +# If the format is not specified or is invalid, the default format is used. +# The default format is yyyy-MM-dd HH:mm:ss:SSS Z. +#org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z + +# Set to true if you want to output the current thread name. +# Defaults to true. +#org.slf4j.simpleLogger.showThreadName=true + +# Set to true if you want the Logger instance name to be included in output messages. +# Defaults to true. +#org.slf4j.simpleLogger.showLogName=true + +# Set to true if you want the last component of the name to be included in output messages. +# Defaults to false. +#org.slf4j.simpleLogger.showShortLogName=false diff --git a/sdnr/wt/devicemanager/provider/test2.properties b/sdnr/wt/devicemanager/provider/test2.properties new file mode 100644 index 000000000..95432eaf5 --- /dev/null +++ b/sdnr/wt/devicemanager/provider/test2.properties @@ -0,0 +1,47 @@ +[dcae] +dcaeUserCredentials=admin:admin +dcaeUrl=off +dcaeHeartbeatPeriodSeconds=120 +dcaeTestCollector=no + +[aots] +userPassword=passwd +soapurladd=off +soapaddtimeout=10 +soapinqtimeout=20 +userName=user +inqtemplate=inqreq.tmpl.xml +assignedto=userid +addtemplate=addreq.tmpl.xml +severitypassthrough=critical,major,minor,warning +systemuser=user +prt-offset=1200 +soapurlinq=off +#smtpHost= +#smtpPort= +#smtpUsername= +#smtpPassword= +#smtpSender= +#smtpReceivers= + +[es] +esCluster=sendateodl5 + +[aai] +#keep comment +aaiHeaders=["X-TransactionId: 9999"] +aaiUrl=http://localhost:45454 +aaiUserCredentials=AAI:AAI +aaiDeleteOnMountpointRemove=true +aaiTrustAllCerts=false +aaiApiVersion=aai/v13 +aaiPropertiesFile=aaiclient.properties +aaiApplicationId=SDNR +aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12 +aaiPcks12ClientCertPassphrase=adminadmin +aaiClientConnectionTimeout=30000 + +[pm] +pmCluster=sendateodl5 +pmEnabled=true + -- cgit 1.2.3-korg