From 3c3ec490b7449691df863873b6feea14c50b4dd7 Mon Sep 17 00:00:00 2001 From: Saad Sahibjan Date: Mon, 15 Jul 2019 14:09:57 +0530 Subject: [PATCH] Remove windows plugin --- components/mobile-plugins/pom.xml | 1 - .../pom.xml | 407 - .../api/bean/EnterpriseApplication.java | 277 - .../api/bean/HostedAppxApplication.java | 77 - .../api/bean/HostedMSIApplication.java | 55 - .../windows/api/bean/WindowsOperation.java | 63 - .../EnterpriseApplicationBeanWrapper.java | 53 - .../windows/api/common/PluginConstants.java | 422 - .../windows/api/common/SyncmlCommandType.java | 34 - .../authenticator/OAuth2TokenValidator.java | 37 - .../common/authenticator/OAuthConstants.java | 40 - .../OAuthTokenValidationStubFactory.java | 215 - .../authenticator/OAuthValidatorFactory.java | 81 - .../impl/LocalOAuthValidator.java | 74 - .../impl/RemoteOAuthValidator.java | 122 - .../windows/api/common/beans/CacheEntry.java | 56 - .../windows/api/common/beans/Device.java | 36 - .../windows/api/common/beans/ErrorDTO.java | 86 - .../api/common/beans/ErrorListItem.java | 77 - .../api/common/beans/ErrorResponse.java | 167 - .../api/common/beans/OperationRequest.java | 49 - .../windows/api/common/beans/Token.java | 35 - .../exceptions/AuthenticationException.java | 58 - .../exceptions/BadRequestException.java | 34 - .../CertificateGenerationException.java | 58 - .../exceptions/FileOperationException.java | 58 - .../KeyStoreGenerationException.java | 58 - .../common/exceptions/MDMAPIException.java | 60 - .../OAuthTokenValidationException.java | 59 - .../ProfileConfigurationException.java | 32 - .../SyncmlMessageFormatException.java | 57 - .../exceptions/SyncmlOperationException.java | 58 - .../UnexpectedServerErrorException.java | 49 - .../exceptions/WAPProvisioningException.java | 58 - .../WindowsConfigurationException.java | 61 - .../WindowsDeviceEnrolmentException.java | 59 - .../WindowsEnrollmentTokenException.java | 38 - .../WindowsOperationsException.java | 37 - .../api/common/util/AuthenticationInfo.java | 62 - .../windows/api/common/util/BSTValidator.java | 143 - .../api/common/util/ContextInitializer.java | 51 - .../api/common/util/DeviceIDHolder.java | 48 - .../windows/api/common/util/DeviceUtil.java | 117 - .../windows/api/common/util/ErrorHandler.java | 38 - .../windows/api/common/util/ErrorMessage.java | 37 - .../common/util/GsonMessageBodyHandler.java | 90 - .../windows/api/common/util/Message.java | 49 - .../common/util/OAuthValidationResponse.java | 71 - .../api/common/util/SOAPSecurityHandler.java | 62 - .../common/util/UsernameTokenValidator.java | 114 - .../api/common/util/WindowsAPIUtils.java | 269 - .../mobile/windows/api/operations/AddTag.java | 68 - .../windows/api/operations/AlertTag.java | 100 - .../windows/api/operations/AtomicTag.java | 85 - .../windows/api/operations/ChallengeTag.java | 46 - .../windows/api/operations/CredentialTag.java | 60 - .../windows/api/operations/DeleteTag.java | 68 - .../windows/api/operations/ExecuteTag.java | 69 - .../mobile/windows/api/operations/GetTag.java | 71 - .../windows/api/operations/ItemTag.java | 122 - .../windows/api/operations/MetaTag.java | 88 - .../windows/api/operations/ReplaceTag.java | 70 - .../windows/api/operations/ResultsTag.java | 96 - .../windows/api/operations/SequenceTag.java | 118 - .../windows/api/operations/SourceTag.java | 63 - .../windows/api/operations/StatusTag.java | 154 - .../windows/api/operations/SyncmlBody.java | 144 - .../api/operations/SyncmlDocument.java | 55 - .../windows/api/operations/SyncmlHeader.java | 114 - .../windows/api/operations/TargetTag.java | 63 - .../operations/WindowsOperationException.java | 58 - .../api/operations/util/Constants.java | 130 - .../api/operations/util/DeviceInfo.java | 92 - .../operations/util/HeartBeatDeviceInfo.java | 90 - .../api/operations/util/OperationCode.java | 159 - .../api/operations/util/OperationHandler.java | 678 - .../api/operations/util/OperationReply.java | 884 - .../operations/util/SyncmlCredentialUtil.java | 72 - .../api/operations/util/SyncmlGenerator.java | 107 - .../api/operations/util/SyncmlParser.java | 496 - .../api/services/ConfigurationMgtService.java | 267 - .../DeviceManagementAdminService.java | 624 - .../api/services/DeviceManagementService.java | 61 - .../api/services/authbst/BSTProvider.java | 130 - .../services/authbst/beans/Credentials.java | 90 - .../authbst/impl/BSTProviderImpl.java | 114 - .../services/discovery/DiscoveryService.java | 56 - .../discovery/beans/DiscoveryRequest.java | 98 - .../discovery/beans/DiscoveryResponse.java | 87 - .../discovery/beans/package-info.java | 22 - .../discovery/impl/DiscoveryServiceImpl.java | 135 - .../enrollment/EnrollmentService.java | 63 - .../enrollment/beans/AdditionalContext.java | 48 - .../enrollment/beans/BinarySecurityToken.java | 63 - .../enrollment/beans/ContextItem.java | 53 - .../beans/RequestSecurityToken.java | 42 - .../beans/RequestSecurityTokenResponse.java | 82 - .../beans/RequestedSecurityToken.java | 42 - .../enrollment/beans/package-info.java | 27 - .../impl/EnrollmentServiceImpl.java | 452 - .../util/CertificateSigningService.java | 141 - .../enrollment/util/KeyStoreGenerator.java | 94 - .../enrollment/util/MessageHandler.java | 200 - .../impl/ConfigurationMgtServiceImpl.java | 158 - .../DeviceManagementAdminServiceImpl.java | 414 - .../impl/DeviceManagementServiceImpl.java | 263 - .../api/services/syncml/SyncmlService.java | 61 - .../services/syncml/beans/BasicOperation.java | 35 - .../services/syncml/beans/PasscodePolicy.java | 107 - .../api/services/syncml/beans/Profile.java | 62 - .../api/services/syncml/beans/Wifi.java | 107 - .../services/syncml/beans/WindowsDevice.java | 118 - .../syncml/impl/SyncmlServiceImpl.java | 404 - .../wstep/CertificateEnrollmentService.java | 70 - .../wstep/beans/AdditionalContext.java | 48 - .../wstep/beans/BinarySecurityToken.java | 63 - .../api/services/wstep/beans/ContextItem.java | 44 - .../wstep/beans/RequestSecurityToken.java | 42 - .../beans/RequestSecurityTokenResponse.java | 69 - .../wstep/beans/RequestedSecurityToken.java | 42 - .../services/wstep/beans/package-info.java | 27 - .../CertificateEnrollmentServiceImpl.java | 352 - .../wstep/util/CertificateSigningService.java | 141 - .../wstep/util/KeyStoreGenerator.java | 94 - .../services/wstep/util/MessageHandler.java | 200 - .../CertificateEnrollmentPolicyService.java | 74 - .../api/services/xcep/beans/Attributes.java | 451 - .../windows/api/services/xcep/beans/CA.java | 166 - .../api/services/xcep/beans/CACollection.java | 83 - .../xcep/beans/CAReferenceCollection.java | 83 - .../api/services/xcep/beans/CAURI.java | 168 - .../services/xcep/beans/CAURICollection.java | 83 - .../beans/CertificateEnrollmentPolicy.java | 149 - .../xcep/beans/CertificateValidity.java | 99 - .../api/services/xcep/beans/Client.java | 136 - .../services/xcep/beans/CryptoProviders.java | 87 - .../xcep/beans/EnrollmentPermission.java | 82 - .../api/services/xcep/beans/Extension.java | 108 - .../xcep/beans/ExtensionCollection.java | 87 - .../xcep/beans/FilterOIDCollection.java | 87 - .../api/services/xcep/beans/GetPolicies.java | 97 - .../xcep/beans/GetPoliciesResponse.java | 122 - .../xcep/beans/KeyArchivalAttributes.java | 86 - .../windows/api/services/xcep/beans/OID.java | 166 - .../services/xcep/beans/OIDCollection.java | 83 - .../xcep/beans/OIDReferenceCollection.java | 83 - .../services/xcep/beans/ObjectFactory.java | 253 - .../services/xcep/beans/PolicyCollection.java | 84 - .../xcep/beans/PrivateKeyAttributes.java | 189 - .../services/xcep/beans/RARequirements.java | 115 - .../services/xcep/beans/RequestFilter.java | 107 - .../api/services/xcep/beans/Response.java | 204 - .../api/services/xcep/beans/Revision.java | 85 - .../xcep/beans/SupersededPolicies.java | 83 - .../api/services/xcep/beans/package-info.java | 23 - ...ertificateEnrollmentPolicyServiceImpl.java | 100 - .../src/main/resources/wap-provisioning.xml | 87 - .../main/resources/win10-wap-provisioning.xml | 76 - .../src/main/webapp/META-INF/permissions.xml | 142 - .../webapp/META-INF/webapp-classloading.xml | 35 - .../src/main/webapp/WEB-INF/cxf-servlet.xml | 193 - .../src/main/webapp/WEB-INF/web.xml | 72 - .../src/main/webapp/servicelist.css | 143 - .../pom.xml | 61 - .../src/assembly/src.xml | 46 - .../date-range-picker.hbs | 25 - .../date-range-picker.js | 21 - .../date-range-picker.json | 3 - .../public/css/daterangepicker.css | 361 - .../public/js/daterangepicker.js | 1542 -- .../public/js/moment.min.js | 7 - .../device-view.hbs | 138 - .../device-view.js | 138 - .../device-view.json | 3 - .../device_icons/TemperatureController.png | Bin 234616 -> 0 bytes .../public/img/device_icons/android.png | Bin 2948 -> 0 bytes .../public/img/device_icons/ios.png | Bin 6966 -> 0 bytes .../img/device_icons/windows_app_icon.png | Bin 7453 -> 0 bytes .../public/img/graph.png | Bin 5431 -> 0 bytes .../public/js/device-detail.js | 398 - .../public/templates/applications-list.hbs | 9 - .../public/templates/policy-compliance.hbs | 45 - .../leaflet.hbs | 6 - .../leaflet.json | 3 - .../public/css/leaflet.css | 479 - .../public/js/images/layers-2x.png | Bin 2898 -> 0 bytes .../public/js/images/layers.png | Bin 1502 -> 0 bytes .../public/js/images/marker-icon-2x.png | Bin 4033 -> 0 bytes .../public/js/images/marker-icon.png | Bin 1747 -> 0 bytes .../public/js/images/marker-shadow.png | Bin 797 -> 0 bytes .../public/js/leaflet.js | 9 - .../operation-bar.hbs | 146 - .../operation-bar.js | 65 - .../operation-bar.json | 3 - .../public/js/operation-bar.js | 243 - .../public/templates/operation-bar.hbs | 142 - .../operation-mod.hbs | 20 - .../operation-mod.json | 8 - .../public/js/operation-mod.js | 500 - .../configuration.hbs | 61 - .../configuration.json | 3 - .../public/js/platform-configuration.js | 219 - .../policy-edit.hbs | 18 - .../policy-edit.json | 3 - .../public/js/windows-policy-edit.js | 590 - .../public/templates/windows-policy-edit.hbs | 391 - .../policy-view.hbs | 18 - .../policy-view.json | 3 - .../public/js/windows-policy-view.js | 186 - .../public/templates/windows-policy-view.hbs | 288 - .../policy-wizard.hbs | 18 - .../policy-wizard.json | 3 - .../public/js/windows-policy-operations.js | 578 - .../templates/windows-policy-operations.hbs | 391 - .../private/config.json | 51 - .../public/css/styles.css | 61 - .../public/images/thumb.png | Bin 5195 -> 0 bytes .../public/images/windows-icon.png | Bin 8342 -> 0 bytes .../public/images/windows_enrollment.png | Bin 164587 -> 0 bytes .../public/js/type-view.js | 388 - .../type-view.hbs | 66 - .../type-view.js | 25 - .../type-view.json | 3 - .../uuf-template-app/app/conf/app-conf.json | 45 - .../uuf-template-app/app/conf/uuf-conf.json | 4 - .../app/layouts/uuf.layout.default.hbs | 67 - .../app/layouts/uuf.layout.sign-in.hbs | 56 - .../app/pages/uuf.page.error/error.hbs | 38 - .../app/pages/uuf.page.error/error.json | 6 - .../public/js/sign-in-validations.js | 24 - .../app/pages/uuf.page.sign-in/sign-in.hbs | 63 - .../app/pages/uuf.page.sign-in/sign-in.js | 30 - .../app/pages/uuf.page.sign-in/sign-in.json | 6 - .../app/pages/uuf.page.sign-out/sign-out.hbs | 18 - .../app/pages/uuf.page.sign-out/sign-out.js | 16 - .../app/pages/uuf.page.sign-out/sign-out.json | 5 - .../sso-intermediate.hbs | 45 - .../sso-intermediate.json | 6 - .../app/units/uuf.unit.alert/alert.hbs | 27 - .../app/units/uuf.unit.alert/alert.js | 15 - .../app/units/uuf.unit.alert/alert.json | 4 - .../app/units/uuf.unit.favicon/favicon.hbs | 20 - .../app/units/uuf.unit.favicon/favicon.json | 8 - .../uuf.unit.favicon/public/img/favicon.png | Bin 18171 -> 0 bytes .../app/units/uuf.unit.footer/footer.hbs | 23 - .../app/units/uuf.unit.footer/footer.json | 8 - .../app/units/uuf.unit.header.logo/logo.hbs | 27 - .../app/units/uuf.unit.header.logo/logo.json | 9 - .../uuf.unit.header.logo/public/img/logo.png | Bin 33023 -> 0 bytes .../uuf.unit.header.user-menu/user-menu.hbs | 39 - .../uuf.unit.header.user-menu/user-menu.json | 8 - .../app/units/uuf.unit.header/header.hbs | 29 - .../app/units/uuf.unit.header/header.json | 9 - .../uuf.unit.lib.data-table/data-table.hbs | 27 - .../uuf.unit.lib.data-table/data-table.json | 4 - .../AutoFill/css/dataTables.autoFill.css | 24 - .../AutoFill/css/dataTables.autoFill.min.css | 1 - .../extensions/AutoFill/images/filler.png | Bin 1040 -> 0 bytes .../AutoFill/js/dataTables.autoFill.js | 855 - .../AutoFill/js/dataTables.autoFill.min.js | 22 - .../Bootstrap/css/dataTables.bootstrap.css | 372 - .../Bootstrap/js/dataTables.bootstrap.js | 206 - .../ColReorder/css/dataTables.colReorder.css | 14 - .../css/dataTables.colReorder.min.css | 1 - .../extensions/ColReorder/images/insert.png | Bin 1885 -> 0 bytes .../ColReorder/js/dataTables.colReorder.js | 1372 -- .../js/dataTables.colReorder.min.js | 26 - .../ColVis/css/dataTables.colVis.css | 185 - .../ColVis/css/dataTables.colVis.min.css | 1 - .../ColVis/css/dataTables.colvis.jqueryui.css | 41 - .../extensions/ColVis/js/dataTables.colVis.js | 1123 -- .../ColVis/js/dataTables.colVis.min.js | 24 - .../css/dataTables.fixedColumns.css | 25 - .../css/dataTables.fixedColumns.min.css | 1 - .../js/dataTables.fixedColumns.js | 1423 -- .../js/dataTables.fixedColumns.min.js | 30 - .../css/dataTables.fixedHeader.css | 7 - .../css/dataTables.fixedHeader.min.css | 1 - .../FixedHeader/js/dataTables.fixedHeader.js | 1028 - .../js/dataTables.fixedHeader.min.js | 30 - .../KeyTable/css/dataTables.keyTable.css | 7 - .../KeyTable/css/dataTables.keyTable.min.css | 1 - .../KeyTable/js/dataTables.keyTable.js | 1175 -- .../KeyTable/js/dataTables.keyTable.min.js | 18 - .../Responsive/css/dataTables.responsive.css | 106 - .../Responsive/css/dataTables.responsive.scss | 149 - .../Responsive/js/dataTables.responsive.js | 873 - .../js/dataTables.responsive.min.js | 19 - .../Scroller/css/dataTables.scroller.css | 44 - .../Scroller/css/dataTables.scroller.min.css | 1 - .../Scroller/images/loading-background.png | Bin 1013 -> 0 bytes .../Scroller/js/dataTables.scroller.js | 1262 -- .../Scroller/js/dataTables.scroller.min.js | 25 - .../TableTools/css/dataTables.tableTools.css | 361 - .../css/dataTables.tableTools.min.css | 1 - .../TableTools/images/collection.png | Bin 1166 -> 0 bytes .../TableTools/images/collection_hover.png | Bin 1194 -> 0 bytes .../extensions/TableTools/images/copy.png | Bin 2184 -> 0 bytes .../TableTools/images/copy_hover.png | Bin 2797 -> 0 bytes .../extensions/TableTools/images/csv.png | Bin 1607 -> 0 bytes .../TableTools/images/csv_hover.png | Bin 1854 -> 0 bytes .../extensions/TableTools/images/pdf.png | Bin 4325 -> 0 bytes .../TableTools/images/pdf_hover.png | Bin 2786 -> 0 bytes .../extensions/TableTools/images/print.png | Bin 2123 -> 0 bytes .../TableTools/images/print_hover.png | Bin 2230 -> 0 bytes .../TableTools/images/psd/collection.psd | Bin 25792 -> 0 bytes .../TableTools/images/psd/copy document.psd | Bin 104729 -> 0 bytes .../TableTools/images/psd/file_types.psd | Bin 1090645 -> 0 bytes .../TableTools/images/psd/printer.psd | Bin 119952 -> 0 bytes .../extensions/TableTools/images/xls.png | Bin 1641 -> 0 bytes .../TableTools/images/xls_hover.png | Bin 2061 -> 0 bytes .../TableTools/js/dataTables.tableTools.js | 3230 --- .../js/dataTables.tableTools.min.js | 70 - .../TableTools/swf/copy_csv_xls.swf | Bin 2232 -> 0 bytes .../TableTools/swf/copy_csv_xls_pdf.swf | Bin 58846 -> 0 bytes .../media/css/jquery.dataTables.css | 455 - .../media/css/jquery.dataTables.min.css | 1 - .../css/jquery.dataTables_themeroller.css | 416 - .../media/images/sort_asc.png | Bin 160 -> 0 bytes .../media/images/sort_asc_disabled.png | Bin 148 -> 0 bytes .../media/images/sort_both.png | Bin 201 -> 0 bytes .../media/images/sort_desc.png | Bin 158 -> 0 bytes .../media/images/sort_desc_disabled.png | Bin 146 -> 0 bytes .../media/js/jquery.dataTables.js | 14951 -------------- .../media/js/jquery.dataTables.min.js | 160 - .../data-tables_1.10.7/media/js/jquery.js | 5 - .../units/uuf.unit.lib.dropdown/dropdown.hbs | 26 - .../units/uuf.unit.lib.dropdown/dropdown.json | 4 - .../public/select2_4.0.0/css/select2.css | 431 - .../public/select2_4.0.0/css/select2.min.css | 1 - .../public/select2_4.0.0/js/i18n/az.js | 3 - .../public/select2_4.0.0/js/i18n/bg.js | 3 - .../public/select2_4.0.0/js/i18n/ca.js | 3 - .../public/select2_4.0.0/js/i18n/cs.js | 3 - .../public/select2_4.0.0/js/i18n/da.js | 3 - .../public/select2_4.0.0/js/i18n/de.js | 3 - .../public/select2_4.0.0/js/i18n/en.js | 3 - .../public/select2_4.0.0/js/i18n/es.js | 3 - .../public/select2_4.0.0/js/i18n/et.js | 3 - .../public/select2_4.0.0/js/i18n/eu.js | 3 - .../public/select2_4.0.0/js/i18n/fa.js | 3 - .../public/select2_4.0.0/js/i18n/fi.js | 3 - .../public/select2_4.0.0/js/i18n/fr.js | 3 - .../public/select2_4.0.0/js/i18n/gl.js | 3 - .../public/select2_4.0.0/js/i18n/he.js | 3 - .../public/select2_4.0.0/js/i18n/hi.js | 3 - .../public/select2_4.0.0/js/i18n/hr.js | 3 - .../public/select2_4.0.0/js/i18n/hu.js | 3 - .../public/select2_4.0.0/js/i18n/id.js | 3 - .../public/select2_4.0.0/js/i18n/is.js | 3 - .../public/select2_4.0.0/js/i18n/it.js | 3 - .../public/select2_4.0.0/js/i18n/ko.js | 3 - .../public/select2_4.0.0/js/i18n/lt.js | 3 - .../public/select2_4.0.0/js/i18n/lv.js | 3 - .../public/select2_4.0.0/js/i18n/mk.js | 3 - .../public/select2_4.0.0/js/i18n/nb.js | 3 - .../public/select2_4.0.0/js/i18n/nl.js | 3 - .../public/select2_4.0.0/js/i18n/pl.js | 3 - .../public/select2_4.0.0/js/i18n/pt-BR.js | 3 - .../public/select2_4.0.0/js/i18n/pt.js | 3 - .../public/select2_4.0.0/js/i18n/ro.js | 3 - .../public/select2_4.0.0/js/i18n/ru.js | 3 - .../public/select2_4.0.0/js/i18n/sk.js | 3 - .../public/select2_4.0.0/js/i18n/sr.js | 3 - .../public/select2_4.0.0/js/i18n/sv.js | 3 - .../public/select2_4.0.0/js/i18n/th.js | 3 - .../public/select2_4.0.0/js/i18n/tr.js | 3 - .../public/select2_4.0.0/js/i18n/uk.js | 3 - .../public/select2_4.0.0/js/i18n/vi.js | 3 - .../public/select2_4.0.0/js/i18n/zh-CN.js | 3 - .../public/select2_4.0.0/js/i18n/zh-TW.js | 3 - .../public/select2_4.0.0/js/select2.full.js | 6114 ------ .../select2_4.0.0/js/select2.full.min.js | 3 - .../public/select2_4.0.0/js/select2.js | 5403 ----- .../public/select2_4.0.0/js/select2.min.js | 2 - .../form-validation.hbs | 24 - .../form-validation.json | 4 - .../public/css/validation-style.css | 9 - .../additional-methods.js | 998 - .../additional-methods.min.js | 4 - .../jquery.validate.js | 1398 -- .../jquery.validate.min.js | 4 - .../localization/messages_ar.js | 33 - .../localization/messages_ar.min.js | 4 - .../localization/messages_bg.js | 33 - .../localization/messages_bg.min.js | 4 - .../localization/messages_bn_BD.js | 33 - .../localization/messages_bn_BD.min.js | 4 - .../localization/messages_ca.js | 33 - .../localization/messages_ca.min.js | 4 - .../localization/messages_cs.js | 33 - .../localization/messages_cs.min.js | 4 - .../localization/messages_da.js | 30 - .../localization/messages_da.min.js | 4 - .../localization/messages_de.js | 30 - .../localization/messages_de.min.js | 4 - .../localization/messages_el.js | 33 - .../localization/messages_el.min.js | 4 - .../localization/messages_es.js | 36 - .../localization/messages_es.min.js | 4 - .../localization/messages_es_AR.js | 37 - .../localization/messages_es_AR.min.js | 4 - .../localization/messages_es_PE.js | 37 - .../localization/messages_es_PE.min.js | 4 - .../localization/messages_et.js | 31 - .../localization/messages_et.min.js | 4 - .../localization/messages_eu.js | 33 - .../localization/messages_eu.min.js | 4 - .../localization/messages_fa.js | 36 - .../localization/messages_fa.min.js | 4 - .../localization/messages_fi.js | 31 - .../localization/messages_fi.min.js | 4 - .../localization/messages_fr.js | 59 - .../localization/messages_fr.min.js | 4 - .../localization/messages_ge.js | 33 - .../localization/messages_ge.min.js | 4 - .../localization/messages_gl.js | 38 - .../localization/messages_gl.min.js | 4 - .../localization/messages_he.js | 33 - .../localization/messages_he.min.js | 4 - .../localization/messages_hr.js | 33 - .../localization/messages_hr.min.js | 4 - .../localization/messages_hu.js | 32 - .../localization/messages_hu.min.js | 4 - .../localization/messages_hy_AM.js | 33 - .../localization/messages_hy_AM.min.js | 4 - .../localization/messages_id.js | 32 - .../localization/messages_id.min.js | 4 - .../localization/messages_is.js | 31 - .../localization/messages_is.min.js | 4 - .../localization/messages_it.js | 37 - .../localization/messages_it.min.js | 4 - .../localization/messages_ja.js | 33 - .../localization/messages_ja.min.js | 4 - .../localization/messages_ka.js | 33 - .../localization/messages_ka.min.js | 4 - .../localization/messages_kk.js | 33 - .../localization/messages_kk.min.js | 4 - .../localization/messages_ko.js | 33 - .../localization/messages_ko.min.js | 4 - .../localization/messages_lt.js | 33 - .../localization/messages_lt.min.js | 4 - .../localization/messages_lv.js | 33 - .../localization/messages_lv.min.js | 4 - .../localization/messages_my.js | 33 - .../localization/messages_my.min.js | 4 - .../localization/messages_nl.js | 43 - .../localization/messages_nl.min.js | 4 - .../localization/messages_no.js | 33 - .../localization/messages_no.min.js | 4 - .../localization/messages_pl.js | 33 - .../localization/messages_pl.min.js | 4 - .../localization/messages_pt_BR.js | 39 - .../localization/messages_pt_BR.min.js | 4 - .../localization/messages_pt_PT.js | 37 - .../localization/messages_pt_PT.min.js | 4 - .../localization/messages_ro.js | 33 - .../localization/messages_ro.min.js | 4 - .../localization/messages_ru.js | 33 - .../localization/messages_ru.min.js | 4 - .../localization/messages_si.js | 33 - .../localization/messages_si.min.js | 4 - .../localization/messages_sk.js | 30 - .../localization/messages_sk.min.js | 4 - .../localization/messages_sl.js | 33 - .../localization/messages_sl.min.js | 4 - .../localization/messages_sr.js | 33 - .../localization/messages_sr.min.js | 4 - .../localization/messages_sr_lat.js | 33 - .../localization/messages_sr_lat.min.js | 4 - .../localization/messages_sv.js | 31 - .../localization/messages_sv.min.js | 4 - .../localization/messages_th.js | 33 - .../localization/messages_th.min.js | 4 - .../localization/messages_tj.js | 33 - .../localization/messages_tj.min.js | 4 - .../localization/messages_tr.js | 34 - .../localization/messages_tr.min.js | 4 - .../localization/messages_uk.js | 33 - .../localization/messages_uk.min.js | 4 - .../localization/messages_vi.js | 33 - .../localization/messages_vi.min.js | 4 - .../localization/messages_zh.js | 33 - .../localization/messages_zh.min.js | 4 - .../localization/messages_zh_TW.js | 34 - .../localization/messages_zh_TW.min.js | 4 - .../localization/methods_de.js | 22 - .../localization/methods_de.min.js | 4 - .../localization/methods_es_CL.js | 22 - .../localization/methods_es_CL.min.js | 4 - .../localization/methods_fi.js | 22 - .../localization/methods_fi.min.js | 4 - .../localization/methods_nl.js | 19 - .../localization/methods_nl.min.js | 4 - .../localization/methods_pt.js | 19 - .../localization/methods_pt.min.js | 4 - .../public/select2_4.0.0/css/select2.css | 431 - .../public/select2_4.0.0/css/select2.min.css | 1 - .../public/select2_4.0.0/js/i18n/az.js | 3 - .../public/select2_4.0.0/js/i18n/bg.js | 3 - .../public/select2_4.0.0/js/i18n/ca.js | 3 - .../public/select2_4.0.0/js/i18n/cs.js | 3 - .../public/select2_4.0.0/js/i18n/da.js | 3 - .../public/select2_4.0.0/js/i18n/de.js | 3 - .../public/select2_4.0.0/js/i18n/en.js | 3 - .../public/select2_4.0.0/js/i18n/es.js | 3 - .../public/select2_4.0.0/js/i18n/et.js | 3 - .../public/select2_4.0.0/js/i18n/eu.js | 3 - .../public/select2_4.0.0/js/i18n/fa.js | 3 - .../public/select2_4.0.0/js/i18n/fi.js | 3 - .../public/select2_4.0.0/js/i18n/fr.js | 3 - .../public/select2_4.0.0/js/i18n/gl.js | 3 - .../public/select2_4.0.0/js/i18n/he.js | 3 - .../public/select2_4.0.0/js/i18n/hi.js | 3 - .../public/select2_4.0.0/js/i18n/hr.js | 3 - .../public/select2_4.0.0/js/i18n/hu.js | 3 - .../public/select2_4.0.0/js/i18n/id.js | 3 - .../public/select2_4.0.0/js/i18n/is.js | 3 - .../public/select2_4.0.0/js/i18n/it.js | 3 - .../public/select2_4.0.0/js/i18n/ko.js | 3 - .../public/select2_4.0.0/js/i18n/lt.js | 3 - .../public/select2_4.0.0/js/i18n/lv.js | 3 - .../public/select2_4.0.0/js/i18n/mk.js | 3 - .../public/select2_4.0.0/js/i18n/nb.js | 3 - .../public/select2_4.0.0/js/i18n/nl.js | 3 - .../public/select2_4.0.0/js/i18n/pl.js | 3 - .../public/select2_4.0.0/js/i18n/pt-BR.js | 3 - .../public/select2_4.0.0/js/i18n/pt.js | 3 - .../public/select2_4.0.0/js/i18n/ro.js | 3 - .../public/select2_4.0.0/js/i18n/ru.js | 3 - .../public/select2_4.0.0/js/i18n/sk.js | 3 - .../public/select2_4.0.0/js/i18n/sr.js | 3 - .../public/select2_4.0.0/js/i18n/sv.js | 3 - .../public/select2_4.0.0/js/i18n/th.js | 3 - .../public/select2_4.0.0/js/i18n/tr.js | 3 - .../public/select2_4.0.0/js/i18n/uk.js | 3 - .../public/select2_4.0.0/js/i18n/vi.js | 3 - .../public/select2_4.0.0/js/i18n/zh-CN.js | 3 - .../public/select2_4.0.0/js/i18n/zh-TW.js | 3 - .../public/select2_4.0.0/js/select2.full.js | 6114 ------ .../select2_4.0.0/js/select2.full.min.js | 3 - .../public/select2_4.0.0/js/select2.js | 5403 ----- .../public/select2_4.0.0/js/select2.min.js | 2 - .../units/uuf.unit.lib.select2/select2.hbs | 24 - .../units/uuf.unit.lib.select2/select2.json | 4 - .../jquery-resize_0.5.3/jquery.resize.js | 164 - .../uuf.unit.lib.thumbnail/thumbnail.hbs | 21 - .../uuf.unit.lib.thumbnail/thumbnail.json | 4 - .../notification.hbs | 22 - .../notification.js | 15 - .../notification.json | 3 - .../app/units/uuf.unit.message/message.hbs | 22 - .../app/units/uuf.unit.message/message.js | 15 - .../app/units/uuf.unit.message/message.json | 4 - .../units/uuf.unit.navbar.actions/actions.hbs | 20 - .../uuf.unit.navbar.actions/actions.json | 8 - .../breadcrumbs.hbs | 25 - .../breadcrumbs.json | 8 - .../uuf.unit.navbar.nav-menu/nav-menu.hbs | 35 - .../uuf.unit.navbar.nav-menu/nav-menu.json | 8 - .../notifications.hbs | 36 - .../notifications.json | 8 - .../units/uuf.unit.navbar.popover/popover.hbs | 27 - .../uuf.unit.navbar.popover/popover.json | 8 - .../uuf.unit.navbar.toggle-menu.left/left.hbs | 33 - .../left.json | 9 - .../right.hbs | 37 - .../right.json | 9 - .../app/units/uuf.unit.navbar/navbar.hbs | 42 - .../app/units/uuf.unit.navbar/navbar.json | 8 - .../units/uuf.unit.side-pane/side-pane.hbs | 22 - .../units/uuf.unit.side-pane/side-pane.json | 3 - .../uuf.unit.theme/public/css/theme-wso2.css | 8951 --------- .../public/less/theme-variables.less | 4 - .../uuf.unit.theme/public/less/theme.less | 3 - .../bootstrap_3.3.5/css/bootstrap-theme.css | 587 - .../css/bootstrap-theme.css.map | 1 - .../css/bootstrap-theme.min.css | 5 - .../lib/bootstrap_3.3.5/css/bootstrap.css | 6800 ------- .../lib/bootstrap_3.3.5/css/bootstrap.css.map | 1 - .../lib/bootstrap_3.3.5/css/bootstrap.min.css | 5 - .../fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../lib/bootstrap_3.3.5/js/bootstrap.js | 2363 --- .../lib/bootstrap_3.3.5/js/bootstrap.min.js | 7 - .../public/lib/bootstrap_3.3.5/js/npm.js | 13 - .../font-awesome_4.3.0/css/font-awesome.css | 1801 -- .../css/font-awesome.min.css | 4 - .../font-awesome_4.3.0/fonts/FontAwesome.otf | Bin 93888 -> 0 bytes .../fonts/fontawesome-webfont.eot | Bin 60767 -> 0 bytes .../fonts/fontawesome-webfont.svg | 565 - .../fonts/fontawesome-webfont.ttf | Bin 122092 -> 0 bytes .../fonts/fontawesome-webfont.woff | Bin 71508 -> 0 bytes .../fonts/fontawesome-webfont.woff2 | Bin 56780 -> 0 bytes .../lib/font-wso2-1.3.0/css/font-wso2.css | 1506 -- .../lib/font-wso2-1.3.0/css/font-wso2.min.css | 15 - .../lib/font-wso2-1.3.0/fonts/font-wso2.svg | 2326 --- .../lib/font-wso2-1.3.0/fonts/font-wso2.ttf | Bin 71828 -> 0 bytes .../lib/font-wso2-1.3.0/fonts/font-wso2.woff | Bin 142064 -> 0 bytes .../lib/font-wso2-1.3.0/fonts/font-wso2.woff2 | Bin 38672 -> 0 bytes .../public/lib/font-wso2-1.3.0/icons.json | 306 - .../lib/font-wso2-1.3.0/scss/_mixin.scss | 1252 -- .../lib/html5shiv_3.7.2/html5shiv.min.js | 4 - .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 418 -> 0 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 312 -> 0 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 205 -> 0 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 348 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 207 -> 0 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 5815 -> 0 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 278 -> 0 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 328 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes .../images/ui-icons_228ef1_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_ffffff_256x240.png | Bin 6299 -> 0 bytes .../public/lib/jquery-ui_1.11.4/jquery-ui.css | 1225 -- .../public/lib/jquery-ui_1.11.4/jquery-ui.js | 16617 ---------------- .../lib/jquery-ui_1.11.4/jquery-ui.min.css | 7 - .../lib/jquery-ui_1.11.4/jquery-ui.min.js | 13 - .../jquery-ui_1.11.4/jquery-ui.structure.css | 833 - .../jquery-ui.structure.min.css | 5 - .../lib/jquery-ui_1.11.4/jquery-ui.theme.css | 410 - .../jquery-ui_1.11.4/jquery-ui.theme.min.css | 5 - .../lib/jquery_1.11.0/jquery-1.11.3.min.js | 5 - .../public/lib/noty_2.3.5/jquery.noty.js | 534 - .../public/lib/noty_2.3.5/layouts/bottom.js | 30 - .../lib/noty_2.3.5/layouts/bottomCenter.js | 38 - .../lib/noty_2.3.5/layouts/bottomLeft.js | 39 - .../lib/noty_2.3.5/layouts/bottomRight.js | 39 - .../public/lib/noty_2.3.5/layouts/center.js | 53 - .../lib/noty_2.3.5/layouts/centerLeft.js | 58 - .../lib/noty_2.3.5/layouts/centerRight.js | 58 - .../public/lib/noty_2.3.5/layouts/inline.js | 27 - .../public/lib/noty_2.3.5/layouts/top.js | 30 - .../lib/noty_2.3.5/layouts/topCenter.js | 37 - .../public/lib/noty_2.3.5/layouts/topLeft.js | 39 - .../public/lib/noty_2.3.5/layouts/topRight.js | 39 - .../packaged/jquery.noty.packaged.js | 1436 -- .../packaged/jquery.noty.packaged.min.js | 1 - .../public/lib/noty_2.3.5/promise.js | 432 - .../public/lib/noty_2.3.5/themes/bootstrap.js | 58 - .../public/lib/noty_2.3.5/themes/default.js | 184 - .../public/lib/noty_2.3.5/themes/relax.js | 151 - .../public/lib/respond_1.4.2/respond.min.js | 5 - .../fonts/OpenSans/OpenSans-Bold-webfont.eot | Bin 30858 -> 0 bytes .../fonts/OpenSans/OpenSans-Bold-webfont.svg | 251 - .../fonts/OpenSans/OpenSans-Bold-webfont.ttf | Bin 30680 -> 0 bytes .../fonts/OpenSans/OpenSans-Bold-webfont.woff | Bin 19788 -> 0 bytes .../OpenSans/OpenSans-BoldItalic-webfont.eot | Bin 34166 -> 0 bytes .../OpenSans/OpenSans-BoldItalic-webfont.svg | 251 - .../OpenSans/OpenSans-BoldItalic-webfont.ttf | Bin 33960 -> 0 bytes .../OpenSans/OpenSans-BoldItalic-webfont.woff | Bin 21940 -> 0 bytes .../OpenSans/OpenSans-ExtraBold-webfont.eot | Bin 30602 -> 0 bytes .../OpenSans/OpenSans-ExtraBold-webfont.svg | 251 - .../OpenSans/OpenSans-ExtraBold-webfont.ttf | Bin 30404 -> 0 bytes .../OpenSans/OpenSans-ExtraBold-webfont.woff | Bin 19972 -> 0 bytes .../OpenSans-ExtraBoldItalic-webfont.eot | Bin 33758 -> 0 bytes .../OpenSans-ExtraBoldItalic-webfont.svg | 251 - .../OpenSans-ExtraBoldItalic-webfont.ttf | Bin 33532 -> 0 bytes .../OpenSans-ExtraBoldItalic-webfont.woff | Bin 21824 -> 0 bytes .../OpenSans/OpenSans-Italic-webfont.eot | Bin 34798 -> 0 bytes .../OpenSans/OpenSans-Italic-webfont.svg | 251 - .../OpenSans/OpenSans-Italic-webfont.ttf | Bin 34612 -> 0 bytes .../OpenSans/OpenSans-Italic-webfont.woff | Bin 22416 -> 0 bytes .../fonts/OpenSans/OpenSans-Light-webfont.eot | Bin 29794 -> 0 bytes .../fonts/OpenSans/OpenSans-Light-webfont.svg | 252 - .../fonts/OpenSans/OpenSans-Light-webfont.ttf | Bin 29612 -> 0 bytes .../OpenSans/OpenSans-Light-webfont.woff | Bin 19396 -> 0 bytes .../OpenSans/OpenSans-LightItalic-webfont.eot | Bin 34578 -> 0 bytes .../OpenSans/OpenSans-LightItalic-webfont.svg | 252 - .../OpenSans/OpenSans-LightItalic-webfont.ttf | Bin 34368 -> 0 bytes .../OpenSans-LightItalic-webfont.woff | Bin 22444 -> 0 bytes .../OpenSans/OpenSans-Regular-webfont.eot | Bin 29934 -> 0 bytes .../OpenSans/OpenSans-Regular-webfont.svg | 252 - .../OpenSans/OpenSans-Regular-webfont.ttf | Bin 29744 -> 0 bytes .../OpenSans/OpenSans-Regular-webfont.woff | Bin 19624 -> 0 bytes .../OpenSans/OpenSans-Semibold-webfont.eot | Bin 30350 -> 0 bytes .../OpenSans/OpenSans-Semibold-webfont.svg | 251 - .../OpenSans/OpenSans-Semibold-webfont.ttf | Bin 30156 -> 0 bytes .../OpenSans/OpenSans-Semibold-webfont.woff | Bin 19736 -> 0 bytes .../OpenSans-SemiboldItalic-webfont.eot | Bin 34866 -> 0 bytes .../OpenSans-SemiboldItalic-webfont.svg | 251 - .../OpenSans-SemiboldItalic-webfont.ttf | Bin 34644 -> 0 bytes .../OpenSans-SemiboldItalic-webfont.woff | Bin 22332 -> 0 bytes .../fonts/Roboto/Roboto-Black-webfont.eot | Bin 20698 -> 0 bytes .../fonts/Roboto/Roboto-Black-webfont.svg | 642 - .../fonts/Roboto/Roboto-Black-webfont.ttf | Bin 44652 -> 0 bytes .../fonts/Roboto/Roboto-Black-webfont.woff | Bin 24484 -> 0 bytes .../fonts/Roboto/Roboto-Black-webfont.woff2 | Bin 14540 -> 0 bytes .../Roboto/Roboto-BlackItalic-webfont.eot | Bin 23849 -> 0 bytes .../Roboto/Roboto-BlackItalic-webfont.svg | 642 - .../Roboto/Roboto-BlackItalic-webfont.ttf | Bin 51536 -> 0 bytes .../Roboto/Roboto-BlackItalic-webfont.woff | Bin 27892 -> 0 bytes .../Roboto/Roboto-BlackItalic-webfont.woff2 | Bin 15972 -> 0 bytes .../fonts/Roboto/Roboto-Bold-webfont.eot | Bin 20966 -> 0 bytes .../fonts/Roboto/Roboto-Bold-webfont.svg | 593 - .../fonts/Roboto/Roboto-Bold-webfont.ttf | Bin 45008 -> 0 bytes .../fonts/Roboto/Roboto-Bold-webfont.woff | Bin 24808 -> 0 bytes .../fonts/Roboto/Roboto-Bold-webfont.woff2 | Bin 14552 -> 0 bytes .../Roboto/Roboto-BoldItalic-webfont.eot | Bin 24778 -> 0 bytes .../Roboto/Roboto-BoldItalic-webfont.svg | 642 - .../Roboto/Roboto-BoldItalic-webfont.ttf | Bin 53400 -> 0 bytes .../Roboto/Roboto-BoldItalic-webfont.woff | Bin 28824 -> 0 bytes .../Roboto/Roboto-BoldItalic-webfont.woff2 | Bin 15340 -> 0 bytes .../fonts/Roboto/Roboto-Italic-webfont.eot | Bin 25062 -> 0 bytes .../fonts/Roboto/Roboto-Italic-webfont.svg | 642 - .../fonts/Roboto/Roboto-Italic-webfont.ttf | Bin 54124 -> 0 bytes .../fonts/Roboto/Roboto-Italic-webfont.woff | Bin 29080 -> 0 bytes .../fonts/Roboto/Roboto-Italic-webfont.woff2 | Bin 15736 -> 0 bytes .../fonts/Roboto/Roboto-Light-webfont.eot | Bin 20940 -> 0 bytes .../fonts/Roboto/Roboto-Light-webfont.svg | 641 - .../fonts/Roboto/Roboto-Light-webfont.ttf | Bin 45880 -> 0 bytes .../fonts/Roboto/Roboto-Light-webfont.woff | Bin 24576 -> 0 bytes .../fonts/Roboto/Roboto-Light-webfont.woff2 | Bin 14524 -> 0 bytes .../Roboto/Roboto-LightItalic-webfont.eot | Bin 25458 -> 0 bytes .../Roboto/Roboto-LightItalic-webfont.svg | 641 - .../Roboto/Roboto-LightItalic-webfont.ttf | Bin 56008 -> 0 bytes .../Roboto/Roboto-LightItalic-webfont.woff | Bin 29480 -> 0 bytes .../Roboto/Roboto-LightItalic-webfont.woff2 | Bin 16064 -> 0 bytes .../fonts/Roboto/Roboto-Medium-webfont.eot | Bin 21364 -> 0 bytes .../fonts/Roboto/Roboto-Medium-webfont.svg | 593 - .../fonts/Roboto/Roboto-Medium-webfont.ttf | Bin 45304 -> 0 bytes .../fonts/Roboto/Roboto-Medium-webfont.woff | Bin 25048 -> 0 bytes .../fonts/Roboto/Roboto-Medium-webfont.woff2 | Bin 14596 -> 0 bytes .../Roboto/Roboto-MediumItalic-webfont.eot | Bin 24908 -> 0 bytes .../Roboto/Roboto-MediumItalic-webfont.svg | 642 - .../Roboto/Roboto-MediumItalic-webfont.ttf | Bin 53884 -> 0 bytes .../Roboto/Roboto-MediumItalic-webfont.woff | Bin 28860 -> 0 bytes .../Roboto/Roboto-MediumItalic-webfont.woff2 | Bin 15804 -> 0 bytes .../fonts/Roboto/Roboto-Regular-webfont.eot | Bin 21320 -> 0 bytes .../fonts/Roboto/Roboto-Regular-webfont.svg | 621 - .../fonts/Roboto/Roboto-Regular-webfont.ttf | Bin 45376 -> 0 bytes .../fonts/Roboto/Roboto-Regular-webfont.woff | Bin 25020 -> 0 bytes .../fonts/Roboto/Roboto-Regular-webfont.woff2 | Bin 14584 -> 0 bytes .../fonts/Roboto/Roboto-Thin-webfont.eot | Bin 21659 -> 0 bytes .../fonts/Roboto/Roboto-Thin-webfont.svg | 631 - .../fonts/Roboto/Roboto-Thin-webfont.ttf | Bin 47700 -> 0 bytes .../fonts/Roboto/Roboto-Thin-webfont.woff | Bin 24944 -> 0 bytes .../fonts/Roboto/Roboto-Thin-webfont.woff2 | Bin 14556 -> 0 bytes .../Roboto/Roboto-ThinItalic-webfont.eot | Bin 26645 -> 0 bytes .../Roboto/Roboto-ThinItalic-webfont.svg | 631 - .../Roboto/Roboto-ThinItalic-webfont.ttf | Bin 60668 -> 0 bytes .../Roboto/Roboto-ThinItalic-webfont.woff | Bin 30468 -> 0 bytes .../Roboto/Roboto-ThinItalic-webfont.woff2 | Bin 15788 -> 0 bytes .../Roboto/RobotoCondensed-Bold-webfont.eot | Bin 21457 -> 0 bytes .../Roboto/RobotoCondensed-Bold-webfont.svg | 643 - .../Roboto/RobotoCondensed-Bold-webfont.ttf | Bin 45452 -> 0 bytes .../Roboto/RobotoCondensed-Bold-webfont.woff | Bin 25144 -> 0 bytes .../RobotoCondensed-BoldItalic-webfont.eot | Bin 25204 -> 0 bytes .../RobotoCondensed-BoldItalic-webfont.svg | 643 - .../RobotoCondensed-BoldItalic-webfont.ttf | Bin 53660 -> 0 bytes .../RobotoCondensed-BoldItalic-webfont.woff | Bin 29136 -> 0 bytes .../Roboto/RobotoCondensed-Italic-webfont.eot | Bin 25217 -> 0 bytes .../Roboto/RobotoCondensed-Italic-webfont.svg | 644 - .../Roboto/RobotoCondensed-Italic-webfont.ttf | Bin 54528 -> 0 bytes .../RobotoCondensed-Italic-webfont.woff | Bin 29104 -> 0 bytes .../Roboto/RobotoCondensed-Light-webfont.eot | Bin 21661 -> 0 bytes .../Roboto/RobotoCondensed-Light-webfont.svg | 643 - .../Roboto/RobotoCondensed-Light-webfont.ttf | Bin 47108 -> 0 bytes .../Roboto/RobotoCondensed-Light-webfont.woff | Bin 25204 -> 0 bytes .../RobotoCondensed-LightItalic-webfont.eot | Bin 25892 -> 0 bytes .../RobotoCondensed-LightItalic-webfont.svg | 643 - .../RobotoCondensed-LightItalic-webfont.ttf | Bin 56592 -> 0 bytes .../RobotoCondensed-LightItalic-webfont.woff | Bin 29796 -> 0 bytes .../RobotoCondensed-Regular-webfont.eot | Bin 21712 -> 0 bytes .../RobotoCondensed-Regular-webfont.svg | 644 - .../RobotoCondensed-Regular-webfont.ttf | Bin 45668 -> 0 bytes .../RobotoCondensed-Regular-webfont.woff | Bin 25268 -> 0 bytes .../lib/theme-wso2_1.0/images/favicon.png | Bin 18171 -> 0 bytes .../lib/theme-wso2_1.0/images/loading.svg | 25 - .../theme-wso2_1.0/images/logo-inverse.png | Bin 29179 -> 0 bytes .../public/lib/theme-wso2_1.0/images/logo.png | Bin 33023 -> 0 bytes .../lib/theme-wso2_1.0/js/noty-theme-wso2.js | 151 - .../lib/theme-wso2_1.0/js/theme-wso2.js | 590 - .../lib/theme-wso2_1.0/less/theme-wso2.less | 2373 --- .../app/units/uuf.unit.theme/theme.hbs | 51 - .../app/units/uuf.unit.theme/theme.json | 9 - .../uuf-template-app/cache/.gitignore | 3 - .../uuf-template-app/cache/README.txt | 1 - .../jaggeryapps/uuf-template-app/jaggery.conf | 30 - .../uuf-template-app/lib/constants.js | 112 - .../lib/dynamic-files-renderer.js | 126 - .../lib/error-pages-router.js | 125 - .../uuf-template-app/lib/models.js | 94 - .../uuf-template-app/lib/modules/auth/acs.jag | 41 - .../uuf-template-app/lib/modules/auth/auth.js | 644 - .../auth/default-sso-intermediate-page.hbs | 43 - .../lib/modules/auth/login.jag | 51 - .../lib/modules/auth/logout.jag | 51 - .../lib/modules/handlebars/data-structures.js | 242 - .../modules/handlebars/handlebars-v2.0.0.js | 3079 --- .../lib/modules/handlebars/handlebars.js | 708 - .../lib/modules/less/less-rhino-1.7.5.js | 9383 --------- .../uuf-template-app/lib/modules/less/less.js | 255 - .../uuf-template-app/lib/pages-router.js | 183 - .../uuf-template-app/lib/pages.jag | 24 - .../lib/static-files-router.js | 423 - .../uuf-template-app/lib/static-files.jag | 22 - .../uuf-template-app/lib/units-router.js | 68 - .../uuf-template-app/lib/units.jag | 22 - .../jaggeryapps/uuf-template-app/lib/utils.js | 639 - .../windows-web-agent/api/invoker-api.jag | 104 - .../windows-web-agent/api/user-api.jag | 185 - .../windows-web-agent/app/conf/app-conf.json | 52 - .../windows-web-agent/app/conf/config.json | 81 - .../app/layouts/mdm.layout.enrollment.hbs | 76 - .../modules/business-controllers/device.js | 348 - .../app/modules/business-controllers/group.js | 82 - .../modules/business-controllers/operation.js | 134 - .../modules/business-controllers/policy.js | 152 - .../app/modules/business-controllers/user.js | 540 - .../app/modules/conf-reader/main.js | 59 - .../app/modules/conf-reader/pinch.min.js | 26 - .../app/modules/constants.js | 81 - .../app/modules/enrollments/util/utils.js | 40 - .../enrollments/windows/agent-controller.jag | 96 - .../enrollments/windows/agent-enroll.jag | 55 - .../workplace-switch-request-template.hbs | 20 - .../windows-web-agent/app/modules/init.js | 34 - .../windows-web-agent/app/modules/login.js | 42 - .../app/modules/oauth/token-handler-utils.js | 294 - .../app/modules/oauth/token-handlers.js | 180 - .../oauth/token-protected-service-invokers.js | 376 - .../app/modules/ua-parser.min.js | 9 - .../windows-web-agent/app/modules/utility.js | 140 - .../mdm.page.enrollments.default/default.hbs | 17 - .../mdm.page.enrollments.default/default.js | 39 - .../mdm.page.enrollments.default/default.json | 6 - .../unintentional-request.hbs | 33 - .../unintentional-request.json | 6 - .../invoke-agent.hbs | 53 - .../invoke-agent.json | 6 - .../license.hbs | 46 - .../license.js | 24 - .../license.json | 6 - .../login.hbs | 45 - .../login.js | 50 - .../login.json | 6 - .../app/pages/mdm.page.error/error.hbs | 32 - .../app/pages/mdm.page.error/error.json | 6 - .../app/pages/mdm.page.home/home.json | 6 - .../access-control.hbs | 15 - .../access-control.js | 76 - .../access-control.json | 4 - .../license-box.hbs | 37 - .../license-box.js | 41 - .../license-box.json | 4 - .../public/js/license-box.js | 22 - .../login-box.hbs | 74 - .../login-box.js | 30 - .../login-box.json | 4 - .../public/js/login-box.js | 86 - .../units/mdm.unit.ui.content.title/title.hbs | 24 - .../mdm.unit.ui.content.title/title.json | 3 - .../units/mdm.unit.ui.header.logo/logo.hbs | 24 - .../units/mdm.unit.ui.header.logo/logo.json | 4 - .../user-menu.hbs | 22 - .../user-menu.json | 4 - .../mdm.unit.ui.navbar.nav-menu/nav-menu.hbs | 117 - .../mdm.unit.ui.navbar.nav-menu/nav-menu.js | 56 - .../mdm.unit.ui.navbar.nav-menu/nav-menu.json | 8 - .../public/js/jquery.qrcode.min.js | 47 - .../public/js/nav-menu.js | 351 - .../public/templates/notifications.hbs | 14 - .../notifications.json | 5 - .../mdm.unit.ui.navbar.popover/popover.json | 5 - .../left.json | 5 - .../right.json | 5 - .../public/css/custom-common.css | 366 - .../public/css/custom-mobile.css | 137 - .../public/css/custom-theme.css | 567 - .../public/fonts/OpenSans-Bold-webfont.eot | Bin 30858 -> 0 bytes .../public/fonts/OpenSans-Bold-webfont.svg | 251 - .../public/fonts/OpenSans-Bold-webfont.ttf | Bin 30680 -> 0 bytes .../public/fonts/OpenSans-Bold-webfont.woff | Bin 19788 -> 0 bytes .../fonts/OpenSans-BoldItalic-webfont.eot | Bin 34166 -> 0 bytes .../fonts/OpenSans-BoldItalic-webfont.svg | 251 - .../fonts/OpenSans-BoldItalic-webfont.ttf | Bin 33960 -> 0 bytes .../fonts/OpenSans-BoldItalic-webfont.woff | Bin 21940 -> 0 bytes .../fonts/OpenSans-ExtraBold-webfont.eot | Bin 30602 -> 0 bytes .../fonts/OpenSans-ExtraBold-webfont.svg | 251 - .../fonts/OpenSans-ExtraBold-webfont.ttf | Bin 30404 -> 0 bytes .../fonts/OpenSans-ExtraBold-webfont.woff | Bin 19972 -> 0 bytes .../OpenSans-ExtraBoldItalic-webfont.eot | Bin 33758 -> 0 bytes .../OpenSans-ExtraBoldItalic-webfont.svg | 251 - .../OpenSans-ExtraBoldItalic-webfont.ttf | Bin 33532 -> 0 bytes .../OpenSans-ExtraBoldItalic-webfont.woff | Bin 21824 -> 0 bytes .../public/fonts/OpenSans-Italic-webfont.eot | Bin 34798 -> 0 bytes .../public/fonts/OpenSans-Italic-webfont.svg | 251 - .../public/fonts/OpenSans-Italic-webfont.ttf | Bin 34612 -> 0 bytes .../public/fonts/OpenSans-Italic-webfont.woff | Bin 22416 -> 0 bytes .../public/fonts/OpenSans-Light-webfont.eot | Bin 29794 -> 0 bytes .../public/fonts/OpenSans-Light-webfont.svg | 252 - .../public/fonts/OpenSans-Light-webfont.ttf | Bin 29612 -> 0 bytes .../public/fonts/OpenSans-Light-webfont.woff | Bin 19396 -> 0 bytes .../fonts/OpenSans-LightItalic-webfont.eot | Bin 34578 -> 0 bytes .../fonts/OpenSans-LightItalic-webfont.svg | 252 - .../fonts/OpenSans-LightItalic-webfont.ttf | Bin 34368 -> 0 bytes .../fonts/OpenSans-LightItalic-webfont.woff | Bin 22444 -> 0 bytes .../public/fonts/OpenSans-Regular-webfont.eot | Bin 29934 -> 0 bytes .../public/fonts/OpenSans-Regular-webfont.svg | 252 - .../public/fonts/OpenSans-Regular-webfont.ttf | Bin 29744 -> 0 bytes .../fonts/OpenSans-Regular-webfont.woff | Bin 19624 -> 0 bytes .../fonts/OpenSans-Semibold-webfont.eot | Bin 30350 -> 0 bytes .../fonts/OpenSans-Semibold-webfont.svg | 251 - .../fonts/OpenSans-Semibold-webfont.ttf | Bin 30156 -> 0 bytes .../fonts/OpenSans-Semibold-webfont.woff | Bin 19736 -> 0 bytes .../fonts/OpenSans-SemiboldItalic-webfont.eot | Bin 34866 -> 0 bytes .../fonts/OpenSans-SemiboldItalic-webfont.svg | 251 - .../fonts/OpenSans-SemiboldItalic-webfont.ttf | Bin 34644 -> 0 bytes .../OpenSans-SemiboldItalic-webfont.woff | Bin 22332 -> 0 bytes .../public/js/responsive-text.js | 75 - .../public/less/theme-variables.less | 48 - .../app/units/mdm.unit.ui.theme/theme.hbs | 27 - .../app/units/mdm.unit.ui.theme/theme.json | 4 - .../app/units/mdm.unit.ui.title/title.hbs | 21 - .../app/units/mdm.unit.ui.title/title.json | 4 - .../public/css/wizard-stepper.css | 45 - .../wizard-stepper.hbs | 66 - .../mdm.unit.wizard-stepper/wizard-stepper.js | 68 - .../wizard-stepper.json | 4 - .../windows-web-agent/jaggery.conf | 77 - .../pom.xml | 178 - .../WindowsDeviceMgtPluginException.java | 57 - .../impl/WindowsDeviceManagementService.java | 122 - .../windows/impl/WindowsDeviceManager.java | 319 - .../windows/impl/WindowsFeatureManager.java | 251 - .../impl/WindowsPolicyMonitoringManager.java | 62 - .../windows/impl/WindowsTokenService.java | 29 - .../windows/impl/WindowsTokenServiceImpl.java | 77 - .../MobileDeviceConfigurationManager.java | 78 - .../config/MobileDeviceManagementConfig.java | 42 - .../MobileDeviceManagementRepository.java | 57 - .../datasource/DataSourceConfigAdapter.java | 51 - .../datasource/JNDILookupDefinition.java | 79 - .../datasource/MobileDataSourceConfig.java | 51 - .../MobileDataSourceConfigurations.java | 41 - ...tractMobileDeviceManagementDAOFactory.java | 102 - .../windows/impl/dao/MobileDeviceDAO.java | 74 - .../MobileDeviceManagementDAOException.java | 80 - .../dao/MobileDeviceManagementDAOFactory.java | 27 - .../windows/impl/dao/MobileFeatureDAO.java | 156 - .../windows/impl/dao/WindowsDAOFactory.java | 149 - .../impl/dao/WindowsEnrollmentTokenDAO.java | 33 - .../WindowsFeatureManagementDAOException.java | 78 - .../impl/dao/impl/WindowsDeviceDAOImpl.java | 255 - .../impl/WindowsEnrollmentTokenDAOImpl.java | 177 - .../impl/dao/impl/WindowsFeatureDAOImpl.java | 379 - .../util/MobileDeviceManagementDAOUtil.java | 153 - .../windows/impl/dto/MobileCacheEntry.java | 76 - .../mobile/windows/impl/dto/MobileDevice.java | 135 - .../dto/MobileDeviceOperationMapping.java | 86 - .../windows/impl/dto/MobileFeature.java | 109 - .../impl/dto/MobileFeatureProperty.java | 45 - .../windows/impl/dto/MobileOperation.java | 64 - .../impl/dto/MobileOperationProperty.java | 54 - ...bileDeviceManagementSchemaInitializer.java | 61 - .../impl/util/MobileDeviceManagementUtil.java | 356 - .../impl/util/WindowsPluginConstants.java | 81 - .../windows/impl/util/WindowsPluginUtils.java | 58 - .../WindowsDeviceManagementDataHolder.java | 64 - ...ndowsDeviceManagementServiceComponent.java | 135 - .../mobile-plugins/windows-plugin/pom.xml | 61 - components/test-coverage/pom.xml | 21 - features/mobile-plugins-feature/pom.xml | 1 - .../pom.xml | 225 - .../admin--Windows_10_Device_management.xml | 56 - ...n--Windows_10_Device_management_v1.0.0.xml | 32 - .../admin--Windows_10_Enrollment_Service.xml | 56 - ...--Windows_10_Enrollment_Service_v1.0.0.xml | 34 - ...-Windows_8.1_Device_Management_Service.xml | 57 - ...s_8.1_Device_Management_Service_v1.0.0.xml | 34 - .../admin--Windows_8.1_Enrollment_Service.xml | 57 - ...-Windows_8.1_Enrollment_Service_v1.0.0.xml | 34 - .../apis/admin--Windows_Discovery_Service.xml | 56 - ...dmin--Windows_Discovery_Service_v1.0.0.xml | 34 - ...min--Windows_Enrollment_policy_Service.xml | 56 - ...ndows_Enrollment_policy_Service_v1.0.0.xml | 34 - .../src/main/resources/build.properties | 19 - .../datasources/windows-datasources.xml | 48 - .../main/resources/dbscripts/plugins/h2.sql | 46 - .../resources/dbscripts/plugins/mssql.sql | 49 - .../resources/dbscripts/plugins/mysql.sql | 50 - .../resources/dbscripts/plugins/oracle.sql | 87 - .../dbscripts/plugins/postgresql.sql | 46 - .../main/resources/devicetypes/windows.xml | 237 - .../src/main/resources/p2.inf | 42 - .../windows-plugin-feature/pom.xml | 40 - 993 files changed, 184740 deletions(-) delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/EnterpriseApplication.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedAppxApplication.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedMSIApplication.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/WindowsOperation.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/wrapper/EnterpriseApplicationBeanWrapper.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/SyncmlCommandType.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuth2TokenValidator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthConstants.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthTokenValidationStubFactory.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthValidatorFactory.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/LocalOAuthValidator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/RemoteOAuthValidator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/CacheEntry.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Device.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorDTO.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorListItem.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorResponse.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/OperationRequest.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Token.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/AuthenticationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/BadRequestException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/CertificateGenerationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/FileOperationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/KeyStoreGenerationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/MDMAPIException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/OAuthTokenValidationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/ProfileConfigurationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlMessageFormatException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlOperationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/UnexpectedServerErrorException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WAPProvisioningException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsConfigurationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsDeviceEnrolmentException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsEnrollmentTokenException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsOperationsException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/AuthenticationInfo.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/BSTValidator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ContextInitializer.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceIDHolder.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceUtil.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorHandler.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorMessage.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/GsonMessageBodyHandler.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/Message.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/OAuthValidationResponse.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/SOAPSecurityHandler.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/UsernameTokenValidator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/WindowsAPIUtils.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AddTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AlertTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AtomicTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/CredentialTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/DeleteTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ExecuteTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/GetTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ItemTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/MetaTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ReplaceTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ResultsTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SequenceTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SourceTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlBody.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlDocument.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlHeader.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/TargetTag.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/WindowsOperationException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/DeviceInfo.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/HeartBeatDeviceInfo.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationCode.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlCredentialUtil.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlGenerator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlParser.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/ConfigurationMgtService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/BSTProvider.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/beans/Credentials.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/impl/BSTProviderImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryRequest.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryResponse.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/package-info.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/impl/DiscoveryServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/AdditionalContext.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/BinarySecurityToken.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/ContextItem.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityToken.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityTokenResponse.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestedSecurityToken.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/package-info.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/CertificateSigningService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/KeyStoreGenerator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/MessageHandler.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/ConfigurationMgtServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementAdminServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/BasicOperation.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/PasscodePolicy.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Profile.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Wifi.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/impl/SyncmlServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/AdditionalContext.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/BinarySecurityToken.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/ContextItem.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityToken.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityTokenResponse.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestedSecurityToken.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/package-info.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/impl/CertificateEnrollmentServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/CertificateSigningService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/KeyStoreGenerator.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/MessageHandler.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Attributes.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CA.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CACollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAReferenceCollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURI.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURICollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateEnrollmentPolicy.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateValidity.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Client.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CryptoProviders.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/EnrollmentPermission.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Extension.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ExtensionCollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/FilterOIDCollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPolicies.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPoliciesResponse.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/KeyArchivalAttributes.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OID.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDCollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDReferenceCollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ObjectFactory.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PolicyCollection.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PrivateKeyAttributes.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RARequirements.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RequestFilter.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Response.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Revision.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/SupersededPolicies.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/package-info.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/impl/CertificateEnrollmentPolicyServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/wap-provisioning.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/permissions.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/webapp-classloading.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/cxf-servlet.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/web.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/servicelist.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/assembly/src.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/TemperatureController.png delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/android.png delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/ios.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/windows_app_icon.png delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/graph.png delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers-2x.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-icon-2x.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-icon.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-shadow.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/leaflet.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/js/operation-bar.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/templates/operation-bar.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/public/js/platform-configuration.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/js/windows-policy-edit.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/templates/windows-policy-edit.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/js/windows-policy-view.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/templates/windows-policy-view.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/js/windows-policy-operations.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/templates/windows-policy-operations.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/private/config.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/css/styles.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/images/thumb.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/images/windows-icon.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/images/windows_enrollment.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/js/type-view.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/app-conf.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/uuf-conf.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.default.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.sign-in.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/public/js/sign-in-validations.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/public/img/favicon.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/public/img/logo.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.user-menu/user-menu.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.user-menu/user-menu.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/images/filler.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/js/dataTables.autoFill.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/js/dataTables.autoFill.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/css/dataTables.bootstrap.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/js/dataTables.bootstrap.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/images/insert.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/js/dataTables.colReorder.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/js/dataTables.colReorder.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColVis/css/dataTables.colVis.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColVis/css/dataTables.colVis.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColVis/css/dataTables.colvis.jqueryui.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColVis/js/dataTables.colVis.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColVis/js/dataTables.colVis.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedColumns/css/dataTables.fixedColumns.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedColumns/css/dataTables.fixedColumns.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedColumns/js/dataTables.fixedColumns.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedColumns/js/dataTables.fixedColumns.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedHeader/css/dataTables.fixedHeader.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedHeader/css/dataTables.fixedHeader.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedHeader/js/dataTables.fixedHeader.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/FixedHeader/js/dataTables.fixedHeader.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/KeyTable/css/dataTables.keyTable.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/KeyTable/css/dataTables.keyTable.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/KeyTable/js/dataTables.keyTable.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/KeyTable/js/dataTables.keyTable.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Responsive/css/dataTables.responsive.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Responsive/css/dataTables.responsive.scss delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Responsive/js/dataTables.responsive.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Responsive/js/dataTables.responsive.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Scroller/css/dataTables.scroller.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Scroller/css/dataTables.scroller.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Scroller/images/loading-background.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Scroller/js/dataTables.scroller.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Scroller/js/dataTables.scroller.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/css/dataTables.tableTools.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/css/dataTables.tableTools.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/collection.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/collection_hover.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/copy.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/copy_hover.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/csv.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/csv_hover.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/pdf.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/pdf_hover.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/print.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/print_hover.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/psd/collection.psd delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/psd/copy document.psd delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/psd/file_types.psd delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/psd/printer.psd delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/xls.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/images/xls_hover.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/js/dataTables.tableTools.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/js/dataTables.tableTools.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/swf/copy_csv_xls.swf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/swf/copy_csv_xls_pdf.swf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables_themeroller.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_asc.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_asc_disabled.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_both.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_desc.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_desc_disabled.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/js/jquery.dataTables.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/js/jquery.dataTables.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/js/jquery.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/dropdown.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/dropdown.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/css/select2.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/css/select2.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/az.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/bg.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/ca.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/cs.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/da.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/de.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/en.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/es.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/et.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/eu.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/fa.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/fi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/fr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/gl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/he.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/hi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/hr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/hu.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/id.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/is.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/it.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/ko.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/lt.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/lv.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/mk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/nb.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/nl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/pl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/pt-BR.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/pt.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/ro.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/ru.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/sk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/sr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/sv.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/th.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/tr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/uk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/vi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/zh-CN.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/i18n/zh-TW.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/select2.full.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/select2.full.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/select2.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.dropdown/public/select2_4.0.0/js/select2.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/form-validation.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/form-validation.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/css/validation-style.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/additional-methods.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/additional-methods.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/jquery.validate.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/jquery.validate.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ar.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ar.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_bg.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_bg.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_bn_BD.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_bn_BD.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ca.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ca.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_cs.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_cs.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_da.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_da.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_de.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_de.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_el.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_el.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_es.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_es.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_es_AR.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_es_AR.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_es_PE.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_es_PE.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_et.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_et.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_eu.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_eu.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_fa.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_fa.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_fi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_fi.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_fr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_fr.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ge.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ge.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_gl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_gl.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_he.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_he.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_hr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_hr.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_hu.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_hu.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_hy_AM.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_hy_AM.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_id.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_id.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_is.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_is.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_it.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_it.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ja.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ja.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ka.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ka.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_kk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_kk.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ko.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ko.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_lt.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_lt.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_lv.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_lv.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_my.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_my.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_nl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_nl.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_no.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_no.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_pl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_pl.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_pt_BR.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_pt_BR.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_pt_PT.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_pt_PT.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ro.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ro.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ru.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_ru.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_si.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_si.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sk.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sl.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sr.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sr_lat.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sr_lat.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sv.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_sv.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_th.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_th.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_tj.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_tj.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_tr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_tr.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_uk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_uk.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_vi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_vi.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_zh.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_zh.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_zh_TW.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/messages_zh_TW.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_de.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_de.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_es_CL.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_es_CL.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_fi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_fi.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_nl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_nl.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_pt.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.form-validation/public/lib/jquery-validation_1.14.0/localization/methods_pt.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/css/select2.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/css/select2.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/az.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/bg.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/ca.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/cs.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/da.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/de.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/en.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/es.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/et.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/eu.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/fa.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/fi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/fr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/gl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/he.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/hi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/hr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/hu.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/id.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/is.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/it.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/ko.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/lt.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/lv.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/mk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/nb.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/nl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/pl.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/pt-BR.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/pt.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/ro.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/ru.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/sk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/sr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/sv.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/th.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/tr.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/uk.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/vi.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/zh-CN.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/i18n/zh-TW.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/select2.full.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/select2.full.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/select2.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/public/select2_4.0.0/js/select2.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/select2.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.select2/select2.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.thumbnail/public/jquery-resize_0.5.3/jquery.resize.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.thumbnail/thumbnail.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.thumbnail/thumbnail.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.message.notification/notification.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.message.notification/notification.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.message.notification/notification.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.message/message.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.message/message.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.message/message.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.actions/actions.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.actions/actions.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.breadcrumbs/breadcrumbs.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.breadcrumbs/breadcrumbs.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.nav-menu/nav-menu.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.nav-menu/nav-menu.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.notifications/notifications.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.notifications/notifications.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.popover/popover.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.popover/popover.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.toggle-menu.left/left.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.toggle-menu.left/left.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.toggle-menu.right/right.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar.toggle-menu.right/right.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar/navbar.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.navbar/navbar.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.side-pane/side-pane.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.side-pane/side-pane.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/css/theme-wso2.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/less/theme-variables.less delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/less/theme.less delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/css/bootstrap-theme.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/css/bootstrap-theme.css.map delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/css/bootstrap-theme.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/css/bootstrap.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/css/bootstrap.css.map delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/css/bootstrap.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/fonts/glyphicons-halflings-regular.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/fonts/glyphicons-halflings-regular.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/fonts/glyphicons-halflings-regular.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/fonts/glyphicons-halflings-regular.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/js/bootstrap.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/js/bootstrap.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/bootstrap_3.3.5/js/npm.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/css/font-awesome.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/css/font-awesome.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/fonts/FontAwesome.otf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/fonts/fontawesome-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/fonts/fontawesome-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/fonts/fontawesome-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/fonts/fontawesome-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-awesome_4.3.0/fonts/fontawesome-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/css/font-wso2.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/css/font-wso2.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/fonts/font-wso2.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/fonts/font-wso2.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/fonts/font-wso2.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/fonts/font-wso2.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/icons.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/font-wso2-1.3.0/scss/_mixin.scss delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/html5shiv_3.7.2/html5shiv.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_diagonals-thick_18_b81900_40x40.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_diagonals-thick_20_666666_40x40.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_flat_10_000000_40x100.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_glass_100_f6f6f6_1x400.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_glass_100_fdf5ce_1x400.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_gloss-wave_35_f6a828_500x100.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_highlight-soft_100_eeeeee_1x100.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-bg_highlight-soft_75_ffe45c_1x100.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-icons_222222_256x240.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-icons_228ef1_256x240.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-icons_ef8c08_256x240.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-icons_ffd27a_256x240.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/images/ui-icons_ffffff_256x240.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.structure.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.structure.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.theme.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery-ui_1.11.4/jquery-ui.theme.min.css delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/jquery_1.11.0/jquery-1.11.3.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/jquery.noty.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/bottom.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/bottomCenter.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/bottomLeft.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/bottomRight.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/center.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/centerLeft.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/centerRight.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/inline.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/top.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/topCenter.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/topLeft.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/layouts/topRight.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/packaged/jquery.noty.packaged.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/packaged/jquery.noty.packaged.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/promise.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/themes/bootstrap.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/themes/default.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/noty_2.3.5/themes/relax.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/respond_1.4.2/respond.min.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Bold-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Bold-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Bold-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Bold-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-BoldItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-BoldItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-BoldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-BoldItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBold-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBold-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBold-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBold-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBoldItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBoldItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBoldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-ExtraBoldItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Italic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Italic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Italic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Italic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Light-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Light-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Light-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Light-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-LightItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-LightItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-LightItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-LightItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Regular-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Regular-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Regular-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Regular-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Semibold-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Semibold-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Semibold-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-Semibold-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-SemiboldItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-SemiboldItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-SemiboldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/OpenSans/OpenSans-SemiboldItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Black-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Black-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Black-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Black-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Black-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BlackItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BlackItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BlackItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BlackItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BlackItalic-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Bold-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Bold-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Bold-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Bold-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Bold-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BoldItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BoldItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BoldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BoldItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-BoldItalic-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Italic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Italic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Italic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Italic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Italic-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Light-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Light-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Light-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Light-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Light-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-LightItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-LightItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-LightItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-LightItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-LightItalic-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Medium-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Medium-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Medium-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Medium-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Medium-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-MediumItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-MediumItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-MediumItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-MediumItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-MediumItalic-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Regular-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Regular-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Regular-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Regular-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Regular-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Thin-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Thin-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Thin-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Thin-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-Thin-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-ThinItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-ThinItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-ThinItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-ThinItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/Roboto-ThinItalic-webfont.woff2 delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Bold-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Bold-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Bold-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Bold-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-BoldItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-BoldItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-BoldItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-BoldItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Italic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Italic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Italic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Italic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Light-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Light-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Light-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Light-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-LightItalic-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-LightItalic-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-LightItalic-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-LightItalic-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Regular-webfont.eot delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Regular-webfont.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Regular-webfont.ttf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/fonts/Roboto/RobotoCondensed-Regular-webfont.woff delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/images/favicon.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/images/loading.svg delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/images/logo-inverse.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/images/logo.png delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/js/noty-theme-wso2.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/js/theme-wso2.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/public/lib/theme-wso2_1.0/less/theme-wso2.less delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/theme.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.theme/theme.json delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/cache/.gitignore delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/cache/README.txt delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/jaggery.conf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/constants.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/dynamic-files-renderer.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/error-pages-router.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/models.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/acs.jag delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/auth.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/default-sso-intermediate-page.hbs delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/login.jag delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/auth/logout.jag delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/handlebars/data-structures.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/handlebars/handlebars-v2.0.0.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/handlebars/handlebars.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/less/less-rhino-1.7.5.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/modules/less/less.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/pages-router.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/pages.jag delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/static-files-router.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/static-files.jag delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/units-router.js delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/units.jag delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/lib/utils.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/api/invoker-api.jag delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/api/user-api.jag delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/conf/app-conf.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/conf/config.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/layouts/mdm.layout.enrollment.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/business-controllers/device.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/business-controllers/group.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/business-controllers/operation.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/business-controllers/policy.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/business-controllers/user.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/conf-reader/main.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/conf-reader/pinch.min.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/constants.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/enrollments/util/utils.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/enrollments/windows/agent-controller.jag delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/enrollments/windows/agent-enroll.jag delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/init.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/login.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/oauth/token-handler-utils.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/oauth/token-handlers.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/oauth/token-protected-service-invokers.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/ua-parser.min.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/modules/utility.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.default/default.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.default/default.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.default/default.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.error/error.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.error/error.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/pages/mdm.page.home/home.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.content.title/title.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.content.title/title.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.header.logo/logo.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.eot delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/js/responsive-text.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/public/less/theme-variables.less delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/theme.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.theme/theme.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.title/title.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.ui.title/title.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.wizard-stepper/public/css/wizard-stepper.css delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json delete mode 100755 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/windows-web-agent/jaggery.conf delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/pom.xml delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/exception/WindowsDeviceMgtPluginException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsDeviceManagementService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsDeviceManager.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsFeatureManager.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsPolicyMonitoringManager.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsTokenService.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/WindowsTokenServiceImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/MobileDeviceConfigurationManager.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/MobileDeviceManagementConfig.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/MobileDeviceManagementRepository.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/datasource/DataSourceConfigAdapter.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/datasource/JNDILookupDefinition.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/datasource/MobileDataSourceConfig.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/config/datasource/MobileDataSourceConfigurations.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/AbstractMobileDeviceManagementDAOFactory.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/MobileDeviceDAO.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/MobileDeviceManagementDAOException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/MobileDeviceManagementDAOFactory.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/MobileFeatureDAO.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/WindowsDAOFactory.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/WindowsEnrollmentTokenDAO.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/WindowsFeatureManagementDAOException.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/impl/WindowsDeviceDAOImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/impl/WindowsEnrollmentTokenDAOImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/impl/WindowsFeatureDAOImpl.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dao/util/MobileDeviceManagementDAOUtil.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileCacheEntry.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileDevice.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileDeviceOperationMapping.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileFeature.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileFeatureProperty.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileOperation.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/dto/MobileOperationProperty.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/util/MobileDeviceManagementSchemaInitializer.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/util/MobileDeviceManagementUtil.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/util/WindowsPluginConstants.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/impl/util/WindowsPluginUtils.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/internal/WindowsDeviceManagementDataHolder.java delete mode 100644 components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/internal/WindowsDeviceManagementServiceComponent.java delete mode 100644 components/mobile-plugins/windows-plugin/pom.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/pom.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_10_Device_management.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_10_Device_management_v1.0.0.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_10_Enrollment_Service.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_10_Enrollment_Service_v1.0.0.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_8.1_Device_Management_Service.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_8.1_Device_Management_Service_v1.0.0.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_8.1_Enrollment_Service.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_8.1_Enrollment_Service_v1.0.0.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_Discovery_Service.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_Discovery_Service_v1.0.0.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_Enrollment_policy_Service.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/apis/admin--Windows_Enrollment_policy_Service_v1.0.0.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/build.properties delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/datasources/windows-datasources.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/dbscripts/plugins/h2.sql delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/dbscripts/plugins/mssql.sql delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/dbscripts/plugins/mysql.sql delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/dbscripts/plugins/oracle.sql delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/dbscripts/plugins/postgresql.sql delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/devicetypes/windows.xml delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/org.wso2.carbon.device.mgt.mobile.windows.feature/src/main/resources/p2.inf delete mode 100644 features/mobile-plugins-feature/windows-plugin-feature/pom.xml diff --git a/components/mobile-plugins/pom.xml b/components/mobile-plugins/pom.xml index c7097b35a..9f5890fde 100644 --- a/components/mobile-plugins/pom.xml +++ b/components/mobile-plugins/pom.xml @@ -34,7 +34,6 @@ android-plugin - windows-plugin diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml deleted file mode 100644 index ee07828e1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/pom.xml +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - windows-plugin - org.wso2.carbon.devicemgt-plugins - 4.2.9-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.mobile.windows.api - WSO2 Carbon - Windows JAX-RS API - Windows JAX-RS API - war - - - - - maven-compiler-plugin - - 1.8 - 1.8 - - 2.3.2 - - - maven-war-plugin - 2.2 - - - api#device-mgt#windows#v1.0 - - - - org.jacoco - jacoco-maven-plugin - - ${basedir}/target/coverage-reports/jacoco-unit.exec - - - - jacoco-initialize - - prepare-agent - - - - jacoco-site - test - - report - - - ${basedir}/target/coverage-reports/jacoco-unit.exec - ${basedir}/target/coverage-reports/site - - - - - - - - - - deploy - - compile - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - compile - - run - - - - - - - - - - - - - - - - - - - client - - test - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - test - - java - - - - - - - - - - - - - org.apache.cxf - cxf-rt-frontend-jaxws - - - org.apache.cxf - cxf-rt-frontend-jaxrs - - - org.apache.cxf - cxf-rt-transports-http - - - org.apache.cxf - cxf-rt-bindings-soap - compile - - - org.apache.cxf - cxf-rt-bindings-http - - - org.slf4j - slf4j-api - - - - - org.apache.ws.security - wss4j - - - org.slf4j - slf4j-api - - - compile - - - org.apache.cxf - cxf-rt-rs-extension-providers - compile - - - org.apache.cxf - cxf-rt-ws-security - - - org.slf4j - slf4j-api - - - - - org.apache.wss4j - wss4j-ws-security-common - - - org.slf4j - slf4j-api - - - - - org.apache.ws.commons.axiom.wso2 - axiom - provided - - - - log4j - log4j - provided - - - org.springframework - spring-web - - - - com.sun.xml.ws - jaxws-rt - provided - - - com.sun.xml.messaging.saaj - saaj-impl - - - org.wso2.orbit.org.bouncycastle - bcpkix-jdk15on - provided - - - org.wso2.orbit.org.bouncycastle - bcprov-jdk15on - provided - - - org.codehaus.plexus - plexus-utils - - - com.madgag.spongycastle - pkix - - - com.madgag.spongycastle - prov - - - com.madgag.spongycastle - core - - - commons-codec - commons-codec - - - joda-time - joda-time - - - commons-io - commons-io - provided - - - javax.ws.rs - jsr311-api - - - org.testng - testng - - - org.wso2.carbon - org.wso2.carbon.logging - - - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.common - provided - - - org.wso2.carbon.devicemgt-plugins - org.wso2.carbon.device.mgt.mobile.windows - provided - - - org.wso2.carbon.devicemgt - org.wso2.carbon.webapp.authenticator.framework - provided - - - org.wso2.carbon.identity - org.wso2.carbon.identity.base - - - org.slf4j - slf4j-api - - - - - org.wso2.carbon.identity.inbound.auth.oauth2 - org.wso2.carbon.identity.oauth.stub - provided - - - org.wso2.carbon.identity.inbound.auth.oauth2 - org.wso2.carbon.identity.oauth - provided - - - org.slf4j - slf4j-api - - - - - javax.cache - cache-api - 0.5 - provided - - - org.slf4j - slf4j-api - - - - - org.wso2.carbon.devicemgt - org.wso2.carbon.device.mgt.core - provided - - - org.wso2.tomcat - tomcat-servlet-api - provided - - - com.google.code.gson - gson - provided - - - org.wso2.carbon.devicemgt - org.wso2.carbon.policy.mgt.core - provided - - - org.wso2.carbon.devicemgt - org.wso2.carbon.certificate.mgt.core - provided - - - org.wso2.carbon.devicemgt - org.wso2.carbon.apimgt.annotations - provided - - - org.codehaus.jettison.wso2 - jettison - 1.1.wso2v1 - - - org.json.wso2 - json - 2.0.0.wso2v1 - - - io.swagger - swagger-annotations - - - io.swagger - swagger-core - - - org.slf4j - slf4j-api - - - - - io.swagger - swagger-jaxrs - - - org.slf4j - slf4j-api - - - - - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/EnterpriseApplication.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/EnterpriseApplication.java deleted file mode 100644 index 2d3a45b90..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/EnterpriseApplication.java +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.bean; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.ProfileConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.*; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationCode; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlGenerator; - -import java.util.ArrayList; -import java.util.List; - -@ApiModel(value = "EnterpriseApplication", description = "Information related to Enterprise Application.") -public class EnterpriseApplication extends WindowsOperation { - - private static Log log = LogFactory.getLog(EnterpriseApplication.class); - - @ApiModelProperty(name = "packageURL", value = "Package URL.") - private HostedAppxApplication hostedAppxApplication; - @ApiModelProperty(name = "packageFamilyName", value = "Package family name.") - private HostedMSIApplication hostedMSIApplication; - - public HostedAppxApplication getHostedAppxApplication() { - return hostedAppxApplication; - } - - public void setHostedAppxApplication(HostedAppxApplication hostedAppxApplication) { - this.hostedAppxApplication = hostedAppxApplication; - } - - public HostedMSIApplication getHostedMSIApplication() { - return hostedMSIApplication; - } - - public void setHostedMSIApplication(HostedMSIApplication hostedMSIApplication) { - this.hostedMSIApplication = hostedMSIApplication; - } - - public void validateRequest() throws ProfileConfigurationException { - if (getHostedAppxApplication() != null) { - if (isNullOrEmpty(getHostedAppxApplication().getpackageUri())) { - throw new ProfileConfigurationException( - "Appx package URL is not found for enterprise app installation"); - } - if (isNullOrEmpty(getHostedAppxApplication().getpackageFamilyName())) { - throw new ProfileConfigurationException( - "Appx package Family Name is not found for enterprise app installation"); - } - } else if (getHostedMSIApplication() != null) { - if (isNullOrEmpty(getHostedMSIApplication().getProductId())) { - throw new ProfileConfigurationException( - "MSI product ID is not found for enterprise app installation"); - } - if (isNullOrEmpty(getHostedMSIApplication().getContentUrl())) { - throw new ProfileConfigurationException( - "MSI product content download URL is not found for enterprise app installation"); - } - if (isNullOrEmpty(getHostedMSIApplication().getFileHash())) { - throw new ProfileConfigurationException( - "MSI product file hash is not found for enterprise app installation"); - } - } else { - throw new ProfileConfigurationException("MSI or APPX payload is not found for enterprise app installation"); - } - } - - @Override - public List createOperationContent(Operation operation) throws WindowsOperationException { - List enterpriseApplicationContent = new ArrayList<>(); - if (getHostedAppxApplication() != null) { - enterpriseApplicationContent.addAll(createAddTag(operation.getId(), - OperationCode.Command.INSTALL_ENTERPRISE_APPX_APPLICATION.getCode(), - PluginConstants.ApplicationInstallProperties.PACKAGE_FAMILY_NAME, - getHostedAppxApplication().getpackageFamilyName(), - PluginConstants.ApplicationInstallProperties.TYPE_APPX)); - enterpriseApplicationContent.addAll(createExecuteTag(operation.getId(), - OperationCode.Command.INSTALL_ENTERPRISE_APPX_APPLICATION.getCode(), - PluginConstants.ApplicationInstallProperties.PACKAGE_FAMILY_NAME, - getHostedAppxApplication().getpackageFamilyName() - + PluginConstants.ApplicationInstallProperties.HOSTED_INSTALL, - PluginConstants.ApplicationInstallProperties.TYPE_APPX)); - } else if (getHostedMSIApplication() != null) { - enterpriseApplicationContent.addAll(createAddTag(operation.getId(), - OperationCode.Command.INSTALL_ENTERPRISE_MSI_APPLICATION.getCode(), - PluginConstants.ApplicationInstallProperties.PRODUCT_ID, getHostedMSIApplication().getProductId(), - PluginConstants.ApplicationInstallProperties.TYPE_MSI)); - enterpriseApplicationContent.addAll(createExecuteTag(operation.getId(), - OperationCode.Command.INSTALL_ENTERPRISE_MSI_APPLICATION.getCode(), - PluginConstants.ApplicationInstallProperties.PRODUCT_ID, getHostedMSIApplication().getProductId(), - PluginConstants.ApplicationInstallProperties.TYPE_MSI)); - } - return enterpriseApplicationContent; - } - - /*** - * Create add objects required for APPX or MSI application installation which then will be converted as AddTag - * elements to add in SyncML XML. - * - * @param operationId used to set as command ID - * @param operationCode is the LocURI - * @param replaceOld operation code placeholder - * @param replaceNew replace value of operation code placeholder - * @param appType APPX or MSI - * @return list of AddTag objects - */ - private List createAddTag(int operationId, String operationCode, String replaceOld, String replaceNew, - String appType) { - List addTagList = new ArrayList<>(); - List itemTagList = new ArrayList<>(); - AddTag addTag = new AddTag(); - ItemTag itemTag = new ItemTag(); - TargetTag targetTag = new TargetTag(); - String locUri = operationCode.replace(replaceOld, replaceNew); - targetTag.setLocURI(locUri); - itemTag.setTarget(targetTag); - itemTagList.add(itemTag); - addTag.setCommandId(operationId); - addTag.setItems(itemTagList); - addTagList.add(addTag); - if (PluginConstants.ApplicationInstallProperties.TYPE_APPX.equals(appType)) { - if (!isNullOrEmpty(getHostedAppxApplication().getCertificateHash()) && !isNullOrEmpty( - getHostedAppxApplication().getEncodedCertificate())) { - List certItemTagList = new ArrayList<>(); - AddTag certAddTag = new AddTag(); - ItemTag certItemTag = new ItemTag(); - MetaTag certMetaTag = new MetaTag(); - TargetTag certTargetTag = new TargetTag(); - certTargetTag.setLocURI(OperationCode.Command.INSTALL_ENTERPRISE_APPX_CERTIFICATE.getCode() - .replace(PluginConstants.ApplicationInstallProperties.CERT_HASH, - getHostedAppxApplication().getCertificateHash())); - certMetaTag.setFormat(Constants.META_FORMAT_B64); - certItemTag.setTarget(certTargetTag); - certItemTag.setMeta(certMetaTag); - certItemTag.setData(getHostedAppxApplication().getEncodedCertificate()); - certItemTagList.add(certItemTag); - certAddTag.setCommandId(operationId); - certAddTag.setItems(certItemTagList); - addTagList.add(certAddTag); - } - } - return addTagList; - } - - /*** - * Create execute objects required for APPX or MSI application installation which then will be converted as - * ExecuteTag elements to add in SyncML XML. - * - * @param operationId used to set as command ID - * @param operationCode is the LocURI - * @param replaceOld operation code placeholder - * @param replaceNew replace value of operation code placeholder - * @param appType APPX or MSI - * @return list of ExecuteTag objects - * @throws WindowsOperationException - */ - private List createExecuteTag(int operationId, String operationCode, String replaceOld, - String replaceNew, String appType) throws WindowsOperationException { - List executeTagList = new ArrayList<>(); - List itemTagList = new ArrayList<>(); - ExecuteTag executeTag = new ExecuteTag(); - ItemTag itemTag = new ItemTag(); - MetaTag metaTag = new MetaTag(); - TargetTag targetTag = new TargetTag(); - Document document; - Element dependencyElement; - targetTag.setLocURI(operationCode.replace(replaceOld, replaceNew)); - metaTag.setFormat(Constants.META_FORMAT_XML); - try { - if (PluginConstants.ApplicationInstallProperties.TYPE_APPX.equals(appType)) { - document = SyncmlGenerator.generateDocument(); - Element applicationElement = document - .createElement(PluginConstants.ApplicationInstallProperties.APPLICATION); - applicationElement.setAttribute(PluginConstants.ApplicationInstallProperties.PACKAGE_URI, - getHostedAppxApplication().getpackageUri()); - if (!isNullOrEmpty(getHostedAppxApplication().getDependencyPackageUri())) { - Element dependenciesElement = document - .createElement(PluginConstants.ApplicationInstallProperties.DEPENDENCIES); - for (String dependency : getHostedAppxApplication().getDependencyPackageUri()) { - dependencyElement = document - .createElement(PluginConstants.ApplicationInstallProperties.DEPENDENCY); - dependencyElement - .setAttribute(PluginConstants.ApplicationInstallProperties.PACKAGE_URI, dependency); - dependenciesElement.appendChild(dependencyElement); - } - applicationElement.appendChild(dependenciesElement); - } - itemTag.setElementData(applicationElement); - } else if (PluginConstants.ApplicationInstallProperties.TYPE_MSI.equals(appType)) { - metaTag.setType(Constants.META_TYPE_TEXT_PLAIN); - document = SyncmlGenerator.generateDocument(); - Element contentURLElement = document - .createElement(PluginConstants.ApplicationInstallProperties.CONTENT_URL); - contentURLElement.setTextContent(getHostedMSIApplication().getContentUrl()); - Element contentURLListElement = document - .createElement(PluginConstants.ApplicationInstallProperties.CONTENT_URL_LIST); - contentURLListElement.appendChild(contentURLElement); - Element downloadElement = document.createElement(PluginConstants.ApplicationInstallProperties.DOWNLOAD); - downloadElement.appendChild(contentURLListElement); - Element fileHashElement = document - .createElement(PluginConstants.ApplicationInstallProperties.FILE_HASH); - fileHashElement.setTextContent(getHostedMSIApplication().getFileHash()); - Element validationElement = document - .createElement(PluginConstants.ApplicationInstallProperties.VALIDATION); - validationElement.appendChild(fileHashElement); - Element enforcementElement = document - .createElement(PluginConstants.ApplicationInstallProperties.ENFORCEMENT); - Element commandLineElement = document - .createElement(PluginConstants.ApplicationInstallProperties.COMMAND_LINE); - commandLineElement.setTextContent(PluginConstants.ApplicationInstallProperties.COMMAND_LINE_VALUE); - enforcementElement.appendChild(commandLineElement); - Element timeOutElement = document.createElement(PluginConstants.ApplicationInstallProperties.TIMEOUT); - timeOutElement.setTextContent(PluginConstants.ApplicationInstallProperties.TIMEOUT_VALUE); - enforcementElement.appendChild(timeOutElement); - Element retryCountElement = document - .createElement(PluginConstants.ApplicationInstallProperties.RETRY_COUNT); - retryCountElement.setTextContent(PluginConstants.ApplicationInstallProperties.RETRY_COUNT_VALUE); - enforcementElement.appendChild(retryCountElement); - Element retryIntervalElement = document - .createElement(PluginConstants.ApplicationInstallProperties.RETRY_INTERVAL); - retryIntervalElement.setTextContent(PluginConstants.ApplicationInstallProperties.RETRY_INTERVAL_VALUE); - enforcementElement.appendChild(retryIntervalElement); - Element productElement = document.createElement(PluginConstants.ApplicationInstallProperties.PRODUCT); - productElement.setAttribute(PluginConstants.ApplicationInstallProperties.VERSION, - PluginConstants.ApplicationInstallProperties.VERSION_VALUE); - productElement.appendChild(downloadElement); - productElement.appendChild(validationElement); - productElement.appendChild(enforcementElement); - Element msiInstallJobElement = document - .createElement(PluginConstants.ApplicationInstallProperties.MSI_INSTALL_JOB); - msiInstallJobElement.setAttribute(PluginConstants.ApplicationInstallProperties.ID, - PluginConstants.ApplicationInstallProperties.URL_ESCAPED_OPEN_CURLY + getHostedMSIApplication() - .getProductId() + PluginConstants.ApplicationInstallProperties.URL_ESCAPED_CLOSE_CURLY); - msiInstallJobElement.appendChild(productElement); - itemTag.setElementData(msiInstallJobElement); - } - } catch (SyncmlOperationException e) { - String errorMsg = "Error occurred while generating a document to add as a node to Data element of Execute " - + "command which is required to Install " + appType + " application."; - log.error(errorMsg); - throw new WindowsOperationException(errorMsg, e); - } - itemTag.setTarget(targetTag); - itemTag.setMeta(metaTag); - itemTagList.add(itemTag); - executeTag.setCommandId(operationId); - executeTag.setItems(itemTagList); - executeTagList.add(executeTag); - return executeTagList; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedAppxApplication.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedAppxApplication.java deleted file mode 100644 index 61220059d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedAppxApplication.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.bean; - -import io.swagger.annotations.ApiModelProperty; - -import java.util.List; - -public class HostedAppxApplication { - - @ApiModelProperty(name = "packageUri", value = "Package URL.", required = true) - private String packageUri; - @ApiModelProperty(name = "packageFamilyName", value = "Package family name.", required = true) - private String packageFamilyName; - @ApiModelProperty(name = "dependencyPackageURLs", value = "Dependency Package URLs.") - private List dependencyPackageUri; - @ApiModelProperty(name = "certificateHash", value = "Application signed SHA1 certificate hash.") - private String certificateHash; - @ApiModelProperty(name = "encodedCertificate", value = "Application signed Base64 encoded certificate.") - private String encodedCertificate; - - public String getpackageUri() { - return packageUri; - } - - public void setpackageUri (String packageUri) { - this.packageUri = packageUri; - } - - public String getpackageFamilyName() { - return packageFamilyName; - } - - public void setpackageFamilyName(String packageFamilyName) { - this.packageFamilyName = packageFamilyName; - } - - public List getDependencyPackageUri() { - return dependencyPackageUri; - } - - public void setDependencyPackageUri(List dependencyPackageUri) { - this.dependencyPackageUri = dependencyPackageUri; - } - - public String getCertificateHash() { - return certificateHash; - } - - public void setCertificateHash(String certificateHash) { - this.certificateHash = certificateHash; - } - - public String getEncodedCertificate() { - return encodedCertificate; - } - - public void setEncodedCertificate(String encodedCertificate) { - this.encodedCertificate = encodedCertificate; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedMSIApplication.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedMSIApplication.java deleted file mode 100644 index 75e80f581..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/HostedMSIApplication.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.bean; - -import io.swagger.annotations.ApiModelProperty; - -public class HostedMSIApplication { - - @ApiModelProperty(name = "productId", value = "Product ID.", required = true) - private String productId; - @ApiModelProperty(name = "contentUrl", value = "Content URL.", required = true) - private String contentUrl; - @ApiModelProperty(name = "fileHash", value = "File Hash.", required = true) - private String fileHash; - - public String getProductId() { - return productId; - } - - public void setProductId(String productId) { - this.productId = productId; - } - - public String getContentUrl() { - return contentUrl; - } - - public void setContentUrl(String contentUrl) { - this.contentUrl = contentUrl; - } - - public String getFileHash() { - return fileHash; - } - - public void setFileHash(String fileHash) { - this.fileHash = fileHash; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/WindowsOperation.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/WindowsOperation.java deleted file mode 100644 index 0466f818c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/WindowsOperation.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.bean; - -import com.google.gson.Gson; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; - -import java.util.List; - -/*** - * This abstract class is used for extending generic functions with regard to operation. - */ -public abstract class WindowsOperation { - - public abstract List createOperationContent(Operation operation) throws WindowsOperationException; - - /*** - * Converts operation object to a json format. - * - * @return JSON formatted String - */ - public String toJSON() { - Gson gson = new Gson(); - return gson.toJson(this); - } - - /** - * Checks if the given string is null or empty - * - * @param value string value to check - * @return boolean value of null or empty - */ - public boolean isNullOrEmpty(String value) { - return value == null || value.trim().isEmpty(); - } - - /*** - * Checks if the given list is null or empty - * - * @param value string list value to check - * @return boolean value of null or empty - */ - public boolean isNullOrEmpty(List value) { - return value == null || value.isEmpty(); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/wrapper/EnterpriseApplicationBeanWrapper.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/wrapper/EnterpriseApplicationBeanWrapper.java deleted file mode 100644 index cd3983083..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/bean/wrapper/EnterpriseApplicationBeanWrapper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.bean.wrapper; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import org.wso2.carbon.device.mgt.mobile.windows.api.bean.EnterpriseApplication; - -import java.util.List; - -@ApiModel(value = "EnterpriseApplicationBeanWrapper", - description = "Information related to Enterprise Application.") -public class EnterpriseApplicationBeanWrapper { - - @ApiModelProperty(name = "deviceIDs", - value = "List of device Ids to be need to execute operation.", required = true) - private List deviceIDs; - @ApiModelProperty(name = "operation", - value = "Enterprise Application.", required = true) - private EnterpriseApplication operation; - - public List getDeviceIDs() { - return deviceIDs; - } - - public void setDeviceIDs(List deviceIDs) { - this.deviceIDs = deviceIDs; - } - - public EnterpriseApplication getOperation() { - return operation; - } - - public void setOperation(EnterpriseApplication operation) { - this.operation = operation; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java deleted file mode 100644 index bbe2c7f54..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/PluginConstants.java +++ /dev/null @@ -1,422 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common; - -/** - * PluginConstants class for Windows plugin. This class has inner classes for containing constants for - * each service. - */ -public final class PluginConstants { - - //Service endpoints - public static final String DISCOVERY_SERVICE_ENDPOINT = - "org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.DiscoveryService"; - public static final String CERTIFICATE_ENROLLMENT_SERVICE_ENDPOINT = - "org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.CertificateEnrollmentService"; - public static final String CERTIFICATE_ENROLLMENT_POLICY_SERVICE_ENDPOINT = - "org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.CertificateEnrollmentPolicyService"; - public static final String ENROLLMENT_SERVICE_ENDPOINT = - "org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.EnrollmentService"; - - //Services' target namespaces - public static final String DISCOVERY_SERVICE_TARGET_NAMESPACE = - "http://schemas.microsoft.com/windows/management/2012/01/enrollment"; - public static final String DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE = - "http://schemas.microsoft.com/windows/pki/2009/01/enrollment/RSTRC"; - public static final String CERTIFICATE_ENROLLMENT_POLICY_SERVICE_TARGET_NAMESPACE = - "http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy"; - - //Certificate enrollment service urls and namespaces - public static final String WS_TRUST_TARGET_NAMESPACE = - "http://docs.oasis-open.org/ws-sx/ws-trust/200512"; - public static final String WS_SECURITY_TARGET_NAMESPACE = - "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; - public static final String SOAP_AUTHORIZATION_TARGET_NAMESPACE = - "http://schemas.xmlsoap.org/ws/2006/12/authorization"; - - //Certificate enrollment policy service urls and namespaces - public static final String ENROLLMENT_POLICY_TARGET_NAMESPACE = - "http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy"; - public static final String REQUEST_WRAPPER_CLASS_NAME = - "com.microsoft.schemas.windows.pki._2009._01.enrollmentpolicy.GetPolicies"; - public static final String RESPONSE_WRAPPER_CLASS_NAME = - "com.microsoft.schemas.windows.pki._2009._01.enrollmentpolicy.GetPoliciesResponse"; - - //Servlet Context attributes names - public static final String CONTEXT_WAP_PROVISIONING_FILE = "WAP_PROVISIONING_FILE"; - - //Message handler constants - public static final String CONTENT_LENGTH = "Content-Length"; - public static final String SECURITY = "Security"; - public static final String TO = "To"; - public static final String CXF_REQUEST_URI = "org.apache.cxf.request.uri"; - - //Web services media types - public static final String SYNCML_MEDIA_TYPE = "application/vnd.syncml.dm+xml"; - - /** - * Discovery service related other constants - */ - public final class Discovery { - private Discovery() { - throw new AssertionError(); - } - - public static final String DEVICE_ENROLLMENT_SUBDOMAIN = "https://EnterpriseEnrollment."; - public static final String CERTIFICATE_ENROLLMENT_POLICY_SERVICE_URL = - "/ENROLLMENTSERVER/PolicyEnrollmentWebservice.svc"; - public static final String CERTIFICATE_ENROLLMENT_SERVICE_URL = - "/ENROLLMENTSERVER/DeviceEnrollmentWebservice.svc"; - public static final String ENROLLMENT_SERVICE_URL = - "/ENROLLMENTSERVER/Win10DeviceEnrollmentWebservice.svc"; - public static final String WAB_URL = "/windows-web-agent/enrollments/windows/login-agent"; - } - - /** - * Certificate enrolment policy service related constants - */ - public final class CertificateEnrolmentPolicy { - private CertificateEnrolmentPolicy() { - throw new AssertionError(); - } - - public static final int MINIMAL_KEY_LENGTH = 2048; - public static final int POLICY_SCHEMA = 3; - public static final int HASH_ALGORITHM_OID_REFERENCE = 0; - public static final int OID_REFERENCE = 0; - public static final String OID = "1.3.14.3.2.29"; - public static final String OID_DEFAULT_NAME = "szOID_OIWSEC_sha1RSASign"; - public static final int OID_GROUP = 1; - public static final int OID_REFERENCE_ID = 0; - } - - /** - * Certificate enrollment Service related constants. - */ - public final class CertificateEnrolment { - private CertificateEnrolment() { - throw new AssertionError(); - } - - public static final String TOKEN_TYPE = - "http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentToken"; - public static final String PARM = "parm"; - public static final String TYPE = "type"; - public static final String VALUE = "value"; - public static final String VALUE_TYPE = - "http://schemas.microsoft.com/5.0.0.0/ConfigurationManager/Enrollment/DeviceEnrollmentProvisionDoc"; - public static final String ENCODING_TYPE = - "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#base64binary"; - public static final String CA_CERT = "cacert"; - public static final String X_509 = "X.509"; - public static final String WAP_PROVISIONING_XML = "wap-provisioning.xml"; - public static final String PROVIDER = "BC"; - public static final String ALGORITHM = "SHA1withRSA"; - public static final String JKS = "JKS"; - public static final String SECURITY = "Security"; - public static final String WSS_SECURITY_UTILITY = - "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"; - public static final String TIMESTAMP_ID = "Id"; - public static final String TIMESTAMP_U = "u"; - public static final String TIMESTAMP = "Timestamp"; - public static final String TIMESTAMP_0 = "_0"; - public static final String CREATED = "Created"; - public static final String EXPIRES = "Expires"; - public static final String UTF_8 = "utf-8"; - - public static final int DOMAIN_SEGMENT = 1; - public static final int EMAIL_SEGMENT = 0; - public static final int REQUEST_ID = 0; - public static final int CA_CERTIFICATE_POSITION = 0; - public static final int SIGNED_CERTIFICATE_POSITION = 1; - public static final int APPAUTH_USERNAME_POSITION = 21; - public static final int APPAUTH_PASSWORD_POSITION = 22; - public static final int POLLING_FREQUENCY_POSITION = 24; - public static final int SYNCML_PROVISIONING_ADDR_POSITION = 8; - public static final int DOMAIN_POSITION = 7; - public static final String ENROLL_SUBDOMAIN = "https://EnterpriseEnrollment."; - public static final String SYNCML_PROVISIONING_SERVICE_URL = "/Syncml/initialquery"; - public static final String SYNCML_PROVISIONING_WIN10_SERVICE_URL = "/devicemgt"; - public static final String ENROLLMENT_DISPOSITION_MESSAGE = "http://schemas.microsoft.com/windows/pki/" + - "2009/01/enrollment"; - } - - /** - * SynclML service related constants. - */ - public final class SyncML { - private SyncML() { - throw new AssertionError(); - } - - public static final String SYNCML_SOURCE = "Source"; - public static final String SYNCML_DATA = "Data"; - public static final String SYNCML_META = "Meta"; - public static final String SYNCML_CMD = "Cmd"; - public static final String SYNCML_CHAL = "ChallengeTag"; - public static final String SYNCML_CMD_ID = "CmdID"; - public static final String SYNCML_CMD_REF = "CmdRef"; - public static final String SYNCML_MESSAGE_REF = "MsgRef"; - public static final String SYNCML_LOCATION_URI = "LocURI"; - public static final String SYNCML_TARGET_REF = "TargetRef"; - - public static final int SYNCML_FIRST_MESSAGE_ID = 1; - public static final int SYNCML_SECOND_MESSAGE_ID = 2; - public static final int SYNCML_FIRST_SESSION_ID = 1; - public static final int SYNCML_SECOND_SESSION_ID = 2; - public static final int OSVERSION_POSITION = 0; - public static final int DEVICE_ID_POSITION = 0; - public static final int DEVICE_MODEL_POSITION = 2; - public static final int DEVICE_MAN_POSITION = 1; - public static final int DEVICE_MOD_VER_POSITION = 3; - public static final int DEVICE_LANG_POSITION = 4; - public static final int IMSI_POSITION = 1; - public static final int IMEI_POSITION = 2; - public static final int VENDOR_POSITION = 4; - public static final int MODEL_POSITION = 5; - public static final int MAC_ADDRESS_POSITION = 7; - public static final int RESOLUTION_POSITION = 8; - public static final int DEVICE_NAME_POSITION = 10; - public static final String SYNCML_DATA_ONE = "1"; - public static final String SYNCML_DATA_ZERO = "0"; - public static final String OS_VERSION = "OS_VERSION"; - public static final String IMSI = "IMSI"; - public static final String IMEI = "IMEI"; - public static final String VENDOR = "VENDOR"; - public static final String MODEL = "DEVICE_MODEL"; - public static final String MAC_ADDRESS = "MAC_ADDRESS"; - public static final String DEVICE_INFO = "DEVICE_INFO"; - public static final String DEVICE_NAME = "DEVICE_NAME"; - public static final String SOFTWARE_VERSION = "SOFTWARE_VERSION"; - public static final String DEV_ID = "DEV_ID"; - public static final String MANUFACTURER = "MANUFACTURER"; - public static final String LANGUAGE = "LANGUAGE"; - public static final String RESOLUTION = "RESOLUTION"; - - // windows 10 codes - public static final String TOTAL_RAM = "TOTAL_RAM";// available ram in MB - public static final String TOTAL_STORAGE = "TOTAL_STORAGE"; - public static final String OS_PLATFORM = "OS_PLATFORM"; - public static final String DEVICE_TYPE = "DEVICE_TYPE"; - public static final String BATTERY_QUERY = "BATTERY_QUERY"; - public static final String BATTERY_STATUS = "BATTERY_STATUS"; - public static final String BATTERY_CHARGE_REMAINING = "BATTERY_CHARGE_REMAINING"; - public static final String BATTERY_ESTIMATED_RUNTIME = "BATTERY_ESTIMATED_RUNTIME"; - public static final String MOBILE_ID = "MOBILE_ID"; - public static final String LONGITUDE = "LONGITUDE"; - public static final String LATITUDE = "LATITUDE"; - - public static final String DEVICE_UNENROLL_META_TYPE = "com.microsoft:mdm.unenrollment.userrequest"; - } - - /** - * Windows device constants. - */ - public final class DeviceConstants { - private DeviceConstants() { - throw new AssertionError(); - } - - public static final String DEVICE_ID_NOT_FOUND = "Device Id not found for device found at %s"; - public static final String DEVICE_ID_SERVICE_NOT_FOUND = - "Issue in retrieving device management service instance for device found at %s"; - } - - /** - * Device Operation codes. - */ - public final class OperationCodes { - private OperationCodes() { - throw new AssertionError(); - } - - public static final String DEVICE_LOCK = "DEVICE_LOCK"; - public static final String DISENROLL = "DISENROLL"; - public static final String DEVICE_RING = "DEVICE_RING"; - public static final String WIPE_DATA = "WIPE_DATA"; - public static final String ENCRYPT_STORAGE = "ENCRYPT_STORAGE"; - public static final String LOCK_RESET = "LOCK_RESET"; - public static final String PIN_CODE = "LOCK_PIN"; - public static final String CAMERA = "CAMERA"; - public static final String PASSCODE_POLICY = "PASSCODE_POLICY"; - public static final String PASSWORD_EXPIRE = "PASSWORD_EXPIRE"; - public static final String PASSWORD_HISTORY = "PASSWORD_HISTORY"; - public static final String MAX_PASSWORD_INACTIVE_TIME = "MAX_PASSWORD_INACTIVE_TIME"; - public static final String MIN_PASSWORD_COMPLEX_CHARACTERS = "MIN_PASSWORD_COMPLEX_CHARACTERS"; - public static final String ALPHANUMERIC_PASSWORD = "ALPHANUMERIC_PASSWORD"; - public static final String SIMPLE_PASSWORD = "SIMPLE_PASSWORD"; - public static final String MIN_PASSWORD_LENGTH = "MIN_PASSWORD_LENGTH"; - public static final String DEVICE_PASSWORD_ENABLE = "DEVICE_PASSWORD_ENABLE"; - public static final String PASSWORD_MAX_FAIL_ATTEMPTS = "PASSWORD_MAX_FAIL_ATTEMPTS"; - public static final String MONITOR = "MONITOR"; - public static final String CAMERA_STATUS = "CAMERA_STATUS"; - public static final String POLICY_BUNDLE = "POLICY_BUNDLE"; - public static final String ENCRYPT_STORAGE_STATUS = "ENCRYPT_STORAGE_STATUS"; - public static final String DEVICE_PASSWORD_STATUS = "DEVICE_PASSWORD_STATUS"; - public static final String DEVICE_PASSCODE_DELETE = "DEVICE_PASSCODE_DELETE"; - public static final String DEVICE_INFO = "DEVICE_INFO"; - public static final String POLICY_REVOKE = "POLICY_REVOKE"; - public static final String DEVICE_LOCATION = "DEVICE_LOCATION"; - public static final String LONGITUDE = "LONGITUDE"; - public static final String LATITUDE = "LATITUDE"; - public static final String DEVICE_REBOOT = "DEVICE_REBOOT"; - public static final String INSTALL_ENTERPRISE_APPLICATION = "INSTALL_ENTERPRISE_APPLICATION"; - } - - /** - * Plugin response status code constants. - */ - public final class StatusCodes { - private StatusCodes() { - throw new AssertionError(); - } - - public static final int MULTI_STATUS_HTTP_CODE = 207; - - } - - public final class WindowsConstant { - public static final String DEVICE_TYPE_WINDOWS = "windows"; - public static final String HEADER_CONTENT_TYPE = "Content-Type"; - public static final String APPLICATION_JSON = "application/json"; - } - - /** - * Tenant Configuration related constants. - */ - public final class TenantConfigProperties { - private TenantConfigProperties() { - throw new AssertionError(); - } - - public static final String LICENSE_KEY = "windowsLicense"; - public static final String LANGUAGE_US = "en_US"; - public static final String CONTENT_TYPE_TEXT = "text"; - public static final String NOTIFIER_FREQUENCY = "notifierFrequency"; - public static final String DEFAULT_FREQUENCY = "8"; - public static final String AUTH_POLICY = "authPolicy"; - public static final String DEFAULT_AUTH_POLICY = "Federated"; - } - - /** - * Policy Configuration related constants. - */ - public final class PolicyConfigProperties { - private PolicyConfigProperties() { - throw new AssertionError(); - } - - public static final String POLICY_ENABLE = "enabled"; - public static final String ENCRYPTED_ENABLE = "encrypted"; - public static final String ENABLE_PASSWORD = "enablePassword"; - } - - /** - * Authentication related constants. - */ - public final class AuthenticatorProperties { - private AuthenticatorProperties() { throw new AssertionError(); } - public static final String MAX_CONNECTION_PER_HOST = "MaxConnectionsPerHost"; - public static final String MAX_TOTAL_CONNECTIONS = "MaxTotalConnections"; - } - - /** - * Windows version(8.1/10) related constants. - */ - public final class WindowsVersionProperties { - private WindowsVersionProperties() { - throw new AssertionError(); - } - public static final String REQUESTED_WIN10_VERSION = "3.0"; - public static final String REQUESTED_WIN81_VERSION = "2.0"; - } - - /** - * Windows10 enrollment property constants. - */ - - public final class WindowsEnrollmentProperties { - private WindowsEnrollmentProperties() { - throw new AssertionError(); - } - public static final String DEVICE_NAME = "DeviceName"; - public static final String DEVICE_VERSION = "OSVersion"; - public static final String DEVICE_ID = "DeviceID"; - public static final String IMEI = "MobileEquipmentId"; - public static final String TYPE = "DeviceType"; - } - - public final class ApplicationInstallProperties { - private ApplicationInstallProperties() { - throw new AssertionError(); - } - public static final String APPLICATION = "Application"; - public static final String TYPE_APPX = "APPX"; - public static final String TYPE_MSI = "MSI"; - public static final String PACKAGE_FAMILY_NAME = "{PackageFamilyName}"; - public static final String PRODUCT_ID = "{ProductId}"; - public static final String CERT_HASH = "{CertHash}"; - public static final String HOSTED_INSTALL = "/HostedInstall"; - - //XML Related Constants - public static final String ID = "id"; - public static final String PACKAGE_URI = "PackageUri"; - public static final String DEPENDENCIES = "Dependencies"; - public static final String DEPENDENCY = "Dependency"; - public static final String CONTENT_URL = "ContentURL"; - public static final String CONTENT_URL_LIST = "ContentURLList"; - public static final String DOWNLOAD = "Download"; - public static final String COMMAND_LINE = "CommandLine"; - public static final String COMMAND_LINE_VALUE = "/quiet"; - public static final String FILE_HASH = "FileHash"; - public static final String VALIDATION = "Validation"; - public static final String ENFORCEMENT = "Enforcement"; - public static final String TIMEOUT = "TimeOut"; - public static final String RETRY_COUNT = "RetryCount"; - public static final String RETRY_INTERVAL = "RetryInterval"; - public static final String PRODUCT = "Product"; - public static final String MSI_INSTALL_JOB = "MsiInstallJob"; - public static final String VERSION = "version"; - public static final String VERSION_VALUE = "1.0.0"; - public static final String TIMEOUT_VALUE = "5"; - public static final String RETRY_COUNT_VALUE = "3"; - public static final String RETRY_INTERVAL_VALUE = "5"; - public static final String LICENSE = "License"; - public static final String CONTENT = "Content"; - public static final String URL_ESCAPED_OPEN_CURLY = "%7B"; - public static final String URL_ESCAPED_CLOSE_CURLY = "%7D"; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/SyncmlCommandType.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/SyncmlCommandType.java deleted file mode 100644 index 9da5a68af..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/SyncmlCommandType.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common; - -public enum SyncmlCommandType { - - WIFI("WIFI"); - - private final String commandType; - - SyncmlCommandType(final String commandType) { - this.commandType = commandType; - } - - public String getValue() { - return this.commandType; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuth2TokenValidator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuth2TokenValidator.java deleted file mode 100644 index ceef5c154..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuth2TokenValidator.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.OAuthTokenValidationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.OAuthValidationResponse; - -/** - * Declares the contract for OAuth2TokenValidator implementations. - */ -public interface OAuth2TokenValidator { - /** - * This method gets a string accessToken and validates it and generate the OAuthValidationResponse - * containing the validity and user details if valid. - * - * @param accessToken which need to be validated. - * @param resource which need to be validated. - * @return OAuthValidationResponse with the validated results. - */ - OAuthValidationResponse validateToken(String accessToken, String resource) throws OAuthTokenValidationException; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthConstants.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthConstants.java deleted file mode 100644 index 28e7cb637..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthConstants.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator; - -import org.wso2.carbon.utils.CarbonUtils; - -import java.io.File; - -/** - * Defines constants to be used inside oauth validators. - */ -public class OAuthConstants { - - public static final String AUTHORIZATION_HEADER_PREFIX_BEARER = "Bearer"; - public static final String AUTHORIZATION_HEADER_PREFIX_BASIC = "Basic"; - public static final String BEARER_TOKEN_TYPE = "bearer"; - public static final String BEARER_TOKEN_IDENTIFIER = "token"; - public static final String AUTHENTICATOR_NAME = "OAuthAuthenticator"; - public static final String RESOURCE_KEY = "resource"; - public static final String AUTHENTICATOR_CONFIG_PATH = CarbonUtils.getEtcCarbonConfigDirPath() + - File.separator + "webapp-authenticator-config.xml"; - private static final String AUTHENTICATOR_CONFIG_SCHEMA_PATH = - "resources/config/schema/webapp-authenticator-config-schema.xsd"; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthTokenValidationStubFactory.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthTokenValidationStubFactory.java deleted file mode 100644 index 521a9d7a8..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthTokenValidationStubFactory.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.transport.http.HTTPConstants; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.httpclient.Header; -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpConnectionManager; -import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; -import org.apache.commons.httpclient.params.HttpConnectionManagerParams; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.commons.pool.PoolableObjectFactory; -import org.apache.http.conn.HttpClientConnectionManager; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.OAuthTokenValidationException; -import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -public class OAuthTokenValidationStubFactory implements PoolableObjectFactory { - private String url; - private String basicAuthHeader; - private HttpClient httpClient; - - private static final Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.OAuthTokenValidationStubFactory.class); - - public OAuthTokenValidationStubFactory(String url, String adminUsername, String adminPassword, - Properties properties) { - this.validateUrl(url); - this.url = url; - - this.validateCredentials(adminUsername, adminPassword); - this.basicAuthHeader = new String(Base64.encodeBase64((adminUsername + ":" + adminPassword).getBytes())); - - HttpConnectionManager connectionManager = this.createConnectionManager(properties); - this.httpClient = new HttpClient(connectionManager); - } - - /** - * Creates an instance of MultiThreadedHttpConnectionManager using HttpClient 3.x APIs - * - * @param properties Properties to configure MultiThreadedHttpConnectionManager - * @return An instance of properly configured MultiThreadedHttpConnectionManager - */ - private HttpConnectionManager createConnectionManager(Properties properties) { - HttpConnectionManagerParams params = new HttpConnectionManagerParams(); - if (properties == null || properties.isEmpty()) { - throw new IllegalArgumentException("Parameters required to initialize HttpClient instances " + - "associated with OAuth token validation service stub are not provided"); - } - String maxConnectionsPerHostParam = properties.getProperty(PluginConstants. - AuthenticatorProperties.MAX_CONNECTION_PER_HOST); - if (maxConnectionsPerHostParam == null || maxConnectionsPerHostParam.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("MaxConnectionsPerHost parameter is not explicitly defined. Therefore, the default, " + - "which is 2, will be used"); - } - } else { - params.setDefaultMaxConnectionsPerHost(Integer.parseInt(maxConnectionsPerHostParam)); - } - - String maxTotalConnectionsParam = properties.getProperty(PluginConstants. - AuthenticatorProperties.MAX_TOTAL_CONNECTIONS); - if (maxTotalConnectionsParam == null || maxTotalConnectionsParam.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("MaxTotalConnections parameter is not explicitly defined. Therefore, the default, " + - "which is 10, will be used"); - } - } else { - params.setMaxTotalConnections(Integer.parseInt(maxTotalConnectionsParam)); - } - HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); - connectionManager.setParams(params); - return connectionManager; - } - - /** - * Creates an instance of PoolingHttpClientConnectionManager using HttpClient 4.x APIs - * - * @param properties Properties to configure PoolingHttpClientConnectionManager - * @return An instance of properly configured PoolingHttpClientConnectionManager - */ - private HttpClientConnectionManager createClientConnectionManager(Properties properties) { - PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); - if (properties != null) { - String maxConnectionsPerHostParam = properties.getProperty(PluginConstants. - AuthenticatorProperties.MAX_CONNECTION_PER_HOST); - if (maxConnectionsPerHostParam == null || maxConnectionsPerHostParam.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("MaxConnectionsPerHost parameter is not explicitly defined. Therefore, the default, " + - "which is 2, will be used"); - } - } else { - connectionManager.setDefaultMaxPerRoute(Integer.parseInt(maxConnectionsPerHostParam)); - } - - String maxTotalConnectionsParam = properties.getProperty(PluginConstants. - AuthenticatorProperties.MAX_TOTAL_CONNECTIONS); - if (maxTotalConnectionsParam == null || maxTotalConnectionsParam.isEmpty()) { - if (log.isDebugEnabled()) { - log.debug("MaxTotalConnections parameter is not explicitly defined. Therefore, the default, " + - "which is 10, will be used"); - } - } else { - connectionManager.setMaxTotal(Integer.parseInt(maxTotalConnectionsParam)); - } - } else { - if (log.isDebugEnabled()) { - log.debug("Properties, i.e. MaxTotalConnections/MaxConnectionsPerHost, required to tune the " + - "HttpClient used in OAuth token validation service stub instances are not provided. " + - "Therefore, the defaults, 2/10 respectively, will be used"); - } - } - return connectionManager; - } - - @Override - public Object makeObject() throws Exception { - return this.createStub(); - } - - @Override - public void destroyObject(Object o) throws Exception { - - } - - @Override - public boolean validateObject(Object o) { - return true; - } - - @Override - public void activateObject(Object o) throws Exception { - if (log.isDebugEnabled()) { - log.debug("OAuth token validate stub instance is activated"); - } - } - - @Override - public void passivateObject(Object o) throws Exception { - if (o instanceof OAuth2TokenValidationServiceStub) { - OAuth2TokenValidationServiceStub stub = (OAuth2TokenValidationServiceStub) o; - stub._getServiceClient().cleanupTransport(); - } - } - - private OAuth2TokenValidationServiceStub createStub() throws OAuthTokenValidationException { - OAuth2TokenValidationServiceStub stub; - try { - stub = new OAuth2TokenValidationServiceStub(url); - ServiceClient client = stub._getServiceClient(); - client.getServiceContext().getConfigurationContext().setProperty( - HTTPConstants.CACHED_HTTP_CLIENT, httpClient); - - List
headerList = new ArrayList<>(); - Header header = new Header(); - header.setName(HTTPConstants.HEADER_AUTHORIZATION); - header.setValue(OAuthConstants.AUTHORIZATION_HEADER_PREFIX_BASIC + " " + basicAuthHeader); - headerList.add(header); - - Options options = client.getOptions(); - options.setProperty(HTTPConstants.HTTP_HEADERS, headerList); - options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "true"); - client.setOptions(options); - } catch (AxisFault axisFault) { - throw new OAuthTokenValidationException("Error occurred while creating the " + - "OAuth2TokenValidationServiceStub.", axisFault); - } - return stub; - } - - private void validateUrl(String url) { - if (url == null || url.isEmpty()) { - throw new IllegalArgumentException("Url provided as the endpoint of the OAuth token validation service " + - "is null"); - } - } - - private void validateCredentials(String adminUsername, String adminPassword) { - if (adminUsername == null || adminUsername.isEmpty()) { - throw new IllegalArgumentException("An appropriate username required to initialize OAuth token " + - "validation service stub factory hasn't been provided"); - } - if (adminPassword == null || adminPassword.isEmpty()) { - throw new IllegalArgumentException("An appropriate password required to initialize OAuth token " + - "validation service stub factory hasn't been provided"); - } - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthValidatorFactory.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthValidatorFactory.java deleted file mode 100644 index ff7b03549..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/OAuthValidatorFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.impl.LocalOAuthValidator; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.impl.RemoteOAuthValidator; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.webapp.authenticator.framework.config.AuthenticatorConfig; - -import java.util.Properties; - -/** - * The class validate the configurations and provide the most suitable implementation according to the configuration. - * Factory class for OAuthValidator. - */ -public class OAuthValidatorFactory { - - private static Properties authenticatorProperties; - - public static OAuth2TokenValidator getValidator() { - Properties authenticatorProperties = getAuthenticatorProperties(); - boolean isRemote = Boolean.parseBoolean(authenticatorProperties.getProperty("IsRemote")); - if (isRemote) { - String url = authenticatorProperties.getProperty("TokenValidationEndpointUrl"); - if ((url == null) || (url.isEmpty())) { - throw new IllegalStateException("OAuth token validation endpoint url is not provided"); - } - String adminUsername = authenticatorProperties.getProperty("Username"); - if (adminUsername == null) { - throw new IllegalStateException("Username to connect to the OAuth token validation endpoint " + - "is not provided"); - } - - String adminPassword = authenticatorProperties.getProperty("Password"); - if (adminPassword == null) { - throw new IllegalStateException("Password to connect to the OAuth token validation endpoint " + - "is not provided"); - } - - Properties validatorProperties = new Properties(); - validatorProperties.setProperty("MaxTotalConnections", authenticatorProperties.getProperty("MaxTotalConnections")); - validatorProperties.setProperty("MaxConnectionsPerHost", authenticatorProperties.getProperty("MaxConnectionsPerHost")); - if ((url != null) && (!url.trim().isEmpty())) { - url = url + "/services/OAuth2TokenValidationService.OAuth2TokenValidationServiceHttpsSoap12Endpoint/"; - return new RemoteOAuthValidator(url, adminUsername, adminPassword, validatorProperties); - } - throw new IllegalStateException("Remote server host can't be empty in OAuthAuthenticator configuration."); - } - return new LocalOAuthValidator(); - } - - private static Properties getAuthenticatorProperties() { - if (authenticatorProperties == null) { - AuthenticatorConfig config = WindowsAPIUtils.getBSTAuthenticatorConfig(); - if ((config.getParams() != null) && (!config.getParams().isEmpty())) { - Properties properties = new Properties(); - for (AuthenticatorConfig.Parameter param : config.getParams()) { - properties.setProperty(param.getName(), param.getValue()); - } - authenticatorProperties = properties; - } - } - return authenticatorProperties; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/LocalOAuthValidator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/LocalOAuthValidator.java deleted file mode 100644 index f627ad7f6..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/LocalOAuthValidator.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.impl; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.OAuth2TokenValidator; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.OAuthConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.OAuthTokenValidationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.OAuthValidationResponse; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.identity.oauth2.dto.OAuth2TokenValidationRequestDTO; -import org.wso2.carbon.utils.multitenancy.MultitenantUtils; - -/** - * Handles the OAuth2 token validation from the same server using OSGi services. - */ -public class LocalOAuthValidator implements OAuth2TokenValidator { - @Override - public OAuthValidationResponse validateToken(String accessToken, String resource) - throws OAuthTokenValidationException { - - OAuth2TokenValidationRequestDTO validationRequest = new OAuth2TokenValidationRequestDTO(); - OAuth2TokenValidationRequestDTO.OAuth2AccessToken oauthToken = - validationRequest.new OAuth2AccessToken(); - oauthToken.setTokenType(OAuthConstants.BEARER_TOKEN_TYPE); - oauthToken.setIdentifier(accessToken); - validationRequest.setAccessToken(oauthToken); - - //Set the resource context param. This will be used in scope validation. - OAuth2TokenValidationRequestDTO.TokenValidationContextParam - resourceContextParam = validationRequest.new TokenValidationContextParam(); - resourceContextParam.setKey(OAuthConstants.RESOURCE_KEY); - resourceContextParam.setValue(resource); - - OAuth2TokenValidationRequestDTO.TokenValidationContextParam[] - tokenValidationContextParams = - new OAuth2TokenValidationRequestDTO.TokenValidationContextParam[1]; - tokenValidationContextParams[0] = resourceContextParam; - validationRequest.setContext(tokenValidationContextParams); - - org.wso2.carbon.identity.oauth2.dto.OAuth2TokenValidationResponseDTO tokenValidationResponse = - WindowsAPIUtils.getOAuth2TokenValidationService().findOAuthConsumerIfTokenIsValid( - validationRequest).getAccessTokenValidationResponse(); - boolean isValid = tokenValidationResponse.isValid(); - String username; - String tenantDomain; - if (isValid) { - username = MultitenantUtils.getTenantAwareUsername( - tokenValidationResponse.getAuthorizedUser()); - tenantDomain = - MultitenantUtils.getTenantDomain(tokenValidationResponse.getAuthorizedUser()); - } else { - OAuthValidationResponse oAuthValidationResponse = new OAuthValidationResponse(); - oAuthValidationResponse.setErrorMsg(tokenValidationResponse.getErrorMsg()); - return oAuthValidationResponse; - } - return new OAuthValidationResponse(username, tenantDomain, isValid); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/RemoteOAuthValidator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/RemoteOAuthValidator.java deleted file mode 100644 index 48c3e2175..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/authenticator/impl/RemoteOAuthValidator.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.commons.pool.impl.GenericObjectPool; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.OAuth2TokenValidator; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.OAuthTokenValidationStubFactory; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.OAuthTokenValidationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.OAuthValidationResponse; -import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub; -import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationRequestDTO; -import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationRequestDTO_OAuth2AccessToken; -import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationRequestDTO_TokenValidationContextParam; -import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationResponseDTO; -import org.wso2.carbon.utils.multitenancy.MultitenantUtils; - -import java.rmi.RemoteException; -import java.util.Properties; - -/** - * Handles the OAuth2 token validation from remote IS servers using remote OAuthValidation service-stub. - */ -public class RemoteOAuthValidator implements OAuth2TokenValidator { - - private GenericObjectPool stubs; - private static final Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.impl.RemoteOAuthValidator.class); - - public RemoteOAuthValidator(String hostURL, String adminUsername, String adminPassword, Properties properties) { - this.stubs = - new GenericObjectPool(new OAuthTokenValidationStubFactory( - hostURL, adminUsername, adminPassword, properties)); - } - - public OAuthValidationResponse validateToken(String accessToken, - String resource) throws OAuthTokenValidationException { - OAuth2TokenValidationServiceStub stub = null; - OAuth2TokenValidationResponseDTO validationResponse; - try { - OAuth2TokenValidationRequestDTO validationRequest = createValidationRequest(accessToken, resource); - stub = (OAuth2TokenValidationServiceStub) this.stubs.borrowObject(); - validationResponse = - stub.findOAuthConsumerIfTokenIsValid(validationRequest).getAccessTokenValidationResponse(); - } catch (RemoteException e) { - throw new OAuthTokenValidationException("Remote Exception occurred while invoking the Remote " + - "IS server for OAuth2 token validation.", e); - } catch (Exception e) { - throw new OAuthTokenValidationException("Error occurred while borrowing an oauth token validation " + - "service stub from the pool", e); - } finally { - try { - this.stubs.returnObject(stub); - } catch (Exception e) { - log.warn("Error occurred while returning the object back to the oauth token validation service " + - "stub pool", e); - } - } - - if (validationResponse == null) { - if (log.isDebugEnabled()) { - log.debug("Response returned by the OAuth token validation service is null"); - } - return null; - } - - boolean isValid = validationResponse.getValid(); - String tenantDomain; - String username; - if (isValid) { - username = MultitenantUtils.getTenantAwareUsername(validationResponse.getAuthorizedUser()); - tenantDomain = MultitenantUtils.getTenantDomain(validationResponse.getAuthorizedUser()); - } else { - OAuthValidationResponse oAuthValidationResponse = new OAuthValidationResponse(); - oAuthValidationResponse.setErrorMsg(validationResponse.getErrorMsg()); - return oAuthValidationResponse; - } - return new OAuthValidationResponse(username, tenantDomain, isValid); - } - - private OAuth2TokenValidationRequestDTO createValidationRequest(String accessToken, String resource) { - OAuth2TokenValidationRequestDTO validationRequest = new OAuth2TokenValidationRequestDTO(); - OAuth2TokenValidationRequestDTO_OAuth2AccessToken oauthToken = - new OAuth2TokenValidationRequestDTO_OAuth2AccessToken(); - - oauthToken.setTokenType("bearer"); - oauthToken.setIdentifier(accessToken); - validationRequest.setAccessToken(oauthToken); - - OAuth2TokenValidationRequestDTO_TokenValidationContextParam resourceContextParam = - new OAuth2TokenValidationRequestDTO_TokenValidationContextParam(); - - resourceContextParam.setKey("resource"); - resourceContextParam.setValue(resource); - - OAuth2TokenValidationRequestDTO_TokenValidationContextParam[] tokenValidationContextParams = - new OAuth2TokenValidationRequestDTO_TokenValidationContextParam[1]; - - tokenValidationContextParams[0] = resourceContextParam; - validationRequest.setContext(tokenValidationContextParams); - - return validationRequest; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/CacheEntry.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/CacheEntry.java deleted file mode 100644 index f0a69851c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/CacheEntry.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -import java.io.Serializable; - -/** - * Class for java CacheEntry - */ -public class CacheEntry implements Serializable { - private String deviceID; - private String username; - private String ownership; - - private static final long serialVersionUID = 19981017L; - - public String getOwnership() { - return ownership; - } - - public void setOwnership(String ownership) { - this.ownership = ownership; - } - - public String getDeviceID() { - return deviceID; - } - - public void setDeviceID(String deviceID) { - this.deviceID = deviceID; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Device.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Device.java deleted file mode 100644 index 60b810007..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Device.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -/** - * Class for get device IDS. - */ -public class Device { - - private String id; - - public String getID() { - return id; - } - - public void setID(String id) { - this.id = id; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorDTO.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorDTO.java deleted file mode 100644 index 84fe7ea49..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorDTO.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -import java.util.ArrayList; -import java.util.List; - -public class ErrorDTO { - - private Long code = null; - private String message = null; - private String description = null; - - public void setMoreInfo(String moreInfo) { - this.moreInfo = moreInfo; - } - - public void setCode(Long code) { - this.code = code; - } - - public void setMessage(String message) { - this.message = message; - } - - public void setDescription(String description) { - this.description = description; - } - - public void setError(List error) { - this.error = error; - } - - private String moreInfo = null; - - public String getMessage() { - return message; - } - - public Long getCode() { - return code; - } - - public String getDescription() { - return description; - } - - public String getMoreInfo() { - return moreInfo; - } - - public List getError() { - return error; - } - - public String toString() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("class ErrorDTO {\n"); - stringBuilder.append(" code: ").append(code).append("\n"); - stringBuilder.append(" message: ").append(message).append("\n"); - stringBuilder.append(" description: ").append(description).append("\n"); - stringBuilder.append(" moreInfo: ").append(moreInfo).append("\n"); - stringBuilder.append(" error: ").append(error).append("\n"); - stringBuilder.append("}\n"); - return stringBuilder.toString(); - } - - private List error = new ArrayList<>(); - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorListItem.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorListItem.java deleted file mode 100644 index 45571ced4..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorListItem.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - */ -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -import javax.validation.constraints.NotNull; - -@ApiModel(description = "") -public class ErrorListItem { - - @NotNull - private String code = null; - @NotNull - private String message = null; - - @ApiModelProperty(required = true, value = "") - @JsonProperty("code") - public String getCode() { - return code; - } - public void setCode(String code) { - this.code = code; - } - - public ErrorListItem() {} - - public ErrorListItem(String code, String msg) { - this.code = code; - this.message = msg; - } - - - /** - * Description about individual errors occurred - **/ - @ApiModelProperty(required = true, value = "Description about individual errors occurred") - @JsonProperty("message") - public String getMessage() { - return message; - } - public void setMessage(String message) { - this.message = message; - } - - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("errorItem {\n"); - - sb.append(" code: ").append(code).append("\n"); - sb.append(" message: ").append(message).append("\n"); - sb.append("}\n"); - return sb.toString(); - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorResponse.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorResponse.java deleted file mode 100644 index e983abd64..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/ErrorResponse.java +++ /dev/null @@ -1,167 +0,0 @@ -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -import com.fasterxml.jackson.annotation.JsonProperty; -import io.swagger.annotations.ApiModelProperty; - -import java.util.ArrayList; -import java.util.List; - -public class ErrorResponse { - private Long code = null; - private String message = null; - private String description = null; - private String moreInfo = null; - private List errorItems = new ArrayList<>(); - - @JsonProperty(value = "code") - @ApiModelProperty(required = true, value = "") - public Long getCode() { - return code; - } - - public void setCode(Long code) { - this.code = code; - } - - @JsonProperty(value = "message") - @ApiModelProperty(required = true, value = "ErrorResponse message.") - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - @JsonProperty(value = "description") - @ApiModelProperty(value = "A detail description about the error message.") - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @JsonProperty(value = "moreInfo") - @ApiModelProperty(value = "Preferably an url with more details about the error.") - public String getMoreInfo() { - return moreInfo; - } - - public void setMoreInfo(String moreInfo) { - this.moreInfo = moreInfo; - } - - public void addErrorListItem(ErrorListItem item) { - this.errorItems.add(item); - } - - /** - * If there are more than one error list them out. \nFor example, list out validation errors by each field. - */ - @JsonProperty(value = "errorItems") - @ApiModelProperty(value = "If there are more than one error list them out. \n" + - "For example, list out validation errors by each field.") - public List getErrorItems() { - return errorItems; - } - - public void setErrorItems(List error) { - this.errorItems = error; - } - - @Override - public String toString() { -// StringBuilder sb = new StringBuilder(); -// sb.append("{"); -// boolean cont = false; -// if (code != null) { -// cont = true; -// sb.append(" \"code\": ").append(code); -// } -// if (message != null) { -// if (cont) { -// sb.append(","); -// } -// cont = true; -// sb.append(" \"message\": \"").append(message).append("\""); -// } -// if (description != null) { -// if (cont) { -// sb.append(","); -// } -// cont = true; -// sb.append(" \"description\": ").append(description).append("\""); -// } -// if (moreInfo != null) { -// if (cont) { -// sb.append(","); -// } -// cont = true; -// sb.append(" \"moreInfo\": \"").append(moreInfo).append("\""); -// } -// if (error != null && error.size() > 0) { -// if (cont) { -// sb.append(","); -// } -// sb.append(" \"errorItems\": ").append(error); -// } -// sb.append("}"); -// return sb.toString(); - return null; - } - - public static class ErrorResponseBuilder { - - private Long code = null; - private String message = null; - private String description = null; - private String moreInfo = null; - private List error; - - - public ErrorResponseBuilder() { - this.error = new ArrayList<>(); - } - - public ErrorResponseBuilder setCode(long code) { - this.code = code; - return this; - } - - public ErrorResponseBuilder setMessage(String message) { - this.message = message; - return this; - } - - public ErrorResponseBuilder setDescription(String description) { - this.description = description; - return this; - } - - public ErrorResponseBuilder setMoreInfo(String moreInfo) { - this.moreInfo = moreInfo; - return this; - } - - public ErrorResponseBuilder addErrorItem(String code, String msg) { - ErrorListItem item = new ErrorListItem(); - item.setCode(code); - item.setMessage(msg); - this.error.add(item); - return this; - } - - public ErrorResponse build() { - ErrorResponse errorResponse = new ErrorResponse(); - errorResponse.setCode(code); - errorResponse.setMessage(message); - errorResponse.setErrorItems(error); - errorResponse.setDescription(description); - errorResponse.setMoreInfo(moreInfo); - return errorResponse; - } - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/OperationRequest.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/OperationRequest.java deleted file mode 100644 index 431ccaf49..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/OperationRequest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.BasicOperation; - -import java.util.List; - -/** - * Class for set basic operations. - */ -public class OperationRequest { - - private List deviceList; - private BasicOperation basicOperation; - - public BasicOperation getBasicOperation() { - return basicOperation; - } - - public void setBasicOperation(BasicOperation basicOperation) { - this.basicOperation = basicOperation; - } - - public List getDeviceList() { - return deviceList; - } - - public void setDeviceList(List deviceList) { - this.deviceList = deviceList; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Token.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Token.java deleted file mode 100644 index 619f82378..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/beans/Token.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.beans; - -/** - * Class for challenge token - */ -public class Token { - private String challengeToken; - - public String getChallengeToken() { - return challengeToken; - } - - public void setChallengeToken(String challengeToken) { - this.challengeToken = challengeToken; - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/AuthenticationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/AuthenticationException.java deleted file mode 100644 index 52a0f1ca6..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/AuthenticationException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for authentication failures in windows device enrollment. - */ -public class AuthenticationException extends Exception { - - private String errorMessage; - - public AuthenticationException(String message) { - super(message); - setErrorMessage(message); - } - - public AuthenticationException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public AuthenticationException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public AuthenticationException(Throwable cause) { - super(cause); - } - - public AuthenticationException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/BadRequestException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/BadRequestException.java deleted file mode 100644 index c0f933892..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/BadRequestException.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.ErrorResponse; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; - -/** - * Exception class for bad request failures - */ -public class BadRequestException extends WebApplicationException { - - public BadRequestException(ErrorResponse error) { - super(Response.status(Response.Status.BAD_REQUEST).entity(error).build()); - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/CertificateGenerationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/CertificateGenerationException.java deleted file mode 100644 index ea1916521..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/CertificateGenerationException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for Certificate generation failures in WSTEP stage. - */ -public class CertificateGenerationException extends Exception { - - private String errorMessage; - - public CertificateGenerationException(String message) { - super(message); - setErrorMessage(message); - } - - public CertificateGenerationException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public CertificateGenerationException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public CertificateGenerationException(Throwable cause) { - super(cause); - } - - public CertificateGenerationException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/FileOperationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/FileOperationException.java deleted file mode 100644 index 1cfe6d5c7..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/FileOperationException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for file reading/writing failures. - */ -public class FileOperationException extends Exception { - - private String errorMessage; - - public FileOperationException(String message) { - super(message); - setErrorMessage(message); - } - - public FileOperationException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public FileOperationException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public FileOperationException(Throwable cause) { - super(cause); - } - - public FileOperationException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/KeyStoreGenerationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/KeyStoreGenerationException.java deleted file mode 100644 index 8d8727128..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/KeyStoreGenerationException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for Keystore generation failures. - */ -public class KeyStoreGenerationException extends Exception { - - private String errorMessage; - - public KeyStoreGenerationException(String message) { - super(message); - setErrorMessage(message); - } - - public KeyStoreGenerationException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public KeyStoreGenerationException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public KeyStoreGenerationException(Throwable cause) { - super(cause); - } - - public KeyStoreGenerationException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/MDMAPIException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/MDMAPIException.java deleted file mode 100644 index a09915772..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/MDMAPIException.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * MDMAPIUtils class provides utility function which are used by CDM REST-API classes. - */ -public class MDMAPIException extends Exception { - - private static final long serialVersionUID = 7950151650447893900L; - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public MDMAPIException(String msg, Exception e) { - super(msg, e); - setErrorMessage(msg); - } - - public MDMAPIException(String msg, Throwable cause) { - super(msg, cause); - setErrorMessage(msg); - } - - public MDMAPIException(String msg) { - super(msg); - setErrorMessage(msg); - } - - public MDMAPIException() { - super(); - } - - public MDMAPIException(Throwable cause) { - super(cause); - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/OAuthTokenValidationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/OAuthTokenValidationException.java deleted file mode 100644 index 13044275a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/OAuthTokenValidationException.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Custom exception to be thrown inside OAuthTokenValidation related functionality. - */ -public class OAuthTokenValidationException extends Exception { - private static final long serialVersionUID = -3151279311929070297L; - - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public OAuthTokenValidationException(String msg, Exception nestedEx) { - super(msg, nestedEx); - setErrorMessage(msg); - } - - public OAuthTokenValidationException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public OAuthTokenValidationException(String msg) { - super(msg); - setErrorMessage(msg); - } - - public OAuthTokenValidationException() { - super(); - } - - public OAuthTokenValidationException(Throwable cause) { - super(cause); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/ProfileConfigurationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/ProfileConfigurationException.java deleted file mode 100644 index 62dcc0ae0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/ProfileConfigurationException.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -public class ProfileConfigurationException extends Exception { - - private static final long serialVersionUID = 8025559931927889261L; - - public ProfileConfigurationException(String errorMsg) { - super(errorMsg); - } - - public ProfileConfigurationException(String errorMsg, Throwable throwable) { - super(errorMsg, throwable); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlMessageFormatException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlMessageFormatException.java deleted file mode 100644 index 356fbdc1c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlMessageFormatException.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for bad format syncml message exceptions. - */ -public class SyncmlMessageFormatException extends Exception { - private String errorMessage; - - public SyncmlMessageFormatException(String message) { - super(message); - setErrorMessage(message); - } - - public SyncmlMessageFormatException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public SyncmlMessageFormatException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public SyncmlMessageFormatException(Throwable cause) { - super(cause); - } - - public SyncmlMessageFormatException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlOperationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlOperationException.java deleted file mode 100644 index 433ef7af0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/SyncmlOperationException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for syncml Operation and policy related errors. - */ -public class SyncmlOperationException extends Exception { - - private String errorMessage; - - public SyncmlOperationException(String message) { - super(message); - setErrorMessage(message); - } - - public SyncmlOperationException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public SyncmlOperationException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public SyncmlOperationException(Throwable cause) { - super(cause); - } - - public SyncmlOperationException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/UnexpectedServerErrorException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/UnexpectedServerErrorException.java deleted file mode 100644 index 6643f01d0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/UnexpectedServerErrorException.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - */ -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.ErrorDTO; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.ErrorResponse; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; - -public class UnexpectedServerErrorException extends WebApplicationException { - private String message; - private static final long serialVersionUID = 147943579458906890L; - - public UnexpectedServerErrorException(ErrorResponse error) { - super(Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(error).build()); - } - public UnexpectedServerErrorException(ErrorDTO errorDTO) { - super(Response.status(Response.Status.INTERNAL_SERVER_ERROR) - .entity(errorDTO) - .header(PluginConstants.WindowsConstant.HEADER_CONTENT_TYPE, PluginConstants.WindowsConstant.APPLICATION_JSON) - .build()); - message = errorDTO.getDescription(); - } - - @Override - public String getMessage() { - return message; - } - - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WAPProvisioningException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WAPProvisioningException.java deleted file mode 100644 index 855b7735d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WAPProvisioningException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for property/provisioning XML file reading failures. - */ -public class WAPProvisioningException extends Exception { - - private String errorMessage; - - public WAPProvisioningException(String message) { - super(message); - setErrorMessage(message); - } - - public WAPProvisioningException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public WAPProvisioningException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public WAPProvisioningException(Throwable cause) { - super(cause); - } - - public WAPProvisioningException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsConfigurationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsConfigurationException.java deleted file mode 100644 index e41e1af8a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsConfigurationException.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Custom class for windows device configurations. - */ -public class WindowsConfigurationException extends Exception { - - private String errorMessage; - - private static final long serialVersionUID = 7950151650447893900L; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public WindowsConfigurationException(Throwable cause) { - super(cause); - } - - public WindowsConfigurationException() { - super(); - } - - public WindowsConfigurationException(String msg) { - super(msg); - setErrorMessage(msg); - } - - public WindowsConfigurationException(String msg, Throwable cause) { - super(msg, cause); - setErrorMessage(msg); - } - - public WindowsConfigurationException(String msg, Exception exception) { - super(msg, exception); - setErrorMessage(msg); - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsDeviceEnrolmentException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsDeviceEnrolmentException.java deleted file mode 100644 index af2447378..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsDeviceEnrolmentException.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -/** - * Exception class for general WSTEP messaging/message generation failures. - */ -public class WindowsDeviceEnrolmentException extends Exception { - - private String errorMessage; - - public WindowsDeviceEnrolmentException(String message) { - super(message); - setErrorMessage(message); - } - - public WindowsDeviceEnrolmentException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public WindowsDeviceEnrolmentException(String message, Exception nestedEx) { - super(message, nestedEx); - setErrorMessage(message); - } - - public WindowsDeviceEnrolmentException(Throwable cause) { - super(cause); - } - - public WindowsDeviceEnrolmentException() { - super(); - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsEnrollmentTokenException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsEnrollmentTokenException.java deleted file mode 100644 index 96fdda817..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsEnrollmentTokenException.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - - -public class WindowsEnrollmentTokenException extends Exception { - private static final long serialVersionUID = -2297311387874900305L; - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public WindowsEnrollmentTokenException(String msg, Exception nestedEx) { - super(msg, nestedEx); - setErrorMessage(msg); - } - - public WindowsEnrollmentTokenException(String message, Throwable cause) { - super(message, cause); - setErrorMessage(message); - } - - public WindowsEnrollmentTokenException(String msg) { - super(msg); - setErrorMessage(msg); - } - - public WindowsEnrollmentTokenException() { - super(); - } - - public WindowsEnrollmentTokenException(Throwable cause) { - super(cause); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsOperationsException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsOperationsException.java deleted file mode 100644 index 2cb855406..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/exceptions/WindowsOperationsException.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.Message; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -/** - * Exception Class for windows operations related exceptions - */ -public class WindowsOperationsException extends WebApplicationException { - - public WindowsOperationsException(Message message, MediaType mediaType) { - super(Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(message). - type(mediaType).build()); - } - -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/AuthenticationInfo.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/AuthenticationInfo.java deleted file mode 100644 index d7b3f3e98..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/AuthenticationInfo.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -/** - * DTO class to hold the information of authenticated user. - */ -public class AuthenticationInfo { - private String message; - private String username; - private String tenantDomain; - private int tenantId = -1; - - public String getUsername() { - return username; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getTenantDomain() { - return tenantDomain; - } - - public void setTenantDomain(String tenantDomain) { - this.tenantDomain = tenantDomain; - } - - public int getTenantId() { - return tenantId; - } - - public void setTenantId(int tenantId) { - this.tenantId = tenantId; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/BSTValidator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/BSTValidator.java deleted file mode 100644 index 396c619ca..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/BSTValidator.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.apache.commons.codec.binary.Base64; -import org.apache.ws.security.WSSecurityException; -import org.apache.ws.security.handler.RequestData; -import org.apache.ws.security.message.token.BinarySecurity; -import org.apache.ws.security.validate.Credential; -import org.apache.ws.security.validate.Validator; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.authenticator.OAuthValidatorFactory; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.AuthenticationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.OAuthTokenValidationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileCacheEntry; - -import java.util.HashMap; - -/** - * Validator class for user authentication checking the default carbon user store. - */ -public class BSTValidator implements Validator { - - /** - * This method validates the binary security token in SOAP message coming from the device. - * - * @param credential - binary security token credential object. - * @param requestData - Request data associated with the request. - * @return - Credential object if authentication is success, or null if not success. - * @throws WSSecurityException - */ - @Override - public Credential validate(Credential credential, RequestData requestData) throws WSSecurityException { - String bearerToken; - String requestedUri; - Credential userCredentials; - - HashMap msgContext = (HashMap) requestData.getMsgContext(); - requestedUri = msgContext.get(PluginConstants.CXF_REQUEST_URI).toString(); - BinarySecurity binarySecurityTokenObject = credential.getBinarySecurityToken(); - String binarySecurityToken = binarySecurityTokenObject.getElement().getFirstChild().getTextContent(); - Base64 base64 = new Base64(); - bearerToken = new String(base64.decode(binarySecurityToken)); - AuthenticationInfo authenticationInfo; - try { - authenticationInfo = validateRequest(requestedUri, bearerToken); - WindowsAPIUtils.startTenantFlow(authenticationInfo); - - if (authenticate(binarySecurityToken, authenticationInfo)) { - userCredentials = credential; - } else { - throw new WindowsDeviceEnrolmentException( - "Authentication failure due to invalid binary security token."); - } - } catch (AuthenticationException e) { - throw new WSSecurityException("Failure occurred in the BST validator.", e); - } catch (WindowsDeviceEnrolmentException e) { - throw new WSSecurityException("Authentication failure occurred due to binary security token.", e); - } catch (OAuthTokenValidationException e) { - throw new WSSecurityException( - "Failed to authenticate the incoming request due to oauth token validation error.", e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - return userCredentials; - } - - /** - * This method authenticates the client who comes with binary security token. - * - * @param binarySecurityToken - Binary security token received in the SOAP message header. - * @return - Authentication status. - * @throws AuthenticationException - */ - private boolean authenticate(String binarySecurityToken, AuthenticationInfo authenticationInfo) throws - AuthenticationException { - WindowsAPIUtils.startTenantFlow(authenticationInfo); - MobileCacheEntry cacheEntry; - try { - cacheEntry = DeviceUtil.getTokenEntry(binarySecurityToken); - if (cacheEntry != null) { - String username = cacheEntry.getUsername(); - return username != null; - } else { - return false; - } - } catch (WindowsDeviceEnrolmentException e) { - throw new AuthenticationException("Authentication failure when fetching token entry", e); - } - } - - /** - * Validate SOAP request token. - * - * @param requestedUri -Requested endpoint URI. - * @param binarySecurityToken -Binary security token comes from the soap request message. - * @return returns authorized user information. - * @throws WindowsDeviceEnrolmentException - */ - private AuthenticationInfo validateRequest(String requestedUri, String binarySecurityToken) - throws WindowsDeviceEnrolmentException, OAuthTokenValidationException { - - AuthenticationInfo authenticationInfo = new AuthenticationInfo(); - String resource = requestedUri + ":POST"; - OAuthValidationResponse oAuthValidationResponse = OAuthValidatorFactory.getValidator(). - validateToken(binarySecurityToken, resource); - try { - if (oAuthValidationResponse.isValid()) { - String username = oAuthValidationResponse.getUserName(); - String tenantDomain = oAuthValidationResponse.getTenantDomain(); - - authenticationInfo.setUsername(username); - authenticationInfo.setTenantDomain(tenantDomain); - authenticationInfo.setTenantId(WindowsAPIUtils.getTenantIdOFUser(username + "@" + tenantDomain)); - } else { - authenticationInfo.setMessage(oAuthValidationResponse.getErrorMsg()); - } - } catch (DeviceManagementException e) { - throw new WindowsDeviceEnrolmentException( - "Authentication failure due to invalid binary security token.", e); - } - return authenticationInfo; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ContextInitializer.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ContextInitializer.java deleted file mode 100644 index 694533882..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ContextInitializer.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; -import java.io.File; - -/** - * This class performs one time operations. - */ -public class ContextInitializer implements ServletContextListener { - - /** - * This method loads wap-provisioning file and sets wap-provisioning file as attribute in servlet context. - * - * @param servletContextEvent - Uses when servlet communicating with servlet container. - */ - @Override - public void contextInitialized(ServletContextEvent servletContextEvent) { - ServletContext servletContext = servletContextEvent.getServletContext(); - - File wapProvisioningFile = new File(getClass().getClassLoader().getResource( - PluginConstants.CertificateEnrolment.WAP_PROVISIONING_XML).getFile()); - servletContext.setAttribute(PluginConstants.CONTEXT_WAP_PROVISIONING_FILE, wapProvisioningFile); - } - - @Override - public void contextDestroyed(ServletContextEvent servletContextEvent) { - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceIDHolder.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceIDHolder.java deleted file mode 100644 index 64136db79..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceIDHolder.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; - -import java.util.List; - -/** - * Class for holding valid and invalid devices. - */ -public class DeviceIDHolder { - - private List invalidDeviceIdList; - private List validDeviceIDList; - - public List getInvalidDeviceIdList() { - return invalidDeviceIdList; - } - - public void setInvalidDeviceIdList(List invalidDeviceIdList) { - this.invalidDeviceIdList = invalidDeviceIdList; - } - - public List getValidDeviceIDList() { - return validDeviceIDList; - } - - public void setValidDeviceIDList(List validDeviceIDList) { - this.validDeviceIDList = validDeviceIDList; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceUtil.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceUtil.java deleted file mode 100644 index ac659f2ee..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/DeviceUtil.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.impl.WindowsTokenService; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dao.MobileDeviceManagementDAOException; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileCacheEntry; - -import java.util.UUID; - -/** - * Class for generate random token for XCEP and WSTEP. - */ -public class DeviceUtil { - - private static WindowsTokenService tokenService; - - private static final Log log = LogFactory.getLog(DeviceUtil.class); - - static { - tokenService = WindowsAPIUtils.getEnrollmentTokenService(); - } - - public static String generateRandomToken() { - return String.valueOf(UUID.randomUUID()); - } - - public static void persistChallengeToken(String token, String deviceID, String username) - throws WindowsDeviceEnrolmentException { - try { - if(tokenService == null) { - tokenService = WindowsAPIUtils.getEnrollmentTokenService(); - } - MobileCacheEntry existingCacheEntry = tokenService.getCacheToken(token); - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - if (existingCacheEntry == null) { - MobileCacheEntry newCacheEntry = new MobileCacheEntry(); - newCacheEntry.setDeviceID(deviceID); - newCacheEntry.setUsername(username); - newCacheEntry.setCacheToken(token); - newCacheEntry.setTenantDomain(carbonCtx.getTenantDomain()); - newCacheEntry.setTenanatID(carbonCtx.getTenantId()); - tokenService.saveCacheToken(newCacheEntry); - } else { - existingCacheEntry.setDeviceID(deviceID); - existingCacheEntry.setCacheToken(token); - tokenService.updateCacheToken(existingCacheEntry); - } - } catch (MobileDeviceManagementDAOException e) { - String msg = "Error occurred when saving cache token for device: " + deviceID; - throw new WindowsDeviceEnrolmentException(msg, e); - } - } - - public static MobileCacheEntry getTokenEntry(String token) - throws WindowsDeviceEnrolmentException { - MobileCacheEntry tokenEntry; - try { - if (tokenService == null) { - tokenService = WindowsAPIUtils.getEnrollmentTokenService(); - } - tokenEntry = tokenService.getCacheToken(token); - } catch (MobileDeviceManagementDAOException e) { - String msg = "Error occurred when retrieving enrollment token."; - throw new WindowsDeviceEnrolmentException(msg, e); - } - return tokenEntry; - } - - public static MobileCacheEntry getTokenEntryFromDeviceId(String deviceId) - throws WindowsDeviceEnrolmentException { - MobileCacheEntry tokenEntry; - try { - if (tokenService == null) { - tokenService = WindowsAPIUtils.getEnrollmentTokenService(); - } - tokenEntry = tokenService.getCacheTokenFromDeviceId(deviceId); - - } catch (MobileDeviceManagementDAOException e) { - String msg = "Error occurred when retrieving enrollment token."; - throw new WindowsDeviceEnrolmentException(msg, e); - } - return tokenEntry; - } - - public static void removeTokenEntry(String token) { - try { - if (tokenService == null) { - tokenService = WindowsAPIUtils.getEnrollmentTokenService(); - } - tokenService.removeCacheToken(token); - } catch (MobileDeviceManagementDAOException e) { - String msg = "Error occurred when removing enrollment token."; - log.error(msg); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorHandler.java deleted file mode 100644 index 3c3ee547f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorHandler.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; - -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; - -/** - * Class for handle response exceptions. - */ -@Produces({"application/json", "application/xml"}) -public class ErrorHandler implements ExceptionMapper { - - public Response toResponse(WindowsConfigurationException exception) { - ErrorMessage errorMessage = new ErrorMessage(); - errorMessage.setErrorMessage(exception.getErrorMessage()); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorMessage).build(); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorMessage.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorMessage.java deleted file mode 100644 index 8895fe2d3..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/ErrorMessage.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -/** - * Generate Error Messages for responses. - */ -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -public class ErrorMessage { - - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/GsonMessageBodyHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/GsonMessageBodyHandler.java deleted file mode 100644 index 683d747cd..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/GsonMessageBodyHandler.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - -import javax.ws.rs.Consumes; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; -import java.io.*; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import static javax.ws.rs.core.MediaType.APPLICATION_JSON; - -/** - * Class for parse Gson Messages. - */ -@Provider -@Produces(APPLICATION_JSON) -@Consumes(APPLICATION_JSON) -public class GsonMessageBodyHandler implements MessageBodyWriter, MessageBodyReader { - private Gson gson; - private static final String UTF_8 = "UTF-8"; - - public boolean isReadable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { - return true; - } - - private Gson getGson() { - if (gson == null) { - final GsonBuilder gsonBuilder = new GsonBuilder(); - gson = gsonBuilder.create(); - } - return gson; - } - - public Object readFrom(Class objectClass, Type type, Annotation[] annotations, MediaType mediaType, - MultivaluedMap stringStringMultivaluedMap, InputStream entityStream) - throws IOException, WebApplicationException { - InputStreamReader reader = new InputStreamReader(entityStream, UTF_8); - try { - return getGson().fromJson(reader, type); - } finally { - reader.close(); - } - } - - public boolean isWriteable(Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { - return true; - } - - public long getSize(Object o, Class aClass, Type type, Annotation[] annotations, MediaType mediaType) { - return -1; - } - - public void writeTo(Object object, Class aClass, Type type, Annotation[] annotations, MediaType mediaType, - MultivaluedMap stringObjectMultivaluedMap, OutputStream entityStream) - throws IOException, WebApplicationException { - - OutputStreamWriter writer = new OutputStreamWriter(entityStream, UTF_8); - try { - getGson().toJson(object, type, writer); - } finally { - writer.close(); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/Message.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/Message.java deleted file mode 100644 index a9e8d131e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/Message.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -/** - * Class for generate response Messages. - */ -@XmlRootElement -public class Message { - private String responseCode; - private String responseMessage; - - @XmlElement - public String getResponseMessage() { - return responseMessage; - } - - public void setResponseMessage(String responseMessage) { - this.responseMessage = responseMessage; - } - - @XmlElement - public String getResponseCode() { - return responseCode; - } - - public void setResponseCode(String responseCode) { - this.responseCode = responseCode; - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/OAuthValidationResponse.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/OAuthValidationResponse.java deleted file mode 100644 index eb962e7e1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/OAuthValidationResponse.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -/** - * Class for OAuthValidation Response. - */ -public class OAuthValidationResponse { - - private String userName; - private String tenantDomain; - private boolean isValid; - private String errorMsg; - - public OAuthValidationResponse() { - } - - public OAuthValidationResponse(String userName, String tenantDomain, boolean isValid) { - this.userName = userName; - this.tenantDomain = tenantDomain; - this.isValid = isValid; - } - - public String getUserName() { - return userName; - } - - public void setUserName(String userName) { - this.userName = userName; - } - - public String getTenantDomain() { - return tenantDomain; - } - - public void setTenantDomain(String tenantDomain) { - this.tenantDomain = tenantDomain; - } - - public boolean isValid() { - return isValid; - } - - public void setIsValid(boolean isValid) { - this.isValid = isValid; - } - - public String getErrorMsg() { - return errorMsg; - } - - public void setErrorMsg(String errorMsg) { - this.errorMsg = errorMsg; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/SOAPSecurityHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/SOAPSecurityHandler.java deleted file mode 100644 index d3fc5722a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/SOAPSecurityHandler.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.namespace.QName; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; -import java.util.HashSet; -import java.util.Set; - -/** - * Class for handle SOAP message security. - */ -public class SOAPSecurityHandler implements SOAPHandler { - - /** - * This method resolves the security header coming in the SOAP message. - * - * @return - Security Header - */ - @Override - public Set getHeaders() { - QName securityHeader = new QName(PluginConstants.WS_SECURITY_TARGET_NAMESPACE, PluginConstants.SECURITY); - HashSet headers = new HashSet(); - headers.add(securityHeader); - return headers; - } - - @Override - public boolean handleMessage(SOAPMessageContext context) { - return true; - } - - @Override - public boolean handleFault(SOAPMessageContext context) { - return true; - } - - @Override - public void close(MessageContext context) { - - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/UsernameTokenValidator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/UsernameTokenValidator.java deleted file mode 100644 index 9a243c852..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/UsernameTokenValidator.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.apache.ws.security.WSSecurityException; -import org.apache.ws.security.handler.RequestData; -import org.apache.ws.security.validate.Credential; -import org.apache.ws.security.validate.Validator; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.AuthenticationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.user.api.UserRealm; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.core.service.RealmService; -import org.wso2.carbon.utils.multitenancy.MultitenantConstants; - -/** - * Validator class for user authentication checking the default carbon user store. - */ -public class UsernameTokenValidator implements Validator { - - private static final int USER_SEGMENT = 0; - private static final int DOMAIN_SEGMENT = 1; - private static final String DELIMITER = "@"; - - /** - * This method validates the username token in SOAP message coming from the device. - * - * @param credential - Username token credentials coming from device - * @param requestData - Request data associated with the request - * @return - Credential object if authentication is success, or null if not success - * @throws WSSecurityException - */ - @Override - public Credential validate(Credential credential, RequestData requestData) throws - WSSecurityException { - - String domainUser = credential.getUsernametoken().getName(); - String[] domainUserArray = domainUser.split(DELIMITER); - Credential returnCredentials; - String user = domainUserArray[USER_SEGMENT]; - String domain = domainUserArray[DOMAIN_SEGMENT]; - String password = credential.getUsernametoken().getPassword(); - - try { - if (authenticate(user, password, domain)) { - returnCredentials = credential; - } else { - throw new WindowsDeviceEnrolmentException("Authentication failure due to incorrect credentials."); - } - } catch (AuthenticationException e) { - throw new WSSecurityException("Failure occurred in the BST validator.", e); - } catch (WindowsDeviceEnrolmentException e) { - throw new WSSecurityException("Authentication Failure occurred due to binary security token.", e); - } - return returnCredentials; - } - - /** - * This method authenticate the user checking the carbon default user store. - * - * @param username - Username in username token - * @param password - Password in username token - * @param tenantDomain - Tenant domain is extracted from the username - * @return - Returns boolean representing authentication result - * @throws AuthenticationException - */ - public boolean authenticate(String username, String password, String tenantDomain) throws - AuthenticationException { - - try { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); - ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID); - RealmService realmService = (RealmService) ctx.getOSGiService(RealmService.class, null); - - if (realmService == null) { - throw new AuthenticationException("RealmService not initialized."); - } - int tenantId; - if (tenantDomain == null || tenantDomain.trim().isEmpty()) { - tenantId = MultitenantConstants.SUPER_TENANT_ID; - } else { - tenantId = realmService.getTenantManager().getTenantId(tenantDomain); - } - if (tenantId == MultitenantConstants.INVALID_TENANT_ID) { - throw new AuthenticationException("Invalid tenant domain " + tenantDomain); - } - UserRealm userRealm = realmService.getTenantUserRealm(tenantId); - return userRealm.getUserStoreManager().authenticate(username, password); - } catch (UserStoreException e) { - throw new AuthenticationException("User store is not initialized.", e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/WindowsAPIUtils.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/WindowsAPIUtils.java deleted file mode 100644 index f5ba6fc24..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/common/util/WindowsAPIUtils.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.common.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.base.MultitenantConstants; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.InvalidDeviceException; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; -import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; -import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo; -import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService; -import org.wso2.carbon.device.mgt.common.operation.mgt.Activity; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException; -import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager; -import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.ErrorResponse; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.BadRequestException; -import org.wso2.carbon.device.mgt.mobile.windows.exception.WindowsDeviceMgtPluginException; -import org.wso2.carbon.device.mgt.mobile.windows.impl.WindowsTokenService; -import org.wso2.carbon.identity.core.util.IdentityTenantUtil; -import org.wso2.carbon.identity.oauth2.OAuth2TokenValidationService; -import org.wso2.carbon.policy.mgt.core.PolicyManagerService; -import org.wso2.carbon.user.api.TenantManager; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.core.service.RealmService; -import org.wso2.carbon.utils.multitenancy.MultitenantUtils; -import org.wso2.carbon.webapp.authenticator.framework.config.AuthenticatorConfig; -import org.wso2.carbon.webapp.authenticator.framework.config.AuthenticatorConfigService; - -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; - -/** - * Class for get Windows API utilities. - */ -public class WindowsAPIUtils { - - private static Log log = LogFactory.getLog(WindowsAPIUtils.class); - - public static DeviceIdentifier convertToDeviceIdentifierObject(String deviceId) { - DeviceIdentifier identifier = new DeviceIdentifier(); - identifier.setId(deviceId); - identifier.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - return identifier; - } - - public static DeviceManagementProviderService getDeviceManagementService() { - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - DeviceManagementProviderService deviceManagementProviderService = - (DeviceManagementProviderService) ctx.getOSGiService(DeviceManagementProviderService.class, null); - if (deviceManagementProviderService == null) { - throw new IllegalStateException("Device Management service has not initialized."); - } - return deviceManagementProviderService; - } - - public static NotificationManagementService getNotificationManagementService() { - NotificationManagementService notificationManagementService; - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - notificationManagementService = - (NotificationManagementService) ctx.getOSGiService(NotificationManagementService.class, null); - if (notificationManagementService == null) { - throw new IllegalStateException("Notification Management service not initialized."); - } - return notificationManagementService; - } - - public static WindowsTokenService getEnrollmentTokenService() { - WindowsTokenService tokenService; - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - tokenService = (WindowsTokenService) - ctx.getOSGiService(WindowsTokenService.class, null); - - if(tokenService == null) { - throw new IllegalStateException("WindowsTokenService is not initialized"); - } - return tokenService; - } - - public static MediaType getResponseMediaType(String acceptHeader) { - MediaType responseMediaType; - if (MediaType.WILDCARD.equals(acceptHeader)) { - responseMediaType = MediaType.APPLICATION_JSON_TYPE; - } else { - responseMediaType = MediaType.valueOf(acceptHeader); - } - return responseMediaType; - } - - public static Response getOperationResponse(List deviceIDs, Operation operation) - throws DeviceManagementException, OperationManagementException, InvalidDeviceException { - if (deviceIDs == null || deviceIDs.size() == 0) { - String errorMessage = "Device identifier list is empty"; - log.error(errorMessage); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } - DeviceIdentifier deviceIdentifier; - List deviceIdentifiers = new ArrayList<>(); - for (String deviceId : deviceIDs) { - deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(PluginConstants.WindowsConstant.DEVICE_TYPE_WINDOWS); - deviceIdentifiers.add(deviceIdentifier); - } - Activity activity = getDeviceManagementService().addOperation( - DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, operation, deviceIdentifiers); - return Response.status(Response.Status.CREATED).entity(activity).build(); - } - - public static PolicyManagerService getPolicyManagerService() { - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - PolicyManagerService policyManagerService = - (PolicyManagerService) ctx.getOSGiService(PolicyManagerService.class, null); - if (policyManagerService == null) { - throw new IllegalStateException("Policy Manager service has not initialized"); - } - return policyManagerService; - } - - public static void updateOperation(String deviceId, Operation operation) - throws OperationManagementException { - DeviceIdentifier deviceIdentifier = new DeviceIdentifier(); - deviceIdentifier.setId(deviceId); - deviceIdentifier.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - getDeviceManagementService().updateOperation(deviceIdentifier, operation); - } - - public static List getPendingOperations(DeviceIdentifier deviceIdentifier) - throws OperationManagementException, DeviceManagementException { - List pendingDataOperations; - pendingDataOperations = org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils. - getDeviceManagementService().getOperationsByDeviceAndStatus( - deviceIdentifier, Operation.Status.PENDING); - return pendingDataOperations; - } - - public static PlatformConfiguration getTenantConfiguration() throws DeviceManagementException { - return getDeviceManagementService().getConfiguration( - DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - } - - public static int getTenantIdOFUser(String username) throws DeviceManagementException { - int tenantId = 0; - RealmService realmService; - String domainName = MultitenantUtils.getTenantDomain(username); - if (domainName != null) { - try { - if ((realmService = IdentityTenantUtil.getRealmService()) != null) { - TenantManager tenantManager = realmService.getTenantManager(); - tenantId = tenantManager.getTenantId(domainName); - } - if (realmService == null) { - throw new IllegalStateException("Realm service has not initialized."); - } - } catch (UserStoreException e) { - throw new DeviceManagementException("Error when getting the tenant id from the tenant domain : " - + domainName, e); - } - } - return tenantId; - } - - public static OAuth2TokenValidationService getOAuth2TokenValidationService() { - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - OAuth2TokenValidationService oAuth2TokenValidationService = - (OAuth2TokenValidationService) ctx.getOSGiService(OAuth2TokenValidationService.class, null); - if (oAuth2TokenValidationService == null) { - throw new IllegalStateException("OAuth2TokenValidation service has not initialized."); - } - return oAuth2TokenValidationService; - } - - public static AuthenticatorConfig getBSTAuthenticatorConfig() { - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - AuthenticatorConfigService authenticatorConfigService = - (AuthenticatorConfigService) ctx.getOSGiService(AuthenticatorConfigService.class, null); - if (authenticatorConfigService == null) { - throw new IllegalStateException("AuthenticatorConfiguration service has not initialized."); - } - AuthenticatorConfig authenticatorConfig = authenticatorConfigService.getAuthenticatorConfig("BST"); - if (authenticatorConfig == null) { - throw new IllegalStateException("BST authenticatorConfig has not initialized."); - } - return authenticatorConfig; - } - - public static void startTenantFlow(AuthenticationInfo authenticationInfo) { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext privilegedCarbonContext = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - if (authenticationInfo.getTenantDomain() == null) { - privilegedCarbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID); - privilegedCarbonContext.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); - } else { - privilegedCarbonContext.setTenantId(authenticationInfo.getTenantId()); - privilegedCarbonContext.setTenantDomain(authenticationInfo.getTenantDomain()); - } - privilegedCarbonContext.setUsername(authenticationInfo.getUsername()); - } - - /** - * This method is used to get tenant configurations. - * - * @return List of Configurations entries. - * @throws DeviceManagementException - */ - public static List getTenantConfigurationData() throws DeviceManagementException { - PlatformConfiguration tenantConfiguration; - if ((tenantConfiguration = org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils - .getTenantConfiguration()) != null) { - return tenantConfiguration.getConfiguration(); - } else { - return null; - } - } - - /** - * This method is used to update Device Information. - * @param deviceId DeviceID to need to update. - * @param deviceInfo Device Info to be update/ - * @throws DeviceDetailsMgtException Error occurs while updating Device Info. - */ - public static void updateDeviceInfo(DeviceIdentifier deviceId, DeviceInfo deviceInfo) - throws DeviceDetailsMgtException { - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - DeviceInformationManager informationManager = - (DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null); - informationManager.addDeviceInfo(deviceId, deviceInfo); - } - - /** - * This method is used to update device location. - * @param deviceLocation Device coordination related information. - * @throws DeviceDetailsMgtException Error occurs while updating Device location. - */ - public static void updateDeviceLocation(DeviceLocation deviceLocation) throws DeviceDetailsMgtException { - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - DeviceInformationManager informationManager = - (DeviceInformationManager) ctx.getOSGiService(DeviceInformationManager.class, null); - informationManager.addDeviceLocation(deviceLocation); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AddTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AddTag.java deleted file mode 100644 index a35bf8afa..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AddTag.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Configurations that needs to be added on the device. - */ -public class AddTag { - int commandId = -1; - List items; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void buildAddElement(Document doc, Element rootElement) { - if (getItems() != null) { - Element add = doc.createElement(Constants.ADD); - rootElement.appendChild(add); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - add.appendChild(commandId); - } - for (Iterator itemIterator = getItems().iterator(); itemIterator.hasNext();) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, add); - } - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AlertTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AlertTag.java deleted file mode 100644 index 26b4140a5..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AlertTag.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Inform an event occurred from device to server. - */ -public class AlertTag { - - int commandId = -1; - String data; - List items; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void buildAlertElement(Document doc, Element rootElement) { - Element alert = doc.createElement(Constants.ALERT); - rootElement.appendChild(alert); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - alert.appendChild(commandId); - } - if (getData() != null) { - Element data = doc.createElement(Constants.DATA); - data.appendChild(doc.createTextNode(getData())); - alert.appendChild(data); - } - if (getItems() != null) { - for (Iterator itemIterator = getItems().iterator(); itemIterator.hasNext();) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, alert); - } - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AtomicTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AtomicTag.java deleted file mode 100644 index 6933a3638..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/AtomicTag.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Wrapper for other SyncML elements. - */ -public class AtomicTag { - int commandId = -1; - List adds; - List replaces; - - public List getReplaces() { - return replaces; - } - - public void setReplaces(List replaces) { - this.replaces = replaces; - } - - public List getAdds() { - return adds; - } - - public void setAdds(List adds) { - this.adds = adds; - } - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public void buildAtomicElement(Document doc, Element rootElement) { - Element atomic = doc.createElement(Constants.ATOMIC); - if (getAdds() != null) { - rootElement.appendChild(atomic); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - atomic.appendChild(commandId); - } - for (Iterator addIterator = getAdds().iterator(); addIterator.hasNext(); ) { - AddTag add = addIterator.next(); - if (add != null) { - add.buildAddElement(doc, atomic); - } - } - } - if (getReplaces() != null) { - for (Iterator replaceIterator = getReplaces().iterator(); replaceIterator.hasNext(); ) { - ReplaceTag add = replaceIterator.next(); - if (add != null) { - add.buildReplaceElement(doc, atomic); - } - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java deleted file mode 100644 index c47649ce2..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ChallengeTag.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Challenge data pass through the device and Device Management server for the security purpose. - */ -public class ChallengeTag { - MetaTag meta; - - public MetaTag getMeta() { - return meta; - } - - public void setMeta(MetaTag meta) { - this.meta = meta; - } - - public void buildChallengeElement(Document doc, Element rootElement) { - Element challenge = doc.createElement(Constants.CHALLENGE); - if (getMeta() != null) { - getMeta().buildMetaElement(doc, challenge); - } - rootElement.appendChild(challenge); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/CredentialTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/CredentialTag.java deleted file mode 100644 index 9d8069f27..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/CredentialTag.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Credentials passed between the device and the server for security purposes. - */ -public class CredentialTag { - MetaTag meta; - String data; - - public MetaTag getMeta() { - return meta; - } - - public void setMeta(MetaTag meta) { - this.meta = meta; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public void buildCredentialElement(Document doc, Element rootElement) { - Element credentials = doc.createElement(Constants.CREDENTIAL); - rootElement.appendChild(credentials); - if (getMeta() != null) { - getMeta().buildMetaElement(doc, credentials); - } - if (getData() != null) { - Element data = doc.createElement(Constants.DATA); - data.appendChild(doc.createTextNode(getData())); - credentials.appendChild(data); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/DeleteTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/DeleteTag.java deleted file mode 100644 index a0ce43236..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/DeleteTag.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Configurations that need to be delete on Device. - */ -public class DeleteTag { - int commandId = -1; - List items; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void buildDeleteElement(Document doc, Element rootElement) { - if (getItems() != null) { - Element delete = doc.createElement(Constants.DELETE); - rootElement.appendChild(delete); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - delete.appendChild(commandId); - } - for (Iterator itemIterator = getItems().iterator(); itemIterator.hasNext(); ) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, delete); - } - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ExecuteTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ExecuteTag.java deleted file mode 100644 index 3312e8a91..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ExecuteTag.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Commands that needs to be executed on the device. - */ -public class ExecuteTag { - int commandId = -1; - List items; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void buildExecElement(Document doc, Element rootElement) { - if (getItems() != null) { - Element exec = doc.createElement(Constants.EXECUTE); - rootElement.appendChild(exec); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - exec.appendChild(commandId); - } - for (Iterator itemIterator = getItems().iterator(); itemIterator.hasNext(); ) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, exec); - } - } - } - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/GetTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/GetTag.java deleted file mode 100644 index 00a8858a2..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/GetTag.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Data that needs to be retrieved from the device. - */ -public class GetTag { - int commandId = -1; - List items; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void buildGetElement(Document doc, Element rootElement) { - if (getItems() != null) { - Element get = doc.createElement(Constants.GET); - rootElement.appendChild(get); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - get.appendChild(commandId); - } - if (getItems() != null) { - for (Iterator itemIterator = getItems().iterator(); itemIterator.hasNext(); ) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, get); - } - } - } - } - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ItemTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ItemTag.java deleted file mode 100644 index 571d62c97..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ItemTag.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Represents an items that should be retrieved from the device or a command. - */ -public class ItemTag { - - TargetTag target; - SourceTag source; - String data; - MetaTag meta; - Element elementData; - - public MetaTag getMeta() { - return meta; - } - - public void setMeta(MetaTag meta) { - this.meta = meta; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public SourceTag getSource() { - return source; - } - - public void setSource(SourceTag source) { - this.source = source; - } - - public TargetTag getTarget() { - return target; - } - - public void setTarget(TargetTag target) { - this.target = target; - } - - public Element getElementData() { - return elementData; - } - - public void setElementData(Element elementData) { - this.elementData = elementData; - } - - public void buildItemElement(Document doc, Element rootElement) { - Element item = doc.createElement(Constants.ITEM); - rootElement.appendChild(item); - - if (getTarget() != null || getSource() != null) { - - if (getTarget() != null) { - getTarget().buildTargetElement(doc, item); - } - if (getSource() != null) { - getSource().buildSourceElement(doc, item); - } - } - if (getMeta() != null) { - getMeta().buildMetaElement(doc, item); - } - if (getData() != null || getElementData()!= null) { - Element data = doc.createElement(Constants.DATA); - if (getData() != null) { - data.appendChild(doc.createTextNode(getData())); - } - if (getElementData() != null) { - Node node = doc.importNode(getElementData(), true); - data.appendChild(node); - } - item.appendChild(data); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/MetaTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/MetaTag.java deleted file mode 100644 index 16f63c31f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/MetaTag.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * MetaTag data related to credentials. - */ -public class MetaTag { - - String format; - String type; - String nextNonce; - - public String getNextNonce() { - return nextNonce; - } - - public void setNextNonce(String nextNonce) { - this.nextNonce = nextNonce; - } - - public String getFormat() { - return format; - } - - public void setFormat(String format) { - this.format = format; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public void buildMetaElement(Document doc, Element rootElement) { - Element meta = doc.createElement(Constants.META); - rootElement.appendChild(meta); - if (getFormat() != null) { - Element format = doc.createElement(Constants.FORMAT); - format.appendChild(doc.createTextNode(getFormat())); - Attr attr = doc.createAttribute(Constants.XMLNS); - attr.setValue(Constants.META_NAMESPACE); - format.setAttributeNode(attr); - meta.appendChild(format); - } - if (getType() != null) { - Element type = doc.createElement(Constants.TYPE); - type.appendChild(doc.createTextNode(getType())); - Attr attr = doc.createAttribute(Constants.XMLNS); - attr.setValue(Constants.META_NAMESPACE); - type.setAttributeNode(attr); - meta.appendChild(type); - } - if (getNextNonce() != null) { - Element nextNonce = doc.createElement(Constants.NEXTNONCE); - nextNonce.appendChild(doc.createTextNode(getNextNonce())); - Attr attr = doc.createAttribute(Constants.XMLNS); - attr.setValue(Constants.META_NAMESPACE); - nextNonce.setAttributeNode(attr); - meta.appendChild(nextNonce); - } - - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ReplaceTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ReplaceTag.java deleted file mode 100644 index 6f340b13e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ReplaceTag.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Commands sent from the device. - */ -public class ReplaceTag { - int commandId = -1; - List items; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void buildReplaceElement(Document doc, Element rootElement) { - if (getItems() != null) { - Element replace = doc.createElement(Constants.REPLACE); - rootElement.appendChild(replace); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - replace.appendChild(commandId); - } - if (getItems() != null) { - for (Iterator itemIterator = getItems().iterator(); itemIterator.hasNext(); ) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, replace); - } - } - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ResultsTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ResultsTag.java deleted file mode 100644 index a166f8d22..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/ResultsTag.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Results sent for the requests made to the device. - */ -public class ResultsTag { - int commandId = -1; - int messageReference = -1; - int commandReference = -1; - List item; - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public int getMessageReference() { - return messageReference; - } - - public void setMessageReference(int messageReference) { - this.messageReference = messageReference; - } - - public int getCommandReference() { - return commandReference; - } - - public void setCommandReference(int commandReference) { - this.commandReference = commandReference; - } - - public List getItem() { - return item; - } - - public void setItem(List item) { - this.item = item; - } - - public void buildResultElement(Document doc, Element rootElement) { - Element results = doc.createElement(Constants.RESULTS); - rootElement.appendChild(results); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - results.appendChild(commandId); - } - if (getMessageReference() != -1) { - Element messageReference = doc.createElement(Constants.MESSAGE_REFERENCE); - messageReference.appendChild(doc.createTextNode(String.valueOf(getMessageReference()))); - results.appendChild(messageReference); - } - if (getCommandReference() != -1) { - Element messageReference = doc.createElement(Constants.COMMAND_REFERENCE); - messageReference.appendChild(doc.createTextNode(String.valueOf(getCommandReference()))); - results.appendChild(messageReference); - } - if (getItem() != null) { - for (Iterator itemIterator = getItem().iterator(); itemIterator.hasNext(); ) { - ItemTag item = itemIterator.next(); - if (item != null) { - item.buildItemElement(doc, results); - } - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SequenceTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SequenceTag.java deleted file mode 100644 index 74e74b2eb..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SequenceTag.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Class used to build syncml SequenceTag. - */ -public class SequenceTag { - - int commandId; - ExecuteTag exec; - GetTag get; - DeleteTag deleteTag; - AtomicTag atomicTag; - List replaces; - - public DeleteTag getDeleteTag() { - return deleteTag; - } - - public void setDeleteTag(DeleteTag deleteTag) { - this.deleteTag = deleteTag; - } - - public List getReplaces() { - return replaces; - } - - public void setReplaces(List replaces) { - this.replaces = replaces; - } - - public AtomicTag getAtomicTag() { - return atomicTag; - } - - public void setAtomicTag(AtomicTag atomicTag) { - this.atomicTag = atomicTag; - } - - public ExecuteTag getExec() { - return exec; - } - - public void setExec(ExecuteTag exec) { - this.exec = exec; - } - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public GetTag getGet() { - return get; - } - - public void setGet(GetTag get) { - this.get = get; - } - - public void buildSequenceElement(Document doc, Element rootElement) { - Element sequence = doc.createElement(Constants.SEQUENCE); - rootElement.appendChild(sequence); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - sequence.appendChild(commandId); - } - if (getExec() != null) { - getExec().buildExecElement(doc, sequence); - } - if (getGet() != null) { - getGet().buildGetElement(doc, sequence); - } - if (getReplaces() != null) { - for (Iterator replaceIterator = getReplaces().iterator(); replaceIterator.hasNext(); ) { - ReplaceTag replace = replaceIterator.next(); - if (replace != null) { - replace.buildReplaceElement(doc, sequence); - } - } - } - if (getDeleteTag() != null) { - getDeleteTag().buildDeleteElement(doc, sequence); - } - if (getAtomicTag() != null) { - getAtomicTag().buildAtomicElement(doc, sequence); - } - - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SourceTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SourceTag.java deleted file mode 100644 index 3debdaf9e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SourceTag.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Source details of syncml header's. - */ -public class SourceTag { - - private String locURI; - private String locName; - - public String getLocURI() { - return locURI; - } - - public void setLocURI(String locURI) { - this.locURI = locURI; - } - - public String getLocName() { - return locName; - } - - public void setLocName(String locName) { - this.locName = locName; - } - - public void buildSourceElement(Document doc, Element rootElement) { - Element target = doc.createElement(Constants.SOURCE); - rootElement.appendChild(target); - if (getLocURI() != null) { - Element locURI = doc.createElement(Constants.LOC_URI); - locURI.appendChild(doc.createTextNode(getLocURI())); - target.appendChild(locURI); - } - if (getLocName() != null) { - Element locName = doc.createElement(Constants.LOC_NAME); - locName.appendChild(doc.createTextNode(getLocName())); - target.appendChild(locName); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java deleted file mode 100644 index 4c82b8a56..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/StatusTag.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Status of a previously sent message to device; - */ -public class StatusTag { - int commandId = -1; - int messageReference = -1; - int commandReference = -1; - String command; - String targetReference; - String data; - ChallengeTag challenge; - - public StatusTag(int commandId, int messageReference, int commandReference, String command, - String targetReference, String data) { - this.commandId = commandId; - this.messageReference = messageReference; - this.commandReference = commandReference; - this.command = command; - this.targetReference = targetReference; - this.data = data; - } - - public StatusTag(int commandId, int messageReference, int commandReference, String command, - ChallengeTag challengeTag, String targetReference, String data) { - this.commandId = commandId; - this.messageReference = messageReference; - this.commandReference = commandReference; - this.command = command; - this.challenge = challengeTag; - this.targetReference = targetReference; - this.data = data; - } - - public StatusTag() { - } - - public ChallengeTag getChallenge() { - return challenge; - } - - public void setChallenge(ChallengeTag challenge) { - this.challenge = challenge; - } - - public String getTargetReference() { - return targetReference; - } - - public void setTargetReference(String targetReference) { - this.targetReference = targetReference; - } - - public int getCommandId() { - return commandId; - } - - public void setCommandId(int commandId) { - this.commandId = commandId; - } - - public int getMessageReference() { - return messageReference; - } - - public void setMessageReference(int messageReference) { - this.messageReference = messageReference; - } - - public int getCommandReference() { - return commandReference; - } - - public void setCommandReference(int commandReference) { - this.commandReference = commandReference; - } - - public String getCommand() { - return command; - } - - public void setCommand(String command) { - this.command = command; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public void buildStatusElement(Document doc, Element rootElement) { - Element status = doc.createElement(Constants.STATUS); - rootElement.appendChild(status); - if (getCommandId() != -1) { - Element commandId = doc.createElement(Constants.COMMAND_ID); - commandId.appendChild(doc.createTextNode(String.valueOf(getCommandId()))); - status.appendChild(commandId); - } - if (getMessageReference() != -1) { - Element msgReference = doc.createElement(Constants.MESSAGE_REFERENCE); - msgReference.appendChild(doc.createTextNode(String.valueOf(getMessageReference()))); - status.appendChild(msgReference); - } - if (getCommandReference() != -1) { - Element commandReference = doc.createElement(Constants.COMMAND_REFERENCE); - commandReference.appendChild(doc.createTextNode(String.valueOf(getCommandReference()))); - status.appendChild(commandReference); - } - if (getCommand() != null) { - Element command = doc.createElement(Constants.COMMAND); - command.appendChild(doc.createTextNode(getCommand())); - status.appendChild(command); - } - if (getTargetReference() != null) { - Element targetReference = doc.createElement(Constants.TARGET_REFERENCE); - targetReference.appendChild(doc.createTextNode(getTargetReference())); - status.appendChild(targetReference); - } - if (getChallenge() != null) { - getChallenge().buildChallengeElement(doc, status); - } - if (getData() != null) { - Element data = doc.createElement(Constants.DATA); - data.appendChild(doc.createTextNode(getData())); - status.appendChild(data); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlBody.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlBody.java deleted file mode 100644 index 5aec836fd..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlBody.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import java.util.Iterator; -import java.util.List; - -/** - * Represents the body details of a syncml. - */ -public class SyncmlBody { - GetTag getCommands; - List exec; - List status; - AlertTag alert; - ReplaceTag replace; - ResultsTag results; - SequenceTag sequence; - AtomicTag atomicTag; - - public AtomicTag getAtomicTag() { - return atomicTag; - } - - public void setAtomicTag(AtomicTag atomicTag) { - this.atomicTag = atomicTag; - } - - public SequenceTag getSequence() { - return sequence; - } - - public void setSequence(SequenceTag sequence) { - this.sequence = sequence; - } - - public List getExec() { - return exec; - } - - public void setExec(List exec) { - this.exec = exec; - } - - public ResultsTag getResults() { - return results; - } - - public void setResults(ResultsTag results) { - this.results = results; - } - - public ReplaceTag getReplace() { - return replace; - } - - public void setReplace(ReplaceTag replace) { - this.replace = replace; - } - - public List getStatus() { - return status; - } - - public void setStatus(List status) { - this.status = status; - } - - public AlertTag getAlert() { - return alert; - } - - public void setAlert(AlertTag alert) { - this.alert = alert; - } - - public GetTag getGet() { - return getCommands; - } - - public void setGet(GetTag get) { - this.getCommands = get; - } - - public void buildBodyElement(Document doc, Element rootElement) { - - Element syncBody = doc.createElement(Constants.SYNC_BODY); - rootElement.appendChild(syncBody); - if (getStatus() != null) { - for (int x = 0; x < getStatus().size(); x++) { - if (getStatus().get(x) != null) { - getStatus().get(x).buildStatusElement(doc, syncBody); - } - } - } - if (getAlert() != null) { - getAlert().buildAlertElement(doc, syncBody); - } - if (getResults() != null) { - getResults().buildResultElement(doc, syncBody); - } - if (getGet() != null) { - getGet().buildGetElement(doc, syncBody); - } - if (getReplace() != null) { - getReplace().buildReplaceElement(doc, syncBody); - } - if (getExec() != null) { - for (Iterator execIterator = getExec().iterator(); execIterator.hasNext(); ) { - ExecuteTag exec = execIterator.next(); - if (exec != null) { - exec.buildExecElement(doc, syncBody); - } - } - } - if (getSequence() != null) { - getSequence().buildSequenceElement(doc, syncBody); - } - if (getAtomicTag() != null) { - getAtomicTag().buildAtomicElement(doc, syncBody); - } - syncBody.appendChild(doc.createElement(Constants.FINAL)); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlDocument.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlDocument.java deleted file mode 100644 index 7fbd481bc..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlDocument.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/** - * Represents a base format of a syncml document - */ -public class SyncmlDocument { - SyncmlHeader header; - SyncmlBody body; - - public SyncmlHeader getHeader() { - return header; - } - - public void setHeader(SyncmlHeader header) { - this.header = header; - } - - public SyncmlBody getBody() { - return body; - } - - public void setBody(SyncmlBody body) { - this.body = body; - } - - public void buildDocument(Document doc, Element rootElement) { - if (getHeader() != null) { - getHeader().buildSyncmlHeaderElement(doc, rootElement); - } - if (getBody() != null) { - getBody().buildBodyElement(doc, rootElement); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlHeader.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlHeader.java deleted file mode 100644 index 281fc847d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/SyncmlHeader.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Represents the header details of a syncml. - */ -public class SyncmlHeader { - private int sessionId = -1; - private int MsgID = -1; - private TargetTag target; - private SourceTag source; - private CredentialTag credential; - private String hexadecimalSessionId; - - public String getHexadecimalSessionId() { - return hexadecimalSessionId; - } - - public void setHexadecimalSessionId(String hexSessionId) { - this.hexadecimalSessionId = hexSessionId; - } - - public CredentialTag getCredential() { - return credential; - } - - public void setCredential(CredentialTag credential) { - this.credential = credential; - } - - public int getSessionId() { - return sessionId; - } - - public void setSessionId(int sessionId) { - this.sessionId = sessionId; - } - - public int getMsgID() { - return MsgID; - } - - public void setMsgID(int msgID) { - this.MsgID = msgID; - } - - public TargetTag getTarget() { - return target; - } - - public void setTarget(TargetTag target) { - this.target = target; - } - - public SourceTag getSource() { - return source; - } - - public void setSource(SourceTag source) { - this.source = source; - } - - public void buildSyncmlHeaderElement(Document doc, Element rootElement) { - Element syncHdr = doc.createElement(Constants.SYNC_HDR); - rootElement.appendChild(syncHdr); - Element verDTD = doc.createElement(Constants.VER_DTD); - verDTD.appendChild(doc.createTextNode(Constants.VER_DTD_VALUE)); - syncHdr.appendChild(verDTD); - - Element verProtocol = doc.createElement(Constants.VER_PROTOCOL); - verProtocol.appendChild(doc.createTextNode(Constants.VER_PROTOCOL_VALUE)); - syncHdr.appendChild(verProtocol); - if (getHexadecimalSessionId() != null) { - Element sessionId = doc.createElement(Constants.SESSION_ID); - sessionId.appendChild(doc.createTextNode(getHexadecimalSessionId())); - syncHdr.appendChild(sessionId); - } - if (getMsgID() != -1) { - Element msgId = doc.createElement(Constants.MESSAGE_ID); - msgId.appendChild(doc.createTextNode(String.valueOf(getMsgID()))); - syncHdr.appendChild(msgId); - } - if (getTarget() != null) { - getTarget().buildTargetElement(doc, syncHdr); - } - if (getSource() != null) { - getSource().buildSourceElement(doc, syncHdr); - } - if (getCredential() != null) { - getCredential().buildCredentialElement(doc, syncHdr); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/TargetTag.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/TargetTag.java deleted file mode 100644 index e69add6e2..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/TargetTag.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -/** - * Target details of syncml header's. - */ -public class TargetTag { - - private String LocURI; - private String LocName; - - public String getLocURI() { - return LocURI; - } - - public void setLocURI(String locURI) { - LocURI = locURI; - } - - public String getLocName() { - return LocName; - } - - public void setLocName(String locName) { - LocName = locName; - } - - public void buildTargetElement(Document doc, Element rootElement) { - Element target = doc.createElement(Constants.TARGET); - rootElement.appendChild(target); - if (getLocURI() != null) { - Element locURI = doc.createElement(Constants.LOC_URI); - locURI.appendChild(doc.createTextNode(getLocURI())); - target.appendChild(locURI); - } - if (getLocName() != null) { - Element locName = doc.createElement(Constants.LOC_NAME); - locName.appendChild(doc.createTextNode(getLocName())); - target.appendChild(locName); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/WindowsOperationException.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/WindowsOperationException.java deleted file mode 100644 index 95f2d225f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/WindowsOperationException.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations; - -/** - * Exceptions related to operation retrieval and syncml generation - */ -public class WindowsOperationException extends Exception { - - private static final long serialVersionUID = 5435636243242623629L; - private String errorMessage; - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } - - public WindowsOperationException(String errorMessage) { - super(errorMessage); - } - - public WindowsOperationException(String errorMessage, Throwable throwable) { - super(errorMessage, throwable); - setErrorMessage(errorMessage); - } - - public WindowsOperationException(String msg, Exception nestedEx) { - super(msg, nestedEx); - setErrorMessage(msg); - } - - public WindowsOperationException() { - super(); - } - - public WindowsOperationException(Throwable throwable) { - super(throwable); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java deleted file mode 100644 index 78a7c5dee..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/Constants.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -/** - * Constant values used in syncml generator. - */ -public class Constants { - public static final String PROVIDER_ID = "MobiCDMServer"; - public static final String SERVER_SECRET = "dummy"; - public static final String INITIAL_NONCE = "ZHVtbXk="; - public static final String DISENROLL_ALERT_DATA = "1226"; - public static final String INITIAL_ALERT_DATA = "1201"; - public static final String INITIAL_WIN10_ALERT_DATA = "1224"; - public static final int EMPTY = 0; - - public static final String SYNCML_ROOT_ELEMENT_NAME = "SyncML"; - public static final String XMLNS_SYNCML = "SYNCML:SYNCML1.2"; - public static final String UTF_8 = "UTF-8"; - public static final String MD5 = "MD5"; - public static final String YES = "yes"; - - public static final String EXECUTE = "Exec"; - public static final String ATOMIC = "Atomic"; - public static final String ADD = "Add"; - public static final String COMMAND_ID = "CmdID"; - public static final String GET = "Get"; - public static final String DELETE = "Delete"; - public static final String ITEM = "Item"; - public static final String SOURCE = "Source"; - public static final String LOC_URI = "LocURI"; - public static final String LOC_NAME = "LocName"; - public static final String MESSAGE_REFERENCE = "MsgRef"; - public static final String COMMAND_REFERENCE = "CmdRef"; - public static final String COMMAND = "Cmd"; - public static final String TARGET_REFERENCE = "TargetRef"; - public static final String DATA = "Data"; - public static final String STATUS = "Status"; - public static final String SYNC_BODY = "SyncBody"; - public static final String SYNC_HDR = "SyncHdr"; - public static final String VER_DTD = "VerDTD"; - public static final String VER_PROTOCOL = "VerProto"; - public static final String SESSION_ID = "SessionID"; - public static final String MESSAGE_ID = "MsgID"; - public static final String TARGET = "Target"; - public static final String VER_DTD_VALUE = "1.2"; - public static final String VER_PROTOCOL_VALUE = "DM/1.2"; - public static final String ALERT = "Alert"; - public static final String FINAL = "Final"; - public static final String REPLACE = "Replace"; - public static final String META = "Meta"; - public static final String CREDENTIAL = "Cred"; - public static final String FORMAT = "Format"; - public static final String TYPE = "Type"; - public static final String NEXTNONCE = "NextNonce"; - public static final String CHALLENGE = "chal"; - public static final String META_NAMESPACE = "syncml:metinf"; - public static final String XMLNS = "xmlns"; - public static final String RESULTS = "Results"; - public static final String CRED_FORMAT = "b64"; - public static final String CRED_TYPE = "syncml:auth-md5"; - public static final String SEQUENCE = "Sequence"; - public static final String META_FORMAT_INT = "int"; - public static final String META_FORMAT_CHARACTER = "chr"; - public static final String META_FORMAT_XML = "xml"; - public static final String META_FORMAT_B64 = "b64"; - public static final String META_TYPE_TEXT_PLAIN = "text/plain"; - - public static final String SCOPE = "scope"; - - public static final String FORWARD_SLASH = "/"; - - /** - * SynclML service related constants. - */ - public final class SyncMLResponseCodes { - public static final String AUTHENTICATION_ACCEPTED = "212"; - public static final String ACCEPTED = "200"; - public static final String UNAUTHORIZED = "401"; - public static final String ACCEPTED_FOR_PROCESSING = "202"; - public static final String PIN_NOTFOUND = "405"; - public static final String LOCK_RESET_NOTIFICATION = "Error occurred in Device Lock Operation. " + - "Please trigger lock-reset operation."; - public static final String POSITIVE_CSP_DATA = "1"; - public static final String NEGATIVE_CSP_DATA = "0"; - } - - /** - * SyncmML message related constants. - */ - public final class SyncmlMessageCodes { - public static final int replaceCommandId = 300; - public static final int elementCommandId = 75; - public static final int atomicCommandId = 400; - public static final int addCommandId = 90; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/DeviceInfo.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/DeviceInfo.java deleted file mode 100644 index f9d65c7d7..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/DeviceInfo.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import java.util.ArrayList; -import java.util.List; - -/** - * Class generate Info type operation list. - */ -public class DeviceInfo { - public List getDeviceInfo() { - - List deviceInfoOperations = new ArrayList<>(); - - Operation osVersion = new Operation(); - osVersion.setCode(PluginConstants.SyncML.SOFTWARE_VERSION); - osVersion.setType(Operation.Type.INFO); - deviceInfoOperations.add(osVersion); - - Operation imsi = new Operation(); - imsi.setCode(PluginConstants.SyncML.IMSI); - imsi.setType(Operation.Type.INFO); - deviceInfoOperations.add(imsi); - - Operation imei = new Operation(); - imei.setCode(PluginConstants.SyncML.IMEI); - imei.setType(Operation.Type.INFO); - deviceInfoOperations.add(imei); - - Operation deviceID = new Operation(); - deviceID.setCode(PluginConstants.SyncML.DEV_ID); - deviceID.setType(Operation.Type.INFO); - deviceInfoOperations.add(deviceID); - - Operation manufacturer = new Operation(); - manufacturer.setCode(PluginConstants.SyncML.MANUFACTURER); - manufacturer.setType(Operation.Type.INFO); - deviceInfoOperations.add(manufacturer); - - Operation model = new Operation(); - model.setCode(PluginConstants.SyncML.MODEL); - model.setType(Operation.Type.INFO); - deviceInfoOperations.add(model); - - Operation language = new Operation(); - language.setCode(PluginConstants.SyncML.LANGUAGE); - language.setType(Operation.Type.INFO); - deviceInfoOperations.add(language); - - Operation vendor = new Operation(); - vendor.setCode(PluginConstants.SyncML.VENDOR); - vendor.setType(Operation.Type.INFO); - deviceInfoOperations.add(vendor); - - Operation macaddress = new Operation(); - macaddress.setCode(PluginConstants.SyncML.MAC_ADDRESS); - macaddress.setType(Operation.Type.INFO); - deviceInfoOperations.add(macaddress); - - Operation resolution = new Operation(); - resolution.setCode(PluginConstants.SyncML.RESOLUTION); - resolution.setType(Operation.Type.INFO); - deviceInfoOperations.add(resolution); - - Operation deviceName = new Operation(); - deviceName.setCode(PluginConstants.SyncML.DEVICE_NAME); - deviceName.setType(Operation.Type.INFO); - deviceInfoOperations.add(deviceName); - - return deviceInfoOperations; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/HeartBeatDeviceInfo.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/HeartBeatDeviceInfo.java deleted file mode 100644 index 2bbf1c08d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/HeartBeatDeviceInfo.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import java.util.ArrayList; -import java.util.List; - -public class HeartBeatDeviceInfo { - public List getDeviceInfo() { - - List deviceInfoOperations = new ArrayList<>(); - - Operation osVersion = new Operation(); - osVersion.setCode(PluginConstants.SyncML.SOFTWARE_VERSION); - deviceInfoOperations.add(osVersion); - - Operation imsi = new Operation(); - imsi.setCode(PluginConstants.SyncML.IMSI); - deviceInfoOperations.add(imsi); - - Operation imei = new Operation(); - imei.setCode(PluginConstants.SyncML.IMEI); - deviceInfoOperations.add(imei); - - Operation deviceID = new Operation(); - deviceID.setCode(PluginConstants.SyncML.DEV_ID); - deviceInfoOperations.add(deviceID); - - Operation manufacturer = new Operation(); - manufacturer.setCode(PluginConstants.SyncML.MANUFACTURER); - deviceInfoOperations.add(manufacturer); - - Operation model = new Operation(); - model.setCode(PluginConstants.SyncML.MODEL); - deviceInfoOperations.add(model); - - Operation language = new Operation(); - language.setCode(PluginConstants.SyncML.LANGUAGE); - deviceInfoOperations.add(language); - - Operation vendor = new Operation(); - vendor.setCode(PluginConstants.SyncML.VENDOR); - deviceInfoOperations.add(vendor); - - Operation macaddress = new Operation(); - macaddress.setCode(PluginConstants.SyncML.MAC_ADDRESS); - deviceInfoOperations.add(macaddress); - - Operation resolution = new Operation(); - resolution.setCode(PluginConstants.SyncML.RESOLUTION); - deviceInfoOperations.add(resolution); - - Operation deviceName = new Operation(); - deviceName.setCode(PluginConstants.SyncML.DEVICE_NAME); - deviceInfoOperations.add(deviceName); - - Operation totalRam = new Operation(); - totalRam.setCode(PluginConstants.SyncML.TOTAL_RAM); - deviceInfoOperations.add(totalRam); - - Operation availableStorage = new Operation(); - availableStorage.setCode(PluginConstants.SyncML.TOTAL_STORAGE); - deviceInfoOperations.add(availableStorage); - - Operation remainingBattery = new Operation(); - remainingBattery.setCode(PluginConstants.SyncML.BATTERY_CHARGE_REMAINING); - deviceInfoOperations.add(remainingBattery); - - return deviceInfoOperations; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationCode.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationCode.java deleted file mode 100644 index 448375a7e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationCode.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -/** - * Maps operation codes to device specific format. - */ -public class OperationCode { - public static enum Info { - DEV_ID("./DevInfo/DevId"), - MANUFACTURER("./DevInfo/Man"), - DEVICE_MODEL("./DevInfo/Mod"), - DM_VERSION("./DevInfo/DmV"), - LANGUAGE("./DevInfo/Lang"), - IMSI("./Vendor/MSFT/DeviceInstanceService/Identity/Identity1/IMSI"), - IMEI("./Vendor/MSFT/DeviceInstanceService/Identity/Identity1/IMEI"), - SOFTWARE_VERSION("./DevDetail/SwV"), - VENDOR("./DevDetail/OEM"), - MAC_ADDRESS("./DevDetail/Ext/WLANMACAddress"), - RESOLUTION("./DevDetail/Ext/Microsoft/Resolution"), - DEVICE_NAME("./DevDetail/Ext/Microsoft/DeviceName"), - CHANNEL_URI("./Vendor/MSFT/DMClient/Provider/MobiCDMServer/Push/ChannelURI"), - LOCK_PIN("./Vendor/MSFT/RemoteLock/NewPINValue"), - LOCK_RESET("./Vendor/MSFT/RemoteLock/LockAndResetPIN"), - CAMERA("./Vendor/MSFT/PolicyManager/My/Camera/AllowCamera"), - CAMERA_STATUS("./Vendor/MSFT/PolicyManager/Device/Camera/AllowCamera"), - ENCRYPT_STORAGE_STATUS("./Vendor/MSFT/PolicyManager/Device/Security/RequireDeviceEncryption"), - DEVICE_PASSWORD_STATUS("./Vendor/MSFT/PolicyManager/Device/DeviceLock/DevicePasswordEnabled"), - DEVICE_PASSCODE_DELETE("./Vendor/MSFT/PolicyManager/My/DeviceLock"), - - // Windows10 operation codes - TOTAL_RAM("./DevDetail/Ext/Microsoft/TotalRAM"), - TOTAL_STORAGE("./DevDetail/Ext/Microsoft/TotalStorage"), - OS_PLATFORM("./DevDetail/Ext/Microsoft/OSPlatform"), - MOBILE_ID("./DevDetail/Ext/Microsoft/MobileID"), - DEVICE_TYPE("./DevDetail/DevTyp"), - BATTERY_QUERY("./Vendor/MSFT/DeviceStatus/Battery"), - BATTERY_STATUS("./Vendor/MSFT/DeviceStatus/Battery/Status"), - BATTERY_CHARGE_REMAINING("./Vendor/MSFT/DeviceStatus/Battery/EstimatedChargeRemaining"), - BATTERY_ESTIMATED_RUNTIME("./Vendor/MSFT/DeviceStatus/Battery/EstimatedRuntime"), - LONGITUDE("./Vendor/MSFT/RemoteFind/Location/Longitude"), - LATITUDE("./Vendor/MSFT/RemoteFind/Location/Latitude"), - TEST("./Vendor/MSFT/DiagnosticLog/EtwLog/Collectors"); - private final String code; - - Info(String code) { - this.code = code; - } - - public String getCode() { - return this.code; - } - - } - - public static enum Command { - DEVICE_RING("./Vendor/MSFT/RemoteRing/Ring"), - DEVICE_LOCK("./Vendor/MSFT/RemoteLock/Lock"), - WIPE_DATA("./Vendor/MSFT/RemoteWipe/doWipe"), - DISENROLL("./Vendor/MSFT/DMClient/Unenroll"), - LOCK_RESET("./Vendor/MSFT/RemoteLock/LockAndResetPIN"), - CAMERA("./Vendor/MSFT/PolicyManager/My/Camera/AllowCamera"), - ENCRYPT_STORAGE("./Vendor/MSFT/PolicyManager/My/Security/RequireDeviceEncryption"), - CAMERA_STATUS("./Vendor/MSFT/PolicyManager/Device/Camera/AllowCamera"), - ENCRYPT_STORAGE_STATUS("./Vendor/MSFT/PolicyManager/Device/Security/RequireDeviceEncryption"), - DEVICE_PASSWORD_ENABLE("./Vendor/MSFT/PolicyManager/My/DeviceLock/DevicePasswordEnabled"), - DEVICE_PASSCODE_DELETE("./Vendor/MSFT/PolicyManager/My/DeviceLock"), - // Windows10 operation codes - TOTAL_RAM("./DevDetail/Ext/Microsoft/TotalRAM"), - TOTAL_STORAGE("./DevDetail/Ext/Microsoft/TotalStorage"), - OS_PLATFORM("./DevDetail/Ext/Microsoft/OSPlatform"), - MOBILE_ID("./DevDetail/Ext/Microsoft/MobileID"), - DEVICE_TYPE("./DevDetail/DevTyp"), - BATTERY_QUERY("./Vendor/MSFT/DeviceStatus/Battery"), - BATTERY_STATUS("./Vendor/MSFT/DeviceStatus/Battery/Status"), - BATTERY_CHARGE_REMAINING("./Vendor/MSFT/DeviceStatus/Battery/EstimatedChargeRemaining"), - BATTERY_ESTIMATED_RUNTIME("./Vendor/MSFT/DeviceStatus/Battery/EstimatedRuntime"), - LONGITUDE("./Vendor/MSFT/RemoteFind/Location/Longitude"), - LATITUDE("./Vendor/MSFT/RemoteFind/Location/Latitude"), - TEST("./Vendor/MSFT/DiagnosticLog/EtwLog/Collectors"), - DEVICE_REBOOT("./Vendor/MSFT/Reboot/RebootNow"), - INSTALL_ENTERPRISE_APPX_APPLICATION("./Device/Vendor/MSFT/EnterpriseModernAppManagement/AppInstallation/{PackageFamilyName}"), - INSTALL_ENTERPRISE_APPX_CERTIFICATE("./Device/Vendor/MSFT/RootCATrustedCertificates/Root/{CertHash}/EncodedCertificate"), - INSTALL_ENTERPRISE_MSI_APPLICATION("./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7B{ProductId}%7D/DownloadInstall"); - - private final String code; - - Command(String code) { - this.code = code; - } - - public String getCode() { - return this.code; - } - - } - - public static enum Configure { - WIFI("./Vendor/MSFT/WiFi/Profile/MyNetwork/WlanXml"), - CAMERA("./Vendor/MSFT/PolicyManager/My/Camera/AllowCamera"), - CAMERA_STATUS("./Vendor/MSFT/PolicyManager/Device/Camera/AllowCamera"), - ENCRYPT_STORAGE("./Vendor/MSFT/PolicyManager/My/Security/RequireDeviceEncryption"), - ENCRYPT_STORAGE_STATUS("./Vendor/MSFT/PolicyManager/Device/Security/RequireDeviceEncryption"), - PASSWORD_MAX_FAIL_ATTEMPTS("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/MaxDevicePasswordFailedAttempts"), - DEVICE_PASSWORD_ENABLE("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/DevicePasswordEnabled"), - SIMPLE_PASSWORD("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/AllowSimpleDevicePassword"), - MIN_PASSWORD_LENGTH("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/MinDevicePasswordLength"), - ALPHANUMERIC_PASSWORD("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/AlphanumericDevicePasswordRequired"), - PASSWORD_EXPIRE("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/DevicePasswordExpiration"), - PASSWORD_HISTORY("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/DevicePasswordHistory"), - MAX_PASSWORD_INACTIVE_TIME("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/MaxInactivityTimeDeviceLock"), - MIN_PASSWORD_COMPLEX_CHARACTERS("./Vendor/MSFT/DeviceLock/Provider/TestMDMServer/MinDevicePasswordComplexCharacters"); - - - private final String code; - - Configure(String code) { - this.code = code; - } - - public String getCode() { - return this.code; - } - - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java deleted file mode 100644 index 899acaeb1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationHandler.java +++ /dev/null @@ -1,678 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.json.JSONException; -import org.json.JSONObject; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo; -import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation; -import org.wso2.carbon.device.mgt.common.notification.mgt.Notification; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementService; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.common.policy.mgt.ProfileFeature; -import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature; -import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException; -import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.StatusTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlDocument; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlHeader; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ItemTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ResultsTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlBody; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.Profile; -import org.wso2.carbon.policy.mgt.common.PolicyManagementException; - -import java.util.ArrayList; -import java.util.List; - -import static org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils.convertToDeviceIdentifierObject; - -/** - * This class is used to handle pending operations of the device. - */ -public class OperationHandler { - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationHandler.class); - - - /** - * Update the operations using device status payload. - * - * @param status Client side status for the specific operations. - * @param syncmlDocument syncml payload for operation status which parse through the syncml engine. - * @param deviceIdentifier specific device identifier for each device. - * @throws OperationManagementException - */ - public void updateDeviceOperations(StatusTag status, SyncmlDocument syncmlDocument, - DeviceIdentifier deviceIdentifier) throws OperationManagementException { - List pendingDataOperations; - try { - pendingDataOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - - if (Constants.SyncMLResponseCodes.ACCEPTED.equals(status.getData()) || - (Constants.SyncMLResponseCodes.ACCEPTED_FOR_PROCESSING.equals(status.getData()))) { - for (Operation operation : pendingDataOperations) { - if (operation.getId() == status.getCommandReference()) { - operation.setStatus(Operation.Status.COMPLETED); - } - } - if (syncmlDocument.getHeader().getSource().getLocURI() != null) { - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations); - } - } else if (Constants.SyncMLResponseCodes.PIN_NOTFOUND.equals(status.getData())) { - for (Operation operation : pendingDataOperations) { - if (operation.getId() == status.getCommandReference() && - (PluginConstants.OperationCodes.DEVICE_LOCK.equals(operation.getCode()))) { - operation.setStatus(Operation.Status.ERROR); - if (syncmlDocument.getHeader().getSource().getLocURI() != null) { - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations); - } - NotificationManagementService nmService = WindowsAPIUtils.getNotificationManagementService(); - Notification lockResetNotification = new Notification(); - lockResetNotification.setOperationId(status.getCommandReference()); - lockResetNotification.setStatus(String.valueOf(Notification.Status.NEW)); - - lockResetNotification.setDescription( - Constants.SyncMLResponseCodes.LOCK_RESET_NOTIFICATION); - nmService.addNotification(deviceIdentifier, lockResetNotification); - } - } - } - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred in getting pending operations."); - } catch (NotificationManagementException e) { - throw new OperationManagementException("Error occurred while adding notification", e); - } - } - - /** - * Update operation statuses. - * - * @param deviceId specific device Id. - * @param operations operation list to be update. - * @throws OperationManagementException - */ - public static void updateStatus(String deviceId, List operations) - throws OperationManagementException { - for (Operation operation : operations) { - WindowsAPIUtils.updateOperation(deviceId, operation); - if (log.isDebugEnabled()) { - log.debug("Updating operation '" + operation.toString() + "'"); - } - } - } - - /** - * Update Status of the lock operation. - * - * @param status Status of the operation. - * @param syncmlDocument parsed syncml payload. - * @param deviceIdentifier Device Id. - * @throws OperationManagementException - */ - public void updateLockOperation(StatusTag status, SyncmlDocument syncmlDocument, DeviceIdentifier deviceIdentifier) - throws OperationManagementException { - List pendingDataOperations; - try { - pendingDataOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - if (Constants.SyncMLResponseCodes.ACCEPTED.equals(status.getData())) { - for (Operation operation : pendingDataOperations) { - if ((OperationCode.Command.DEVICE_LOCK.getCode().equals(operation.getCode())) - && operation.getId() == status.getCommandReference()) { - operation.setStatus(Operation.Status.COMPLETED); - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations); - } - } - } - if (Constants.SyncMLResponseCodes.PIN_NOTFOUND.equals(status.getData())) { - for (Operation operation : pendingDataOperations) { - - if ((OperationCode.Command.DEVICE_LOCK.getCode().equals(operation.getCode()) && - operation.getId() == status.getCommandReference())) { - operation.setStatus(Operation.Status.ERROR); - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), pendingDataOperations); - - NotificationManagementService nmService = WindowsAPIUtils.getNotificationManagementService(); - Notification lockResetNotification = new Notification(); - lockResetNotification.setOperationId(status.getCommandReference()); - lockResetNotification.setStatus(String.valueOf(Notification.Status.NEW)); - lockResetNotification.setDescription(Constants.SyncMLResponseCodes.LOCK_RESET_NOTIFICATION); - - nmService.addNotification(deviceIdentifier, lockResetNotification); - } - } - } - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred in getting pending operations."); - } catch (NotificationManagementException e) { - throw new OperationManagementException("Error occurred in adding notifications."); - } - } - - /** - * Update status of the ring operation. - * - * @param status Ring status of the device. - * @param syncmlDocument Parsed syncml payload from the syncml engine. - * @param deviceIdentifier specific device id to be update. - * @throws OperationManagementException - */ - public void ring(StatusTag status, SyncmlDocument syncmlDocument, DeviceIdentifier deviceIdentifier) - throws OperationManagementException { - List pendingDataOperations; - try { - if ((Constants.SyncMLResponseCodes.ACCEPTED.equals(status.getData()))) { - pendingDataOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - for (Operation operation : pendingDataOperations) { - if ((OperationCode.Command.DEVICE_RING.getCode().equals(operation.getCode())) && - (operation.getId() == status.getCommandReference())) { - operation.setStatus(Operation.Status.COMPLETED); - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), - pendingDataOperations); - } - } - } - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred in getting pending operation."); - } - } - - /** - * Update the status of the DataWipe operation. - * - * @param status Status of the data wipe. - * @param syncmlDocument Parsed syncml payload from the syncml engine. - * @param deviceIdentifier specific device id to be wiped. - * @throws OperationManagementException - */ - public void dataWipe(StatusTag status, SyncmlDocument syncmlDocument, DeviceIdentifier deviceIdentifier) - throws OperationManagementException { - List pendingDataOperations; - if ((Constants.SyncMLResponseCodes.ACCEPTED.equals(status.getData()))) { - try { - pendingDataOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred in getting pending operation."); - } - for (Operation operation : pendingDataOperations) { - - if ((OperationCode.Command.WIPE_DATA.getCode().equals(operation.getCode())) && - (operation.getId() == status.getCommandReference())) { - operation.setStatus(Operation.Status.COMPLETED); - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), - pendingDataOperations); - } - } - } - } - - public void updateDisenrollOperationStatus(DeviceIdentifier deviceIdentifier) throws OperationManagementException { - List pendingDeviceInfoOperations; - try { - pendingDeviceInfoOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred while getting pending operations."); - } - for (Operation operation : pendingDeviceInfoOperations) { - if (PluginConstants.OperationCodes.DISENROLL.equals(operation.getCode())) { - operation.setStatus(Operation.Status.COMPLETED); - updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations); - } - } - } - - public void updateDeviceInfoStatus(DeviceIdentifier deviceIdentifier) throws OperationManagementException { - List pendingDeviceInfoOperations; - try { - pendingDeviceInfoOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred while getting pending operations."); - } - for (Operation operation : pendingDeviceInfoOperations) { - if (PluginConstants.OperationCodes.DEVICE_INFO.equals(operation.getCode())) { - operation.setStatus(Operation.Status.COMPLETED); - updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations); - } - } - } - - public void updateDeviceLocationStatus(SyncmlDocument syncmlDocument) throws OperationManagementException { - List pendingDataOperations; - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( - syncmlDocument.getHeader().getSource().getLocURI()); - try { - pendingDataOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred in getting pending operation."); - } - for (Operation operation : pendingDataOperations) { - if (PluginConstants.OperationCodes.DEVICE_LOCATION.equals(operation.getCode())) { - if (syncmlDocument.getBody().getResults() != null) { - List items = syncmlDocument.getBody().getResults().getItem(); - for (ItemTag itemTag : items) { - if (OperationCode.Command.LATITUDE.getCode().equals(itemTag.getSource().getLocURI())) { - // at this moment we can't get accepted value 200 from the device. - if (itemTag.getData() != null) { - operation.setStatus(Operation.Status.COMPLETED); - } else { - operation.setStatus(Operation.Status.ERROR); - } - } - } - } - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), - pendingDataOperations); - } - } - } - - /** - * Get pending operations. - * - * @param syncmlDocument SyncmlDocument object which creates from the syncml engine using syncml payload - * @return Return list of pending operations. - * @throws OperationManagementException - */ - public List getPendingOperations(SyncmlDocument syncmlDocument) - throws OperationManagementException, WindowsOperationException { - SyncmlHeader syncmlHeader = syncmlDocument.getHeader(); - SyncmlBody syncmlBody = syncmlDocument.getBody(); - List pendingOperations; - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlHeader.getSource().getLocURI()); - if (syncmlBody.getResults() != null) { - List items = syncmlBody.getResults().getItem(); - for (ItemTag itemTag : items) { - if (OperationCode.Command.LATITUDE.getCode().equals(itemTag.getSource().getLocURI())) { - updateLocation(syncmlDocument); - } - if (OperationCode.Command.TOTAL_RAM.getCode().equals(itemTag.getSource().getLocURI())) { - updateDeviceInfo(syncmlDocument); - } - if (OperationCode.Command.BATTERY_CHARGE_REMAINING.equals(itemTag.getSource().getLocURI())) { - updateDeviceInfo(syncmlDocument); - } - } - } - UpdateUriOperations(syncmlDocument); - generateComplianceFeatureStatus(syncmlDocument); - pendingOperations = WindowsAPIUtils.getDeviceManagementService().getPendingOperations(deviceIdentifier); - return pendingOperations; - } - - /** - * Set compliance of the feature according to the device status for the specific feature. - * - * @param activeFeature Features to be applied on the device. - * @param deviceFeature Actual features applied on the device. - * @return Returns setting up compliance feature. - */ - public ComplianceFeature setComplianceFeatures(ProfileFeature activeFeature, Profile deviceFeature) { - ComplianceFeature complianceFeature = new ComplianceFeature(); - complianceFeature.setFeature(activeFeature); - complianceFeature.setFeatureCode(activeFeature.getFeatureCode()); - complianceFeature.setCompliance(deviceFeature.isCompliance()); - return complianceFeature; - } - - /** - * Update the completed/Error status of the operation which have the URI of the operation code in the syncml payload. - * - * @param syncmlDocument SyncmlDocument object generated from the the syncml engine. - * @throws OperationManagementException - */ - public void UpdateUriOperations(SyncmlDocument syncmlDocument) throws OperationManagementException, - WindowsOperationException { - List pendingDataOperations; - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( - syncmlDocument.getHeader().getSource().getLocURI()); - - List statuses = syncmlDocument.getBody().getStatus(); - try { - pendingDataOperations = WindowsAPIUtils.getPendingOperations(deviceIdentifier); - } catch (DeviceManagementException e) { - throw new OperationManagementException("Error occurred in getting pending operation."); - } - for (StatusTag status : statuses) { - - if ((Constants.EXECUTE.equals(status.getCommand()))) { - if (status.getTargetReference() == null) { - updateDeviceOperations(status, syncmlDocument, deviceIdentifier); - } else { - if ((OperationCode.Command.DEVICE_LOCK.getCode().equals(status.getTargetReference()))) { - updateLockOperation(status, syncmlDocument, deviceIdentifier); - } - if ((OperationCode.Command.DEVICE_RING.getCode().equals(status.getTargetReference()))) { - ring(status, syncmlDocument, deviceIdentifier); - } - if ((OperationCode.Command.WIPE_DATA.getCode().equals(status.getTargetReference()))) { - dataWipe(status, syncmlDocument, deviceIdentifier); - } - } - } - if ((Constants.SEQUENCE.equals(status.getCommand()))) { - if ((Constants.SyncMLResponseCodes.ACCEPTED.equals(status.getData()))) { - for (Operation operation : pendingDataOperations) { - if ((PluginConstants.OperationCodes.POLICY_BUNDLE.equals(operation.getCode())) && - operation.getId() == status.getCommandReference()) { - operation.setStatus(Operation.Status.COMPLETED); - } - if ((PluginConstants.OperationCodes.MONITOR.equals(operation.getCode())) && - operation.getId() == status.getCommandReference()) { - operation.setStatus(Operation.Status.COMPLETED); - } - if (PluginConstants.OperationCodes.POLICY_REVOKE.equals(operation.getCode())) { - operation.setStatus(Operation.Status.COMPLETED); - } - } - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), - pendingDataOperations); - } else { - for (Operation operation : pendingDataOperations) { - - if ((PluginConstants.OperationCodes.POLICY_BUNDLE.equals(operation.getCode())) && - operation.getId() == status.getCommandReference()) { - operation.setStatus(Operation.Status.ERROR); - } - if ((PluginConstants.OperationCodes.MONITOR.equals(operation.getCode())) && - operation.getId() == status.getCommandReference()) { - operation.setStatus(Operation.Status.ERROR); - } - if (PluginConstants.OperationCodes.POLICY_REVOKE.equals(operation.getCode())) { - operation.setStatus(Operation.Status.COMPLETED); - } - } - updateStatus(syncmlDocument.getHeader().getSource().getLocURI(), - pendingDataOperations); - } - } - } - } - - /** - * Generate status of the features that have been activated on the device. - * - * @param syncmlDocument syncmlDocument object pasrsed from the syncml engine. - * @return device statuses for the activated features - * @throws WindowsOperationException - */ - public List generateDeviceOperationStatusObject(SyncmlDocument syncmlDocument) throws - WindowsOperationException { - - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( - syncmlDocument.getHeader().getSource().getLocURI()); - String lockUri = null; - ResultsTag result = syncmlDocument.getBody().getResults(); - - List profiles = new ArrayList<>(); - if (result != null) { - List results = result.getItem(); - for (OperationCode.Info info : OperationCode.Info.values()) { - if (PluginConstants.OperationCodes.PIN_CODE.equals(info - .name())) { - lockUri = info.getCode(); - } - } - for (ItemTag item : results) { - for (OperationCode.Info info : OperationCode.Info.values()) { - if (item.getSource().getLocURI().equals(info.getCode()) && - PluginConstants.OperationCodes.CAMERA_STATUS.equals(info.name())) { - Profile cameraProfile = new Profile(); - cameraProfile.setFeatureCode(PluginConstants.OperationCodes.CAMERA); - cameraProfile.setData(item.getData()); - if ((PluginConstants.SyncML.SYNCML_DATA_ONE.equals(item.getData()))) { - cameraProfile.setEnable(true); - } else { - cameraProfile.setEnable(false); - } - profiles.add(cameraProfile); - } - if (item.getSource().getLocURI().equals(info.getCode()) && - PluginConstants.OperationCodes.ENCRYPT_STORAGE_STATUS.equals(info.name())) { - Profile encryptStorage = new Profile(); - encryptStorage.setFeatureCode(PluginConstants.OperationCodes.ENCRYPT_STORAGE); - encryptStorage.setData(item.getData()); - if ((PluginConstants.SyncML.SYNCML_DATA_ONE.equals(item.getData()))) { - encryptStorage.setEnable(true); - } else { - encryptStorage.setEnable(false); - } - profiles.add(encryptStorage); - } - if (item.getSource().getLocURI().equals(info.getCode()) && - PluginConstants.OperationCodes.DEVICE_PASSWORD_STATUS.equals(info.name())) { - Profile encryptStorage = new Profile(); - encryptStorage.setFeatureCode(PluginConstants.OperationCodes.PASSCODE_POLICY); - encryptStorage.setData(item.getData()); - if ((PluginConstants.SyncML.SYNCML_DATA_ZERO.equals(item.getData()))) { - encryptStorage.setEnable(true); - } else { - encryptStorage.setEnable(false); - } - profiles.add(encryptStorage); - } - if (!item.getData().isEmpty() && item.getSource().getLocURI().equals(lockUri)) { - String pinValue = item.getData(); - NotificationManagementService nmService = WindowsAPIUtils.getNotificationManagementService(); - Notification notification = new Notification(); - notification.setDescription("Auto generated DevicePin : " + pinValue); - notification.setOperationId(result.getCommandReference()); - notification.setStatus(String.valueOf(Notification.Status.NEW)); - try { - nmService.addNotification(deviceIdentifier, notification); - } catch (NotificationManagementException e) { - throw new WindowsOperationException("Failure Occurred while getting notification" + - " service.", e); - } - break; - } - } - } - } - return profiles; - } - - /** - * Generate Compliance Features. - * - * @param syncmlDocument syncmlDocument object parsed from the syncml engine. - * @throws WindowsOperationException - */ - public void generateComplianceFeatureStatus(SyncmlDocument syncmlDocument) throws WindowsOperationException { - List profiles = generateDeviceOperationStatusObject(syncmlDocument); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( - syncmlDocument.getHeader().getSource().getLocURI()); - boolean isCompliance = false; - if (profiles.size() != Constants.EMPTY) { - try { - if (WindowsAPIUtils.getPolicyManagerService().getAppliedPolicyToDevice(deviceIdentifier).getProfile(). - getProfileFeaturesList() != null) { - List profileFeatures = WindowsAPIUtils.getPolicyManagerService(). - getAppliedPolicyToDevice(deviceIdentifier).getProfile().getProfileFeaturesList(); - List complianceFeatures = new ArrayList<>(); - for (ProfileFeature activeFeature : profileFeatures) { - JSONObject policyContent = new JSONObject(activeFeature.getContent().toString()); - - for (Profile deviceFeature : profiles) { - if (deviceFeature.getFeatureCode().equals(activeFeature.getFeatureCode()) && - (PluginConstants.OperationCodes.CAMERA.equals(deviceFeature.getFeatureCode()))) { - if (policyContent.getBoolean(PluginConstants.PolicyConfigProperties. - POLICY_ENABLE) == (deviceFeature.isEnable())) { - isCompliance = true; - deviceFeature.setCompliance(isCompliance); - } else { - deviceFeature.setCompliance(isCompliance); - } - ComplianceFeature complianceFeature = setComplianceFeatures(activeFeature, - deviceFeature); - complianceFeatures.add(complianceFeature); - } - if (deviceFeature.getFeatureCode().equals(activeFeature.getFeatureCode()) && - (PluginConstants.OperationCodes. - ENCRYPT_STORAGE.equals(deviceFeature.getFeatureCode()))) { - if (policyContent.getBoolean(PluginConstants.PolicyConfigProperties. - ENCRYPTED_ENABLE) == (deviceFeature.isEnable())) { - isCompliance = true; - deviceFeature.setCompliance(isCompliance); - } else { - deviceFeature.setCompliance(isCompliance); - } - ComplianceFeature complianceFeature = setComplianceFeatures(activeFeature, - deviceFeature); - complianceFeatures.add(complianceFeature); - } - if (deviceFeature.getFeatureCode().equals(activeFeature.getFeatureCode()) && - (PluginConstants.OperationCodes. - PASSCODE_POLICY.equals(deviceFeature.getFeatureCode()))) { - if (policyContent.getBoolean(PluginConstants.PolicyConfigProperties. - ENABLE_PASSWORD) == (deviceFeature.isEnable())) { - isCompliance = true; - deviceFeature.setCompliance(isCompliance); - } else { - deviceFeature.setCompliance(isCompliance); - } - ComplianceFeature complianceFeature = setComplianceFeatures(activeFeature, - deviceFeature); - complianceFeatures.add(complianceFeature); - } - } - } - WindowsAPIUtils.getPolicyManagerService().checkPolicyCompliance(deviceIdentifier, - complianceFeatures); - } - } catch (JSONException e) { - throw new WindowsOperationException("Error occurred while parsing json object.", e); - } catch (PolicyComplianceException e) { - throw new WindowsOperationException("Error occurred while setting up policy compliance.", e); - } catch (PolicyManagementException e) { - throw new WindowsOperationException("Error occurred while getting effective policy.", e); - } - } - - } - - public void updateDeviceInfo(SyncmlDocument syncmlDocument) throws WindowsOperationException { - String softwareVersion; - String imsi; - String imei; - String model; - String vendor; - String totalRAM; - String deviceID = null; - String totalStorage; - Double battery; - - List deviceInformations = syncmlDocument.getBody().getResults().getItem(); - DeviceInfo deviceInfo = new DeviceInfo(); - for (ItemTag item : deviceInformations) { - String source = item.getSource().getLocURI(); - if (OperationCode.Info.SOFTWARE_VERSION.getCode().equals(source)) { - softwareVersion = item.getData(); - deviceInfo.setOsVersion(softwareVersion); - } - if (OperationCode.Info.IMSI.getCode().equals(source)) { - imsi = item.getData(); - deviceInfo.getDeviceDetailsMap().put("IMSI", imsi); - } - if (OperationCode.Info.IMEI.getCode().equals(source)) { - imei = item.getData(); - deviceInfo.getDeviceDetailsMap().put("IMEI", imei); - } - if (OperationCode.Info.DEVICE_MODEL.getCode().equals(source)) { - model = item.getData(); - deviceInfo.setDeviceModel(model); - } - if (OperationCode.Info.VENDOR.getCode().equals(source)) { - vendor = item.getData(); - deviceInfo.setVendor(vendor); - } - if (OperationCode.Info.TOTAL_RAM.getCode().equals(source)) { - totalRAM = item.getData(); - deviceInfo.setAvailableRAMMemory(Double.parseDouble(totalRAM)); - } - if (OperationCode.Info.TOTAL_STORAGE.getCode().equals(source)) { - totalStorage = item.getData(); - deviceInfo.setInternalAvailableMemory(Double.parseDouble(totalStorage)); - } - if (OperationCode.Info.DEV_ID.getCode().equals(source)) { - deviceID = item.getData(); - } - if (OperationCode.Info.BATTERY_CHARGE_REMAINING.getCode().equals(source)) { - battery = Double.valueOf(item.getData()); - deviceInfo.setBatteryLevel(battery); - } - } - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(deviceID); - try { - WindowsAPIUtils.updateDeviceInfo(deviceIdentifier, deviceInfo); - updateDeviceInfoStatus(deviceIdentifier); - } catch (org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException e) { - throw new WindowsOperationException("Error occurred while adding Device info."); - } catch (OperationManagementException e) { - throw new WindowsOperationException("Error occurred while updating Device info operation status."); - } - } - - private void updateLocation(SyncmlDocument syncmlDocument) throws WindowsOperationException { - List deviceInformations = syncmlDocument.getBody().getResults().getItem(); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( - syncmlDocument.getHeader().getSource().getLocURI()); - - DeviceLocation deviceLocation = new DeviceLocation(); - deviceLocation.setDeviceIdentifier(deviceIdentifier); - for (ItemTag item : deviceInformations) { - String source = item.getSource().getLocURI(); - if (OperationCode.Info.LONGITUDE.getCode().equals(source)) { - String longitude = item.getData(); - deviceLocation.setLongitude(Double.parseDouble(longitude)); - } - if (OperationCode.Info.LATITUDE.getCode().equals(source)) { - Double latitude = Double.parseDouble(item.getData()); - deviceLocation.setLatitude(latitude); - } - } - try { - WindowsAPIUtils.updateDeviceLocation(deviceLocation); - updateDeviceLocationStatus(syncmlDocument); - } catch (DeviceDetailsMgtException e) { - throw new WindowsOperationException("Error occurred while updating Device Location."); - } catch (OperationManagementException e) { - throw new WindowsOperationException("Error occurred while updating Device Location operation status."); - } - } - - public void checkForDeviceWipe(List pendingDeviceInfoOperations - , DeviceIdentifier deviceIdentifier) throws OperationManagementException { - for (Operation operation : pendingDeviceInfoOperations) { - if (PluginConstants.OperationCodes.WIPE_DATA.equals(operation.getCode())) { - operation.setStatus(Operation.Status.COMPLETED); - updateStatus(deviceIdentifier.getId(), pendingDeviceInfoOperations); - } - } - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java deleted file mode 100644 index 8d9a7cb4d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/OperationReply.java +++ /dev/null @@ -1,884 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import com.google.gson.Gson; -import org.json.JSONException; -import org.json.JSONObject; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.mobile.windows.api.bean.EnterpriseApplication; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.SyncmlCommandType; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.PasscodePolicy; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.Wifi; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.*; -import org.wso2.carbon.policy.mgt.common.FeatureManagementException; -import org.wso2.carbon.policy.mgt.common.PolicyManagementException; -import org.wso2.carbon.device.mgt.common.policy.mgt.ProfileFeature; - -import java.util.ArrayList; -import java.util.List; - -import static org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils.convertToDeviceIdentifierObject; -import static org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationCode.*; - -/** - * Used to generate a reply to a receiving syncml from a device. - */ -public class OperationReply { - - private SyncmlDocument syncmlDocument; - private SyncmlDocument replySyncmlDocument; - private int headerCommandId = 1; - private static final int HEADER_STATUS_ID = 0; - private static final String RESULTS_COMMAND_TEXT = "Results"; - private static final String HEADER_COMMAND_TEXT = "SyncHdr"; - private static final String ALERT_COMMAND_TEXT = "Alert"; - private static final String REPLACE_COMMAND_TEXT = "Replace"; - private static final String GET_COMMAND_TEXT = "Get"; - private static final String EXEC_COMMAND_TEXT = "Exec"; - private List operations; - Gson gson = new Gson(); - - public OperationReply(SyncmlDocument syncmlDocument, List operations) { - this.syncmlDocument = syncmlDocument; - replySyncmlDocument = new SyncmlDocument(); - this.operations = operations; - } - - public OperationReply(SyncmlDocument syncmlDocument) { - this.syncmlDocument = syncmlDocument; - replySyncmlDocument = new SyncmlDocument(); - } - - public OperationReply() { - - } - - /** - * Generate Device payloads. - * - * @param syncmlDocument Parsed syncml payload from the syncml engine. - * @param operations Operations for generate payload. - * @return String type syncml payload. - * @throws WindowsOperationException - * @throws PolicyManagementException - * @throws org.wso2.carbon.policy.mgt.common.FeatureManagementException - */ - public String generateReply(SyncmlDocument syncmlDocument, List operations) - throws SyncmlMessageFormatException, SyncmlOperationException, WindowsOperationException { - - OperationReply operationReply; - SyncmlGenerator generator; - SyncmlDocument syncmlResponse; - if (operations == null) { - operationReply = new OperationReply(syncmlDocument); - } else { - operationReply = new OperationReply(syncmlDocument, operations); - } - syncmlResponse = operationReply.generateReply(); - generator = new SyncmlGenerator(); - return generator.generatePayload(syncmlResponse); - } - - public SyncmlDocument generateReply() - throws SyncmlMessageFormatException, SyncmlOperationException, WindowsOperationException { - generateHeader(); - generateBody(); - return replySyncmlDocument; - } - - private void generateHeader() throws SyncmlMessageFormatException { - String nextNonceValue = Constants.INITIAL_NONCE; - SyncmlHeader sourceHeader = syncmlDocument.getHeader(); - SyncmlHeader header = new SyncmlHeader(); - header.setMsgID(sourceHeader.getMsgID()); - header.setHexadecimalSessionId(Integer.toHexString(sourceHeader.getSessionId())); - TargetTag target = new TargetTag(); - target.setLocURI(sourceHeader.getSource().getLocURI()); - header.setTarget(target); - - SourceTag source = new SourceTag(); - source.setLocURI(sourceHeader.getTarget().getLocURI()); - header.setSource(source); - - CredentialTag cred = new CredentialTag(); - if (sourceHeader.getCredential() == null) { - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.CRED_FORMAT); - meta.setType(Constants.CRED_TYPE); - cred.setMeta(meta); - } else { - cred.setMeta(sourceHeader.getCredential().getMeta()); - } - SyncmlBody sourcebody = syncmlDocument.getBody(); - List statuses = sourcebody.getStatus(); - - for (StatusTag status : statuses) { - if (HEADER_COMMAND_TEXT.equals(status.getCommand()) && - status.getChallenge() != null) { - nextNonceValue = status.getChallenge().getMeta().getNextNonce(); - } - } - cred.setData(SyncmlCredentialUtil.generateCredData(nextNonceValue)); - header.setCredential(cred); - - replySyncmlDocument.setHeader(header); - } - - private void generateBody() - throws SyncmlMessageFormatException, SyncmlOperationException, WindowsOperationException { - SyncmlBody syncmlBody = generateStatuses(); - try { - appendOperations(syncmlBody); - } catch (JSONException e) { - throw new SyncmlMessageFormatException("Error Occurred while parsing operation object.", e); - } - replySyncmlDocument.setBody(syncmlBody); - } - - private SyncmlBody generateStatuses() { - SyncmlBody sourceSyncmlBody = syncmlDocument.getBody(); - SyncmlHeader sourceHeader = syncmlDocument.getHeader(); - StatusTag headerStatus; - ChallengeTag challengeTag = new ChallengeTag(); - MetaTag metaTag = new MetaTag(); - metaTag.setFormat(Constants.CRED_FORMAT); - metaTag.setType(Constants.CRED_TYPE); - metaTag.setNextNonce(Constants.INITIAL_NONCE); - challengeTag.setMeta(metaTag); - SyncmlBody syncmlBodyReply = new SyncmlBody(); - List statuses = new ArrayList<>(); - List sourceStatuses = sourceSyncmlBody.getStatus(); - if (sourceStatuses.isEmpty()) { - headerStatus = - new StatusTag(headerCommandId, sourceHeader.getMsgID(), HEADER_STATUS_ID, - HEADER_COMMAND_TEXT, challengeTag,sourceHeader.getSource().getLocURI(), - String.valueOf(Constants.SyncMLResponseCodes.UNAUTHORIZED)); - statuses.add(headerStatus); - } else { - for (StatusTag sourceStatus : sourceStatuses) { - if (sourceStatus.getChallenge() != null && HEADER_COMMAND_TEXT.equals(sourceStatus.getCommand())) { - headerStatus = - new StatusTag(headerCommandId, sourceHeader.getMsgID(), HEADER_STATUS_ID, - HEADER_COMMAND_TEXT, challengeTag, sourceHeader.getSource().getLocURI(), - String.valueOf(Constants.SyncMLResponseCodes.AUTHENTICATION_ACCEPTED)); - statuses.add(headerStatus); - } - } - } - if (sourceSyncmlBody.getResults() != null) { - int ResultCommandId = ++headerCommandId; - StatusTag resultStatus = new StatusTag(ResultCommandId, sourceHeader.getMsgID(), - sourceSyncmlBody.getResults().getCommandId(), RESULTS_COMMAND_TEXT, null, - String.valueOf(Constants.SyncMLResponseCodes.ACCEPTED)); - statuses.add(resultStatus); - } - if (sourceSyncmlBody.getAlert() != null) { - int alertCommandId = ++headerCommandId; - StatusTag alertStatus = new StatusTag(alertCommandId, - sourceHeader.getMsgID(), - sourceSyncmlBody.getAlert().getCommandId(), - ALERT_COMMAND_TEXT, null, - String.valueOf(Constants.SyncMLResponseCodes.ACCEPTED)); - statuses.add(alertStatus); - } - if (sourceSyncmlBody.getReplace() != null) { - int replaceCommandId = ++headerCommandId; - StatusTag replaceStatus = new StatusTag(replaceCommandId, sourceHeader.getMsgID(), - sourceSyncmlBody.getReplace().getCommandId(), REPLACE_COMMAND_TEXT, null, - String.valueOf(Constants.SyncMLResponseCodes.ACCEPTED) - ); - statuses.add(replaceStatus); - } - if (sourceSyncmlBody.getExec() != null) { - List Executes = sourceSyncmlBody.getExec(); - for (ExecuteTag exec : Executes) { - int execCommandId = ++headerCommandId; - StatusTag execStatus = new StatusTag(execCommandId, sourceHeader.getMsgID(), - exec.getCommandId(), EXEC_COMMAND_TEXT, null, String.valueOf( - Constants.SyncMLResponseCodes.ACCEPTED)); - statuses.add(execStatus); - } - } - if (sourceSyncmlBody.getGet() != null) { - int getCommandId = ++headerCommandId; - StatusTag execStatus = new StatusTag(getCommandId, sourceHeader.getMsgID(), sourceSyncmlBody - .getGet().getCommandId(), GET_COMMAND_TEXT, null, String.valueOf( - Constants.SyncMLResponseCodes.ACCEPTED)); - statuses.add(execStatus); - } - syncmlBodyReply.setStatus(statuses); - return syncmlBodyReply; - } - - private void appendOperations(SyncmlBody syncmlBody) - throws JSONException, SyncmlOperationException, WindowsOperationException { - GetTag getElement = new GetTag(); - List getElements = new ArrayList<>(); - List executeElements = new ArrayList<>(); - AtomicTag atomicTagElement = new AtomicTag(); - List addElements = new ArrayList<>(); - ReplaceTag replaceElement = new ReplaceTag(); - List replaceItems = new ArrayList<>(); - SequenceTag monitorSequence = new SequenceTag(); - List deviceInfoOperations; - if (operations != null) { - for (Operation operation : operations) { - Operation.Type type = operation.getType(); - switch (type) { - case POLICY: - if (this.syncmlDocument.getBody().getAlert() != null) { - if ((Constants.INITIAL_ALERT_DATA.equals(this.syncmlDocument.getBody().getAlert() - .getData())) || Constants.INITIAL_WIN10_ALERT_DATA. - equals(this.syncmlDocument.getBody() - .getAlert().getData())) { - SequenceTag policySequence = new SequenceTag(); - policySequence = buildSequence(operation, policySequence); - syncmlBody.setSequence(policySequence); - } - } - break; - case CONFIG: - List addConfigurations = appendAddConfiguration(operation); - for (AddTag addConfiguration : addConfigurations) { - addElements.add(addConfiguration); - } - break; - case MESSAGE: - - break; - case INFO: - ItemTag itemGet = appendGetInfo(operation); - getElements.add(itemGet); - break; - case COMMAND: - ExecuteTag execElement; - if ((PluginConstants.OperationCodes.DEVICE_LOCK.equals(operation.getCode()))) { - execElement = executeCommand(operation); - executeElements.add(execElement); - } - if ((PluginConstants.OperationCodes.DEVICE_RING.equals(operation.getCode()))) { - execElement = executeCommand(operation); - executeElements.add(execElement); - } - if ((PluginConstants.OperationCodes.DISENROLL.equals(operation.getCode()))) { - execElement = executeCommand(operation); - executeElements.add(execElement); - } - if ((PluginConstants.OperationCodes.WIPE_DATA.equals(operation.getCode()))) { - execElement = executeCommand(operation); - executeElements.add(execElement); - } - if ((PluginConstants.OperationCodes.LOCK_RESET.equals(operation.getCode()))) { - SequenceTag sequenceElement = new SequenceTag(); - SequenceTag sequence = buildSequence(operation, sequenceElement); - syncmlBody.setSequence(sequence); - } - if (PluginConstants.OperationCodes.DEVICE_LOCATION.equals(operation.getCode())) { - Operation longitudeOperation = new Operation(); - Operation latitudeOperation = new Operation(); - longitudeOperation.setCode(PluginConstants.OperationCodes.LONGITUDE); - latitudeOperation.setCode(PluginConstants.OperationCodes.LATITUDE); - List deviceLocationOperations = new ArrayList<>(); - deviceLocationOperations.add(latitudeOperation); - deviceLocationOperations.add(longitudeOperation); - for (Operation infoOperation : deviceLocationOperations) { - ItemTag deviceInfo = appendGetInfo(infoOperation); - getElements.add(deviceInfo); - } - } - if (PluginConstants.OperationCodes.DEVICE_REBOOT.equals(operation.getCode())) { - execElement = executeCommand(operation); - executeElements.add(execElement); - } - if ((PluginConstants.OperationCodes.MONITOR.equals(operation.getCode()))) { - GetTag monitorGetElement = new GetTag(); - List monitorItems; - List profileFeatures; - - if (this.syncmlDocument.getBody().getAlert() != null) { - if (Constants.INITIAL_ALERT_DATA.equals(this.syncmlDocument.getBody(). - getAlert().getData()) || Constants.INITIAL_WIN10_ALERT_DATA. - equals(this.syncmlDocument.getBody() - .getAlert().getData())) { - - monitorSequence.setCommandId(operation.getId()); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject( - syncmlDocument.getHeader().getSource().getLocURI()); - try { - profileFeatures = WindowsAPIUtils.getPolicyManagerService(). - getEffectiveFeatures(deviceIdentifier); - } catch (FeatureManagementException e) { - throw new SyncmlOperationException("Error in getting effective policy.", e); - } - monitorItems = buildMonitorOperation(profileFeatures); - if (!monitorItems.isEmpty()) { - monitorGetElement.setCommandId(operation.getId()); - monitorGetElement.setItems(monitorItems); - } - monitorSequence.setGet(monitorGetElement); - syncmlBody.setSequence(monitorSequence); - } - } - } - if (PluginConstants.OperationCodes.DEVICE_INFO.equals(operation.getCode())) { - if (this.syncmlDocument.getBody().getAlert() != null) { - if ((Constants.INITIAL_ALERT_DATA.equals(this.syncmlDocument.getBody().getAlert() - .getData())) || Constants.INITIAL_WIN10_ALERT_DATA. - equals(this.syncmlDocument.getBody() - .getAlert().getData())) { - HeartBeatDeviceInfo heartBeatDeviceInfo = new HeartBeatDeviceInfo(); - deviceInfoOperations = heartBeatDeviceInfo.getDeviceInfo(); - for (Operation infoOperation : deviceInfoOperations) { - ItemTag deviceInfo = appendGetInfo(infoOperation); - getElements.add(deviceInfo); - } - } - } - } - break; - case PROFILE: - if (PluginConstants.OperationCodes.INSTALL_ENTERPRISE_APPLICATION.equals(operation.getCode())) { - EnterpriseApplication enterpriseApplication = gson - .fromJson((String) operation.getPayLoad(), EnterpriseApplication.class); - List enterpriseApplicationContent = enterpriseApplication - .createOperationContent(operation); - for (Object object : enterpriseApplicationContent) { - if (object instanceof AddTag) { - addElements.add((AddTag) object); - } else if (object instanceof ExecuteTag) { - executeElements.add((ExecuteTag) object); - } - } - } - break; - } - } - if (!replaceItems.isEmpty()) { - replaceElement.setCommandId(Constants.SyncmlMessageCodes.replaceCommandId); - replaceElement.setItems(replaceItems); - } - if (!getElements.isEmpty()) { - getElement.setCommandId(Constants.SyncmlMessageCodes.elementCommandId); - getElement.setItems(getElements); - } - if (!addElements.isEmpty()) { - atomicTagElement.setCommandId(Constants.SyncmlMessageCodes.atomicCommandId); - atomicTagElement.setAdds(addElements); - } - syncmlBody.setGet(getElement); - syncmlBody.setExec(executeElements); - syncmlBody.setAtomicTag(atomicTagElement); - syncmlBody.setReplace(replaceElement); - } - } - - private ItemTag appendExecInfo(Operation operation) { - ItemTag item = new ItemTag(); - String operationCode = operation.getCode(); - for (Command command : Command.values()) { - if (operationCode != null && operationCode.equals(command.name())) { - TargetTag target = new TargetTag(); - target.setLocURI(command.getCode()); - if ((PluginConstants - .OperationCodes.DISENROLL.equals(operation.getCode()))) { - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_CHARACTER); - item.setMeta(meta); - item.setData(Constants.PROVIDER_ID); - } - item.setTarget(target); - } - } - return item; - } - - private ItemTag appendGetInfo(Operation operation) { - ItemTag item = new ItemTag(); - String operationCode = operation.getCode(); - for (Info info : Info.values()) { - if (operationCode != null && operationCode.equals(info.name())) { - TargetTag target = new TargetTag(); - target.setLocURI(info.getCode()); - item.setTarget(target); - } - } - if ((operationCode != null) && - PluginConstants.OperationCodes.LOCK_RESET.equals(operationCode)) { - operation.setCode(PluginConstants.OperationCodes.PIN_CODE); - for (Info getInfo : Info.values()) { - if (operation.getCode().equals(getInfo.name())) { - TargetTag target = new TargetTag(); - target.setLocURI(getInfo.getCode()); - item.setTarget(target); - } - } - } - return item; - } - - private ItemTag appendReplaceInfo(Operation operation) throws JSONException { - String policyAllowData = "1"; - String policyDisallowData = "0"; - ItemTag item = new ItemTag(); - TargetTag target = new TargetTag(); - String operationCode = operation.getCode(); - JSONObject payload = new JSONObject(operation.getPayLoad().toString()); - for (Command command : Command.values()) { - - if (operationCode != null && operationCode.equals(command.name())) { - target.setLocURI(command.getCode()); - - if ((PluginConstants.OperationCodes.CAMERA.equals(operation.getCode()))) { - - if (payload.getBoolean("enabled")) { - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_INT); - item.setTarget(target); - item.setMeta(meta); - item.setData(policyAllowData); - } else { - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_INT); - item.setTarget(target); - item.setMeta(meta); - item.setData(policyDisallowData); - } - } - if ((PluginConstants.OperationCodes.ENCRYPT_STORAGE. - equals(operation.getCode()))) { - - if (payload.getBoolean("encrypted")) { - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_INT); - item.setTarget(target); - item.setMeta(meta); - item.setData(policyAllowData); - } else { - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_INT); - item.setTarget(target); - item.setMeta(meta); - item.setData(policyDisallowData); - } - } - } - } - return item; - } - - private List appendAddInfo(Operation operation) throws WindowsOperationException { - - List addList = new ArrayList<>(); - Gson gson = new Gson(); - - if ((PluginConstants.OperationCodes.PASSCODE_POLICY.equals(operation.getCode()))) { - - PasscodePolicy passcodeObject = gson.fromJson((String) operation.getPayLoad(), PasscodePolicy.class); - - for (Configure configure : Configure.values()) { - - if (operation.getCode() != null && PluginConstants.OperationCodes.PASSWORD_MAX_FAIL_ATTEMPTS. - equals(configure.name())) { - AddTag add = generatePasscodePolicyData(configure, passcodeObject.getMaxFailedAttempts()); - addList.add(add); - } - if (operation.getCode() != null && (PluginConstants.OperationCodes.DEVICE_PASSWORD_ENABLE. - equals(configure.name()) || PluginConstants.OperationCodes.SIMPLE_PASSWORD. - equals(configure.name()) || PluginConstants.OperationCodes.ALPHANUMERIC_PASSWORD. - equals(configure.name()))) { - AddTag add = generatePasscodeBooleanData(operation, configure); - addList.add(add); - } - if (operation.getCode() != null && PluginConstants.OperationCodes.MIN_PASSWORD_LENGTH. - equals(configure.name())) { - AddTag add = generatePasscodePolicyData(configure, passcodeObject.getMinLength()); - addList.add(add); - } - if (operation.getCode() != null && PluginConstants.OperationCodes.PASSWORD_EXPIRE. - equals(configure.name())) { - AddTag add = generatePasscodePolicyData(configure, passcodeObject.getMaxPINAgeInDays()); - addList.add(add); - } - if (operation.getCode() != null && PluginConstants.OperationCodes.PASSWORD_HISTORY. - equals(configure.name())) { - int pinHistory = passcodeObject.getPinHistory(); - AddTag add = generatePasscodePolicyData(configure, pinHistory); - addList.add(add); - } - if (operation.getCode() != null && PluginConstants.OperationCodes.MAX_PASSWORD_INACTIVE_TIME. - equals(configure.name())) { - AddTag add = generatePasscodePolicyData(configure, passcodeObject.getMaxInactiveTime()); - addList.add(add); - } - if (operation.getCode() != null && PluginConstants.OperationCodes.MIN_PASSWORD_COMPLEX_CHARACTERS. - equals(configure.name())) { - int complexChars = passcodeObject.getMinComplexChars(); - AddTag add = generatePasscodePolicyData(configure, complexChars); - addList.add(add); - } - } - } - return addList; - } - - private List appendAddConfiguration(Operation operation) { - - List addList = new ArrayList<>(); - Gson gson = new Gson(); - - if (SyncmlCommandType.WIFI.getValue().equals(operation.getCode())) { - AddTag add = new AddTag(); - String operationCode = operation.getCode(); - Wifi wifiObject = gson.fromJson((String) operation.getPayLoad(), Wifi.class); - String data = "<?xml version="1.0"?><WLANProfile" + - "xmlns="http://www.microsoft.com/networking/WLAN/profile/v1"><name>" + - wifiObject.getNetworkName() + "</name><SSIDConfig><SSID><name>" + - wifiObject.getSsid() + "</name></SSID></SSIDConfig><connectionType>" + - wifiObject.getConnectionType() + "</connectionType><connectionMode>" + - wifiObject.getConnectionMode() + "</connectionMode><MSM><security><" + - "authEncryption><authentication>" + wifiObject.getAuthentication() + - "</authentication><encryption>" + wifiObject.getEncryption() + - "</encryption></authEncryption><sharedKey><keyType>" + - wifiObject.getKeyType() + "</keyType><protected>" + wifiObject.getProtection() + - "</protected><keyMaterial>" + wifiObject.getKeyMaterial() + - "</keyMaterial></sharedKey></security></MSM></WLANProfile>"; - - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_CHARACTER); - List items = new ArrayList<>(); - - for (Configure configure : Configure.values()) { - if (operationCode != null && operationCode.equals(configure.name())) { - TargetTag target = new TargetTag(); - target.setLocURI(configure.getCode()); - items.get(0).setTarget(target); - } - } - items.get(0).setMeta(meta); - items.get(0).setData(data); - - add.setCommandId(301); - add.setItems(items); - addList.add(add); - return addList; - } - return null; - } - - public ExecuteTag executeCommand(Operation operation) { - ExecuteTag execElement = new ExecuteTag(); - execElement.setCommandId(operation.getId()); - List itemsExec = new ArrayList<>(); - ItemTag itemExec = appendExecInfo(operation); - itemsExec.add(itemExec); - execElement.setItems(itemsExec); - return execElement; - } - - public SequenceTag buildSequence(Operation operation, SequenceTag sequenceElement) throws JSONException, - SyncmlOperationException { - - sequenceElement.setCommandId(operation.getId()); - List replaceItems = new ArrayList<>(); - - if ((PluginConstants.OperationCodes.LOCK_RESET.equals(operation.getCode()))) { - ExecuteTag execElement = executeCommand(operation); - GetTag getElements = new GetTag(); - getElements.setCommandId(operation.getId()); - List getItems = new ArrayList<>(); - ItemTag itemGets = appendGetInfo(operation); - getItems.add(itemGets); - getElements.setItems(getItems); - - sequenceElement.setExec(execElement); - sequenceElement.setGet(getElements); - return sequenceElement; - } else if ((PluginConstants.OperationCodes.POLICY_BUNDLE.equals(operation.getCode()))) { - List policyOperations; - try { - policyOperations = (List) operation.getPayLoad(); - } catch (ClassCastException e) { - throw new ClassCastException(); - } - for (Operation policy : policyOperations) { - - if (PluginConstants.OperationCodes.CAMERA.equals(policy.getCode())) { - ReplaceTag replaceCameraConfig = new ReplaceTag(); - ItemTag cameraItem; - List cameraItems = new ArrayList<>(); - - try { - cameraItem = appendReplaceInfo(policy); - cameraItems.add(cameraItem); - } catch (JSONException e) { - throw new SyncmlOperationException("Error occurred while parsing payload object to json.", e); - } - replaceCameraConfig.setCommandId(operation.getId()); - replaceCameraConfig.setItems(cameraItems); - replaceItems.add(replaceCameraConfig); - } - if ((PluginConstants.OperationCodes.ENCRYPT_STORAGE.equals(policy.getCode()))) { - - ReplaceTag replaceStorageConfig = new ReplaceTag(); - ItemTag storageItem; - List storageItems = new ArrayList<>(); - try { - storageItem = appendReplaceInfo(policy); - storageItems.add(storageItem); - } catch (JSONException e) { - throw new SyncmlOperationException("Error occurred while parsing payload object to json.", e); - } - replaceStorageConfig.setCommandId(operation.getId()); - replaceStorageConfig.setItems(storageItems); - replaceItems.add(replaceStorageConfig); - - } - if ((PluginConstants.OperationCodes.PASSCODE_POLICY.equals(policy.getCode()))) { - AtomicTag atomicTagElement = new AtomicTag(); - List addConfig; - DeleteTag deleteTag = new DeleteTag(); - try { - addConfig = appendAddInfo(policy); - atomicTagElement.setAdds(addConfig); - atomicTagElement.setCommandId(operation.getId()); - List deleteTagItems = buildDeletePasscodeData(policy); - deleteTag.setCommandId(operation.getId()); - deleteTag.setItems(deleteTagItems); - sequenceElement.setDeleteTag(deleteTag); - sequenceElement.setAtomicTag(atomicTagElement); - } catch (WindowsOperationException e) { - throw new SyncmlOperationException("Error occurred while generating operation payload.", e); - } - } - } - if (!replaceItems.isEmpty()) { - sequenceElement.setReplaces(replaceItems); - } - return sequenceElement; - - } else { - return null; - } - } - - public List buildMonitorOperation(List effectiveMonitoringFeature) { - List monitorItems = new ArrayList<>(); - Operation monitorOperation; - for (ProfileFeature profileFeature : effectiveMonitoringFeature) { - - if ((PluginConstants.OperationCodes.CAMERA.equals - (profileFeature.getFeatureCode()))) { - String cameraStatus = PluginConstants - .OperationCodes.CAMERA_STATUS; - - monitorOperation = new Operation(); - monitorOperation.setCode(cameraStatus); - ItemTag item = appendGetInfo(monitorOperation); - monitorItems.add(item); - } - if (PluginConstants.OperationCodes.ENCRYPT_STORAGE.equals - (profileFeature.getFeatureCode())) { - String encryptStorageStatus = PluginConstants - .OperationCodes.ENCRYPT_STORAGE_STATUS; - - monitorOperation = new Operation(); - monitorOperation.setCode(encryptStorageStatus); - ItemTag item = appendGetInfo(monitorOperation); - monitorItems.add(item); - } - if ((PluginConstants.OperationCodes.PASSCODE_POLICY.equals - (profileFeature.getFeatureCode()))) { - String passcodeStatus = PluginConstants - .OperationCodes.DEVICE_PASSWORD_STATUS; - - monitorOperation = new Operation(); - monitorOperation.setCode(passcodeStatus); - ItemTag item = appendGetInfo(monitorOperation); - monitorItems.add(item); - } - } - return monitorItems; - } - - - public List buildDeletePasscodeData(Operation operation) { - List deleteTagItems = new ArrayList<>(); - ItemTag itemTag = new ItemTag(); - TargetTag target = new TargetTag(); - if ((PluginConstants.OperationCodes.PASSCODE_POLICY.equals(operation.getCode()))) { - operation.setCode(PluginConstants.OperationCodes.DEVICE_PASSCODE_DELETE); - for (Command command : Command.values()) { - if (operation.getCode() != null && operation.getCode().equals(command.name())) { - target.setLocURI(command.getCode()); - itemTag.setTarget(target); - deleteTagItems.add(itemTag); - } - - } - } - return deleteTagItems; - } - - public AddTag generatePasscodePolicyData(Configure configure, int policyData) { - String attempt = String.valueOf(policyData); - AddTag add = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag target = new TargetTag(); - target.setLocURI(configure.getCode()); - MetaTag meta = new MetaTag(); - meta.setFormat(Constants.META_FORMAT_INT); - item.setTarget(target); - item.setMeta(meta); - item.setData(attempt); - itemList.add(item); - add.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - add.setItems(itemList); - return add; - } - - public AddTag generatePasscodeBooleanData(Operation operation, Configure configure) { - AddTag addTag = null; - - PasscodePolicy passcodePolicy = gson.fromJson((String) operation.getPayLoad(), PasscodePolicy.class); - if (operation.getCode() != null && (PluginConstants.OperationCodes.DEVICE_PASSWORD_ENABLE. - equals(configure.name()))) { - if (passcodePolicy.isEnablePassword()) { - addTag = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag targetTag = new TargetTag(); - targetTag.setLocURI(configure.getCode()); - MetaTag metaag = new MetaTag(); - metaag.setFormat(Constants.META_FORMAT_INT); - item.setTarget(targetTag); - item.setMeta(metaag); - item.setData(Constants.SyncMLResponseCodes.NEGATIVE_CSP_DATA); - itemList.add(item); - addTag.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - addTag.setItems(itemList); - } else { - addTag = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag targetTag = new TargetTag(); - targetTag.setLocURI(configure.getCode()); - MetaTag metaag = new MetaTag(); - metaag.setFormat(Constants.META_FORMAT_INT); - item.setTarget(targetTag); - item.setMeta(metaag); - item.setData(Constants.SyncMLResponseCodes.POSITIVE_CSP_DATA); - itemList.add(item); - addTag.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - addTag.setItems(itemList); - } - } - if (PluginConstants.OperationCodes.ALPHANUMERIC_PASSWORD. - equals(configure.name())) { - if (passcodePolicy.isRequireAlphanumeric()) { - addTag = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag targetTag = new TargetTag(); - targetTag.setLocURI(configure.getCode()); - MetaTag metaag = new MetaTag(); - metaag.setFormat(Constants.META_FORMAT_INT); - item.setTarget(targetTag); - item.setMeta(metaag); - item.setData(Constants.SyncMLResponseCodes.POSITIVE_CSP_DATA); - itemList.add(item); - addTag.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - addTag.setItems(itemList); - } else { - addTag = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag targetTag = new TargetTag(); - targetTag.setLocURI(configure.getCode()); - MetaTag metaag = new MetaTag(); - metaag.setFormat(Constants.META_FORMAT_INT); - item.setTarget(targetTag); - item.setMeta(metaag); - item.setData(Constants.SyncMLResponseCodes.NEGATIVE_CSP_DATA); - itemList.add(item); - addTag.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - addTag.setItems(itemList); - } - } - if (PluginConstants.OperationCodes.SIMPLE_PASSWORD. - equals(configure.name())) { - if (passcodePolicy.isAllowSimple()) { - addTag = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag targetTag = new TargetTag(); - targetTag.setLocURI(configure.getCode()); - MetaTag metaag = new MetaTag(); - metaag.setFormat(Constants.META_FORMAT_INT); - item.setTarget(targetTag); - item.setMeta(metaag); - item.setData(Constants.SyncMLResponseCodes.POSITIVE_CSP_DATA); - itemList.add(item); - addTag.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - addTag.setItems(itemList); - - } else { - addTag = new AddTag(); - List itemList = new ArrayList<>(); - ItemTag item = new ItemTag(); - TargetTag targetTag = new TargetTag(); - targetTag.setLocURI(configure.getCode()); - MetaTag metaag = new MetaTag(); - metaag.setFormat(Constants.META_FORMAT_INT); - item.setTarget(targetTag); - item.setMeta(metaag); - item.setData(Constants.SyncMLResponseCodes.NEGATIVE_CSP_DATA); - itemList.add(item); - addTag.setCommandId(Constants.SyncmlMessageCodes.addCommandId); - addTag.setItems(itemList); - - } - } - return addTag; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlCredentialUtil.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlCredentialUtil.java deleted file mode 100644 index 39ca0f657..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlCredentialUtil.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import org.apache.commons.codec.binary.Base64; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; - -import java.io.UnsupportedEncodingException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -/** - * Generate security token to client and server. - */ -public class SyncmlCredentialUtil { - - public static String generateCredData(String nextNonce) throws SyncmlMessageFormatException { - MessageDigest digest; - String usrPwdNonceHash; - String nonce; - try { - nonce = new String(Base64.decodeBase64(nextNonce), Constants.UTF_8); - digest = MessageDigest.getInstance(Constants.MD5); - String usrPwd = Constants.PROVIDER_ID + ":" + Constants.SERVER_SECRET; - String usrPwdHash = Base64.encodeBase64String(digest.digest(usrPwd.getBytes(Constants.UTF_8))); - String usrPwdNonce = usrPwdHash + ":" + nonce; - usrPwdNonceHash = Base64.encodeBase64String(digest.digest(usrPwdNonce.getBytes(Constants.UTF_8))); - } catch (UnsupportedEncodingException e) { - throw new SyncmlMessageFormatException("Problem occurred while decoding credentials data.", e); - } catch (NoSuchAlgorithmException e) { - throw new SyncmlMessageFormatException("Application environment does not have an implementation " + - "available/configured for the requested algorithm", e); - } - return usrPwdNonceHash; - } - - public static String generateRST(String username, String password) throws SyncmlMessageFormatException { - MessageDigest digest; - String usrPwdNonceHash; - String nonce; - try { - nonce = new String(Base64.decodeBase64(Constants.INITIAL_NONCE), Constants.UTF_8); - digest = MessageDigest.getInstance(Constants.MD5); - String usrPwd = username + ":" + password; - String usrPwdHash = Base64.encodeBase64String(digest.digest(usrPwd.getBytes(Constants.UTF_8))); - String usrPwdNonce = usrPwdHash + ":" + nonce; - usrPwdNonceHash = Base64.encodeBase64String(digest.digest(usrPwdNonce.getBytes(Constants.UTF_8))); - } catch (UnsupportedEncodingException e) { - throw new SyncmlMessageFormatException("Problem occurred while decoding credentials data.", e); - } catch (NoSuchAlgorithmException e) { - throw new SyncmlMessageFormatException("Application environment does not have an implementation " + - "available/configured for the requested algorithm", e); - } - return usrPwdNonceHash; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlGenerator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlGenerator.java deleted file mode 100644 index 926ef528b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlGenerator.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlDocument; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlHeader; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlBody; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.*; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import java.io.StringWriter; - -/** - * Generates the response syncml xml file that should be sent to the Device. - */ -public class SyncmlGenerator { - - public static String generatePayload(SyncmlDocument syncmlDocument) throws SyncmlOperationException { - Document doc = generateDocument(); - Element rootElement = createRootElement(doc); - SyncmlHeader header = syncmlDocument.getHeader(); - header.buildSyncmlHeaderElement(doc, rootElement); - SyncmlBody body = syncmlDocument.getBody(); - body.buildBodyElement(doc, rootElement); - return transformDocument(doc); - } - - public static Document generateDocument() throws SyncmlOperationException { - DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder docBuilder; - try { - docBuilder = documentFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new SyncmlOperationException("Error occurred while generating a new document of syncml", e); - } - return docBuilder.newDocument(); - } - - private static Element createRootElement(Document document) { - Element rootElement = document.createElementNS(Constants.XMLNS_SYNCML, - Constants.SYNCML_ROOT_ELEMENT_NAME); - document.appendChild(rootElement); - return rootElement; - } - - private static String transformDocument(Document document) throws SyncmlOperationException { - DOMSource domSource = new DOMSource(document); - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer; - try { - transformer = transformerFactory.newTransformer(); - } catch (TransformerConfigurationException e) { - throw new SyncmlOperationException("Error occurred while retrieving a new transformer", e); - } - transformer.setOutputProperty(OutputKeys.ENCODING, Constants.UTF_8); - transformer.setOutputProperty(OutputKeys.INDENT, Constants.YES); - - StringWriter stringWriter = new StringWriter(); - StreamResult streamResult = new StreamResult(stringWriter); - try { - transformer.transform(domSource, streamResult); - } catch (TransformerException e) { - throw new SyncmlOperationException("Error occurred while transforming document to a string", e); - } - return stringWriter.toString(); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlParser.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlParser.java deleted file mode 100644 index af5b33977..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/operations/util/SyncmlParser.java +++ /dev/null @@ -1,496 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.operations.util; - -import org.apache.juli.logging.Log; -import org.apache.juli.logging.LogFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.wso2.carbon.device.mgt.mobile.windows.api.bean.EnterpriseApplication; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.*; - -import java.util.ArrayList; -import java.util.List; - -/** - * Parses the receiving SyncML payload and generates the SyncML document object from it. - */ -public class SyncmlParser { - - private static String commandId; - private static String messageReference; - private static String commandReference; - private static final String SYNC_HEADER = "SyncHdr"; - private static final String SYNC_BODY = "SyncBody"; - - private enum SyncMLHeaderParameter { - MSG_ID("MsgID"), - SESSION_ID("SessionID"), - TARGET("Target"), - SOURCE("Source"), - CRED("Cred"); - private final String parameterName; - - SyncMLHeaderParameter(final String parameterName) { - this.parameterName = parameterName; - } - - public String getValue() { - return this.parameterName; - } - } - - private enum SycMLCommandType { - ALERT("Alert"), - REPLACE("Replace"), - STATUS("Status"), - RESULTS("Results"); - private final String commandName; - - SycMLCommandType(final String commandName) { - this.commandName = commandName; - } - - public String getValue() { - return this.commandName; - } - } - - - /** - * Parses the raw SyncML payload and generates a SyncmlDocument object using the parsed XML contents. - * - * @param syncmlPayload - Received SyncML XML payload - * @return - SyncmlDocument object generated from the received payload - */ - public static SyncmlDocument parseSyncmlPayload(Document syncmlPayload) { - SyncmlDocument syncmlDocument = new SyncmlDocument(); - if (syncmlPayload.getElementsByTagName(SYNC_HEADER) == null) { - throw new IllegalStateException(); - } - NodeList syncHeaderList = syncmlPayload.getElementsByTagName(SYNC_HEADER); - Node syncHeader = syncHeaderList.item(0); - SyncmlHeader header = generateSyncmlHeader(syncHeader); - if (syncmlPayload.getElementsByTagName(SYNC_BODY) == null) { - throw new IllegalStateException(); - } - NodeList syncBodyList = syncmlPayload.getElementsByTagName(SYNC_BODY); - Node syncBody = syncBodyList.item(0); - SyncmlBody body = generateSyncmlBody(syncBody); - - syncmlDocument.setHeader(header); - syncmlDocument.setBody(body); - return syncmlDocument; - } - - /** - * Generates SyncmlHeader object by extracting properties of passed XML node. - * - * @param syncHeader - XML node which represents SyncML header - * @return - SyncmlHeader object - */ - private static SyncmlHeader generateSyncmlHeader(Node syncHeader) { - - String sessionID = null; - String messageID = null; - TargetTag target = null; - SourceTag source = null; - CredentialTag credential = null; - SyncmlHeader header = new SyncmlHeader(); - - NodeList headerElements = syncHeader.getChildNodes(); - for (int i = 0; i < headerElements.getLength(); i++) { - Node node = headerElements.item(i); - - if (node.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = node.getNodeName(); - - if (SyncMLHeaderParameter.MSG_ID.getValue().equals(nodeName)) { - if (node.getTextContent().trim() == null) { - throw new IllegalStateException(); - } else { - messageID = node.getTextContent().trim(); - } - } else if (SyncMLHeaderParameter.SESSION_ID.getValue().equals(nodeName)) { - if (node.getTextContent().trim() == null) { - throw new IllegalStateException(); - } else { - sessionID = node.getTextContent().trim(); - } - } else if (SyncMLHeaderParameter.TARGET.getValue().equals(nodeName)) { - if (node.getTextContent().trim() == null) { - throw new IllegalStateException(); - } else { - target = generateTarget(node); - } - } else if (SyncMLHeaderParameter.SOURCE.getValue().equals(nodeName)) { - if (node.getTextContent().trim() == null) { - throw new IllegalStateException(); - } else { - source = generateSource(node); - } - } else if (SyncMLHeaderParameter.CRED.getValue().equals(nodeName)) { - if (node.getTextContent().trim() == null) { - throw new IllegalStateException(); - } else { - credential = generateCredential(node); - } - } - } - } - header.setMsgID(Integer.valueOf(messageID)); - // Syncml message contains a sessionID which is Hexadecimal value.Hexadecimal sessionID parse as a integer value. - header.setSessionId(Integer.valueOf(sessionID, 16)); - header.setTarget(target); - header.setSource(source); - header.setCredential(credential); - return header; - } - - /** - * Generates SyncmlBody object by extracting properties of passed XML node. - * - * @param syncBody - XML node which represents SyncML body - * @return - SyncmlBody object - */ - private static SyncmlBody generateSyncmlBody(Node syncBody) { - - AlertTag alert = null; - ReplaceTag replace = null; - ResultsTag results = null; - List status = new ArrayList<>(); - NodeList bodyElements = syncBody.getChildNodes(); - - for (int i = 0; i < bodyElements.getLength(); i++) { - Node node = bodyElements.item(i); - - if (node.getNodeType() == Node.ELEMENT_NODE) { - String nodeName = node.getNodeName(); - - if (SycMLCommandType.ALERT.getValue().equals(nodeName)) { - alert = generateAlert(node); - } else if (SycMLCommandType.REPLACE.getValue().equals(nodeName)) { - replace = generateReplace(node); - } else if (SycMLCommandType.STATUS.getValue().equals(nodeName)) { - status.add(generateStatus(node)); - } else if (SycMLCommandType.RESULTS.getValue().equals(nodeName)) { - results = generateResults(node); - } - } - } - SyncmlBody body = new SyncmlBody(); - body.setAlert(alert); - body.setReplace(replace); - body.setStatus(status); - body.setResults(results); - return body; - } - - /** - * Generates Source object by extracting properties of passed XML node. - * - * @param node - XML node which represents Source - * @return - Source object - */ - private static SourceTag generateSource(Node node) { - - SourceTag source = new SourceTag(); - Node sourceURIItem = node.getChildNodes().item(0); - Node sourceNameItem = node.getChildNodes().item(1); - String sourceURI = null; - String sourceName = null; - - if (sourceURIItem != null) { - sourceURI = sourceURIItem.getTextContent().trim(); - } - if (sourceNameItem != null) { - sourceName = sourceNameItem.getTextContent().trim(); - } - source.setLocURI(sourceURI); - source.setLocName(sourceName); - return source; - } - - /** - * Generates Target object by extracting properties of passed XML node. - * - * @param node - XML node which represents Target - * @return - Target object - */ - private static TargetTag generateTarget(Node node) { - - TargetTag target = new TargetTag(); - Node targetURIItem = node.getChildNodes().item(0); - Node targetNameItem = node.getChildNodes().item(1); - String targetURI = null; - String targetName = null; - - if (targetURIItem != null) { - targetURI = targetURIItem.getTextContent().trim(); - } - if (targetNameItem != null) { - targetName = targetNameItem.getTextContent().trim(); - } - target.setLocURI(targetURI); - target.setLocName(targetName); - return target; - } - - /** - * Generates Results object by extracting properties of passed XML node. - * - * @param node - XML node which represents Results - * @return - Results object - */ - private static ResultsTag generateResults(Node node) { - - ResultsTag results = new ResultsTag(); - List item = new ArrayList<>(); - - if (node.getNodeType() == Node.ELEMENT_NODE) { - - NodeList nodelist = node.getChildNodes(); - - for (int i = 0; i < nodelist.getLength(); i++) { - String nodeName = nodelist.item(i).getNodeName(); - - switch (nodeName) { - case Constants.COMMAND_ID: - commandId = node.getChildNodes().item(i).getTextContent().trim(); - break; - case Constants.MESSAGE_REFERENCE: - messageReference = node.getChildNodes().item(i).getTextContent().trim(); - break; - case Constants.COMMAND_REFERENCE: - commandReference = node.getChildNodes().item(i).getTextContent().trim(); - break; - case Constants.ITEM: - item.add(generateItem(node.getChildNodes().item(i))); - break; - } - } - results.setCommandId(Integer.valueOf(commandId)); - results.setMessageReference(Integer.valueOf(messageReference)); - results.setCommandReference(Integer.valueOf(commandReference)); - results.setItem(item); - } - return results; - } - - /** - * Generates Status object by extracting properties of passed XML node. - * - * @param node - XML node which represents Status - * @return - Status object - */ - private static StatusTag generateStatus(Node node) { - - StatusTag status = new StatusTag(); - for (int x = 0; x < node.getChildNodes().getLength(); x++) { - String nodeName = node.getChildNodes().item(x).getNodeName(); - switch (nodeName) { - case PluginConstants.SyncML.SYNCML_CMD_ID: - String commandId = node.getChildNodes().item(x).getTextContent().trim(); - status.setCommandId(Integer.valueOf(commandId)); - break; - case PluginConstants.SyncML.SYNCML_MESSAGE_REF: - String messageReference = node.getChildNodes().item(x).getTextContent().trim(); - status.setMessageReference(Integer.valueOf(messageReference)); - break; - case PluginConstants.SyncML.SYNCML_CMD_REF: - String commandReference = node.getChildNodes().item(x).getTextContent().trim(); - status.setCommandReference(Integer.valueOf(commandReference)); - break; - case PluginConstants.SyncML.SYNCML_CMD: - String command = node.getChildNodes().item(x).getTextContent().trim(); - status.setCommand(command); - break; - case PluginConstants.SyncML.SYNCML_CHAL: - NodeList childNodes = node.getChildNodes().item(x).getChildNodes(); - MetaTag meta = new MetaTag(); - ChallengeTag challengeTag = new ChallengeTag(); - String format = childNodes.item(0).getFirstChild().getTextContent(); - meta.setFormat(format); - String type = childNodes.item(0).getFirstChild().getNextSibling().getTextContent(); - meta.setType(type); - String nonce = childNodes.item(0).getFirstChild().getNextSibling().getNextSibling().getTextContent(); - meta.setNextNonce(nonce); - challengeTag.setMeta(meta); - status.setChallenge(challengeTag); - break; - case PluginConstants.SyncML.SYNCML_DATA: - String data = node.getChildNodes().item(x).getTextContent().trim(); - status.setData(data); - break; - case PluginConstants.SyncML.SYNCML_TARGET_REF: - String targetReference = node.getChildNodes().item(x).getTextContent().trim(); - status.setTargetReference(targetReference); - break; - } - } - return status; - } - - /** - * Generates Replace object by extracting properties of passed XML node. - * - * @param node - XML node which represents Replace - * @return - Replace object - */ - private static ReplaceTag generateReplace(Node node) { - - ReplaceTag replace = new ReplaceTag(); - String commandId = node.getChildNodes().item(0).getTextContent().trim(); - List items = new ArrayList<>(); - for (int i = 0; i < node.getChildNodes().getLength() - 1; i++) { - items.add(generateItem(node.getChildNodes().item(i + 1))); - } - replace.setCommandId(Integer.valueOf(commandId)); - replace.setItems(items); - return replace; - } - - /** - * Generates Alert object by extracting properties of passed XML node. - * - * @param node - XML node which represents Alert - * @return - Alert object - */ - private static AlertTag generateAlert(Node node) { - AlertTag alert = new AlertTag(); - String commandID = node.getChildNodes().item(0).getTextContent().trim(); - String data = node.getChildNodes().item(1).getTextContent().trim(); - List items = new ArrayList<>(); - for (int i = 1; i < node.getChildNodes().getLength() - 1; i++) { - items.add(generateItem(node.getChildNodes().item(i + 1))); - } - alert.setCommandId(Integer.valueOf(commandID)); - alert.setData(data); - if (!items.isEmpty()) { - alert.setItems(items); - } - return alert; - } - - /** - * Generates Item object by extracting properties of passed XML node. - * - * @param node - XML node which represents Item - * @return - Item object - */ - private static ItemTag generateItem(Node node) { - ItemTag item = new ItemTag(); - SourceTag source = new SourceTag(); - String data; - String nodeName; - String childNodeName; - String locUri; - for (int x = 0; x < node.getChildNodes().getLength(); x++) { - Node itemNode; - itemNode = node.getChildNodes().item(x); - if (itemNode.getNodeName() != null) { - nodeName = node.getChildNodes().item(x).getNodeName(); - } else { - throw new IllegalStateException(); - } - if (PluginConstants.SyncML.SYNCML_SOURCE.equals(nodeName)) { - if (itemNode.getChildNodes().item(x).getNodeName() != null) { - childNodeName = itemNode.getChildNodes().item(x).getNodeName(); - } else { - throw new IllegalStateException(); - } - if ((PluginConstants.SyncML.SYNCML_LOCATION_URI.equals(childNodeName))) { - if (itemNode.getChildNodes().item(x).getTextContent().trim() != null) { - locUri = itemNode.getChildNodes().item(x).getTextContent().trim(); - } else { - throw new IllegalStateException(); - } - source.setLocURI(locUri); - item.setSource(source); - } - } else if (PluginConstants.SyncML.SYNCML_DATA.equals(nodeName)) { - if (itemNode.getTextContent().trim() != null) { - data = itemNode.getTextContent().trim(); - } else { - throw new IllegalStateException(); - } - item.setData(data); - } else if (PluginConstants.SyncML.SYNCML_META.equals(nodeName)) { - MetaTag metaTag = new MetaTag(); - if (itemNode.getChildNodes().item(0) != null) { - metaTag.setType(itemNode.getChildNodes().item(0).getTextContent().trim()); - } - if (itemNode.getChildNodes().item(1) != null) { - metaTag.setFormat(itemNode.getChildNodes().item(1).getTextContent().trim()); - } - item.setMeta(metaTag); - } - } - return item; - } - - /** - * Generates Credential object by extracting properties of passed XML node. - * - * @param node - XML node which represents Credential - * @return - Credential object - */ - private static CredentialTag generateCredential(Node node) { - CredentialTag credential = new CredentialTag(); - MetaTag meta = generateMeta(node.getChildNodes().item(0)); - String data = node.getChildNodes().item(1).getTextContent().trim(); - credential.setMeta(meta); - credential.setData(data); - return credential; - } - - /** - * Generates MetaTag object by extracting properties of passed XML node. - * - * @param node - XML node which represents MetaTag - * @return - MetaTag object - */ - private static MetaTag generateMeta(Node node) { - MetaTag meta = new MetaTag(); - String format = node.getChildNodes().item(0).getTextContent().trim(); - String type = node.getChildNodes().item(1).getTextContent().trim(); - meta.setFormat(format); - meta.setType(type); - return meta; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/ConfigurationMgtService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/ConfigurationMgtService.java deleted file mode 100644 index 4872e8ba4..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/ConfigurationMgtService.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services; - -import io.swagger.annotations.SwaggerDefinition; -import io.swagger.annotations.Info; -import io.swagger.annotations.ExtensionProperty; -import io.swagger.annotations.Extension; -import io.swagger.annotations.Tag; -import io.swagger.annotations.Api; -import io.swagger.annotations.AuthorizationScope; -import io.swagger.annotations.Authorization; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import io.swagger.annotations.ResponseHeader; - -import org.wso2.carbon.apimgt.annotations.api.Scope; -import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.Message; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import javax.jws.WebService; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -/** - * Windows Platform Configuration REST-API implementation. - * All end points supports JSON, XMl with content negotiation. - */ - -@SwaggerDefinition( - info = @Info( - version = "1.0.0", - title = "", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = "name", value = "Windows Configuration Management"), - @ExtensionProperty(name = "context", - value = "/api/device-mgt/windows/v1.0/configuration"), - }) - } - ), - tags = { - @Tag(name = "windows,device_management", description = "") - } -) -@Api(value = "Windows Configuration Management", - description = "This carries all the resources related to Windows configurations management functionality") -@WebService -@Path("/configuration") -@Produces({"application/json", "application/xml"}) -@Consumes({"application/json", "application/xml"}) -@Scopes( - scopes = { - @Scope( - name = "Enroll Device", - description = "Register an Windows device", - key = "perm:windows:enroll", - permissions = {"/device-mgt/devices/enroll/windows"} - ), - @Scope( - name = "View Configurations", - description = "Getting Windows Platform Configurations", - key = "perm:windows:view-configuration", - permissions = {"/device-mgt/platform-configurations/view"} - ), - @Scope( - name = "Manage Configurations", - description = "Updating Windows Platform Configurations", - key = "perm:windows:manage-configuration", - permissions = {"/device-mgt/platform-configurations/manage"} - ) - } -) -public interface ConfigurationMgtService { - - @GET - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - httpMethod = "GET", - value = "Getting Windows Platform Configurations", - notes = "Get the Windows platform configuration details using this REST API.", - response = PlatformConfiguration.class, - tags = "Windows Configuration Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:view-configuration") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully fetched Windows platform configuration.", - response = PlatformConfiguration.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource has been modified the last time.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Applications can be blacklisted via the application restriction policy too.."), - @ApiResponse( - code = 404, - message = "Not Found. \n Th resource to be deleted does not exist."), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Server error occurred while fetching the Windows platform configuration.") - }) - Response getConfiguration(@ApiParam( - name = "If-Modified-Since", - value = "Checks if the requested variant was modified, since the specified date-time.\n" + - "Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" + - "Example: Mon, 05 Jan 2014 15:10:00 +0200", - required = false) @HeaderParam("If-Modified-Since") String ifModifiedSince); - - /** - * Update Tenant Configurations for the specific Device type. - * - * @param configuration Tenant configurations to be updated. - * @return Response message. - * @throws WindowsConfigurationException - */ - @PUT - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "PUT", - value = "Updating Windows Platform Configurations", - notes = "Update the Windows platform configurations using this REST API.", - tags = "Windows Configuration Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:manage-configuration") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully updated the Windows platform configurations.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the updated Windows platform configuration."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 404, - message = "Not Found. \n The specified resource does not exist."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while modifying the Windows platform configurations.") - }) - Response updateConfiguration - (@ApiParam( - name = "configuration", - value = "The properties to update the Windows platform configurations.") - PlatformConfiguration configuration) throws WindowsConfigurationException; - - @GET - @Path("license") - @Produces(MediaType.TEXT_PLAIN) - @ApiOperation( - produces = MediaType.TEXT_PLAIN, - httpMethod = "GET", - value = "Getting the License Agreement to Register a Windows Device", - notes = "Use this REST API to retrieve the license agreement that is used for the Windows device " + - "registration process.", - response = String.class, - tags = "Windows Configuration Management", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:enroll") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 200, - message = "OK. \n Successfully fetched Windows license configuration.", - response = String.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests."), - }), - @ApiResponse( - code = 304, - message = "Not Modified. \n Empty body because the client already has the latest version of the requested resource."), - @ApiResponse( - code = 404, - message = "Not Found. \n The specified resource does not exist."), - @ApiResponse( - code = 406, - message = "Not Acceptable.\n The requested media type is not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n Server error occurred while fetching the Windows license configuration.") - }) - Response getLicense( - @ApiParam( - name = "If-Modified-Since", - value = "Checks if the requested variant was modified, since the specified date-time.\n" + - "Provide the value in the following format: EEE, d MMM yyyy HH:mm:ss Z.\n" + - "Example: Mon, 05 Jan 2014 15:10:00 +0200.", - required = false) - @HeaderParam("If-Modified-Since") String ifModifiedSince) throws WindowsConfigurationException; - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java deleted file mode 100644 index 4d9f40e0d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementAdminService.java +++ /dev/null @@ -1,624 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services; - -import io.swagger.annotations.*; - -import org.wso2.carbon.apimgt.annotations.api.Scope; -import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.mgt.common.operation.mgt.Activity; -import org.wso2.carbon.device.mgt.mobile.windows.api.bean.wrapper.EnterpriseApplicationBeanWrapper; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; - -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.List; - -/** - * Interface for Admin operations persisting. This interface accepts operations added via UI. - */ - - -@SwaggerDefinition( - info = @Info( - version = "1.0.0", - title = "", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = "name", - value = "Windows Device Management Administrative Service"), - @ExtensionProperty(name = "context", - value = "/api/device-mgt/windows/v1.0/admin/devices"), - }) - } - ), - tags = { - @Tag(name = "windows,device_management", description = "") - } -) -@Api(value = "Windows Device Management Administrative Service", - description = "Device management related admin APIs.") -@WebService -@Path("/admin/devices") -@Consumes(MediaType.APPLICATION_JSON) -@Produces(MediaType.APPLICATION_JSON) -@Scopes( - scopes = { - @Scope( - name = "Lock Device", - description = "Adding a Device Lock on Windows devices.", - key = "perm:windows:lock-devices", - permissions = {"/device-mgt/devices/owning-device/operations/windows/lock"} - ), - @Scope( - name = "Un-enroll Device", - description = "Unregister an Windows device", - key = "perm:windows:disenroll", - permissions = {"/device-mgt/devices/owning-device/operations/windows/disenroll"} - ), - @Scope( - name = "Factory Reset", - description = "Factory Resetting Windows Devices", - key = "perm:windows:wipe", - permissions = {"/device-mgt/devices/owning-device/operations/windows/wipe"} - ), - @Scope( - name = "Ring Device", - description = "Ring Windows devices", - key = "perm:windows:ring", - permissions = {"/device-mgt/devices/owning-device/operations/windows/ring"} - ), - @Scope( - name = "Lock Reset", - description = "Lock reset on Windows devices", - key = "perm:windows:lock-reset", - permissions = {"/device-mgt/devices/owning-device/operations/windows/lock-reset"} - ), - @Scope( - name = "Reboot", - description = "Lock reset on Windows devices", - key = "perm:windows:reboot", - permissions = {"/device-mgt/devices/owning-device/operations/windows/reboot"} - ), - @Scope( - name = "Device Location", - description = "Lock reset on Windows devices", - key = "perm:windows:location", - permissions = {"/device-mgt/devices/owning-device/operations/windows/location"} - ), - @Scope( - name = "Install Enterprise Application", - description = "Installing an Enterprise Application", - key = "perm:windows:enterprise-app", - permissions = {"/device-mgt/devices/owning-device/operations/windows/enterprise-application"} - ) - } -) -public interface DeviceManagementAdminService { - - @POST - @Path("/lock-devices") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Adding a Device Lock on Windows devices.", - notes = "Using this API you have the option of Device Windows device.", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:lock-devices") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully scheduled the device lock operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified. \n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while locking the device.") - }) - Response lock(@HeaderParam("Accept") String headerParam, @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the AWindows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) List deviceIds) throws WindowsDeviceEnrolmentException; - - @POST - @Path("/disenroll-devices") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Dis-enrol the windows Devices", - notes = "Dis-enroll on Android devices", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:disenroll") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully scheduled the Dis-enroll operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified the last time.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.\n", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding a Dis-enroll operation.") - }) - Response disenroll(@HeaderParam("Accept") String headerParam, @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the A Windows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) List deviceIds) throws WindowsDeviceEnrolmentException; - - @POST - @Path("/wipe-devices") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - produces = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Factory Resetting an Windows Device", - notes = "Factory rest or erase all the data stored on the Windows devices" + - "to restore them back to the original system.", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:wipe") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully scheduled the Data wipe operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified." + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.\n", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding the Data wipe operation.")}) - Response wipe(@HeaderParam("Accept") String headerParam, @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the A Windows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) List deviceIds) throws WindowsDeviceEnrolmentException; - - @POST - @Path("/ring-devices") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Ringing Windows Devices", - notes = "Ring Windows devices.", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:ring") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully scheduled the device ring operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding a new device ring operation.") - }) - Response ring(@HeaderParam("Accept") String headerParam, @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the A Windows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) List deviceIds) throws WindowsDeviceEnrolmentException; - - @POST - @Path("/lock-reset-devices") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Lock reset on Windows devices", - notes = "Lock reset on Windows devices.Its use to reset the device pass code", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:lock-reset") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully scheduled the lock-reset operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.\n", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding adding a lock-reset operation.") - }) - Response lockReset(@HeaderParam("Accept") String acceptHeader, @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the A Windows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) List deviceIds) throws WindowsDeviceEnrolmentException; - - @POST - @Path("/location") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Requesting Location Coordinates", - responseContainer = "List", - notes = "Request location coordinates of Windows devices. \n" + - "Example: In situations where you have lost your device and need to find out where it is, " + - "you can use this REST API to get the location of the device.", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:location") - }) - - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Get-location operation has successfully been scheduled", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the " + - "scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the" + - " location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding a new get-location operation.")}) - Response getDeviceLocation( - @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the Windows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) - List deviceIDs); - - @POST - @Path("/reboot") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Rebooting Windows Devices", - notes = "Reboot or restart your Windows devices.", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:reboot") - }) - - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully scheduled the device reboot operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.\n", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding the new device reboot operation.") - }) - Response rebootDevice( - @ApiParam( - name = "deviceIDs", - value = "Provide the ID of the Android device. Multiple device IDs can be added using comma separated values. ", - required = true) - List deviceIDs); - - - @POST - @Path("/enterprise-application") - @ApiOperation( - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Installing an Enterprise Application", - notes = "Install an enterprise application on Windows devices.", - response = Activity.class, - tags = "Windows Device Management Administrative Service", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:enterprise-app") - }) - } - ) - @ApiResponses(value = { - @ApiResponse( - code = 201, - message = "Created. \n Successfully added Enterprise application operation.", - response = Activity.class, - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "URL of the activity instance that refers to the scheduled operation."), - @ResponseHeader( - name = "Content-Type", - description = "Content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.")}), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.\n", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported.\n"), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while adding the enterprise application operation.") - }) - Response installEnterpriseApplication( - @ApiParam( - name = "enterpriseApplicationBeanWrapper", - value = "Enterprise application configuration and Device IDs", - required = true) - EnterpriseApplicationBeanWrapper enterpriseApplicationBeanWrapper); -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java deleted file mode 100644 index 73cc46b88..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/DeviceManagementService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services; - -import org.w3c.dom.Document; -import org.wso2.carbon.apimgt.annotations.api.Scope; -import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; - -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - - -/** - * Interface for Windows 10 Device management phase. - */ -@Path("/devicemgt") -@Scopes( - scopes = { - @Scope( - name = "Pending operations", - description = "Register an Windows device", - key = "perm:windows:enroll", - permissions = {"/device-mgt/devices/enroll/windows"} - ) - } -) -public interface DeviceManagementService { - @Path("/pending-operations") - @POST - @Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML}) - @Produces(PluginConstants.SYNCML_MEDIA_TYPE) - Response getResponse(Document request) throws WindowsDeviceEnrolmentException, WindowsOperationException, - NotificationManagementException, WindowsConfigurationException; - -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/BSTProvider.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/BSTProvider.java deleted file mode 100644 index 0fbb93df0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/BSTProvider.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst; - -import io.swagger.annotations.*; - -import org.wso2.carbon.apimgt.annotations.api.Scope; -import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.beans.Credentials; - -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -/** - * Interface for handling authentication request comes via MDM login page. - */ - -@SwaggerDefinition( - info = @Info( - version = "1.0.0", - title = "", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = "name", value = "Windows Binary Security Token Service"), - @ExtensionProperty(name = "context", - value = "/api/device-mgt/windows/v1.0/federated"), - }) - } - ), - tags = { - @Tag(name = "windows,device_management", description = "") - } -) -@Api(value = "Windows Binary Security Token Service", - description = "This carries all the resources related to Windows Binary security token management.") -@WebService -@Path("/bst") -@Produces({"application/json", "application/xml"}) -@Consumes({"application/json", "application/xml"}) -@Scopes( - scopes = { - @Scope( - name = "Enroll Device", - description = "Register Windows device", - key = "perm:windows:enroll", - permissions = {"/device-mgt/devices/enroll/windows"} - ) - } -) -public interface BSTProvider { - - @POST - @Consumes(MediaType.APPLICATION_JSON) - @Path("/authentication") - @ApiOperation( - produces = MediaType.APPLICATION_JSON, - consumes = MediaType.APPLICATION_JSON, - httpMethod = "POST", - value = "Getting Binary security token.", - notes = "Using this API to fetch Binary security token to call window enrollment and policy endpoints.", - tags = "BST Provider", - extensions = { - @Extension(properties = { - @ExtensionProperty(name = Constants.SCOPE, value = "perm:windows:enroll") - }) - } - ) - @ApiResponses( - value = { - @ApiResponse(code = 200, message = "Ok. \n Successfully fetching the binary security token.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The URL of the added policy."), - @ResponseHeader( - name = "Content-Type", - description = "The content type of the body"), - @ResponseHeader( - name = "ETag", - description = "Entity Tag of the response resource.\n" + - "Used by caches, or in conditional requests."), - @ResponseHeader( - name = "Last-Modified", - description = "Date and time the resource was last modified.\n" + - "Used by caches, or in conditional requests.") - }), - @ApiResponse( - code = 303, - message = "See Other. \n The source can be retrieved from the URL specified in the location header.", - responseHeaders = { - @ResponseHeader( - name = "Content-Location", - description = "The Source URL of the document.")}), - @ApiResponse( - code = 400, - message = "Bad Request. \n Invalid request or validation error."), - @ApiResponse( - code = 415, - message = "Unsupported media type. \n The format of the requested entity was not supported."), - @ApiResponse( - code = 500, - message = "Internal Server Error. \n " + - "Server error occurred while fetching Binary security token.") - }) - Response getBST(Credentials credentials) - throws WindowsDeviceEnrolmentException; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/beans/Credentials.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/beans/Credentials.java deleted file mode 100644 index 3444b141c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/beans/Credentials.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.beans; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - -/** - * This bean class is for credentials coming from wab page at federated authentication step. - */ -@XmlRootElement(name = "credentials") -@XmlAccessorType(XmlAccessType.FIELD) -public class Credentials { - - @XmlElement(required = true, name = "username") - private String username; - @XmlElement(required = true, name = "email") - private String email; - @XmlElement(required = true, name = "password") - private String password; - @XmlElement(required = true, name = "ownership") - private String ownership; - @XmlElement(required = true, name = "token") - private String usertoken; - - public Credentials() { - - } - - public String getUsertoken() { - return usertoken; - } - - public void setUsertoken(String usertoken) { - this.usertoken = usertoken; - } - - public String getOwnership() { - return ownership; - } - - public void setOwnership(String ownership) { - this.ownership = ownership; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public void setUsername(String username) { - this.username = username; - } - - public void setPassword(String password) { - this.password = password; - } - - public String getUsername() { - return username; - } - - public String getPassword() { - return password; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/impl/BSTProviderImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/impl/BSTProviderImpl.java deleted file mode 100644 index 2961acadb..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/authbst/impl/BSTProviderImpl.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.impl; - -import org.apache.commons.codec.binary.Base64; -import org.json.JSONException; -import org.json.JSONObject; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.Token; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.AuthenticationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.BSTProvider; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.authbst.beans.Credentials; -import org.wso2.carbon.user.api.UserRealm; -import org.wso2.carbon.user.api.UserStoreException; -import org.wso2.carbon.user.core.service.RealmService; -import org.wso2.carbon.utils.multitenancy.MultitenantConstants; - -import javax.ws.rs.core.Response; - -/** - * Implementation class of BSTProvider interface which authenticates the credentials comes via MDM login page. - */ -public class BSTProviderImpl implements BSTProvider { - - /** - * This method validates the device user, checking passed credentials and returns the corresponding - * binary security token which is used in XCEP and WSTEP stages for authentication. - * - * @param credentials - Credential object passes from the wab page. - * @return - Response with binary security token. - */ - @Override - public Response getBST(Credentials credentials) throws WindowsDeviceEnrolmentException { - - String domainUser = credentials.getUsername(); - String userToken = credentials.getUsertoken(); - String encodedToken; - try { - Token tokenBean = new Token(); - tokenBean.setChallengeToken(userToken); - Base64 base64 = new Base64(); - encodedToken = base64.encodeToString(userToken.getBytes()); - DeviceUtil.persistChallengeToken(encodedToken, null, domainUser); - JSONObject tokenContent = new JSONObject(); - tokenContent.put("UserToken", userToken); - return Response.ok().entity(tokenContent.toString()).build(); - } catch (JSONException e) { - throw new WindowsDeviceEnrolmentException( - "Failure occurred in generating Json payload for challenge token.", e); - } - } - - /** - * This method authenticate the user checking the carbon default user store. - * - * @param username - Username in username token - * @param password - Password in username token - * @param tenantDomain - Tenant domain is extracted from the username - * @return - Returns boolean representing authentication result - * @throws AuthenticationException - */ - private boolean authenticate(String username, String password, String tenantDomain) throws - AuthenticationException { - - try { - PrivilegedCarbonContext.startTenantFlow(); - PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - ctx.setTenantDomain(MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); - ctx.setTenantId(MultitenantConstants.SUPER_TENANT_ID); - RealmService realmService = (RealmService) ctx.getOSGiService(RealmService.class, null); - - if (realmService == null) { - throw new AuthenticationException("RealmService not initialized."); - } - - int tenantId; - if (tenantDomain == null || tenantDomain.trim().isEmpty()) { - tenantId = MultitenantConstants.SUPER_TENANT_ID; - } else { - tenantId = realmService.getTenantManager().getTenantId(tenantDomain); - } - - if (tenantId == MultitenantConstants.INVALID_TENANT_ID) { - throw new AuthenticationException("Invalid tenant domain " + tenantDomain); - } - UserRealm userRealm = realmService.getTenantUserRealm(tenantId); - - return userRealm.getUserStoreManager().authenticate(username, password); - } catch (UserStoreException e) { - throw new AuthenticationException("User store is not initialized.", e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java deleted file mode 100644 index d271d9892..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/DiscoveryService.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans.DiscoveryRequest; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans.DiscoveryResponse; - -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import javax.ws.rs.POST; -import javax.xml.ws.BindingType; -import javax.xml.ws.RequestWrapper; -import javax.xml.ws.ResponseWrapper; -import javax.xml.ws.soap.SOAPBinding; - -/** - * Interface for Discovery service related operations. - */ - -@WebService(targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE, - name = "IDiscoveryService") -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public interface DiscoveryService { - @POST - - @RequestWrapper(localName = "Discover", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) - @WebMethod(operationName = "Discover") - @ResponseWrapper(localName = "DiscoverResponse", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) - void discover( - @WebParam(name = "request", targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) - DiscoveryRequest request, - @WebParam(mode = WebParam.Mode.OUT, name = "DiscoverResult", - targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE) - javax.xml.ws.Holder response - ) throws WindowsDeviceEnrolmentException; - -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryRequest.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryRequest.java deleted file mode 100644 index d6e3a185e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryRequest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans; - -import javax.xml.bind.annotation.*; -import java.io.Serializable; -import java.util.List; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DiscoveryRequest", namespace = "http://schemas.microsoft.com/windows/management/2012/01/enrollment") -@SuppressWarnings("unused") -public class DiscoveryRequest implements Serializable { - - @XmlElement(name = "EmailAddress", required = true) - private String emailId; - - @XmlElement(name = "RequestVersion") - private String version; - - @XmlElement(name = "DeviceType") - private String deviceType; - - @XmlElement(name = "OSEdition") - private String osEdition; - - @XmlElement(name = "ApplicationVersion") - private String applicationVersion; - - @XmlElementWrapper(name = "AuthPolicies") - @XmlElement(name = "AuthPolicy", required = true) - private List authenticationPolicies; - - public String getEmailId() { - return emailId; - } - - public void setEmailId(String emailId) { - this.emailId = emailId; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public List getAuthenticationPolicies() { - return authenticationPolicies; - } - - public void setAuthenticationPolicies(List authenticationPolicies) { - this.authenticationPolicies = authenticationPolicies; - } - - public String getOsEdition() { - return osEdition; - } - - public void setOsEdition(String osEdition) { - this.osEdition = osEdition; - } - - public String getApplicationVersion() { - return applicationVersion; - } - - public void setApplicationVersion(String applicationVersion) { - this.applicationVersion = applicationVersion; - } - - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryResponse.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryResponse.java deleted file mode 100644 index 10a124b06..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/DiscoveryResponse.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.io.Serializable; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "DiscoveryResponse") -@SuppressWarnings("unused") -public class DiscoveryResponse implements Serializable { - - @XmlElement(name = "AuthPolicy") - private String authPolicy; - - @XmlElement(name = "EnrollmentPolicyServiceUrl") - private String enrollmentPolicyServiceUrl; - - @XmlElement(name = "EnrollmentServiceUrl") - private String enrollmentServiceUrl; - - @XmlElement(name = "AuthenticationServiceUrl") - private String authenticationServiceUrl; - - @XmlElement(name = "EnrollmentVersion") - private String enrollmentVersion; - - public void setAuthenticationServiceUrl(String authenticationServiceUrl) { - this.authenticationServiceUrl = authenticationServiceUrl; - } - - public String getAuthenticationServiceUrl() { - return authenticationServiceUrl; - } - - public String getAuthPolicy() { - return authPolicy; - } - - public String getEnrollmentPolicyServiceUrl() { - return enrollmentPolicyServiceUrl; - } - - public String getEnrollmentServiceUrl() { - return enrollmentServiceUrl; - } - - public void setAuthPolicy(String authPolicy) { - this.authPolicy = authPolicy; - } - - public void setEnrollmentPolicyServiceUrl(String enrollmentPolicyServiceUrl) { - this.enrollmentPolicyServiceUrl = enrollmentPolicyServiceUrl; - } - - public void setEnrollmentServiceUrl(String enrollmentServiceUrl) { - this.enrollmentServiceUrl = enrollmentServiceUrl; - } - - public String getEnrollmentVersion() { - return enrollmentVersion; - } - - public void setEnrollmentVersion(String enrollmentVersion) { - this.enrollmentVersion = enrollmentVersion; - } - -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/package-info.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/package-info.java deleted file mode 100644 index 2403a0ab5..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/beans/package-info.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -@javax.xml.bind.annotation.XmlSchema(namespace = - "http://schemas.microsoft.com/windows/management/2012/01/enrollment", - elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) -package org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans; diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/impl/DiscoveryServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/impl/DiscoveryServiceImpl.java deleted file mode 100644 index 0ca461f73..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/discovery/impl/DiscoveryServiceImpl.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.DiscoveryService; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans.DiscoveryRequest; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.beans.DiscoveryResponse; - -import javax.jws.WebService; -import javax.ws.rs.core.Response; -import javax.xml.ws.BindingType; -import javax.xml.ws.Holder; -import javax.xml.ws.soap.Addressing; -import javax.xml.ws.soap.SOAPBinding; -import java.util.List; - -/** - * Implementation class of Discovery Request. This class implements the first two services - * of device enrolment stage. - */ -@WebService(endpointInterface = PluginConstants.DISCOVERY_SERVICE_ENDPOINT, targetNamespace = PluginConstants - .DISCOVERY_SERVICE_TARGET_NAMESPACE) -@Addressing(enabled = true, required = true) -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public class DiscoveryServiceImpl implements DiscoveryService { - - public static final String FEDERATED = "Federated"; - private static final String DELIMITER = "@"; - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.discovery.impl.DiscoveryServiceImpl.class); - - /** - * This method returns the OnPremise AuthPolicy and next two endpoint the mobile device should - * call if this response to received successfully at the device end. This method is called by - * device immediately after the first GET method calling for the same endpoint. - * - * @param discoveryRequest - Request bean comes via mobile phone - * @param response - DiscoveryResponse bean for response - */ - @Override - public void discover(DiscoveryRequest discoveryRequest, Holder response) - throws WindowsDeviceEnrolmentException { - - String emailId = discoveryRequest.getEmailId(); - String[] userDomains = emailId.split(DELIMITER); - String domain = userDomains[(userDomains.length)-1]; - DiscoveryResponse discoveryResponse; - - if (!PluginConstants.WindowsVersionProperties.REQUESTED_WIN81_VERSION.equals(discoveryRequest.getVersion()) - && FEDERATED.equals(getAuthPolicy())) { - discoveryResponse = new DiscoveryResponse(); - discoveryResponse.setAuthPolicy(FEDERATED); - discoveryResponse.setEnrollmentVersion(PluginConstants.WindowsVersionProperties.REQUESTED_WIN10_VERSION); - discoveryResponse.setEnrollmentPolicyServiceUrl(PluginConstants.Discovery.DEVICE_ENROLLMENT_SUBDOMAIN + - domain + PluginConstants.Discovery. - CERTIFICATE_ENROLLMENT_POLICY_SERVICE_URL); - discoveryResponse.setEnrollmentServiceUrl(PluginConstants.Discovery.DEVICE_ENROLLMENT_SUBDOMAIN + - domain + PluginConstants.Discovery. - ENROLLMENT_SERVICE_URL); - discoveryResponse.setAuthenticationServiceUrl(PluginConstants.Discovery.DEVICE_ENROLLMENT_SUBDOMAIN + - domain + PluginConstants.Discovery.WAB_URL); - } else { - discoveryResponse = new DiscoveryResponse(); - discoveryResponse.setAuthPolicy(FEDERATED); - discoveryResponse.setEnrollmentPolicyServiceUrl(PluginConstants.Discovery.DEVICE_ENROLLMENT_SUBDOMAIN + - domain + PluginConstants.Discovery. - CERTIFICATE_ENROLLMENT_POLICY_SERVICE_URL); - discoveryResponse.setEnrollmentServiceUrl(PluginConstants.Discovery.DEVICE_ENROLLMENT_SUBDOMAIN + - domain + PluginConstants.Discovery. - CERTIFICATE_ENROLLMENT_SERVICE_URL); - discoveryResponse.setAuthenticationServiceUrl(PluginConstants.Discovery.DEVICE_ENROLLMENT_SUBDOMAIN + - domain + PluginConstants.Discovery.WAB_URL); - } - response.value = discoveryResponse; - if (log.isDebugEnabled()) { - log.debug("Discovery service end point was triggered via POST method"); - } - } - - /** - * Get authentication policy from the tenant configuration, otherwise set default value as Federated. - * - * @return Authentication policy. - * @throws WindowsDeviceEnrolmentException - */ - public String getAuthPolicy() throws WindowsDeviceEnrolmentException { - String authPolicy = null; - List tenantConfigurations; - try { - if (WindowsAPIUtils.getTenantConfigurationData() != null) { - tenantConfigurations = WindowsAPIUtils.getTenantConfigurationData(); - - for (ConfigurationEntry configurationEntry : tenantConfigurations) { - if (PluginConstants.TenantConfigProperties.AUTH_POLICY.equals(configurationEntry.getName())) { - authPolicy = configurationEntry.getValue().toString(); - } else { - authPolicy = PluginConstants.TenantConfigProperties.DEFAULT_AUTH_POLICY; - } - } - } else { - authPolicy = PluginConstants.TenantConfigProperties.DEFAULT_AUTH_POLICY; - String msg = "Tenant configurations are not initialized yet."; - log.error(msg); - } - } catch (DeviceManagementException e) { - String msg = "Error occurred while getting tenant configurations."; - log.error(msg); - throw new WindowsDeviceEnrolmentException(msg, e); - } - return authPolicy; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java deleted file mode 100644 index 5f4f14573..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/EnrollmentService.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.AdditionalContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.RequestSecurityTokenResponse; - -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import javax.ws.rs.POST; -import javax.xml.ws.BindingType; -import javax.xml.ws.RequestWrapper; -import javax.xml.ws.ResponseWrapper; -import javax.xml.ws.soap.SOAPBinding; -import java.io.UnsupportedEncodingException; - -@WebService(targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE, name = "enrollment") -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public interface EnrollmentService { - - @RequestWrapper(localName = "RequestSecurityToken", targetNamespace = PluginConstants - .WS_TRUST_TARGET_NAMESPACE) - @WebMethod(operationName = "RequestSecurityToken") - @ResponseWrapper(localName = "RequestSecurityTokenResponseCollection", targetNamespace = - PluginConstants.WS_TRUST_TARGET_NAMESPACE) - @POST - void requestSecurityToken( - @WebParam(name = "TokenType", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - String tokenType, - @WebParam(name = "RequestType", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - String requestType, - @WebParam(name = "BinarySecurityToken", targetNamespace = PluginConstants - .WS_SECURITY_TARGET_NAMESPACE) - String binarySecurityToken, - @WebParam(name = "AdditionalContext", targetNamespace = PluginConstants - .SOAP_AUTHORIZATION_TARGET_NAMESPACE) - AdditionalContext additionalContext, - @WebParam(mode = WebParam.Mode.OUT, name = "RequestSecurityTokenResponse", - targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - javax.xml.ws.Holder response) throws - WindowsDeviceEnrolmentException, UnsupportedEncodingException, - WAPProvisioningException; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/AdditionalContext.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/AdditionalContext.java deleted file mode 100644 index fd62ef2ca..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/AdditionalContext.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OIDCollection", namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE, - propOrder = {"contextitem"}) -@SuppressWarnings("unused") -public class AdditionalContext { - - @XmlElement(name = "ContextItem", required = true, - namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE) - - protected List contextitem; - - public List getcontextitem() { - if (contextitem == null) { - contextitem = new ArrayList(); - } - return this.contextitem; - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/BinarySecurityToken.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/BinarySecurityToken.java deleted file mode 100644 index cf3d3bd5f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/BinarySecurityToken.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.*; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BinarySecurityToken", namespace = PluginConstants.WS_SECURITY_TARGET_NAMESPACE, - propOrder = {"ValueType", "EncodingType"}) -@SuppressWarnings("unused") -public class BinarySecurityToken { - - @XmlAttribute(name = "ValueType") - protected String ValueType; - @XmlAttribute(name = "EncodingType") - protected String EncodingType; - @XmlValue - protected String Token; - - public void setValueType(String valuetype) { - this.ValueType = valuetype; - } - - public String getValueType() { - return this.ValueType; - } - - public void setEncodingType(String encodingtype) { - this.EncodingType = encodingtype; - } - - public String getEncodingType() { - return this.EncodingType; - } - - public void setToken(String token) { - this.Token = token; - } - - public String getToken() { - return this.Token; - } - -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/ContextItem.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/ContextItem.java deleted file mode 100644 index 8c5cfd482..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/ContextItem.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.*; - -@XmlRootElement -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ContextItem", namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE, - propOrder = {"Value"}) -public class ContextItem { - - @XmlAttribute(name = "Name") - protected String Name; - @XmlElement(name = "Value", required = true, - namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE) - protected String Value; - - public String getValue() { - return Value; - } - - public void setValue(String value) { - Value = value; - } - - public String getName() { - return Name; - } - - public void setName(String name) { - Name = name; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityToken.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityToken.java deleted file mode 100644 index ebd90792d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityToken.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestedSecurityToken", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE, - propOrder = {"binarySecurityToken"}) -@SuppressWarnings("unused") -public class RequestSecurityToken { - - @XmlElement(name = "BinarySecurityToken", required = true, - namespace = PluginConstants.WS_SECURITY_TARGET_NAMESPACE) - - protected BinarySecurityToken binarySecurityToken; - - public void setBinarySecurityToken(BinarySecurityToken binarysecuritytoken) { - this.binarySecurityToken = binarysecuritytoken; - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityTokenResponse.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityTokenResponse.java deleted file mode 100644 index 9f1b0c3c8..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestSecurityTokenResponse.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.io.Serializable; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestSecurityTokenResponse", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE, - propOrder = {"TokenType", "DispositionMessage", "RequestedSecurityToken", "RequestID"}) -@SuppressWarnings("unused") -public class RequestSecurityTokenResponse implements Serializable { - - @XmlElement(name = "TokenType", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - private String TokenType; - - // Windows 10 property - @XmlElement(name = "DispositionMessage", namespace = PluginConstants.ENROLLMENT_POLICY_TARGET_NAMESPACE) - private String DispositionMessage; - - @XmlElement(name = "RequestedSecurityToken", required = true, - namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - private org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.RequestedSecurityToken RequestedSecurityToken; - - @XmlElement(name = "RequestID", namespace = PluginConstants.ENROLLMENT_POLICY_TARGET_NAMESPACE) - private int RequestID; - - public String getTokenType() { - return TokenType; - } - - public void setTokenType(String tokenType) { - TokenType = tokenType; - } - - public org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.RequestedSecurityToken getRequestedSecurityToken() { - return RequestedSecurityToken; - } - - public void setRequestedSecurityToken(org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.RequestedSecurityToken - requestedSecurityToken) { - RequestedSecurityToken = requestedSecurityToken; - } - - public int getRequestID() { - return RequestID; - } - - public void setRequestID(int requestID) { - RequestID = requestID; - } - - public String getDispositionMessage() { - return DispositionMessage; - } - - public void setDispositionMessage(String dispositionMessage) { - DispositionMessage = dispositionMessage; - } - -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestedSecurityToken.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestedSecurityToken.java deleted file mode 100644 index 56f1ec571..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/RequestedSecurityToken.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestedSecurityToken", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE, - propOrder = {"binarySecurityToken"}) -public class RequestedSecurityToken { - - @XmlElement(name = "BinarySecurityToken", required = true, - namespace = PluginConstants.WS_SECURITY_TARGET_NAMESPACE) - - protected BinarySecurityToken binarySecurityToken; - - public void setBinarySecurityToken(BinarySecurityToken binarysecuritytoken) { - this.binarySecurityToken = binarysecuritytoken; - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/package-info.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/package-info.java deleted file mode 100644 index 3ad6ec1b2..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/beans/package-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -@XmlSchema(namespace = "http://www.w3.org/2003/05/soap-envelope", - xmlns = { - @XmlNs(prefix = "", namespaceURI = "http://www.w3.org/2003/05/soap-envelope") - }, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans; - -import javax.xml.bind.annotation.XmlNs; -import javax.xml.bind.annotation.XmlSchema; \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java deleted file mode 100644 index e13cb60cb..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/impl/EnrollmentServiceImpl.java +++ /dev/null @@ -1,452 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.impl; - -import com.google.gson.Gson; -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.cxf.headers.Header; -import org.apache.cxf.helpers.CastUtils; -import org.apache.cxf.jaxws.context.WrappedMessageContext; -import org.apache.cxf.message.Message; -import org.w3c.dom.*; -import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; -import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementServiceImpl; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.*; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.CacheEntry; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.CertificateGenerationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.DeviceInfo; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlCredentialUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.EnrollmentService; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.beans.*; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.WindowsDevice; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileCacheEntry; -import org.wso2.carbon.policy.mgt.common.PolicyManagementException; -import org.wso2.carbon.policy.mgt.core.PolicyManagerService; -import org.xml.sax.SAXException; - -import javax.annotation.Resource; -import javax.jws.WebService; -import javax.servlet.ServletContext; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.ws.BindingType; -import javax.xml.ws.Holder; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.soap.Addressing; -import javax.xml.ws.soap.SOAPBinding; -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.List; - - -/** - * Implementation class of Windows10 Enrollment process. - */ -@WebService(endpointInterface = PluginConstants.ENROLLMENT_SERVICE_ENDPOINT, - targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE) -@Addressing(enabled = true, required = true) -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public class EnrollmentServiceImpl implements EnrollmentService { - private static Log log = LogFactory.getLog(EnrollmentServiceImpl.class); - private String pollingFrequency; - private String provisioningURL; - private String domain; - - @Resource - private WebServiceContext context; - - @Override - public void requestSecurityToken(String tokenType, String requestType, String binarySecurityToken, - AdditionalContext additionalContext, - Holder response) - throws WindowsDeviceEnrolmentException, UnsupportedEncodingException, WAPProvisioningException { - String headerBinarySecurityToken = null; - String headerTo = null; - String encodedWap; - List
headers = getHeaders(); - for (Header headerElement : headers) { - String nodeName = headerElement.getName().getLocalPart(); - if (PluginConstants.SECURITY.equals(nodeName)) { - Element element = (Element) headerElement.getObject(); - headerBinarySecurityToken = element.getFirstChild().getFirstChild().getTextContent(); - } - if (PluginConstants.TO.equals(nodeName)) { - Element toElement = (Element) headerElement.getObject(); - headerTo = toElement.getFirstChild().getTextContent(); - } - } - try { - enrollDevice(additionalContext, headerBinarySecurityToken); - } catch (DeviceManagementException e) { - throw new WindowsDeviceEnrolmentException("Error occurred while enrolling the device."); - } catch (PolicyManagementException e) { - throw new WindowsDeviceEnrolmentException("Error occurred while enforcing windows policies."); - } - String[] splitEmail = headerTo.split("(/ENROLLMENTSERVER)"); - String email = splitEmail[PluginConstants.CertificateEnrolment.EMAIL_SEGMENT]; - - String[] splitDomain = email.split("(EnterpriseEnrollment.)"); - domain = splitDomain[PluginConstants.CertificateEnrolment.DOMAIN_SEGMENT]; - provisioningURL = PluginConstants.CertificateEnrolment.ENROLL_SUBDOMAIN + domain + - PluginConstants.CertificateEnrolment.SYNCML_PROVISIONING_WIN10_SERVICE_URL; - - List tenantConfigurations; - try { - if ((tenantConfigurations = WindowsAPIUtils.getTenantConfigurationData()) != null) { - for (ConfigurationEntry configurationEntry : tenantConfigurations) { - if ((PluginConstants.TenantConfigProperties.NOTIFIER_FREQUENCY.equals( - configurationEntry.getName()))) { - pollingFrequency = configurationEntry.getValue().toString(); - } else { - pollingFrequency = PluginConstants.TenantConfigProperties.DEFAULT_FREQUENCY; - } - } - } else { - pollingFrequency = PluginConstants.TenantConfigProperties.DEFAULT_FREQUENCY; - String msg = "Tenant configurations are not initialized yet."; - log.error(msg); - } - ServletContext ctx = (ServletContext) context.getMessageContext(). - get(MessageContext.SERVLET_CONTEXT); - File wapProvisioningFile = (File) ctx.getAttribute(PluginConstants.CONTEXT_WAP_PROVISIONING_FILE); - if (log.isDebugEnabled()) { - log.debug("Received CSR from Device:" + binarySecurityToken); - } - - String wapProvisioningFilePath = wapProvisioningFile.getPath(); - RequestSecurityTokenResponse requestSecurityTokenResponse = new RequestSecurityTokenResponse(); - requestSecurityTokenResponse.setTokenType(PluginConstants.CertificateEnrolment.TOKEN_TYPE); - - encodedWap = prepareWapProvisioningXML(binarySecurityToken, wapProvisioningFilePath, - headerBinarySecurityToken); - RequestedSecurityToken requestedSecurityToken = new RequestedSecurityToken(); - BinarySecurityToken binarySecToken = new BinarySecurityToken(); - binarySecToken.setValueType(PluginConstants.CertificateEnrolment.VALUE_TYPE); - binarySecToken.setEncodingType(PluginConstants.CertificateEnrolment.ENCODING_TYPE); - binarySecToken.setToken(encodedWap); - requestedSecurityToken.setBinarySecurityToken(binarySecToken); - requestSecurityTokenResponse.setRequestedSecurityToken(requestedSecurityToken); - requestSecurityTokenResponse.setRequestID(PluginConstants.CertificateEnrolment.REQUEST_ID); - response.value = requestSecurityTokenResponse; - } catch (CertificateGenerationException e) { - String msg = "Problem occurred while generating certificate."; - log.error(msg, e); - throw new WindowsDeviceEnrolmentException(msg, e); - } catch (WAPProvisioningException e) { - String msg = "Problem occurred while generating wap-provisioning file."; - log.error(msg, e); - throw new WindowsDeviceEnrolmentException(msg, e); - } catch (DeviceManagementException e) { - String msg = "Error occurred while getting tenant configurations."; - log.error(msg); - throw new WindowsDeviceEnrolmentException(msg, e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - - } - } - - /** - * Method used to Convert the Document object into a String. - * - * @param document - Wap provisioning XML document - * @return - String representation of wap provisioning XML document - * @throws TransformerException - */ - private String convertDocumentToString(Document document) throws TransformerException { - DOMSource DOMSource = new DOMSource(document); - StringWriter stringWriter = new StringWriter(); - StreamResult streamResult = new StreamResult(stringWriter); - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - transformer.transform(DOMSource, streamResult); - return stringWriter.toString(); - } - - /** - * This method prepares the wap-provisioning file by including relevant certificates etc. - * - * @param binarySecurityToken - CSR from device - * @param wapProvisioningFilePath - File path of wap-provisioning file - * @return - base64 encoded final wap-provisioning file as a String - * @throws CertificateGenerationException - * @throws org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException - */ - private String prepareWapProvisioningXML(String binarySecurityToken, String wapProvisioningFilePath, - String headerBst) throws CertificateGenerationException, - WAPProvisioningException, - WindowsDeviceEnrolmentException { - String rootCertEncodedString; - String signedCertEncodedString; - X509Certificate signedCertificate; - String provisioningXmlString; - CertificateManagementServiceImpl certMgtServiceImpl = CertificateManagementServiceImpl.getInstance(); - Base64 base64Encoder = new Base64(); - try { - X509Certificate rootCACertificate = (X509Certificate) certMgtServiceImpl.getCACertificate(); - rootCertEncodedString = base64Encoder.encodeAsString(rootCACertificate.getEncoded()); - - signedCertificate = certMgtServiceImpl.getSignedCertificateFromCSR(binarySecurityToken); - signedCertEncodedString = base64Encoder.encodeAsString(signedCertificate.getEncoded()); - - DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); - domFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - domFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - DocumentBuilder builder; - - builder = domFactory.newDocumentBuilder(); - Document document = builder.parse(wapProvisioningFilePath); - NodeList wapParm = document.getElementsByTagName(PluginConstants.CertificateEnrolment.PARM); - Node caCertificatePosition = wapParm.item(PluginConstants.CertificateEnrolment.CA_CERTIFICATE_POSITION); - - //Adding SHA1 CA certificate finger print to wap-provisioning xml. - caCertificatePosition.getParentNode().getAttributes().getNamedItem(PluginConstants. - CertificateEnrolment.TYPE).setTextContent(String.valueOf( - DigestUtils.sha1Hex(rootCACertificate.getEncoded())).toUpperCase()); - //Adding encoded CA certificate to wap-provisioning file after removing new line - // characters. - NamedNodeMap rootCertAttributes = caCertificatePosition.getAttributes(); - Node rootCertNode = - rootCertAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - rootCertEncodedString = rootCertEncodedString.replaceAll("\n", ""); - rootCertNode.setTextContent(rootCertEncodedString); - - if (log.isDebugEnabled()) { - log.debug("Root certificate: " + rootCertEncodedString); - } - - Node signedCertificatePosition = wapParm.item(PluginConstants.CertificateEnrolment. - SIGNED_CERTIFICATE_POSITION); - - //Adding SHA1 signed certificate finger print to wap-provisioning xml. - signedCertificatePosition.getParentNode().getAttributes().getNamedItem(PluginConstants. - CertificateEnrolment.TYPE).setTextContent(String.valueOf( - DigestUtils.sha1Hex(signedCertificate.getEncoded())).toUpperCase()); - - //Adding encoded signed certificate to wap-provisioning file after removing new line - // characters. - NamedNodeMap clientCertAttributes = signedCertificatePosition.getAttributes(); - Node clientEncodedNode = - clientCertAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - signedCertEncodedString = signedCertEncodedString.replaceAll("\n", ""); - - clientEncodedNode.setTextContent(signedCertEncodedString); - if (log.isDebugEnabled()) { - log.debug("Signed certificate: " + signedCertEncodedString); - } - - //Adding domainName to wap-provisioning xml. - Node domainPosition = wapParm.item(PluginConstants.CertificateEnrolment.DOMAIN_POSITION); - NamedNodeMap domainAttribute = domainPosition.getAttributes(); - Node domainNode = domainAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - domainNode.setTextContent(domain); - - //Adding Next provisioning service URL to wap-provisioning xml. - Node syncmlServicePosition = wapParm.item(PluginConstants.CertificateEnrolment. - SYNCML_PROVISIONING_ADDR_POSITION); - NamedNodeMap syncmlServiceAttribute = syncmlServicePosition.getAttributes(); - Node syncmlServiceNode = syncmlServiceAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - syncmlServiceNode.setTextContent(provisioningURL); - - // Adding user name auth token to wap-provisioning xml. - Node userNameAuthPosition = wapParm.item(PluginConstants.CertificateEnrolment.APPAUTH_USERNAME_POSITION); - NamedNodeMap appServerAttribute = userNameAuthPosition.getAttributes(); - Node authNameNode = appServerAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - String userName = getRequestedUser(headerBst); - //CacheEntry cacheEntry = (CacheEntry) DeviceUtil.getCacheEntry(headerBst); - // String userName = cacheEntry.getUsername(); - authNameNode.setTextContent(userName); - DeviceUtil.removeTokenEntry(headerBst); - String password = DeviceUtil.generateRandomToken(); - Node passwordAuthPosition = wapParm.item(PluginConstants.CertificateEnrolment.APPAUTH_PASSWORD_POSITION); - NamedNodeMap appSrvPasswordAttribute = passwordAuthPosition.getAttributes(); - Node authPasswordNode = appSrvPasswordAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - authPasswordNode.setTextContent(password); - String requestSecurityTokenResponse = SyncmlCredentialUtil.generateRST(userName, password); - DeviceUtil.persistChallengeToken(requestSecurityTokenResponse, null, userName); - - // Get device polling frequency from the tenant Configurations. - Node numberOfFirstRetries = wapParm.item(PluginConstants.CertificateEnrolment.POLLING_FREQUENCY_POSITION); - NamedNodeMap pollingAttributes = numberOfFirstRetries.getAttributes(); - Node pollValue = pollingAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - pollValue.setTextContent(pollingFrequency); - provisioningXmlString = convertDocumentToString(document); - } catch (ParserConfigurationException e) { - throw new WAPProvisioningException("Problem occurred while creating configuration request", e); - } catch (CertificateEncodingException e) { - throw new WindowsDeviceEnrolmentException("Error occurred while encoding certificates.", e); - } catch (SAXException e) { - throw new WAPProvisioningException("Error occurred while parsing wap-provisioning.xml file.", e); - } catch (TransformerException e) { - throw new WAPProvisioningException("Error occurred while transforming wap-provisioning.xml file.", e); - } catch (IOException e) { - throw new WAPProvisioningException("Error occurred while getting wap-provisioning.xml file.", e); - } catch (SyncmlMessageFormatException e) { - throw new WindowsDeviceEnrolmentException("Error occurred while generating password hash value.", e); - } catch (KeystoreException e) { - throw new CertificateGenerationException("CA certificate cannot be generated.", e); - } - return base64Encoder.encodeAsString(provisioningXmlString.getBytes()); - } - - /** - * This method get the soap request header contents. - * - * @return List of SOAP headers. - */ - private List
getHeaders() { - MessageContext messageContext = context.getMessageContext(); - if (messageContext == null || !(messageContext instanceof WrappedMessageContext)) { - return null; - } - Message message = ((WrappedMessageContext) messageContext).getWrappedMessage(); - return CastUtils.cast((List) message.get(Header.HEADER_LIST)); - } - - /** - * This method to getting RSTR requested user from the Cache. - * - * @param bst Binary Security token which has given from BST Endpoint. - * @return User for given token. - */ - private String getRequestedUser(String bst) { - MobileCacheEntry cacheEntry = null; - try { - cacheEntry = DeviceUtil.getTokenEntry(bst); - } catch (WindowsDeviceEnrolmentException e) { - - } - return cacheEntry.getUsername(); - } - - /** - * This Method to generate windows device. - * - * @param windowsDevice Requested Device with properties. - * @return Value added Device. - */ - private Device generateDevice(WindowsDevice windowsDevice) { - Gson gson = new Gson(); - Device generatedDevice = new Device(); - - Device.Property OSVersionProperty = new Device.Property(); - OSVersionProperty.setName(PluginConstants.SyncML.OS_VERSION); - OSVersionProperty.setValue(windowsDevice.getOsVersion()); - - Device.Property IMSEIProperty = new Device.Property(); - IMSEIProperty.setName(PluginConstants.SyncML.IMSI); - IMSEIProperty.setValue(windowsDevice.getImsi()); - - Device.Property IMEIProperty = new Device.Property(); - IMEIProperty.setName(PluginConstants.SyncML.IMEI); - IMEIProperty.setValue(windowsDevice.getImei()); - - Device.Property deviceInfoProperties = new Device.Property(); - deviceInfoProperties.setName(PluginConstants.WindowsEnrollmentProperties.TYPE); - deviceInfoProperties.setValue(windowsDevice.getWindowsType()); - String deviceInfo = gson.toJson(deviceInfoProperties); - - Device.Property winDeviceType = new Device.Property(); - winDeviceType.setName(PluginConstants.SyncML.DEVICE_INFO); - winDeviceType.setValue(deviceInfo); - - List propertyList = new ArrayList<>(); - propertyList.add(OSVersionProperty); - propertyList.add(IMSEIProperty); - propertyList.add(IMEIProperty); - propertyList.add(winDeviceType); - - EnrolmentInfo enrolmentInfo = new EnrolmentInfo(); - enrolmentInfo.setOwner(windowsDevice.getUser()); - enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); - enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE); - - generatedDevice.setEnrolmentInfo(enrolmentInfo); - generatedDevice.setDeviceIdentifier(windowsDevice.getDeviceId()); - generatedDevice.setProperties(propertyList); - generatedDevice.setType(windowsDevice.getDeviceType()); - generatedDevice.setName(windowsDevice.getDeviceName()); - - return generatedDevice; - } - - /** - * This method to enroll windows10 Device. - * - * @param requestContextItems Context values to enroll the device. - * @param headerBinarySecurityToken SOAP request header value to identify the user. - * @throws DeviceManagementException Exception occurs while enrolling the Device. - * @throws PolicyManagementException Exception occurs while getting effective policies. - */ - private void enrollDevice(AdditionalContext requestContextItems, String headerBinarySecurityToken) - throws DeviceManagementException, PolicyManagementException { - WindowsDevice windowsDevice = new WindowsDevice(); - windowsDevice.setDeviceType(DeviceManagementConstants.MobileDeviceTypes. - MOBILE_DEVICE_TYPE_WINDOWS); - windowsDevice.setUser(getRequestedUser(headerBinarySecurityToken)); - List contextItems = requestContextItems.getcontextitem(); - for(ContextItem contextItem : contextItems) { - if (PluginConstants.WindowsEnrollmentProperties.DEVICE_ID.equals(contextItem.getName())) { - windowsDevice.setDeviceId(contextItem.getValue()); - } - if (PluginConstants.WindowsEnrollmentProperties.DEVICE_NAME.equals(contextItem.getName())) { - windowsDevice.setDeviceName(contextItem.getValue()); - } - if (PluginConstants.WindowsEnrollmentProperties.IMEI.equals(contextItem.getName())) { - windowsDevice.setImei(contextItem.getValue()); - } - if (PluginConstants.WindowsEnrollmentProperties.DEVICE_VERSION.equals(contextItem.getName())) { - windowsDevice.setOsVersion(contextItem.getValue()); - } - if (PluginConstants.WindowsEnrollmentProperties.TYPE.equals(contextItem.getName())) { - windowsDevice.setWindowsType(contextItem.getValue()); - } - } - Device device = generateDevice(windowsDevice); - WindowsAPIUtils.getDeviceManagementService().enrollDevice(device); - PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService(); - policyManagerService.getEffectivePolicy(new DeviceIdentifier(windowsDevice.getDeviceId(), device.getType())); - - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/CertificateSigningService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/CertificateSigningService.java deleted file mode 100644 index e4eeaf665..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/CertificateSigningService.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.bouncycastle.asn1.x509.*; -import org.bouncycastle.cert.CertIOException; -import org.bouncycastle.cert.X509v3CertificateBuilder; -import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; -import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder; -import org.bouncycastle.operator.ContentSigner; -import org.bouncycastle.operator.OperatorCreationException; -import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequest; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.CertificateGenerationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; - -import javax.security.auth.x500.X500Principal; -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; -import java.security.SecureRandom; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Date; -import java.util.List; - -/** - * Class for generating signed certificate for CSR form device. - */ -public class CertificateSigningService { - - private static final long MILLI_SECONDS = 1000L * 60 * 60 * 24; - - private enum PropertyIndex { - COMMON_NAME_INDEX(0), - NOT_BEFORE_DAYS_INDEX(1), - NOT_AFTER_DAYS_INDEX(2); - - private final int itemPosition; - private PropertyIndex(final int itemPosition) { - this.itemPosition = itemPosition; - } - public int getValue() { - return this.itemPosition; - } - } - - private static Log log = LogFactory.getLog( - CertificateSigningService.class); - - /** - * Implement certificate signing task using CSR received from the device and the MDM server key - * store. - * @param jcaRequest - CSR from the device - * @param privateKey - Private key of CA certificate in MDM server - * @param caCert - CA certificate in MDM server - * @param certParameterList - Parameter list for Signed certificate generation - * @return - Signed certificate for CSR from device - * @throws CertificateGenerationException - * @throws WAPProvisioningException - */ - public static X509Certificate signCSR(JcaPKCS10CertificationRequest jcaRequest, - PrivateKey privateKey, X509Certificate caCert, - List certParameterList) throws - CertificateGenerationException, - WAPProvisioningException { - - String commonName = - (String) certParameterList.get(PropertyIndex.COMMON_NAME_INDEX.getValue()); - int notBeforeDays = - (Integer) certParameterList.get(PropertyIndex.NOT_BEFORE_DAYS_INDEX.getValue()); - int notAfterDays = - (Integer) certParameterList.get(PropertyIndex.NOT_AFTER_DAYS_INDEX.getValue()); - X509v3CertificateBuilder certificateBuilder; - X509Certificate signedCertificate; - - try { - ContentSigner signer; - BigInteger serialNumber = BigInteger.valueOf(new SecureRandom(). - nextInt(Integer.MAX_VALUE)); - Date notBeforeDate = new Date(System.currentTimeMillis() - - (MILLI_SECONDS * notBeforeDays)); - Date notAfterDate = new Date(System.currentTimeMillis() + - (MILLI_SECONDS * notAfterDays)); - certificateBuilder = - new JcaX509v3CertificateBuilder(caCert, serialNumber, notBeforeDate, notAfterDate, - new X500Principal(commonName), - jcaRequest.getPublicKey()); - - //Adding extensions to the signed certificate. - certificateBuilder.addExtension(Extension.keyUsage, true, - new KeyUsage(KeyUsage.digitalSignature)); - certificateBuilder.addExtension(Extension.extendedKeyUsage, false, - new ExtendedKeyUsage(KeyPurposeId.id_kp_clientAuth)); - certificateBuilder.addExtension(Extension.basicConstraints, true, - new BasicConstraints(false)); - - signer = new JcaContentSignerBuilder(PluginConstants.CertificateEnrolment.ALGORITHM). - setProvider(PluginConstants.CertificateEnrolment.PROVIDER).build(privateKey); - - signedCertificate = new JcaX509CertificateConverter().setProvider( - PluginConstants.CertificateEnrolment.PROVIDER).getCertificate( - certificateBuilder.build(signer)); - } catch (InvalidKeyException e) { - throw new CertificateGenerationException("CSR's public key is invalid", e); - } catch (NoSuchAlgorithmException e) { - throw new CertificateGenerationException("Certificate cannot be generated", e); - } - catch (CertIOException e) { - throw new CertificateGenerationException( - "Cannot add extension(s) to signed certificate", e); - } - catch (OperatorCreationException e) { - throw new CertificateGenerationException("Content signer cannot be created", e); - } - catch (CertificateException e) { - throw new CertificateGenerationException("Signed certificate cannot be generated", e); - } - return signedCertificate; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/KeyStoreGenerator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/KeyStoreGenerator.java deleted file mode 100644 index ba966f80e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/KeyStoreGenerator.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.KeyStoreGenerationException; - -import java.io.FileInputStream; -import java.io.IOException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; - -/** - * Class for MDM Keystore operations. - */ -public class KeyStoreGenerator { - - private static final Log log = LogFactory.getLog( - KeyStoreGenerator.class); - - /** - * This method loads the MDM keystore. - * @param keyStore - MDM Keystore - * @param keyStorePassword - Keystore Password - * @param keyStorePath - Keystore path - * @throws KeyStoreGenerationException - */ - public static void loadToStore(KeyStore keyStore, - char[] keyStorePassword, - String keyStorePath) throws KeyStoreGenerationException { - - FileInputStream fileInputStream = null; - - try { - if (keyStorePath != null) { - fileInputStream = new FileInputStream(keyStorePath); - keyStore.load(fileInputStream, keyStorePassword); - } - } catch (NoSuchAlgorithmException e) { - throw new KeyStoreGenerationException( - "Requested cryptographic algorithm is not available in the environment.", e); - } catch (CertificateException e) { - throw new KeyStoreGenerationException("Error working with certificate related to, " + - keyStorePath, e); - } catch (IOException e) { - throw new KeyStoreGenerationException("File error while working with file, " + - keyStorePath, e); - } finally { - try { - if (fileInputStream != null) { - fileInputStream.close(); - } - } catch (IOException e) { - throw new KeyStoreGenerationException("File error while closing the file, " + - keyStorePath, e); - } - } - } - - /** - * This method is for retrieving instance of Key Store. - * @return Keystore object - * @throws KeyStoreGenerationException - */ - public static KeyStore getKeyStore() throws KeyStoreGenerationException { - try { - return KeyStore.getInstance(PluginConstants.CertificateEnrolment.JKS); - } catch (KeyStoreException e) { - String msg = "KeyStore error while creating new JKS."; - log.error(msg, e); - throw new KeyStoreGenerationException(msg, e); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/MessageHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/MessageHandler.java deleted file mode 100644 index 616e3db08..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/enrollment/util/MessageHandler.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.enrollment.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.joda.time.DateTime; -import org.joda.time.format.ISODateTimeFormat; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.ws.rs.core.Response; -import javax.xml.namespace.QName; -import javax.xml.soap.*; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.*; - -/** - * Class responsible for adding Timestamp security header in SOAP message and adding Content-length - * in the HTTP header for avoiding HTTP chunking. - */ -public class MessageHandler implements SOAPHandler { - - public static final String TIME_ZONE = "Z"; - public static final int VALIDITY_TIME = 5; - public static final int TIMESTAMP_END_INDEX = 6; - public static final int TIMESTAMP_BEGIN_INDEX = 0; - private static Log log = LogFactory.getLog( - MessageHandler.class); - - /** - * This method resolves the security header coming in the SOAP message. - * @return - Security Header - */ - @Override - public Set getHeaders() { - QName securityHeader = new QName(PluginConstants.WS_SECURITY_TARGET_NAMESPACE, PluginConstants.SECURITY); - HashSet headers = new HashSet(); - headers.add(securityHeader); - return headers; - } - - /** - * This method adds Timestamp for SOAP header, and adds Content-length for HTTP header for - * avoiding HTTP chunking. - * - * @param context - Context of the SOAP Message - */ - @Override - public boolean handleMessage(SOAPMessageContext context) { - - Boolean outBoundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); - - if (outBoundProperty) { - SOAPMessage message = context.getMessage(); - SOAPHeader header = null; - SOAPEnvelope envelope = null; - try { - header = message.getSOAPHeader(); - envelope = message.getSOAPPart().getEnvelope(); - } catch (SOAPException e) { - Response.serverError().entity("SOAP message content cannot be read.").build(); - } - try { - if ((header == null) && (envelope != null)) { - header = envelope.addHeader(); - } - } catch (SOAPException e) { - Response.serverError().entity("SOAP header cannot be added.").build(); - } - - SOAPFactory soapFactory = null; - try { - soapFactory = SOAPFactory.newInstance(); - } catch (SOAPException e) { - Response.serverError().entity("Cannot get an instance of SOAP factory.").build(); - } - - QName qNamesSecurity = new QName(PluginConstants.WS_SECURITY_TARGET_NAMESPACE, - PluginConstants.CertificateEnrolment.SECURITY); - SOAPHeaderElement Security = null; - Name attributeName = null; - try { - if (header != null) { - Security = header.addHeaderElement(qNamesSecurity); - } - if (soapFactory != null) { - attributeName = - soapFactory.createName(PluginConstants.CertificateEnrolment.TIMESTAMP_ID, - PluginConstants.CertificateEnrolment.TIMESTAMP_U, - PluginConstants.CertificateEnrolment - .WSS_SECURITY_UTILITY); - } - } catch (SOAPException e) { - Response.serverError().entity("Security header cannot be added.").build(); - } - - QName qNameTimestamp = new QName(PluginConstants.CertificateEnrolment.WSS_SECURITY_UTILITY, - PluginConstants.CertificateEnrolment.TIMESTAMP); - SOAPHeaderElement timestamp = null; - try { - if (header != null) { - timestamp = header.addHeaderElement(qNameTimestamp); - timestamp.addAttribute(attributeName, - PluginConstants.CertificateEnrolment.TIMESTAMP_0); - } - } catch (SOAPException e) { - Response.serverError().entity("Exception while adding timestamp header.").build(); - } - DateTime dateTime = new DateTime(); - DateTime expiredDateTime = dateTime.plusMinutes(VALIDITY_TIME); - String createdISOTime = dateTime.toString(ISODateTimeFormat.dateTime()); - String expiredISOTime = expiredDateTime.toString(ISODateTimeFormat.dateTime()); - createdISOTime = createdISOTime.substring(TIMESTAMP_BEGIN_INDEX, - createdISOTime.length() - - TIMESTAMP_END_INDEX); - createdISOTime = createdISOTime + TIME_ZONE; - expiredISOTime = expiredISOTime.substring(TIMESTAMP_BEGIN_INDEX, - expiredISOTime.length() - - TIMESTAMP_END_INDEX); - expiredISOTime = expiredISOTime + TIME_ZONE; - QName qNameCreated = new QName(PluginConstants.CertificateEnrolment.WSS_SECURITY_UTILITY, - PluginConstants.CertificateEnrolment.CREATED); - SOAPHeaderElement SOAPHeaderCreated = null; - - try { - if (header != null) { - SOAPHeaderCreated = header.addHeaderElement(qNameCreated); - SOAPHeaderCreated.addTextNode(createdISOTime); - } - } catch (SOAPException e) { - Response.serverError().entity("Exception while creating SOAP header.").build(); - } - QName qNameExpires = new QName(PluginConstants.CertificateEnrolment.WSS_SECURITY_UTILITY, - PluginConstants.CertificateEnrolment.EXPIRES); - SOAPHeaderElement SOAPHeaderExpires = null; - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - String messageString = null; - try { - if (header != null) { - SOAPHeaderExpires = header.addHeaderElement(qNameExpires); - SOAPHeaderExpires.addTextNode(expiredISOTime); - } - if ((timestamp != null) && (Security != null)) { - timestamp.addChildElement(SOAPHeaderCreated); - timestamp.addChildElement(SOAPHeaderExpires); - Security.addChildElement(timestamp); - } - message.saveChanges(); - message.writeTo(outputStream); - messageString = new String(outputStream.toByteArray(), - PluginConstants.CertificateEnrolment.UTF_8); - } catch (SOAPException e) { - Response.serverError().entity("Exception while creating timestamp SOAP header.") - .build(); - } catch (IOException e) { - Response.serverError().entity("Exception while writing message to output stream.") - .build(); - } - - Map> headers = - (Map>) context.get(MessageContext.HTTP_REQUEST_HEADERS); - headers = new HashMap>(); - if (messageString != null) { - headers.put(PluginConstants.CONTENT_LENGTH, Arrays.asList(String.valueOf( - messageString.length()))); - } - context.put(MessageContext.HTTP_REQUEST_HEADERS, headers); - } - return true; - } - - @Override - public boolean handleFault(SOAPMessageContext context) { - return true; - } - - @Override - public void close(MessageContext context) { - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/ConfigurationMgtServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/ConfigurationMgtServiceImpl.java deleted file mode 100644 index 214236c9f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/ConfigurationMgtServiceImpl.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; -import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration; -import org.wso2.carbon.device.mgt.common.license.mgt.License; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.ErrorResponse; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.UnexpectedServerErrorException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.ConfigurationMgtService; -import javax.ws.rs.core.MediaType; - -import javax.jws.WebService; -import javax.ws.rs.*; -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; - -@WebService -@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) -@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) -@Path("/configuration") -public class ConfigurationMgtServiceImpl implements ConfigurationMgtService { - - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.impl.ConfigurationMgtServiceImpl.class); - - /** - * Retrieve Tenant configurations according to the device type. - * - * @return Tenant configuration object contains specific tenant configurations. - * @throws WindowsConfigurationException - */ - @GET - public Response getConfiguration(@HeaderParam("If-Modified-Since") String ifModifiedSince) { - String msg; - PlatformConfiguration platformConfiguration; - List configs; - try { - platformConfiguration = WindowsAPIUtils.getDeviceManagementService(). - getConfiguration(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - if (platformConfiguration != null) { - configs = platformConfiguration.getConfiguration(); - } else { - platformConfiguration = new PlatformConfiguration(); - configs = new ArrayList<>(); - } - - ConfigurationEntry entry = new ConfigurationEntry(); - License license = WindowsAPIUtils.getDeviceManagementService().getLicense( - DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, - PluginConstants.TenantConfigProperties.LANGUAGE_US); - - if (license != null && configs != null) { - entry.setContentType(PluginConstants.TenantConfigProperties.CONTENT_TYPE_TEXT); - entry.setName(PluginConstants.TenantConfigProperties.LICENSE_KEY); - entry.setValue(license.getText()); - configs.add(entry); - platformConfiguration.setConfiguration(configs); - } - } catch (DeviceManagementException e) { - msg = "Error occurred while retrieving the Windows tenant configuration"; - log.error(msg, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build()); - } - return Response.status(Response.Status.OK).entity(platformConfiguration).build(); - } - - /** - * Update Tenant Configurations for the specific Device type. - * - * @param configurations to be updated. - * @return Response message. - * @throws WindowsConfigurationException - */ - @PUT - public Response updateConfiguration(PlatformConfiguration windowsPlatformConfiguration) throws WindowsConfigurationException { - String message; - ConfigurationEntry licenseEntry = null; - PlatformConfiguration configuration = new PlatformConfiguration(); - configuration.setConfiguration(windowsPlatformConfiguration.getConfiguration()); - try { - configuration.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - List configs = windowsPlatformConfiguration.getConfiguration(); - for (ConfigurationEntry entry : configs) { - if (PluginConstants.TenantConfigProperties.LICENSE_KEY.equals(entry.getName())) { - License license = new License(); - license.setName(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - license.setLanguage(PluginConstants.TenantConfigProperties.LANGUAGE_US); - license.setVersion("1.0.0"); - license.setText(entry.getValue().toString()); - WindowsAPIUtils.getDeviceManagementService().addLicense(DeviceManagementConstants. - MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, license); - licenseEntry = entry; - } - } - - if (licenseEntry != null) { - configs.remove(licenseEntry); - } - configuration.setConfiguration(configs); - WindowsAPIUtils.getDeviceManagementService().saveConfiguration(configuration); - Response.status(Response.Status.CREATED); - } catch (DeviceManagementException e) { - message = "Error occurred while modifying configuration settings of Windows platform."; - log.error(message, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(message).build()); - } - return Response.status(Response.Status.OK). - entity("Windows platform configuration has been updated successfully.").build(); - - } - - @GET - @Path("/license") - public Response getLicense( - @HeaderParam("If-Modified-Since") String ifModifiedSince) { - License license; - try { - license = - WindowsAPIUtils.getDeviceManagementService().getLicense( - DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS, - DeviceManagementConstants.LanguageCodes.LANGUAGE_CODE_ENGLISH_US); - } catch (DeviceManagementException e) { - String msg = "Error occurred while retrieving the license configured for Windows device enrolment"; - log.error(msg, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(msg).build()); - } - return Response.status(Response.Status.OK).entity(license).build(); - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementAdminServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementAdminServiceImpl.java deleted file mode 100644 index 078b1199e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementAdminServiceImpl.java +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.impl; - -import io.swagger.annotations.ApiParam; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.http.HttpStatus; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.InvalidDeviceException; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation; -import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation; -import org.wso2.carbon.device.mgt.mobile.windows.api.bean.EnterpriseApplication; -import org.wso2.carbon.device.mgt.mobile.windows.api.bean.wrapper.EnterpriseApplicationBeanWrapper; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.beans.ErrorResponse; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.BadRequestException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.UnexpectedServerErrorException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsOperationsException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.Message; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.ProfileConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.DeviceManagementAdminService; - -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.List; - -/** - * Implementation class of operations interface. Each method in this class receives the operations comes via UI - * and persists those in the correct format. - */ -@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) -@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) -@Path("/admin/devices") -public class DeviceManagementAdminServiceImpl implements DeviceManagementAdminService { - - private static Log log = LogFactory.getLog(DeviceManagementAdminServiceImpl.class); - - /** - * REST endpoint for the Device Lock operation - * - * @param acceptHeader header value of the request POST message. - * @param deviceIDs list of device ids to be add device updateLockOperation operation. - * @return Response object for client. - * @throws WindowsDeviceEnrolmentException - */ - @POST - @Path("/lock-devices") - public Response lock(@HeaderParam("Accept") String acceptHeader, List deviceIDs) - throws WindowsDeviceEnrolmentException { - if (log.isDebugEnabled()) { - log.debug("Invoking windows device updateLockOperation operation"); - } - MediaType responseMediaType = WindowsAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - try { - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.DEVICE_LOCK); - operation.setType(Operation.Type.COMMAND); - operation.setEnabled(true); - return WindowsAPIUtils.getOperationResponse(deviceIDs, operation); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } - } - - /** - * REST end point for device dis-enrollment. - * - * @param acceptHeader POST message header value. - * @param deviceIDs device ids to be dis-enrolled. - * @return Response object to the client. - * @throws WindowsDeviceEnrolmentException - */ - @POST - @Path("/disenroll-devices") - public Response disenroll(@HeaderParam("Accept") String acceptHeader, List deviceIDs) - throws WindowsDeviceEnrolmentException { - - MediaType responseMediaType = WindowsAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.DISENROLL); - operation.setType(Operation.Type.COMMAND); - operation.setEnabled(true); - try { - return WindowsAPIUtils.getOperationResponse(deviceIDs, operation); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } - } - - /** - * REST Endpoint for the Device wipe. - * - * @param acceptHeader POST message header value. - * @param deviceids device ids to be wiped. - * @return Response object for the client. - * @throws WindowsDeviceEnrolmentException - */ - @POST - @Path("/wipe-devices") - public Response wipe(@HeaderParam("Accept") String acceptHeader, List deviceids) - throws WindowsDeviceEnrolmentException { - - if (log.isDebugEnabled()) { - log.debug("Invoking windows wipe-data device operation"); - } - MediaType responseMediaType = WindowsAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.WIPE_DATA); - operation.setType(Operation.Type.COMMAND); - try { - return WindowsAPIUtils.getOperationResponse(deviceids, operation); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } - } - - /** - * REST end point for the device ring. - * - * @param acceptHeader post message header value. - * @param deviceIDs device ids to be ring. - * @return Response object for the client. - * @throws WindowsDeviceEnrolmentException - */ - @POST - @Path("/ring-devices") - public Response ring(@HeaderParam("Accept") String acceptHeader, List deviceIDs) - throws WindowsDeviceEnrolmentException { - - if (log.isDebugEnabled()) { - log.debug("Invoking Windows ring-device device operation"); - } - MediaType responseMediaType = WindowsAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - try { - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.DEVICE_RING); - operation.setType(Operation.Type.COMMAND); - return WindowsAPIUtils.getOperationResponse(deviceIDs, operation); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } - } - - /** - * REST endpoint for the device updateLockOperation reset. - * Lock reset have to be done, when device user does not set PIN for the updateLockOperation screen. - * Admin set updateLockOperation operation for the specific device,If the device is in above scenario, - * admin will be notified.since - * admin have to set updateLockOperation reset operation to the device so that automatically generate PIN value for the - * updateLockOperation screen. - * - * @param acceptHeader POST message header value. - * @param deviceIDs Device ids to be updateLockOperation reset. - * @return Response object for the client. - * @throws WindowsDeviceEnrolmentException - */ - @POST - @Path("/lock-reset-devices") - public Response lockReset(@HeaderParam("Accept") String acceptHeader, List deviceIDs) - throws WindowsDeviceEnrolmentException { - - if (log.isDebugEnabled()) { - log.debug("Invoking windows device lockReset storage operation"); - } - MediaType responseMediaType = WindowsAPIUtils.getResponseMediaType(acceptHeader); - Message message = new Message(); - try { - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.LOCK_RESET); - operation.setType(Operation.Type.COMMAND); - return WindowsAPIUtils.getOperationResponse(deviceIDs, operation); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - message.setResponseMessage(errorMessage); - message.setResponseCode(Response.Status.INTERNAL_SERVER_ERROR.toString()); - log.error(errorMessage, e); - throw new WindowsOperationsException(message, responseMediaType); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } - } - - @POST - @Path("/location") - public Response getDeviceLocation(@ApiParam( - name = "deviceIDs", - value = "Provide the ID of the Windows device. Multiple device IDs can be added by " + - "using comma separated values. ", - required = true) List deviceIDs) { - if (log.isDebugEnabled()) { - log.debug("Invoking Windows device location operation."); - } - try { - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.DEVICE_LOCATION); - operation.setType(Operation.Type.COMMAND); - return WindowsAPIUtils.getOperationResponse(deviceIDs, operation); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - log.error(errorMessage, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build()); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - log.error(errorMessage, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build()); - } - } - - @POST - @Path("/reboot") - public Response rebootDevice(@ApiParam( - name = "deviceIDs", - value = "Provide the ID of the Windows device. Multiple device IDs can be " + - "added using comma separated values.", - required = true) List deviceIDs) { - if (log.isDebugEnabled()) { - log.debug("Invoking Windows reboot-device device operation"); - } - try { - CommandOperation operation = new CommandOperation(); - operation.setCode(PluginConstants.OperationCodes.DEVICE_REBOOT); - operation.setType(Operation.Type.COMMAND); - return WindowsAPIUtils.getOperationResponse(deviceIDs, operation); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(400l).setMessage(errorMessage).build()); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - log.error(errorMessage, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build()); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - log.error(errorMessage, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(500l).setMessage(errorMessage).build()); - } - } - - /** - * Rest endpoint for Enterprise Application (MSI or APPX) installation - * - * @param enterpriseApplicationBeanWrapper Enterprise application installation payload object - * @return Response object for client. - */ - @POST - @Path("/enterprise-application") - public Response installEnterpriseApplication(@ApiParam( - name = "enterpriseApplicationBeanWrapper", - value = "Enterprise application configuration and Device IDs", - required = true) EnterpriseApplicationBeanWrapper enterpriseApplicationBeanWrapper) { - if (log.isDebugEnabled()) { - log.debug("Invoking Windows install enterprise application device operation"); - } - if (enterpriseApplicationBeanWrapper == null || enterpriseApplicationBeanWrapper.getOperation() == null) { - String errorMessage = "The payload of the application installing operation is incorrect"; - log.error(errorMessage); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_BAD_REQUEST).setMessage(errorMessage) - .build()); - } - try { - EnterpriseApplication enterpriseApplication = enterpriseApplicationBeanWrapper.getOperation(); - enterpriseApplication.validateRequest(); - ProfileOperation operation = new ProfileOperation(); - operation.setCode(PluginConstants.OperationCodes.INSTALL_ENTERPRISE_APPLICATION); - operation.setType(Operation.Type.PROFILE); - operation.setPayLoad(enterpriseApplication.toJSON()); - return WindowsAPIUtils.getOperationResponse(enterpriseApplicationBeanWrapper.getDeviceIDs(), operation); - } catch (ProfileConfigurationException e) { - throw new BadRequestException(new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_BAD_REQUEST) - .setMessage(e.getMessage()).build()); - } catch (OperationManagementException e) { - String errorMessage = "Issue in retrieving operation management service instance"; - log.error(errorMessage, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .setMessage(errorMessage).build()); - } catch (DeviceManagementException e) { - String errorMessage = "Issue in retrieving device management service instance"; - log.error(errorMessage, e); - throw new UnexpectedServerErrorException( - new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_INTERNAL_SERVER_ERROR) - .setMessage(errorMessage).build()); - } catch (InvalidDeviceException e) { - String errorMessage = "Invalid Device Identifiers found."; - log.error(errorMessage, e); - throw new BadRequestException( - new ErrorResponse.ErrorResponseBuilder().setCode(HttpStatus.SC_BAD_REQUEST).setMessage(errorMessage) - .build()); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java deleted file mode 100644 index 796e4759a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/impl/DeviceManagementServiceImpl.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.AuthenticationInfo; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ItemTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.MetaTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ReplaceTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlDocument; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlHeader; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationCode; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationHandler; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationReply; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlParser; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.DeviceManagementService; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileCacheEntry; - -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; - -import static org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils.convertToDeviceIdentifierObject; - - -public class DeviceManagementServiceImpl implements DeviceManagementService { - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.impl.SyncmlServiceImpl.class); - - @Override public Response getResponse(Document request) - throws WindowsDeviceEnrolmentException, WindowsOperationException, WindowsConfigurationException { - int msgId; - int sessionId; - String user; - String token; - String response; - SyncmlDocument syncmlDocument; - List pendingOperations; - OperationHandler operationHandler = new OperationHandler(); - OperationReply operationReply = new OperationReply(); - - try { - if (SyncmlParser.parseSyncmlPayload(request) != null) { - syncmlDocument = SyncmlParser.parseSyncmlPayload(request); - SyncmlHeader syncmlHeader = syncmlDocument.getHeader(); - sessionId = syncmlHeader.getSessionId(); - user = syncmlHeader.getSource().getLocName(); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlHeader.getSource(). - getLocURI()); - msgId = syncmlHeader.getMsgID(); - - if ((PluginConstants.SyncML.SYNCML_FIRST_MESSAGE_ID == msgId) && - (PluginConstants.SyncML.SYNCML_FIRST_SESSION_ID == sessionId)) { - if (syncmlHeader.getCredential() != null) { - token = syncmlHeader.getCredential().getData(); - MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token); - DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user); - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - carbonCtx.setTenantId(cacheToken.getTenanatID(), true); - if ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) { - if (modifyEnrollWithMoreDetail(request, cacheToken.getTenantDomain(), cacheToken.getTenanatID())) { - pendingOperations = operationHandler.getPendingOperations(syncmlDocument); - operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); - response = operationReply.generateReply(syncmlDocument, pendingOperations); - return Response.status(Response.Status.OK).entity(response).build(); - } else { - String msg = "Error occurred in while modify the enrollment."; - log.error(msg); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } else { - String msg = "Authentication failure due to incorrect credentials."; - log.error(msg); - return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build(); - } - } else { - return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build(); - } - } else { - if (DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId()) == null) { - if (syncmlHeader.getCredential() != null) { - token = syncmlHeader.getCredential().getData(); - MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token); - DeviceUtil.persistChallengeToken(token, deviceIdentifier.getId(), user); - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - carbonCtx.setTenantId(cacheToken.getTenanatID(), true); - } - } else { - MobileCacheEntry cacheToken = DeviceUtil.getTokenEntryFromDeviceId(deviceIdentifier.getId()); - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - carbonCtx.setTenantId(cacheToken.getTenanatID()); - } - if ((syncmlDocument.getBody().getAlert() != null)) { - List disEnrollItemList = syncmlDocument.getBody().getAlert().getItems(); - String disEnrollMetaType = null; - if (disEnrollItemList != null && !disEnrollItemList.isEmpty()) { - MetaTag disEnrollMetaTag = disEnrollItemList.get(0).getMeta(); - if (disEnrollMetaTag != null) { - disEnrollMetaType = disEnrollMetaTag.getType(); - } - } - if (syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA) - && disEnrollMetaType != null && PluginConstants.SyncML.DEVICE_UNENROLL_META_TYPE - .equals(disEnrollMetaType.trim())) { - if (WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier, false) != null) { - operationHandler.updateDisenrollOperationStatus(deviceIdentifier); - WindowsAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier); - return Response.ok().entity(operationReply.generateReply(syncmlDocument, null)).build(); - } else { - String msg = "Enrolled device can not be found in the server."; - log.error(msg); - return Response.status(Response.Status.NOT_FOUND).entity(msg).build(); - } - } else { - pendingOperations = operationHandler.getPendingOperations(syncmlDocument); - operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); - return Response.ok().entity(operationReply.generateReply(syncmlDocument, pendingOperations)) - .build(); - } - } else { - pendingOperations = operationHandler.getPendingOperations(syncmlDocument); - operationHandler.checkForDeviceWipe(pendingOperations, deviceIdentifier); - return Response.ok().entity(operationReply.generateReply(syncmlDocument, pendingOperations)) - .build(); - } - } - } - } catch (SyncmlMessageFormatException e) { - String msg = "Error occurred while parsing syncml request."; - log.error(msg, e); - throw new WindowsOperationException(msg, e); - } catch (OperationManagementException e) { - String msg = "Cannot access operation management service."; - log.error(msg, e); - throw new WindowsOperationException(msg, e); - } catch (SyncmlOperationException e) { - String msg = "Error occurred while getting effective feature."; - log.error(msg, e); - throw new WindowsConfigurationException(msg, e); - } catch (DeviceManagementException e) { - String msg = "Failure occurred in dis-enrollment flow."; - log.error(msg, e); - throw new WindowsOperationException(msg, e); - } - return null; - } - - /** - * Enroll phone device - * - * @param request Device syncml request for the server side. - * @return enroll state - * @throws WindowsDeviceEnrolmentException - * @throws WindowsOperationException - */ - private boolean modifyEnrollWithMoreDetail(Document request, String tenantDomain, int tenantId) throws WindowsDeviceEnrolmentException, - WindowsOperationException { - - String devMan = null; - String devMod = null; - boolean status = false; - String user; - SyncmlDocument syncmlDocument; - try { - syncmlDocument = SyncmlParser.parseSyncmlPayload(request); - ReplaceTag replace = syncmlDocument.getBody().getReplace(); - List itemList = replace.getItems(); - for (ItemTag itemTag : itemList) { - String locURI = itemTag.getSource().getLocURI(); - if (OperationCode.Info.MANUFACTURER.getCode().equals(locURI)) { - devMan = itemTag.getData(); - } - if (OperationCode.Info.DEVICE_MODEL.getCode().equals(locURI)) { - devMod = itemTag.getData(); - } - } - user = syncmlDocument.getHeader().getSource().getLocName(); - AuthenticationInfo authenticationInfo = new AuthenticationInfo(); - authenticationInfo.setUsername(user); - authenticationInfo.setTenantId(tenantId); - authenticationInfo.setTenantDomain(tenantDomain); - WindowsAPIUtils.startTenantFlow(authenticationInfo); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlDocument. - getHeader().getSource().getLocURI()); - Device existingDevice = WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier); - if (!existingDevice.getProperties().isEmpty()) { - List existingProperties = new ArrayList<>(); - - Device.Property vendorProperty = new Device.Property(); - vendorProperty.setName(PluginConstants.SyncML.VENDOR); - vendorProperty.setValue(devMan); - existingProperties.add(vendorProperty); - - Device.Property deviceModelProperty = new Device.Property(); - deviceModelProperty.setName(PluginConstants.SyncML.MODEL); - deviceModelProperty.setValue(devMod); - existingProperties.add(deviceModelProperty); - - existingDevice.setProperties(existingProperties); - existingDevice.setDeviceIdentifier(syncmlDocument.getHeader().getSource().getLocURI()); - existingDevice.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - status = WindowsAPIUtils.getDeviceManagementService().modifyEnrollment(existingDevice); - return status; - } - } catch (DeviceManagementException e) { - throw new WindowsDeviceEnrolmentException("Failure occurred while enrolling device.", e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - return status; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java deleted file mode 100644 index b666e3f22..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/SyncmlService.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml; - -import org.w3c.dom.Document; -import org.wso2.carbon.apimgt.annotations.api.Scope; -import org.wso2.carbon.apimgt.annotations.api.Scopes; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; - -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -/** - * Interface for Windows 8.1 enrollment flow. - */ - -@Path("/devicemanagement") -@Scopes( - scopes = { - @Scope( - name = "Pending operations", - description = "Register an Windows device", - key = "perm:windows:enroll", - permissions = {"/device-mgt/devices/enroll/windows"} - ) - } -) -public interface SyncmlService { - - @Path("/request") - @POST - @Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML}) - @Produces(PluginConstants.SYNCML_MEDIA_TYPE) - Response getResponse(Document request) throws WindowsDeviceEnrolmentException, WindowsOperationException, - NotificationManagementException, WindowsConfigurationException; - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/BasicOperation.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/BasicOperation.java deleted file mode 100644 index 0b5be3f45..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/BasicOperation.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans; - -/** - * Bean for get basic operations. - */ -public class BasicOperation { - - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/PasscodePolicy.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/PasscodePolicy.java deleted file mode 100644 index 567c2c252..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/PasscodePolicy.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans; - -/** - * Bean for device updateLockOperation screen passcode policy. - */ -public class PasscodePolicy extends BasicOperation { - - private int maxFailedAttempts; - private int minLength; - private int pinHistory; - private int minComplexChars; - private int maxPINAgeInDays; - private boolean requireAlphanumeric; - private boolean allowSimple; - private boolean enablePassword; - private int maxInactiveTime; - - public int getMaxInactiveTime() { - return maxInactiveTime; - } - - public void setMaxInactiveTime(int maxInactiveTime) { - this.maxInactiveTime = maxInactiveTime; - } - - public boolean isEnablePassword() { - return enablePassword; - } - - public void setEnablePassword(boolean enablePassword) { - this.enablePassword = enablePassword; - } - - public int getMaxFailedAttempts() { - return maxFailedAttempts; - } - - public void setMaxFailedAttempts(int maxFailedAttempts) { - this.maxFailedAttempts = maxFailedAttempts; - } - - public int getMinLength() { - return minLength; - } - - public void setMinLength(int minLength) { - this.minLength = minLength; - } - - public int getPinHistory() { - return pinHistory; - } - - public void setPinHistory(int pinHistory) { - this.pinHistory = pinHistory; - } - - public int getMinComplexChars() { - return minComplexChars; - } - - public void setMinComplexChars(int minComplexChars) { - this.minComplexChars = minComplexChars; - } - - public int getMaxPINAgeInDays() { - return maxPINAgeInDays; - } - - public void setMaxPINAgeInDays(int maxPINAgeInDays) { - this.maxPINAgeInDays = maxPINAgeInDays; - } - - public boolean isRequireAlphanumeric() { - return requireAlphanumeric; - } - - public void setRequireAlphanumeric(boolean requireAlphanumeric) { - this.requireAlphanumeric = requireAlphanumeric; - } - - public boolean isAllowSimple() { - return allowSimple; - } - - public void setAllowSimple(boolean allowSimple) { - this.allowSimple = allowSimple; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Profile.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Profile.java deleted file mode 100644 index 63ac61f45..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Profile.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans; - -/** - * Class for contains device active policy. - */ -public class Profile { - - String featureCode; - String data; - boolean enable; - boolean compliance; - - public boolean isCompliance() { - return compliance; - } - - public void setCompliance(boolean compliance) { - this.compliance = compliance; - } - - public boolean isEnable() { - return enable; - } - - public void setEnable(boolean enable) { - this.enable = enable; - } - - public String getFeatureCode() { - return featureCode; - } - - public void setFeatureCode(String featureCode) { - this.featureCode = featureCode; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Wifi.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Wifi.java deleted file mode 100644 index d545f096d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/Wifi.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans; - -/** - * Bean for WIFI configurations. - */ -public class Wifi extends BasicOperation { - - private String networkName; - private String ssid; - private String connectionType; - private String connectionMode; - private String authentication; - private String encryption; - private String keyType; - private String protection; - private String keyMaterial; - - public String getNetworkName() { - return networkName; - } - - public void setNetworkName(String networkName) { - this.networkName = networkName; - } - - public String getSsid() { - return ssid; - } - - public void setSsid(String ssid) { - this.ssid = ssid; - } - - public String getConnectionType() { - return connectionType; - } - - public void setConnectionType(String connectionType) { - this.connectionType = connectionType; - } - - public String getConnectionMode() { - return connectionMode; - } - - public void setConnectionMode(String connectionMode) { - this.connectionMode = connectionMode; - } - - public String getAuthentication() { - return authentication; - } - - public void setAuthentication(String authentication) { - this.authentication = authentication; - } - - public String getEncryption() { - return encryption; - } - - public void setEncryption(String encryption) { - this.encryption = encryption; - } - - public String getKeyType() { - return keyType; - } - - public void setKeyType(String keyType) { - this.keyType = keyType; - } - - public String getProtection() { - return protection; - } - - public void setProtection(String protection) { - this.protection = protection; - } - - public String getKeyMaterial() { - return keyMaterial; - } - - public void setKeyMaterial(String keyMaterial) { - this.keyMaterial = keyMaterial; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java deleted file mode 100644 index 4bafbf22c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/beans/WindowsDevice.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans; - -/** - * Class for get windows device properties. - */ -public class WindowsDevice { - - private String deviceType; - private String deviceId; - private String osVersion; - private String imsi; - private String imei; - private String manufacturer; - private String model; - private String user; - private String deviceName; - private String windowsType; - - public String getWindowsType() { - return windowsType; - } - - public void setWindowsType(String windowsType) { - this.windowsType = windowsType; - } - - public String getImei() { - return imei; - } - - public void setImei(String imei) { - this.imei = imei; - } - - public String getDeviceType() { - return deviceType; - } - - public void setDeviceType(String deviceType) { - this.deviceType = deviceType; - } - - public String getDeviceId() { - return deviceId; - } - - public void setDeviceId(String deviceId) { - this.deviceId = deviceId; - } - - public String getOsVersion() { - return osVersion; - } - - public void setOsVersion(String osVersion) { - this.osVersion = osVersion; - } - - public String getImsi() { - return imsi; - } - - public void setImsi(String imsi) { - this.imsi = imsi; - } - - public String getManufacturer() { - return manufacturer; - } - - public void setManufacturer(String manufacturer) { - this.manufacturer = manufacturer; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public String getDeviceName() { - return deviceName; - } - - public void setDeviceName(String deviceName) { - this.deviceName = deviceName; - } - - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/impl/SyncmlServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/impl/SyncmlServiceImpl.java deleted file mode 100644 index 547e3def9..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/syncml/impl/SyncmlServiceImpl.java +++ /dev/null @@ -1,404 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - * - * - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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 go - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.w3c.dom.Document; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.Device; -import org.wso2.carbon.device.mgt.common.DeviceIdentifier; -import org.wso2.carbon.device.mgt.common.DeviceManagementConstants; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.EnrolmentInfo; -import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException; -import org.wso2.carbon.device.mgt.common.operation.mgt.Operation; -import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.AuthenticationInfo; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ItemTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.ReplaceTag; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlDocument; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.SyncmlHeader; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.DeviceInfo; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationHandler; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.OperationReply; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlGenerator; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlParser; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.SyncmlService; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.beans.WindowsDevice; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileCacheEntry; -import org.wso2.carbon.policy.mgt.common.PolicyManagementException; -import org.wso2.carbon.policy.mgt.core.PolicyManagerService; - -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.List; - -import static org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils.convertToDeviceIdentifierObject; - -/** - * Implementing class of SyncmlImpl interface. - */ -public class SyncmlServiceImpl implements SyncmlService { - - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.syncml.impl.SyncmlServiceImpl.class); - - /** - * This method is used to generate and return Device object from the received information at - * the Syncml step. - * - * @param windowsDevice Windows specific property object. - * @return - Generated device object. - */ - private Device generateDevice(WindowsDevice windowsDevice) { - - Device generatedDevice = new Device(); - - Device.Property OSVersionProperty = new Device.Property(); - OSVersionProperty.setName(PluginConstants.SyncML.OS_VERSION); - OSVersionProperty.setValue(windowsDevice.getOsVersion()); - - Device.Property IMSEIProperty = new Device.Property(); - IMSEIProperty.setName(PluginConstants.SyncML.IMSI); - IMSEIProperty.setValue(windowsDevice.getImsi()); - - Device.Property IMEIProperty = new Device.Property(); - IMEIProperty.setName(PluginConstants.SyncML.IMEI); - IMEIProperty.setValue(windowsDevice.getImei()); - - Device.Property DevManProperty = new Device.Property(); - DevManProperty.setName(PluginConstants.SyncML.VENDOR); - DevManProperty.setValue(windowsDevice.getManufacturer()); - - Device.Property DevModProperty = new Device.Property(); - DevModProperty.setName(PluginConstants.SyncML.MODEL); - DevModProperty.setValue(windowsDevice.getModel()); - - List propertyList = new ArrayList<>(); - propertyList.add(OSVersionProperty); - propertyList.add(IMSEIProperty); - propertyList.add(IMEIProperty); - propertyList.add(DevManProperty); - propertyList.add(DevModProperty); - - EnrolmentInfo enrolmentInfo = new EnrolmentInfo(); - enrolmentInfo.setOwner(windowsDevice.getUser()); - enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD); - enrolmentInfo.setStatus(EnrolmentInfo.Status.ACTIVE); - - generatedDevice.setEnrolmentInfo(enrolmentInfo); - generatedDevice.setDeviceIdentifier(windowsDevice.getDeviceId()); - generatedDevice.setProperties(propertyList); - generatedDevice.setType(windowsDevice.getDeviceType()); - - return generatedDevice; - } - - /** - * Method for calling SyncML engine for producing the Syncml response. For the first SyncML message comes from - * the device, this method produces a response to retrieve device information for enrolling the device. - * - * @param request - SyncML request - * @return - SyncML response - * @throws WindowsOperationException - * @throws WindowsDeviceEnrolmentException - */ - @Override - public Response getResponse(Document request) - throws WindowsDeviceEnrolmentException, WindowsOperationException, NotificationManagementException, - WindowsConfigurationException { - int msgId; - int sessionId; - String user; - String token; - String response; - SyncmlDocument syncmlDocument; - List deviceInfoOperations; - List pendingOperations; - OperationHandler operationHandler = new OperationHandler(); - DeviceInfo deviceInfo = new DeviceInfo(); - - try { - if (SyncmlParser.parseSyncmlPayload(request) != null) { - syncmlDocument = SyncmlParser.parseSyncmlPayload(request); - SyncmlHeader syncmlHeader = syncmlDocument.getHeader(); - sessionId = syncmlHeader.getSessionId(); - user = syncmlHeader.getSource().getLocName(); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlHeader.getSource(). - getLocURI()); - msgId = syncmlHeader.getMsgID(); - if ((PluginConstants.SyncML.SYNCML_FIRST_MESSAGE_ID == msgId) && - (PluginConstants.SyncML.SYNCML_FIRST_SESSION_ID == sessionId)) { - token = syncmlHeader.getCredential().getData(); - MobileCacheEntry cacheToken = DeviceUtil.getTokenEntry(token); - - if ((cacheToken.getUsername() != null) && (cacheToken.getUsername().equals(user))) { - - if (enrollDevice(request, cacheToken.getTenantDomain(), cacheToken.getTenanatID())) { - deviceInfoOperations = deviceInfo.getDeviceInfo(); - response = generateReply(syncmlDocument, deviceInfoOperations); - return Response.status(Response.Status.OK).entity(response).build(); - } else { - String msg = "Error occurred in device enrollment."; - log.error(msg); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build(); - } - } else { - String msg = "Authentication failure due to incorrect credentials."; - log.error(msg); - return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build(); - } - } else if (PluginConstants.SyncML.SYNCML_SECOND_MESSAGE_ID == msgId && - PluginConstants.SyncML.SYNCML_FIRST_SESSION_ID == sessionId) { - PrivilegedCarbonContext carbonCtx = PrivilegedCarbonContext.getThreadLocalCarbonContext(); - if (enrollDevice(request, carbonCtx.getTenantDomain(), carbonCtx.getTenantId())) { - return Response.ok().entity(generateReply(syncmlDocument, null)).build(); - } else { - String msg = "Error occurred in modify enrollment."; - log.error(msg); - return Response.status(Response.Status.NOT_MODIFIED).entity(msg).build(); - } - } else if (sessionId >= PluginConstants.SyncML.SYNCML_SECOND_SESSION_ID) { - if ((syncmlDocument.getBody().getAlert() != null)) { - if (!syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA)) { - pendingOperations = operationHandler.getPendingOperations(syncmlDocument); - return Response.ok().entity(generateReply(syncmlDocument, pendingOperations)).build(); - } else { - if (WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier, false) != null) { - WindowsAPIUtils.getDeviceManagementService().disenrollDevice(deviceIdentifier); - return Response.ok().entity(generateReply(syncmlDocument, null)).build(); - } else { - String msg = "Enrolled device can not be found in the server."; - log.error(msg); - return Response.status(Response.Status.NOT_FOUND).entity(msg).build(); - } - } - } else { - pendingOperations = operationHandler.getPendingOperations(syncmlDocument); - return Response.ok().entity(generateReply(syncmlDocument, pendingOperations)).build(); - } - } else { - String msg = "Failure occurred in Device request message."; - log.error(msg); - return Response.status(Response.Status.BAD_REQUEST).entity(msg).build(); - } - } - } catch (SyncmlMessageFormatException e) { - String msg = "Error occurred while parsing syncml request."; - log.error(msg, e); - throw new WindowsOperationException(msg, e); - } catch (OperationManagementException e) { - String msg = "Cannot access operation management service."; - log.error(msg, e); - throw new WindowsOperationException(msg, e); - } catch (SyncmlOperationException e) { - String msg = "Error occurred while getting effective feature."; - log.error(msg, e); - throw new WindowsConfigurationException(msg, e); - } catch (DeviceManagementException e) { - String msg = "Failure occurred in dis-enrollment flow."; - log.error(msg, e); - throw new WindowsOperationException(msg, e); - } - return null; - } - - /** - * Enroll phone device - * - * @param request Device syncml request for the server side. - * @return enroll state - * @throws WindowsDeviceEnrolmentException - * @throws WindowsOperationException - */ - private boolean enrollDevice(Document request, String tenantDomain, int tenantId) throws WindowsDeviceEnrolmentException, - WindowsOperationException { - - String osVersion; - String imsi = null; - String imei = null; - String devID; - String devMan; - String devMod; - String devLang; - String vendor; - String macAddress; - String modVersion; - boolean status = false; - String user; - String deviceName; - int msgID; - SyncmlDocument syncmlDocument; - - try { - syncmlDocument = SyncmlParser.parseSyncmlPayload(request); - msgID = syncmlDocument.getHeader().getMsgID(); - if (msgID == PluginConstants.SyncML.SYNCML_FIRST_MESSAGE_ID) { - ReplaceTag replace = syncmlDocument.getBody().getReplace(); - List itemList = replace.getItems(); - devID = itemList.get(PluginConstants.SyncML.DEVICE_ID_POSITION).getData(); - devMan = itemList.get(PluginConstants.SyncML.DEVICE_MAN_POSITION).getData(); - devMod = itemList.get(PluginConstants.SyncML.DEVICE_MODEL_POSITION).getData(); - modVersion = itemList.get(PluginConstants.SyncML.DEVICE_MOD_VER_POSITION).getData(); - devLang = itemList.get(PluginConstants.SyncML.DEVICE_LANG_POSITION).getData(); - user = syncmlDocument.getHeader().getSource().getLocName(); - AuthenticationInfo authenticationInfo = new AuthenticationInfo(); - authenticationInfo.setUsername(user); - authenticationInfo.setTenantDomain(tenantDomain); - authenticationInfo.setTenantId(tenantId); - WindowsAPIUtils.startTenantFlow(authenticationInfo); - - if (log.isDebugEnabled()) { - log.debug( - "OS Version:" + modVersion + ", DevID: " + devID + ", DevMan: " + devMan + - ", DevMod: " + devMod + ", DevLang: " + devLang); - } - WindowsDevice windowsDevice = new WindowsDevice(); - windowsDevice.setDeviceType(DeviceManagementConstants.MobileDeviceTypes. - MOBILE_DEVICE_TYPE_WINDOWS); - windowsDevice.setDeviceId(devID); - windowsDevice.setImei(imei); - windowsDevice.setImsi(imsi); - windowsDevice.setManufacturer(devMan); - windowsDevice.setOsVersion(modVersion); - windowsDevice.setModel(devMod); - windowsDevice.setUser(user); - Device device = generateDevice(windowsDevice); - status = WindowsAPIUtils.getDeviceManagementService().enrollDevice(device); - return status; - - } else if (msgID == PluginConstants.SyncML.SYNCML_SECOND_MESSAGE_ID) { - - List itemList = syncmlDocument.getBody().getResults().getItem(); - osVersion = itemList.get(PluginConstants.SyncML.OSVERSION_POSITION).getData(); - imsi = itemList.get(PluginConstants.SyncML.IMSI_POSITION).getData(); - imei = itemList.get(PluginConstants.SyncML.IMEI_POSITION).getData(); - vendor = itemList.get(PluginConstants.SyncML.VENDOR_POSITION).getData(); - devMod = itemList.get(PluginConstants.SyncML.MODEL_POSITION).getData(); - macAddress = itemList.get(PluginConstants.SyncML.MAC_ADDRESS_POSITION).getData(); - deviceName = itemList.get(PluginConstants.SyncML.DEVICE_NAME_POSITION).getData(); - DeviceIdentifier deviceIdentifier = convertToDeviceIdentifierObject(syncmlDocument. - getHeader().getSource().getLocURI()); - Device existingDevice = WindowsAPIUtils.getDeviceManagementService().getDevice(deviceIdentifier); - if (!existingDevice.getProperties().isEmpty()) { - List existingProperties = new ArrayList<>(); - - Device.Property imeiProperty = new Device.Property(); - imeiProperty.setName(PluginConstants.SyncML.IMEI); - imeiProperty.setValue(imei); - existingProperties.add(imeiProperty); - - Device.Property osVersionProperty = new Device.Property(); - osVersionProperty.setName(PluginConstants.SyncML.OS_VERSION); - osVersionProperty.setValue(osVersion); - existingProperties.add(osVersionProperty); - - Device.Property imsiProperty = new Device.Property(); - imsiProperty.setName(PluginConstants.SyncML.IMSI); - imsiProperty.setValue(imsi); - existingProperties.add(imsiProperty); - - Device.Property vendorProperty = new Device.Property(); - vendorProperty.setName(PluginConstants.SyncML.VENDOR); - vendorProperty.setValue(vendor); - existingProperties.add(vendorProperty); - - Device.Property macAddressProperty = new Device.Property(); - macAddressProperty.setName(PluginConstants.SyncML.MAC_ADDRESS); - macAddressProperty.setValue(macAddress); - existingProperties.add(macAddressProperty); - - Device.Property deviceModelProperty = new Device.Property(); - deviceModelProperty.setName(PluginConstants.SyncML.MODEL); - deviceModelProperty.setValue(devMod); - existingProperties.add(deviceModelProperty); - - existingDevice.setProperties(existingProperties); - existingDevice.setName(deviceName); - existingDevice.setDeviceIdentifier(syncmlDocument.getHeader().getSource().getLocURI()); - existingDevice.setType(DeviceManagementConstants.MobileDeviceTypes.MOBILE_DEVICE_TYPE_WINDOWS); - status = WindowsAPIUtils.getDeviceManagementService().modifyEnrollment(existingDevice); - // call effective policy for the enrolling device. - PolicyManagerService policyManagerService = WindowsAPIUtils.getPolicyManagerService(); - policyManagerService.getEffectivePolicy(deviceIdentifier); - return status; - } - } - } catch (DeviceManagementException e) { - throw new WindowsDeviceEnrolmentException("Failure occurred while enrolling device.", e); - } catch (PolicyManagementException e) { - throw new WindowsOperationException("Error occurred while getting effective policy.", e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - return status; - } - - /** - * Generate Device payloads. - * - * @param syncmlDocument Parsed syncml payload from the syncml engine. - * @param operations Operations for generate payload. - * @return String type syncml payload. - * @throws WindowsOperationException - * @throws PolicyManagementException - * @throws org.wso2.carbon.policy.mgt.common.FeatureManagementException - */ - public String generateReply(SyncmlDocument syncmlDocument, List operations) - throws SyncmlMessageFormatException, SyncmlOperationException, WindowsOperationException { - - OperationReply operationReply; - SyncmlGenerator generator; - SyncmlDocument syncmlResponse; - if (operations == null) { - operationReply = new OperationReply(syncmlDocument); - } else { - operationReply = new OperationReply(syncmlDocument, operations); - } - syncmlResponse = operationReply.generateReply(); - generator = new SyncmlGenerator(); - return generator.generatePayload(syncmlResponse); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java deleted file mode 100644 index 8c6569861..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/CertificateEnrollmentService.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep; - -import io.swagger.annotations.*; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.AdditionalContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.RequestSecurityTokenResponse; - -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.xml.ws.BindingType; -import javax.xml.ws.RequestWrapper; -import javax.xml.ws.ResponseWrapper; -import javax.xml.ws.soap.SOAPBinding; -import java.io.UnsupportedEncodingException; - -/** - * Interface of WSTEP implementation. - */ - -@WebService(targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE, name = "wstep") -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public interface CertificateEnrollmentService { - - @RequestWrapper(localName = "RequestSecurityToken", targetNamespace = PluginConstants - .WS_TRUST_TARGET_NAMESPACE) - @WebMethod(operationName = "RequestSecurityToken") - @ResponseWrapper(localName = "RequestSecurityTokenResponseCollection", targetNamespace = - PluginConstants.WS_TRUST_TARGET_NAMESPACE) - @POST - void requestSecurityToken( - @WebParam(name = "TokenType", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - String tokenType, - @WebParam(name = "RequestType", targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - String requestType, - @WebParam(name = "BinarySecurityToken", targetNamespace = PluginConstants - .WS_SECURITY_TARGET_NAMESPACE) - String binarySecurityToken, - @WebParam(name = "AdditionalContext", targetNamespace = PluginConstants - .SOAP_AUTHORIZATION_TARGET_NAMESPACE) - AdditionalContext additionalContext, - @WebParam(mode = WebParam.Mode.OUT, name = "RequestSecurityTokenResponse", - targetNamespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - javax.xml.ws.Holder response) throws - WindowsDeviceEnrolmentException, UnsupportedEncodingException, WAPProvisioningException; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/AdditionalContext.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/AdditionalContext.java deleted file mode 100644 index b6ec47a08..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/AdditionalContext.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OIDCollection", namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE, - propOrder = {"contextitem"}) -@SuppressWarnings("unused") -public class AdditionalContext { - - @XmlElement(name = "ContextItem", required = true, - namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE) - - protected List contextitem; - - public List getcontextitem() { - if (contextitem == null) { - contextitem = new ArrayList(); - } - return this.contextitem; - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/BinarySecurityToken.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/BinarySecurityToken.java deleted file mode 100644 index 1678e8476..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/BinarySecurityToken.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.*; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "BinarySecurityToken", namespace = PluginConstants.WS_SECURITY_TARGET_NAMESPACE, - propOrder = {"ValueType", "EncodingType"}) -@SuppressWarnings("unused") -public class BinarySecurityToken { - - @XmlAttribute(name = "ValueType") - protected String ValueType; - @XmlAttribute(name = "EncodingType") - protected String EncodingType; - @XmlValue - protected String Token; - - public void setValueType(String valuetype) { - this.ValueType = valuetype; - } - - public String getValueType() { - return this.ValueType; - } - - public void setEncodingType(String encodingtype) { - this.EncodingType = encodingtype; - } - - public String getEncodingType() { - return this.EncodingType; - } - - public void setToken(String token) { - this.Token = token; - } - - public String getToken() { - return this.Token; - } - -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/ContextItem.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/ContextItem.java deleted file mode 100644 index beac6159a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/ContextItem.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ContextItem", namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE, - propOrder = {"Value"}) -public class ContextItem { - - @XmlElement(required = true, namespace = PluginConstants.SOAP_AUTHORIZATION_TARGET_NAMESPACE) - protected String Value; - - public String getValue() { - return Value; - } - - public void setValue(String value) { - Value = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityToken.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityToken.java deleted file mode 100644 index 419c83cf0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityToken.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestedSecurityToken", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE, - propOrder = {"binarySecurityToken"}) -@SuppressWarnings("unused") -public class RequestSecurityToken { - - @XmlElement(name = "BinarySecurityToken", required = true, - namespace = PluginConstants.WS_SECURITY_TARGET_NAMESPACE) - - protected BinarySecurityToken binarySecurityToken; - - public void setBinarySecurityToken(BinarySecurityToken binarysecuritytoken) { - this.binarySecurityToken = binarysecuritytoken; - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityTokenResponse.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityTokenResponse.java deleted file mode 100644 index 86035a509..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestSecurityTokenResponse.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.io.Serializable; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestSecurityTokenResponse", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE, - propOrder = {"TokenType", "RequestedSecurityToken", "RequestID"}) -@SuppressWarnings("unused") -public class RequestSecurityTokenResponse implements Serializable { - - @XmlElement(name = "TokenType", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - private String TokenType; - - @XmlElement(name = "RequestedSecurityToken", required = true, - namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE) - private org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.RequestedSecurityToken RequestedSecurityToken; - - @XmlElement(name = "RequestID", namespace = PluginConstants.ENROLLMENT_POLICY_TARGET_NAMESPACE) - private int RequestID; - - public String getTokenType() { - return TokenType; - } - - public void setTokenType(String tokenType) { - TokenType = tokenType; - } - - public org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.RequestedSecurityToken getRequestedSecurityToken() { - return RequestedSecurityToken; - } - - public void setRequestedSecurityToken(org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.RequestedSecurityToken - requestedSecurityToken) { - RequestedSecurityToken = requestedSecurityToken; - } - - public int getRequestID() { - return RequestID; - } - - public void setRequestID(int requestID) { - RequestID = requestID; - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestedSecurityToken.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestedSecurityToken.java deleted file mode 100644 index d2d549994..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/RequestedSecurityToken.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestedSecurityToken", namespace = PluginConstants.WS_TRUST_TARGET_NAMESPACE, - propOrder = {"binarySecurityToken"}) -public class RequestedSecurityToken { - - @XmlElement(name = "BinarySecurityToken", required = true, - namespace = PluginConstants.WS_SECURITY_TARGET_NAMESPACE) - - protected BinarySecurityToken binarySecurityToken; - - public void setBinarySecurityToken(BinarySecurityToken binarysecuritytoken) { - this.binarySecurityToken = binarysecuritytoken; - } -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/package-info.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/package-info.java deleted file mode 100644 index d8ddcf60e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/beans/package-info.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -@XmlSchema(namespace = "http://www.w3.org/2003/05/soap-envelope", - xmlns = { - @XmlNs(prefix = "", namespaceURI = "http://www.w3.org/2003/05/soap-envelope") - }, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans; - -import javax.xml.bind.annotation.XmlNs; -import javax.xml.bind.annotation.XmlSchema; \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/impl/CertificateEnrollmentServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/impl/CertificateEnrollmentServiceImpl.java deleted file mode 100644 index 24b5dc7ae..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/impl/CertificateEnrollmentServiceImpl.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.impl; - -import org.apache.commons.codec.binary.Base64; -import org.apache.commons.codec.digest.DigestUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.cxf.headers.Header; -import org.apache.cxf.helpers.CastUtils; -import org.apache.cxf.jaxws.context.WrappedMessageContext; -import org.apache.cxf.message.Message; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException; -import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementServiceImpl; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.common.DeviceManagementException; -import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.CertificateGenerationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.SyncmlMessageFormatException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.DeviceUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.util.WindowsAPIUtils; -import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.SyncmlCredentialUtil; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.CertificateEnrollmentService; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.AdditionalContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.BinarySecurityToken; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.RequestSecurityTokenResponse; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.beans.RequestedSecurityToken; -import org.wso2.carbon.device.mgt.mobile.windows.impl.dto.MobileCacheEntry; -import org.xml.sax.SAXException; - -import javax.annotation.Resource; -import javax.jws.WebService; -import javax.servlet.ServletContext; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import javax.xml.ws.BindingType; -import javax.xml.ws.Holder; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.soap.Addressing; -import javax.xml.ws.soap.SOAPBinding; -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.security.cert.CertificateEncodingException; -import java.security.cert.X509Certificate; -import java.util.List; - -/** - * Implementation class of CertificateEnrollmentService interface. This class implements MS-WSTEP - * protocol. - */ -@WebService(endpointInterface = PluginConstants.CERTIFICATE_ENROLLMENT_SERVICE_ENDPOINT, - targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE) -@Addressing(enabled = true, required = true) -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public class CertificateEnrollmentServiceImpl implements CertificateEnrollmentService { - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.impl.CertificateEnrollmentServiceImpl.class); - private X509Certificate rootCACertificate; - private String pollingFrequency; - private String provisioningURL; - private String domain; - - @Resource - private WebServiceContext context; - - /** - * This method implements MS-WSTEP for Certificate Enrollment Service. - * - * @param tokenType - Device Enrolment Token type is received via device - * @param requestType - WS-Trust request type - * @param binarySecurityToken - CSR from device - * @param additionalContext - Device type and OS version is received - * @param response - Response will include wap-provisioning xml - * @WindowsDeviceEnrolmentException - - */ - @Override - public void requestSecurityToken(String tokenType, String requestType, String binarySecurityToken, - AdditionalContext additionalContext, - Holder response) throws - WindowsDeviceEnrolmentException { - - String headerBinarySecurityToken = null; - String headerTo = null; - String encodedWap; - List
headers = getHeaders(); - for (Header headerElement : headers) { - String nodeName = headerElement.getName().getLocalPart(); - if (PluginConstants.SECURITY.equals(nodeName)) { - Element element = (Element) headerElement.getObject(); - headerBinarySecurityToken = element.getFirstChild().getNextSibling().getFirstChild().getTextContent(); - } - if (PluginConstants.TO.equals(nodeName)) { - Element toElement = (Element) headerElement.getObject(); - headerTo = toElement.getFirstChild().getTextContent(); - } - } - - String[] splitEmail = headerTo.split("(/ENROLLMENTSERVER)"); - String email = splitEmail[PluginConstants.CertificateEnrolment.EMAIL_SEGMENT]; - - String[] splitDomain = email.split("(EnterpriseEnrollment.)"); - domain = splitDomain[PluginConstants.CertificateEnrolment.DOMAIN_SEGMENT]; - provisioningURL = PluginConstants.CertificateEnrolment.ENROLL_SUBDOMAIN + domain + - PluginConstants.CertificateEnrolment.SYNCML_PROVISIONING_SERVICE_URL; - - List tenantConfigurations; - try { - if ((tenantConfigurations = WindowsAPIUtils.getTenantConfigurationData()) != null) { - for (ConfigurationEntry configurationEntry : tenantConfigurations) { - if ((PluginConstants.TenantConfigProperties.NOTIFIER_FREQUENCY.equals( - configurationEntry.getName()))) { - pollingFrequency = configurationEntry.getValue().toString(); - } else { - pollingFrequency = PluginConstants.TenantConfigProperties.DEFAULT_FREQUENCY; - } - } - } else { - pollingFrequency = PluginConstants.TenantConfigProperties.DEFAULT_FREQUENCY; - String msg = "Tenant configurations are not initialized yet."; - log.error(msg); - } - ServletContext ctx = (ServletContext) context.getMessageContext(). - get(MessageContext.SERVLET_CONTEXT); - File wapProvisioningFile = (File) ctx.getAttribute(PluginConstants.CONTEXT_WAP_PROVISIONING_FILE); - if (log.isDebugEnabled()) { - log.debug("Received CSR from Device:" + binarySecurityToken); - } - - String wapProvisioningFilePath = wapProvisioningFile.getPath(); - RequestSecurityTokenResponse requestSecurityTokenResponse = new RequestSecurityTokenResponse(); - requestSecurityTokenResponse.setTokenType(PluginConstants.CertificateEnrolment.TOKEN_TYPE); - - encodedWap = prepareWapProvisioningXML(binarySecurityToken, wapProvisioningFilePath, - headerBinarySecurityToken); - RequestedSecurityToken requestedSecurityToken = new RequestedSecurityToken(); - BinarySecurityToken binarySecToken = new BinarySecurityToken(); - binarySecToken.setValueType(PluginConstants.CertificateEnrolment.VALUE_TYPE); - binarySecToken.setEncodingType(PluginConstants.CertificateEnrolment.ENCODING_TYPE); - binarySecToken.setToken(encodedWap); - requestedSecurityToken.setBinarySecurityToken(binarySecToken); - requestSecurityTokenResponse.setRequestedSecurityToken(requestedSecurityToken); - requestSecurityTokenResponse.setRequestID(PluginConstants.CertificateEnrolment.REQUEST_ID); - response.value = requestSecurityTokenResponse; - } catch (CertificateGenerationException e) { - String msg = "Problem occurred while generating certificate."; - log.error(msg, e); - throw new WindowsDeviceEnrolmentException(msg, e); - } catch (WAPProvisioningException e) { - String msg = "Problem occurred while generating wap-provisioning file."; - log.error(msg, e); - throw new WindowsDeviceEnrolmentException(msg, e); - } catch (DeviceManagementException e) { - String msg = "Error occurred while getting tenant configurations."; - log.error(msg); - throw new WindowsDeviceEnrolmentException(msg, e); - } finally { - PrivilegedCarbonContext.endTenantFlow(); - } - } - - /** - * Method used to Convert the Document object into a String. - * - * @param document - Wap provisioning XML document - * @return - String representation of wap provisioning XML document - * @throws TransformerException - */ - private String convertDocumentToString(Document document) throws TransformerException { - DOMSource DOMSource = new DOMSource(document); - StringWriter stringWriter = new StringWriter(); - StreamResult streamResult = new StreamResult(stringWriter); - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - transformer.transform(DOMSource, streamResult); - - return stringWriter.toString(); - } - - /** - * This method prepares the wap-provisioning file by including relevant certificates etc. - * - * @param binarySecurityToken - CSR from device - * @param wapProvisioningFilePath - File path of wap-provisioning file - * @return - base64 encoded final wap-provisioning file as a String - * @throws CertificateGenerationException - * @throws org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException - */ - private String prepareWapProvisioningXML(String binarySecurityToken, String wapProvisioningFilePath, - String headerBst) throws CertificateGenerationException, - WAPProvisioningException, - WindowsDeviceEnrolmentException { - String rootCertEncodedString; - String signedCertEncodedString; - X509Certificate signedCertificate; - String provisioningXmlString; - - CertificateManagementServiceImpl certMgtServiceImpl = CertificateManagementServiceImpl.getInstance(); - Base64 base64Encoder = new Base64(); - try { - rootCACertificate = (X509Certificate) certMgtServiceImpl.getCACertificate(); - rootCertEncodedString = base64Encoder.encodeAsString(rootCACertificate.getEncoded()); - - - signedCertificate = certMgtServiceImpl.getSignedCertificateFromCSR(binarySecurityToken); - signedCertEncodedString = base64Encoder.encodeAsString(signedCertificate.getEncoded()); - - DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); - domFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - domFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); - - DocumentBuilder builder = domFactory.newDocumentBuilder(); - Document document = builder.parse(wapProvisioningFilePath); - NodeList wapParm = document.getElementsByTagName(PluginConstants.CertificateEnrolment.PARM); - Node caCertificatePosition = wapParm.item(PluginConstants.CertificateEnrolment.CA_CERTIFICATE_POSITION); - - //Adding SHA1 CA certificate finger print to wap-provisioning xml. - caCertificatePosition.getParentNode().getAttributes().getNamedItem(PluginConstants. - CertificateEnrolment.TYPE).setTextContent(String.valueOf( - DigestUtils.sha1Hex(rootCACertificate.getEncoded())).toUpperCase()); - //Adding encoded CA certificate to wap-provisioning file after removing new line - // characters. - NamedNodeMap rootCertAttributes = caCertificatePosition.getAttributes(); - Node rootCertNode = - rootCertAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - rootCertEncodedString = rootCertEncodedString.replaceAll("\n", ""); - rootCertNode.setTextContent(rootCertEncodedString); - - if (log.isDebugEnabled()) { - log.debug("Root certificate: " + rootCertEncodedString); - } - - Node signedCertificatePosition = wapParm.item(PluginConstants.CertificateEnrolment. - SIGNED_CERTIFICATE_POSITION); - - //Adding SHA1 signed certificate finger print to wap-provisioning xml. - signedCertificatePosition.getParentNode().getAttributes().getNamedItem(PluginConstants. - CertificateEnrolment.TYPE).setTextContent(String.valueOf( - DigestUtils.sha1Hex(signedCertificate.getEncoded())).toUpperCase()); - - //Adding encoded signed certificate to wap-provisioning file after removing new line - // characters. - NamedNodeMap clientCertAttributes = signedCertificatePosition.getAttributes(); - Node clientEncodedNode = - clientCertAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - signedCertEncodedString = signedCertEncodedString.replaceAll("\n", ""); - - clientEncodedNode.setTextContent(signedCertEncodedString); - if (log.isDebugEnabled()) { - log.debug("Signed certificate: " + signedCertEncodedString); - } - - //Adding domainName to wap-provisioning xml. - Node domainPosition = wapParm.item(PluginConstants.CertificateEnrolment.DOMAIN_POSITION); - NamedNodeMap domainAttribute = domainPosition.getAttributes(); - Node domainNode = domainAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - domainNode.setTextContent(domain); - - //Adding Next provisioning service URL to wap-provisioning xml. - Node syncmlServicePosition = wapParm.item(PluginConstants.CertificateEnrolment. - SYNCML_PROVISIONING_ADDR_POSITION); - NamedNodeMap syncmlServiceAttribute = syncmlServicePosition.getAttributes(); - Node syncmlServiceNode = syncmlServiceAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - syncmlServiceNode.setTextContent(provisioningURL); - - // Adding user name auth token to wap-provisioning xml. - Node userNameAuthPosition = wapParm.item(PluginConstants.CertificateEnrolment.APPAUTH_USERNAME_POSITION); - NamedNodeMap appServerAttribute = userNameAuthPosition.getAttributes(); - Node authNameNode = appServerAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - MobileCacheEntry cacheEntry = DeviceUtil.getTokenEntry(headerBst); - String userName = cacheEntry.getUsername(); - authNameNode.setTextContent(cacheEntry.getUsername()); - DeviceUtil.removeTokenEntry(headerBst); - String password = DeviceUtil.generateRandomToken(); - Node passwordAuthPosition = wapParm.item(PluginConstants.CertificateEnrolment.APPAUTH_PASSWORD_POSITION); - NamedNodeMap appSrvPasswordAttribute = passwordAuthPosition.getAttributes(); - Node authPasswordNode = appSrvPasswordAttribute.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - authPasswordNode.setTextContent(password); - String requestSecurityTokenResponse = SyncmlCredentialUtil.generateRST(userName, password); - DeviceUtil.persistChallengeToken(requestSecurityTokenResponse, null, userName); - - // Get device polling frequency from the tenant Configurations. - Node numberOfFirstRetries = wapParm.item(PluginConstants.CertificateEnrolment.POLLING_FREQUENCY_POSITION); - NamedNodeMap pollingAttributes = numberOfFirstRetries.getAttributes(); - Node pollValue = pollingAttributes.getNamedItem(PluginConstants.CertificateEnrolment.VALUE); - pollValue.setTextContent(pollingFrequency); - provisioningXmlString = convertDocumentToString(document); - - } catch (ParserConfigurationException e) { - throw new WAPProvisioningException("Problem occurred while creating configuration request", e); - } catch (CertificateEncodingException e) { - throw new WindowsDeviceEnrolmentException("Error occurred while encoding certificates.", e); - } catch (SAXException e) { - throw new WAPProvisioningException("Error occurred while parsing wap-provisioning.xml file.", e); - } catch (TransformerException e) { - throw new WAPProvisioningException("Error occurred while transforming wap-provisioning.xml file.", e); - } catch (IOException e) { - throw new WAPProvisioningException("Error occurred while getting wap-provisioning.xml file.", e); - } catch (SyncmlMessageFormatException e) { - throw new WindowsDeviceEnrolmentException("Error occurred while generating password hash value.", e); - } catch (KeystoreException e) { - throw new CertificateGenerationException("CA certificate cannot be generated.", e); - } - return base64Encoder.encodeAsString(provisioningXmlString.getBytes()); - } - - /** - * This method get the soap request header contents. - * - * @return List of SOAP headers. - */ - private List
getHeaders() { - MessageContext messageContext = context.getMessageContext(); - if (messageContext == null || !(messageContext instanceof WrappedMessageContext)) { - return null; - } - Message message = ((WrappedMessageContext) messageContext).getWrappedMessage(); - return CastUtils.cast((List) message.get(Header.HEADER_LIST)); - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/CertificateSigningService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/CertificateSigningService.java deleted file mode 100644 index db6f96ec1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/CertificateSigningService.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.bouncycastle.asn1.x509.*; -import org.bouncycastle.cert.CertIOException; -import org.bouncycastle.cert.X509v3CertificateBuilder; -import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; -import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder; -import org.bouncycastle.operator.ContentSigner; -import org.bouncycastle.operator.OperatorCreationException; -import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequest; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.CertificateGenerationException; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException; - -import javax.security.auth.x500.X500Principal; -import java.math.BigInteger; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; -import java.security.SecureRandom; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Date; -import java.util.List; - -/** - * Class for generating signed certificate for CSR form device. - */ -public class CertificateSigningService { - - private static final long MILLI_SECONDS = 1000L * 60 * 60 * 24; - - private enum PropertyIndex { - COMMON_NAME_INDEX(0), - NOT_BEFORE_DAYS_INDEX(1), - NOT_AFTER_DAYS_INDEX(2); - - private final int itemPosition; - private PropertyIndex(final int itemPosition) { - this.itemPosition = itemPosition; - } - public int getValue() { - return this.itemPosition; - } - } - - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.util.CertificateSigningService.class); - - /** - * Implement certificate signing task using CSR received from the device and the MDM server key - * store. - * @param jcaRequest - CSR from the device - * @param privateKey - Private key of CA certificate in MDM server - * @param caCert - CA certificate in MDM server - * @param certParameterList - Parameter list for Signed certificate generation - * @return - Signed certificate for CSR from device - * @throws CertificateGenerationException - * @throws org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WAPProvisioningException - */ - public static X509Certificate signCSR(JcaPKCS10CertificationRequest jcaRequest, - PrivateKey privateKey, X509Certificate caCert, - List certParameterList) throws - CertificateGenerationException, - WAPProvisioningException { - - String commonName = - (String) certParameterList.get(PropertyIndex.COMMON_NAME_INDEX.getValue()); - int notBeforeDays = - (Integer) certParameterList.get(PropertyIndex.NOT_BEFORE_DAYS_INDEX.getValue()); - int notAfterDays = - (Integer) certParameterList.get(PropertyIndex.NOT_AFTER_DAYS_INDEX.getValue()); - X509v3CertificateBuilder certificateBuilder; - X509Certificate signedCertificate; - - try { - ContentSigner signer; - BigInteger serialNumber = BigInteger.valueOf(new SecureRandom(). - nextInt(Integer.MAX_VALUE)); - Date notBeforeDate = new Date(System.currentTimeMillis() - - (MILLI_SECONDS * notBeforeDays)); - Date notAfterDate = new Date(System.currentTimeMillis() + - (MILLI_SECONDS * notAfterDays)); - certificateBuilder = - new JcaX509v3CertificateBuilder(caCert, serialNumber, notBeforeDate, notAfterDate, - new X500Principal(commonName), - jcaRequest.getPublicKey()); - - //Adding extensions to the signed certificate. - certificateBuilder.addExtension(Extension.keyUsage, true, - new KeyUsage(KeyUsage.digitalSignature)); - certificateBuilder.addExtension(Extension.extendedKeyUsage, false, - new ExtendedKeyUsage(KeyPurposeId.id_kp_clientAuth)); - certificateBuilder.addExtension(Extension.basicConstraints, true, - new BasicConstraints(false)); - - signer = new JcaContentSignerBuilder(PluginConstants.CertificateEnrolment.ALGORITHM). - setProvider(PluginConstants.CertificateEnrolment.PROVIDER).build(privateKey); - - signedCertificate = new JcaX509CertificateConverter().setProvider( - PluginConstants.CertificateEnrolment.PROVIDER).getCertificate( - certificateBuilder.build(signer)); - } catch (InvalidKeyException e) { - throw new CertificateGenerationException("CSR's public key is invalid", e); - } catch (NoSuchAlgorithmException e) { - throw new CertificateGenerationException("Certificate cannot be generated", e); - } - catch (CertIOException e) { - throw new CertificateGenerationException( - "Cannot add extension(s) to signed certificate", e); - } - catch (OperatorCreationException e) { - throw new CertificateGenerationException("Content signer cannot be created", e); - } - catch (CertificateException e) { - throw new CertificateGenerationException("Signed certificate cannot be generated", e); - } - return signedCertificate; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/KeyStoreGenerator.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/KeyStoreGenerator.java deleted file mode 100644 index f123afeab..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/KeyStoreGenerator.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.KeyStoreGenerationException; - -import java.io.FileInputStream; -import java.io.IOException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; - -/** - * Class for MDM Keystore operations. - */ -public class KeyStoreGenerator { - - private static final Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.util.KeyStoreGenerator.class); - - /** - * This method loads the MDM keystore. - * @param keyStore - MDM Keystore - * @param keyStorePassword - Keystore Password - * @param keyStorePath - Keystore path - * @throws KeyStoreGenerationException - */ - public static void loadToStore(KeyStore keyStore, - char[] keyStorePassword, - String keyStorePath) throws KeyStoreGenerationException { - - FileInputStream fileInputStream = null; - - try { - if (keyStorePath != null) { - fileInputStream = new FileInputStream(keyStorePath); - keyStore.load(fileInputStream, keyStorePassword); - } - } catch (NoSuchAlgorithmException e) { - throw new KeyStoreGenerationException( - "Requested cryptographic algorithm is not available in the environment.", e); - } catch (CertificateException e) { - throw new KeyStoreGenerationException("Error working with certificate related to, " + - keyStorePath, e); - } catch (IOException e) { - throw new KeyStoreGenerationException("File error while working with file, " + - keyStorePath, e); - } finally { - try { - if (fileInputStream != null) { - fileInputStream.close(); - } - } catch (IOException e) { - throw new KeyStoreGenerationException("File error while closing the file, " + - keyStorePath, e); - } - } - } - - /** - * This method is for retrieving instance of Key Store. - * @return Keystore object - * @throws KeyStoreGenerationException - */ - public static KeyStore getKeyStore() throws KeyStoreGenerationException { - try { - return KeyStore.getInstance(PluginConstants.CertificateEnrolment.JKS); - } catch (KeyStoreException e) { - String msg = "KeyStore error while creating new JKS."; - log.error(msg, e); - throw new KeyStoreGenerationException(msg, e); - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/MessageHandler.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/MessageHandler.java deleted file mode 100644 index b5296f1c5..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/wstep/util/MessageHandler.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.util; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.joda.time.DateTime; -import org.joda.time.format.ISODateTimeFormat; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; - -import javax.ws.rs.core.Response; -import javax.xml.namespace.QName; -import javax.xml.soap.*; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.*; - -/** - * Class responsible for adding Timestamp security header in SOAP message and adding Content-length - * in the HTTP header for avoiding HTTP chunking. - */ -public class MessageHandler implements SOAPHandler { - - public static final String TIME_ZONE = "Z"; - public static final int VALIDITY_TIME = 5; - public static final int TIMESTAMP_END_INDEX = 6; - public static final int TIMESTAMP_BEGIN_INDEX = 0; - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.wstep.util.MessageHandler.class); - - /** - * This method resolves the security header coming in the SOAP message. - * @return - Security Header - */ - @Override - public Set getHeaders() { - QName securityHeader = new QName(PluginConstants.WS_SECURITY_TARGET_NAMESPACE, PluginConstants.SECURITY); - HashSet headers = new HashSet(); - headers.add(securityHeader); - return headers; - } - - /** - * This method adds Timestamp for SOAP header, and adds Content-length for HTTP header for - * avoiding HTTP chunking. - * - * @param context - Context of the SOAP Message - */ - @Override - public boolean handleMessage(SOAPMessageContext context) { - - Boolean outBoundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); - - if (outBoundProperty) { - SOAPMessage message = context.getMessage(); - SOAPHeader header = null; - SOAPEnvelope envelope = null; - try { - header = message.getSOAPHeader(); - envelope = message.getSOAPPart().getEnvelope(); - } catch (SOAPException e) { - Response.serverError().entity("SOAP message content cannot be read.").build(); - } - try { - if ((header == null) && (envelope != null)) { - header = envelope.addHeader(); - } - } catch (SOAPException e) { - Response.serverError().entity("SOAP header cannot be added.").build(); - } - - SOAPFactory soapFactory = null; - try { - soapFactory = SOAPFactory.newInstance(); - } catch (SOAPException e) { - Response.serverError().entity("Cannot get an instance of SOAP factory.").build(); - } - - QName qNamesSecurity = new QName(PluginConstants.WS_SECURITY_TARGET_NAMESPACE, - PluginConstants.CertificateEnrolment.SECURITY); - SOAPHeaderElement Security = null; - Name attributeName = null; - try { - if (header != null) { - Security = header.addHeaderElement(qNamesSecurity); - } - if (soapFactory != null) { - attributeName = - soapFactory.createName(PluginConstants.CertificateEnrolment.TIMESTAMP_ID, - PluginConstants.CertificateEnrolment.TIMESTAMP_U, - PluginConstants.CertificateEnrolment - .WSS_SECURITY_UTILITY); - } - } catch (SOAPException e) { - Response.serverError().entity("Security header cannot be added.").build(); - } - - QName qNameTimestamp = new QName(PluginConstants.CertificateEnrolment.WSS_SECURITY_UTILITY, - PluginConstants.CertificateEnrolment.TIMESTAMP); - SOAPHeaderElement timestamp = null; - try { - if (header != null) { - timestamp = header.addHeaderElement(qNameTimestamp); - timestamp.addAttribute(attributeName, - PluginConstants.CertificateEnrolment.TIMESTAMP_0); - } - } catch (SOAPException e) { - Response.serverError().entity("Exception while adding timestamp header.").build(); - } - DateTime dateTime = new DateTime(); - DateTime expiredDateTime = dateTime.plusMinutes(VALIDITY_TIME); - String createdISOTime = dateTime.toString(ISODateTimeFormat.dateTime()); - String expiredISOTime = expiredDateTime.toString(ISODateTimeFormat.dateTime()); - createdISOTime = createdISOTime.substring(TIMESTAMP_BEGIN_INDEX, - createdISOTime.length() - - TIMESTAMP_END_INDEX); - createdISOTime = createdISOTime + TIME_ZONE; - expiredISOTime = expiredISOTime.substring(TIMESTAMP_BEGIN_INDEX, - expiredISOTime.length() - - TIMESTAMP_END_INDEX); - expiredISOTime = expiredISOTime + TIME_ZONE; - QName qNameCreated = new QName(PluginConstants.CertificateEnrolment.WSS_SECURITY_UTILITY, - PluginConstants.CertificateEnrolment.CREATED); - SOAPHeaderElement SOAPHeaderCreated = null; - - try { - if (header != null) { - SOAPHeaderCreated = header.addHeaderElement(qNameCreated); - SOAPHeaderCreated.addTextNode(createdISOTime); - } - } catch (SOAPException e) { - Response.serverError().entity("Exception while creating SOAP header.").build(); - } - QName qNameExpires = new QName(PluginConstants.CertificateEnrolment.WSS_SECURITY_UTILITY, - PluginConstants.CertificateEnrolment.EXPIRES); - SOAPHeaderElement SOAPHeaderExpires = null; - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - String messageString = null; - try { - if (header != null) { - SOAPHeaderExpires = header.addHeaderElement(qNameExpires); - SOAPHeaderExpires.addTextNode(expiredISOTime); - } - if ((timestamp != null) && (Security != null)) { - timestamp.addChildElement(SOAPHeaderCreated); - timestamp.addChildElement(SOAPHeaderExpires); - Security.addChildElement(timestamp); - } - message.saveChanges(); - message.writeTo(outputStream); - messageString = new String(outputStream.toByteArray(), - PluginConstants.CertificateEnrolment.UTF_8); - } catch (SOAPException e) { - Response.serverError().entity("Exception while creating timestamp SOAP header.") - .build(); - } catch (IOException e) { - Response.serverError().entity("Exception while writing message to output stream.") - .build(); - } - - Map> headers = - (Map>) context.get(MessageContext.HTTP_REQUEST_HEADERS); - headers = new HashMap>(); - if (messageString != null) { - headers.put(PluginConstants.CONTENT_LENGTH, Arrays.asList(String.valueOf( - messageString.length()))); - } - context.put(MessageContext.HTTP_REQUEST_HEADERS, headers); - } - return true; - } - - @Override - public boolean handleFault(SOAPMessageContext context) { - return true; - } - - @Override - public void close(MessageContext context) { - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java deleted file mode 100644 index 9b91ef75d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/CertificateEnrollmentPolicyService.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep; - -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans.*; - -import javax.jws.WebMethod; -import javax.jws.WebParam; -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.annotation.XmlSeeAlso; -import javax.xml.ws.BindingType; -import javax.xml.ws.Holder; -import javax.xml.ws.RequestWrapper; -import javax.xml.ws.ResponseWrapper; -import javax.xml.ws.soap.SOAPBinding; - -/** - * Interface for MS-XCEP implementation. - */ - -@WebService(targetNamespace = PluginConstants.CERTIFICATE_ENROLLMENT_POLICY_SERVICE_TARGET_NAMESPACE, - name = "IPolicy") -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -@XmlSeeAlso({ ObjectFactory.class }) -public interface CertificateEnrollmentPolicyService { - - @RequestWrapper(localName = "GetPolicies", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE, className = PluginConstants.REQUEST_WRAPPER_CLASS_NAME) - @WebMethod(operationName = "GetPolicies") - @ResponseWrapper(localName = "GetPoliciesResponse", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE, className = PluginConstants. - RESPONSE_WRAPPER_CLASS_NAME) - @POST - @Consumes({PluginConstants.SYNCML_MEDIA_TYPE, MediaType.APPLICATION_XML}) - @Produces(PluginConstants.SYNCML_MEDIA_TYPE) - void getPolicies( - @WebParam(name = "client", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE) - Client client, - @WebParam(name = "requestFilter", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE) - RequestFilter requestFilter, - @WebParam(mode = WebParam.Mode.OUT, name = "response", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE) - Holder response, - @WebParam(mode = WebParam.Mode.OUT, name = "cAs", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE) - Holder caCollection, - @WebParam(mode = WebParam.Mode.OUT, name = "oIDs", targetNamespace = PluginConstants. - ENROLLMENT_POLICY_TARGET_NAMESPACE) - Holder oidCollection - ); -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Attributes.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Attributes.java deleted file mode 100644 index 574003541..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Attributes.java +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for Attributes complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="Attributes">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element ref="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}commonName"/>
- *         <element name="policySchema" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="certificateValidity" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CertificateValidity"/>
- *         <element name="permission" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}EnrollmentPermission"/>
- *         <element name="privateKeyAttributes" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}PrivateKeyAttributes"/>
- *         <element name="revision" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}Revision"/>
- *         <element name="supersededPolicies" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}SupersededPolicies"/>
- *         <element name="privateKeyFlags" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="subjectNameFlags" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedInt"/>
- *         <element name="enrollmentFlags" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="generalFlags" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="hashAlgorithmOIDReference" type="{http://www.w3
- *         .org/2001/XMLSchema}int"/>
- *         <element name="rARequirements" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}RARequirements"/>
- *         <element name="keyArchivalAttributes" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}KeyArchivalAttributes"/>
- *         <element name="extensions" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}ExtensionCollection"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Attributes", propOrder = { - "commonName", - "policySchema", - "certificateValidity", - "permission", - "privateKeyAttributes", - "revision", - "supersededPolicies", - "privateKeyFlags", - "subjectNameFlags", - "enrollmentFlags", - "generalFlags", - "hashAlgorithmOIDReference", - "raRequirements", - "keyArchivalAttributes", - "extensions", - "any" -}) -@SuppressWarnings("unused") -public class Attributes { - - @XmlElement(required = true) - protected String commonName; - @XmlSchemaType(name = "unsignedInt") - protected long policySchema; - @XmlElement(required = true) - protected CertificateValidity certificateValidity; - @XmlElement(required = true) - protected EnrollmentPermission permission; - @XmlElement(required = true) - protected PrivateKeyAttributes privateKeyAttributes; - @XmlElement(required = true) - protected Revision revision; - @XmlElement(required = true, nillable = true) - protected SupersededPolicies supersededPolicies; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long privateKeyFlags; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long subjectNameFlags; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long enrollmentFlags; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long generalFlags; - @XmlElement(required = true, type = Integer.class, nillable = true) - protected Integer hashAlgorithmOIDReference; - @XmlElement(name = "rARequirements", required = true, nillable = true) - protected RARequirements raRequirements; - @XmlElement(required = true, nillable = true) - protected KeyArchivalAttributes keyArchivalAttributes; - @XmlElement(required = true, nillable = true) - protected ExtensionCollection extensions; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the commonName property. - * - * @return possible object is - * {@link String } - */ - public String getCommonName() { - return commonName; - } - - /** - * Sets the value of the commonName property. - * - * @param value allowed object is - * {@link String } - */ - public void setCommonName(String value) { - this.commonName = value; - } - - /** - * Gets the value of the policySchema property. - */ - public long getPolicySchema() { - return policySchema; - } - - /** - * Sets the value of the policySchema property. - */ - public void setPolicySchema(long value) { - this.policySchema = value; - } - - /** - * Gets the value of the certificateValidity property. - * - * @return possible object is - * {@link CertificateValidity } - */ - public CertificateValidity getCertificateValidity() { - return certificateValidity; - } - - /** - * Sets the value of the certificateValidity property. - * - * @param value allowed object is - * {@link CertificateValidity } - */ - public void setCertificateValidity(CertificateValidity value) { - this.certificateValidity = value; - } - - /** - * Gets the value of the permission property. - * - * @return possible object is - * {@link EnrollmentPermission } - */ - public EnrollmentPermission getPermission() { - return permission; - } - - /** - * Sets the value of the permission property. - * - * @param value allowed object is - * {@link EnrollmentPermission } - */ - public void setPermission(EnrollmentPermission value) { - this.permission = value; - } - - /** - * Gets the value of the privateKeyAttributes property. - * - * @return possible object is - * {@link PrivateKeyAttributes } - */ - public PrivateKeyAttributes getPrivateKeyAttributes() { - return privateKeyAttributes; - } - - /** - * Sets the value of the privateKeyAttributes property. - * - * @param value allowed object is - * {@link PrivateKeyAttributes } - */ - public void setPrivateKeyAttributes(PrivateKeyAttributes value) { - this.privateKeyAttributes = value; - } - - /** - * Gets the value of the revision property. - * - * @return possible object is - * {@link Revision } - */ - public Revision getRevision() { - return revision; - } - - /** - * Sets the value of the revision property. - * - * @param value allowed object is - * {@link Revision } - */ - public void setRevision(Revision value) { - this.revision = value; - } - - /** - * Gets the value of the supersededPolicies property. - * - * @return possible object is - * {@link SupersededPolicies } - */ - public SupersededPolicies getSupersededPolicies() { - return supersededPolicies; - } - - /** - * Sets the value of the supersededPolicies property. - * - * @param value allowed object is - * {@link SupersededPolicies } - */ - public void setSupersededPolicies(SupersededPolicies value) { - this.supersededPolicies = value; - } - - /** - * Gets the value of the privateKeyFlags property. - * - * @return possible object is - * {@link Long } - */ - public Long getPrivateKeyFlags() { - return privateKeyFlags; - } - - /** - * Sets the value of the privateKeyFlags property. - * - * @param value allowed object is - * {@link Long } - */ - public void setPrivateKeyFlags(Long value) { - this.privateKeyFlags = value; - } - - /** - * Gets the value of the subjectNameFlags property. - * - * @return possible object is - * {@link Long } - */ - public Long getSubjectNameFlags() { - return subjectNameFlags; - } - - /** - * Sets the value of the subjectNameFlags property. - * - * @param value allowed object is - * {@link Long } - */ - public void setSubjectNameFlags(Long value) { - this.subjectNameFlags = value; - } - - /** - * Gets the value of the enrollmentFlags property. - * - * @return possible object is - * {@link Long } - */ - public Long getEnrollmentFlags() { - return enrollmentFlags; - } - - /** - * Sets the value of the enrollmentFlags property. - * - * @param value allowed object is - * {@link Long } - */ - public void setEnrollmentFlags(Long value) { - this.enrollmentFlags = value; - } - - /** - * Gets the value of the generalFlags property. - * - * @return possible object is - * {@link Long } - */ - public Long getGeneralFlags() { - return generalFlags; - } - - /** - * Sets the value of the generalFlags property. - * - * @param value allowed object is - * {@link Long } - */ - public void setGeneralFlags(Long value) { - this.generalFlags = value; - } - - /** - * Gets the value of the hashAlgorithmOIDReference property. - * - * @return possible object is - * {@link Integer } - */ - public Integer getHashAlgorithmOIDReference() { - return hashAlgorithmOIDReference; - } - - /** - * Sets the value of the hashAlgorithmOIDReference property. - * - * @param value allowed object is - * {@link Integer } - */ - public void setHashAlgorithmOIDReference(Integer value) { - this.hashAlgorithmOIDReference = value; - } - - /** - * Gets the value of the raRequirements property. - * - * @return possible object is - * {@link RARequirements } - */ - public RARequirements getRARequirements() { - return raRequirements; - } - - /** - * Sets the value of the raRequirements property. - * - * @param value allowed object is - * {@link RARequirements } - */ - public void setRARequirements(RARequirements value) { - this.raRequirements = value; - } - - /** - * Gets the value of the keyArchivalAttributes property. - * - * @return possible object is - * {@link KeyArchivalAttributes } - */ - public KeyArchivalAttributes getKeyArchivalAttributes() { - return keyArchivalAttributes; - } - - /** - * Sets the value of the keyArchivalAttributes property. - * - * @param value allowed object is - * {@link KeyArchivalAttributes } - */ - public void setKeyArchivalAttributes(KeyArchivalAttributes value) { - this.keyArchivalAttributes = value; - } - - /** - * Gets the value of the extensions property. - * - * @return possible object is - * {@link ExtensionCollection } - */ - public ExtensionCollection getExtensions() { - return extensions; - } - - /** - * Sets the value of the extensions property. - * - * @param value allowed object is - * {@link ExtensionCollection } - */ - public void setExtensions(ExtensionCollection value) { - this.extensions = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CA.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CA.java deleted file mode 100644 index 35a2c7906..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CA.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CA complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CA">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="uris" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CAURICollection"/>
- *         <element name="certificate" type="{http://www.w3.org/2001/XMLSchema}base64Binary"/>
- *         <element name="enrollPermission" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="cAReferenceID" type="{http://www.w3.org/2001/XMLSchema}int"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CA", propOrder = { - "uris", - "certificate", - "enrollPermission", - "caReferenceID", - "any" -}) -@SuppressWarnings("unused") -public class CA { - - @XmlElement(required = true) - protected CAURICollection uris; - @XmlElement(required = true) - protected byte[] certificate; - protected boolean enrollPermission; - @XmlElement(name = "cAReferenceID") - protected int caReferenceID; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the uris property. - * - * @return possible object is - * {@link CAURICollection } - */ - public CAURICollection getUris() { - return uris; - } - - /** - * Sets the value of the uris property. - * - * @param value allowed object is - * {@link CAURICollection } - */ - public void setUris(CAURICollection value) { - this.uris = value; - } - - /** - * Gets the value of the certificate property. - * - * @return possible object is - * byte[] - */ - public byte[] getCertificate() { - return certificate; - } - - /** - * Sets the value of the certificate property. - * - * @param value allowed object is - * byte[] - */ - public void setCertificate(byte[] value) { - this.certificate = value; - } - - /** - * Gets the value of the enrollPermission property. - */ - public boolean isEnrollPermission() { - return enrollPermission; - } - - /** - * Sets the value of the enrollPermission property. - */ - public void setEnrollPermission(boolean value) { - this.enrollPermission = value; - } - - /** - * Gets the value of the caReferenceID property. - */ - public int getCAReferenceID() { - return caReferenceID; - } - - /** - * Sets the value of the caReferenceID property. - */ - public void setCAReferenceID(int value) { - this.caReferenceID = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CACollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CACollection.java deleted file mode 100644 index c9b25be1e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CACollection.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CACollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CACollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="cA" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CA" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CACollection", propOrder = { - "ca" -}) -@SuppressWarnings("unused") -public class CACollection { - - @XmlElement(name = "cA", required = true) - protected List ca; - - /** - * Gets the value of the ca property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the ca property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getCA().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link CA } - */ - public List getCA() { - if (ca == null) { - ca = new ArrayList(); - } - return this.ca; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAReferenceCollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAReferenceCollection.java deleted file mode 100644 index 17b1f2b18..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAReferenceCollection.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CAReferenceCollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CAReferenceCollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="cAReference" type="{http://www.w3.org/2001/XMLSchema}int"
- *         maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CAReferenceCollection", propOrder = { - "caReference" -}) -@SuppressWarnings("unused") -public class CAReferenceCollection { - - @XmlElement(name = "cAReference", type = Integer.class) - protected List caReference; - - /** - * Gets the value of the caReference property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the caReference property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getCAReference().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - */ - public List getCAReference() { - if (caReference == null) { - caReference = new ArrayList(); - } - return this.caReference; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURI.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURI.java deleted file mode 100644 index 0cbca953d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURI.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CAURI complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CAURI">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="clientAuthentication" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedInt"/>
- *         <element name="uri" type="{http://www.w3.org/2001/XMLSchema}anyURI"/>
- *         <element name="priority" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="renewalOnly" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CAURI", propOrder = { - "clientAuthentication", - "uri", - "priority", - "renewalOnly", - "any" -}) -@SuppressWarnings("unused") -public class CAURI { - - @XmlSchemaType(name = "unsignedInt") - protected long clientAuthentication; - @XmlElement(required = true) - @XmlSchemaType(name = "anyURI") - protected String uri; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long priority; - protected boolean renewalOnly; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the clientAuthentication property. - */ - public long getClientAuthentication() { - return clientAuthentication; - } - - /** - * Sets the value of the clientAuthentication property. - */ - public void setClientAuthentication(long value) { - this.clientAuthentication = value; - } - - /** - * Gets the value of the uri property. - * - * @return possible object is - * {@link String } - */ - public String getUri() { - return uri; - } - - /** - * Sets the value of the uri property. - * - * @param value allowed object is - * {@link String } - */ - public void setUri(String value) { - this.uri = value; - } - - /** - * Gets the value of the priority property. - * - * @return possible object is - * {@link Long } - */ - public Long getPriority() { - return priority; - } - - /** - * Sets the value of the priority property. - * - * @param value allowed object is - * {@link Long } - */ - public void setPriority(Long value) { - this.priority = value; - } - - /** - * Gets the value of the renewalOnly property. - */ - public boolean isRenewalOnly() { - return renewalOnly; - } - - /** - * Sets the value of the renewalOnly property. - */ - public void setRenewalOnly(boolean value) { - this.renewalOnly = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURICollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURICollection.java deleted file mode 100644 index 1067c06f9..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CAURICollection.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CAURICollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CAURICollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="cAURI" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CAURI" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CAURICollection", propOrder = { - "cauri" -}) -@SuppressWarnings("unused") -public class CAURICollection { - - @XmlElement(name = "cAURI", required = true) - protected List cauri; - - /** - * Gets the value of the cauri property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the cauri property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getCAURI().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link CAURI } - */ - public List getCAURI() { - if (cauri == null) { - cauri = new ArrayList(); - } - return this.cauri; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateEnrollmentPolicy.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateEnrollmentPolicy.java deleted file mode 100644 index a55456f66..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateEnrollmentPolicy.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CertificateEnrollmentPolicy complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CertificateEnrollmentPolicy">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="policyOIDReference" type="{http://www.w3.org/2001/XMLSchema}int"/>
- *         <element name="cAs" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CAReferenceCollection"/>
- *         <element name="attributes" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}Attributes"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CertificateEnrollmentPolicy", propOrder = { - "policyOIDReference", - "cAs", - "attributes", - "any" -}) -@SuppressWarnings("unused") -public class CertificateEnrollmentPolicy { - - protected int policyOIDReference; - @XmlElement(required = true, nillable = true) - protected CAReferenceCollection cAs; - @XmlElement(required = true) - protected Attributes attributes; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the policyOIDReference property. - */ - public int getPolicyOIDReference() { - return policyOIDReference; - } - - /** - * Sets the value of the policyOIDReference property. - */ - public void setPolicyOIDReference(int value) { - this.policyOIDReference = value; - } - - /** - * Gets the value of the cAs property. - * - * @return possible object is - * {@link CAReferenceCollection } - */ - public CAReferenceCollection getCAs() { - return cAs; - } - - /** - * Sets the value of the cAs property. - * - * @param value allowed object is - * {@link CAReferenceCollection } - */ - public void setCAs(CAReferenceCollection value) { - this.cAs = value; - } - - /** - * Gets the value of the attributes property. - * - * @return possible object is - * {@link Attributes } - */ - public Attributes getAttributes() { - return attributes; - } - - /** - * Sets the value of the attributes property. - * - * @param value allowed object is - * {@link Attributes } - */ - public void setAttributes(Attributes value) { - this.attributes = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateValidity.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateValidity.java deleted file mode 100644 index 85fba4b88..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CertificateValidity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.*; -import java.math.BigInteger; - -/** - *

Java class for CertificateValidity complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CertificateValidity">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="validityPeriodSeconds" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedLong"/>
- *         <element name="renewalPeriodSeconds" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedLong"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CertificateValidity", propOrder = { - "validityPeriodSeconds", - "renewalPeriodSeconds" -}) -@SuppressWarnings("unused") -public class CertificateValidity { - - @XmlElement(required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger validityPeriodSeconds; - @XmlElement(required = true) - @XmlSchemaType(name = "unsignedLong") - protected BigInteger renewalPeriodSeconds; - - /** - * Gets the value of the validityPeriodSeconds property. - * - * @return possible object is - * {@link BigInteger } - */ - public BigInteger getValidityPeriodSeconds() { - return validityPeriodSeconds; - } - - /** - * Sets the value of the validityPeriodSeconds property. - * - * @param value allowed object is - * {@link BigInteger } - */ - public void setValidityPeriodSeconds(BigInteger value) { - this.validityPeriodSeconds = value; - } - - /** - * Gets the value of the renewalPeriodSeconds property. - * - * @return possible object is - * {@link BigInteger } - */ - public BigInteger getRenewalPeriodSeconds() { - return renewalPeriodSeconds; - } - - /** - * Sets the value of the renewalPeriodSeconds property. - * - * @param value allowed object is - * {@link BigInteger } - */ - public void setRenewalPeriodSeconds(BigInteger value) { - this.renewalPeriodSeconds = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Client.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Client.java deleted file mode 100644 index dfb7bde93..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Client.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import javax.xml.bind.annotation.adapters.CollapsedStringAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import javax.xml.datatype.XMLGregorianCalendar; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for Client complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="Client">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="lastUpdate" type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
- *         <element name="preferredLanguage" type="{http://www.w3.org/2001/XMLSchema}language"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Client", propOrder = { - "lastUpdate", - "preferredLanguage", - "any" -}) -@SuppressWarnings("unused") -public class Client { - - @XmlElement(required = true, nillable = true) - @XmlSchemaType(name = "dateTime") - protected XMLGregorianCalendar lastUpdate; - @XmlElement(required = true, nillable = true) - @XmlJavaTypeAdapter(CollapsedStringAdapter.class) - @XmlSchemaType(name = "language") - protected String preferredLanguage; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the lastUpdate property. - * - * @return possible object is - * {@link XMLGregorianCalendar } - */ - public XMLGregorianCalendar getLastUpdate() { - return lastUpdate; - } - - /** - * Sets the value of the lastUpdate property. - * - * @param value allowed object is - * {@link XMLGregorianCalendar } - */ - public void setLastUpdate(XMLGregorianCalendar value) { - this.lastUpdate = value; - } - - /** - * Gets the value of the preferredLanguage property. - * - * @return possible object is - * {@link String } - */ - public String getPreferredLanguage() { - return preferredLanguage; - } - - /** - * Sets the value of the preferredLanguage property. - * - * @param value allowed object is - * {@link String } - */ - public void setPreferredLanguage(String value) { - this.preferredLanguage = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CryptoProviders.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CryptoProviders.java deleted file mode 100644 index 4f0258ac5..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/CryptoProviders.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for CryptoProviders complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="CryptoProviders">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="provider" type="{http://www.w3.org/2001/XMLSchema}string"
- *         maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "CryptoProviders", propOrder = { - "provider" -}) -@SuppressWarnings("unused") -public class CryptoProviders { - - @XmlElement(required = true) - protected List provider; - - /** - * Instantiate provider list in the constructor - */ - public CryptoProviders() { - this.provider = new ArrayList(); - } - - /** - * Gets the value of the provider property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the provider property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getProvider().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link String } - */ - public List getProvider() { - return this.provider; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/EnrollmentPermission.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/EnrollmentPermission.java deleted file mode 100644 index d2b5670f6..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/EnrollmentPermission.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlType; - -/** - *

Java class for EnrollmentPermission complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="EnrollmentPermission">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="enroll" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="autoEnroll" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "EnrollmentPermission", propOrder = { - "enroll", - "autoEnroll" -}) -@SuppressWarnings("unused") -public class EnrollmentPermission { - - protected boolean enroll; - protected boolean autoEnroll; - - /** - * Gets the value of the enroll property. - */ - public boolean isEnroll() { - return enroll; - } - - /** - * Sets the value of the enroll property. - */ - public void setEnroll(boolean value) { - this.enroll = value; - } - - /** - * Gets the value of the autoEnroll property. - */ - public boolean isAutoEnroll() { - return autoEnroll; - } - - /** - * Sets the value of the autoEnroll property. - */ - public void setAutoEnroll(boolean value) { - this.autoEnroll = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Extension.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Extension.java deleted file mode 100644 index 8f165ee5b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Extension.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; - -/** - *

Java class for Extension complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="Extension">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="oIDReference" type="{http://www.w3.org/2001/XMLSchema}int"/>
- *         <element name="critical" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="value" type="{http://www.w3.org/2001/XMLSchema}base64Binary"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Extension", propOrder = { - "oidReference", - "critical", - "value" -}) -@SuppressWarnings("unused") -public class Extension { - - @XmlElement(name = "oIDReference") - protected int oidReference; - protected boolean critical; - @XmlElement(required = true, nillable = true) - protected byte[] value; - - /** - * Gets the value of the oidReference property. - */ - public int getOIDReference() { - return oidReference; - } - - /** - * Sets the value of the oidReference property. - */ - public void setOIDReference(int value) { - this.oidReference = value; - } - - /** - * Gets the value of the critical property. - */ - public boolean isCritical() { - return critical; - } - - /** - * Sets the value of the critical property. - */ - public void setCritical(boolean value) { - this.critical = value; - } - - /** - * Gets the value of the value property. - * - * @return possible object is - * byte[] - */ - public byte[] getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value allowed object is - * byte[] - */ - public void setValue(byte[] value) { - this.value = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ExtensionCollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ExtensionCollection.java deleted file mode 100644 index 3c4b0e7ed..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ExtensionCollection.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for ExtensionCollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="ExtensionCollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="extension" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}Extension" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "ExtensionCollection", propOrder = { - "extension" -}) -@SuppressWarnings("unused") -public class ExtensionCollection { - - @XmlElement(required = true) - protected List extension; - - /** - * Instantiate extension list in the constructor - */ - public ExtensionCollection() { - this.extension = new ArrayList(); - } - - /** - * Gets the value of the extension property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the extension property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getExtension().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Extension } - */ - public List getExtension() { - return this.extension; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/FilterOIDCollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/FilterOIDCollection.java deleted file mode 100644 index b1f20d9b4..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/FilterOIDCollection.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for FilterOIDCollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="FilterOIDCollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="oid" type="{http://www.w3.org/2001/XMLSchema}string"
- *         maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "FilterOIDCollection", propOrder = { - "oid" -}) -@SuppressWarnings("unused") -public class FilterOIDCollection { - - @XmlElement(required = true) - protected List oid; - - /** - * Instantiate oid list in the constructor - */ - public FilterOIDCollection() { - this.oid = new ArrayList(); - } - - /** - * Gets the value of the oid property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the oid property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getOid().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link String } - */ - public List getOid() { - return this.oid; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPolicies.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPolicies.java deleted file mode 100644 index 0cf2535b9..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPolicies.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.*; - -/** - *

Java class for anonymous complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType>
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="client" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}Client"/>
- *         <element name="requestFilter" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}RequestFilter"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "client", - "requestFilter" -}) -@XmlRootElement(name = "GetPolicies") -@SuppressWarnings("unused") -public class GetPolicies { - - @XmlElement(required = true) - protected Client client; - @XmlElement(required = true, nillable = true) - protected RequestFilter requestFilter; - - /** - * Gets the value of the client property. - * - * @return possible object is - * {@link Client } - */ - public Client getClient() { - return client; - } - - /** - * Sets the value of the client property. - * - * @param value allowed object is - * {@link Client } - */ - public void setClient(Client value) { - this.client = value; - } - - /** - * Gets the value of the requestFilter property. - * - * @return possible object is - * {@link RequestFilter } - */ - public RequestFilter getRequestFilter() { - return requestFilter; - } - - /** - * Sets the value of the requestFilter property. - * - * @param value allowed object is - * {@link RequestFilter } - */ - public void setRequestFilter(RequestFilter value) { - this.requestFilter = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPoliciesResponse.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPoliciesResponse.java deleted file mode 100644 index fe824d8c6..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/GetPoliciesResponse.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.*; - -/** - *

Java class for anonymous complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType>
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="response" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}Response"/>
- *         <element name="cAs" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CACollection"/>
- *         <element name="oIDs" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}OIDCollection"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "", propOrder = { - "response", - "cAs", - "oiDs" -}) -@XmlRootElement(name = "GetPoliciesResponse") -@SuppressWarnings("unused") -public class GetPoliciesResponse { - - @XmlElement(required = true, nillable = true) - protected Response response; - @XmlElement(required = true, nillable = true) - protected CACollection cAs; - @XmlElement(name = "oIDs", required = true, nillable = true) - protected OIDCollection oiDs; - - /** - * Gets the value of the response property. - * - * @return possible object is - * {@link Response } - */ - public Response getResponse() { - return response; - } - - /** - * Sets the value of the response property. - * - * @param value allowed object is - * {@link Response } - */ - public void setResponse(Response value) { - this.response = value; - } - - /** - * Gets the value of the cAs property. - * - * @return possible object is - * {@link CACollection } - */ - public CACollection getCAs() { - return cAs; - } - - /** - * Sets the value of the cAs property. - * - * @param value allowed object is - * {@link CACollection } - */ - public void setCAs(CACollection value) { - this.cAs = value; - } - - /** - * Gets the value of the oiDs property. - * - * @return possible object is - * {@link OIDCollection } - */ - public OIDCollection getOIDs() { - return oiDs; - } - - /** - * Sets the value of the oiDs property. - * - * @param value allowed object is - * {@link OIDCollection } - */ - public void setOIDs(OIDCollection value) { - this.oiDs = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/KeyArchivalAttributes.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/KeyArchivalAttributes.java deleted file mode 100644 index c9d955d97..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/KeyArchivalAttributes.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - -/** - *

Java class for KeyArchivalAttributes complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="KeyArchivalAttributes">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="symmetricAlgorithmOIDReference" type="{http://www.w3
- *         .org/2001/XMLSchema}int"/>
- *         <element name="symmetricAlgorithmKeyLength" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedInt"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "KeyArchivalAttributes", propOrder = { - "symmetricAlgorithmOIDReference", - "symmetricAlgorithmKeyLength" -}) -@SuppressWarnings("unused") -public class KeyArchivalAttributes { - - protected int symmetricAlgorithmOIDReference; - @XmlSchemaType(name = "unsignedInt") - protected long symmetricAlgorithmKeyLength; - - /** - * Gets the value of the symmetricAlgorithmOIDReference property. - */ - public int getSymmetricAlgorithmOIDReference() { - return symmetricAlgorithmOIDReference; - } - - /** - * Sets the value of the symmetricAlgorithmOIDReference property. - */ - public void setSymmetricAlgorithmOIDReference(int value) { - this.symmetricAlgorithmOIDReference = value; - } - - /** - * Gets the value of the symmetricAlgorithmKeyLength property. - */ - public long getSymmetricAlgorithmKeyLength() { - return symmetricAlgorithmKeyLength; - } - - /** - * Sets the value of the symmetricAlgorithmKeyLength property. - */ - public void setSymmetricAlgorithmKeyLength(long value) { - this.symmetricAlgorithmKeyLength = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OID.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OID.java deleted file mode 100644 index 1638fd872..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OID.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for OID complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="OID">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="value" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="group" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="oIDReferenceID" type="{http://www.w3.org/2001/XMLSchema}int"/>
- *         <element name="defaultName" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OID", propOrder = { - "value", - "group", - "oidReferenceID", - "defaultName", - "any" -}) -@SuppressWarnings("unused") -public class OID { - - @XmlElement(required = true) - protected String value; - @XmlSchemaType(name = "unsignedInt") - protected long group; - @XmlElement(name = "oIDReferenceID") - protected int oidReferenceID; - @XmlElement(required = true, nillable = true) - protected String defaultName; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the value property. - * - * @return possible object is - * {@link String } - */ - public String getValue() { - return value; - } - - /** - * Sets the value of the value property. - * - * @param value allowed object is - * {@link String } - */ - public void setValue(String value) { - this.value = value; - } - - /** - * Gets the value of the group property. - */ - public long getGroup() { - return group; - } - - /** - * Sets the value of the group property. - */ - public void setGroup(long value) { - this.group = value; - } - - /** - * Gets the value of the oidReferenceID property. - */ - public int getOIDReferenceID() { - return oidReferenceID; - } - - /** - * Sets the value of the oidReferenceID property. - */ - public void setOIDReferenceID(int value) { - this.oidReferenceID = value; - } - - /** - * Gets the value of the defaultName property. - * - * @return possible object is - * {@link String } - */ - public String getDefaultName() { - return defaultName; - } - - /** - * Sets the value of the defaultName property. - * - * @param value allowed object is - * {@link String } - */ - public void setDefaultName(String value) { - this.defaultName = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDCollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDCollection.java deleted file mode 100644 index c0945f833..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDCollection.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for OIDCollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="OIDCollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="oID" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}OID" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OIDCollection", propOrder = { - "oid" -}) -@SuppressWarnings("unused") -public class OIDCollection { - - @XmlElement(name = "oID", required = true) - protected List oid; - - /** - * Gets the value of the oid property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the oid property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getOID().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link OID } - */ - public List getOID() { - if (oid == null) { - oid = new ArrayList(); - } - return this.oid; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDReferenceCollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDReferenceCollection.java deleted file mode 100644 index 36c28baea..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/OIDReferenceCollection.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for OIDReferenceCollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="OIDReferenceCollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="oIDReference" type="{http://www.w3.org/2001/XMLSchema}int"
- *         maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "OIDReferenceCollection", propOrder = { - "oidReference" -}) -@SuppressWarnings("unused") -public class OIDReferenceCollection { - - @XmlElement(name = "oIDReference", type = Integer.class) - protected List oidReference; - - /** - * Gets the value of the oidReference property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the oidReference property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getOIDReference().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Integer } - */ - public List getOIDReference() { - if (oidReference == null) { - oidReference = new ArrayList(); - } - return this.oidReference; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ObjectFactory.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ObjectFactory.java deleted file mode 100644 index e95b4240d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/ObjectFactory.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.annotation.XmlElementDecl; -import javax.xml.bind.annotation.XmlRegistry; -import javax.xml.namespace.QName; - -/** - * This object contains factory methods for each - * Java content interface and Java element interface - * generated in the com.microsoft.schemas.windows.pki._2009._01.enrollmentpolicy package. - *

An ObjectFactory allows you to programatically - * construct new instances of the Java representation - * for XML content. The Java representation of XML - * content can consist of schema derived interfaces - * and classes representing the binding of schema - * type definitions, element declarations and model - * groups. Factory methods for each of these are - * provided in this class. - */ -@XmlRegistry -@SuppressWarnings("unused") -public class ObjectFactory { - - private final static QName _CommonName_QNAME = - new QName("http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy", - "commonName"); - - /** - * Create a new ObjectFactory that can be used to create new instances of schema derived - * classes for package: com.microsoft.schemas.windows.pki._2009._01.enrollmentpolicy - */ - public ObjectFactory() { - } - - /** - * Create an instance of {@link GetPolicies } - */ - public GetPolicies createGetPolicies() { - return new GetPolicies(); - } - - /** - * Create an instance of {@link Client } - */ - public Client createClient() { - return new Client(); - } - - /** - * Create an instance of {@link RequestFilter } - */ - public RequestFilter createRequestFilter() { - return new RequestFilter(); - } - - /** - * Create an instance of {@link GetPoliciesResponse } - */ - public GetPoliciesResponse createGetPoliciesResponse() { - return new GetPoliciesResponse(); - } - - /** - * Create an instance of {@link Response } - */ - public Response createResponse() { - return new Response(); - } - - /** - * Create an instance of {@link CACollection } - */ - public CACollection createCACollection() { - return new CACollection(); - } - - /** - * Create an instance of {@link OIDCollection } - */ - public OIDCollection createOIDCollection() { - return new OIDCollection(); - } - - /** - * Create an instance of {@link SupersededPolicies } - */ - public SupersededPolicies createSupersededPolicies() { - return new SupersededPolicies(); - } - - /** - * Create an instance of {@link OID } - */ - public OID createOID() { - return new OID(); - } - - /** - * Create an instance of {@link ExtensionCollection } - */ - public ExtensionCollection createExtensionCollection() { - return new ExtensionCollection(); - } - - /** - * Create an instance of {@link Attributes } - */ - public Attributes createAttributes() { - return new Attributes(); - } - - /** - * Create an instance of {@link EnrollmentPermission } - */ - public EnrollmentPermission createEnrollmentPermission() { - return new EnrollmentPermission(); - } - - /** - * Create an instance of {@link CAReferenceCollection } - */ - public CAReferenceCollection createCAReferenceCollection() { - return new CAReferenceCollection(); - } - - /** - * Create an instance of {@link CertificateValidity } - */ - public CertificateValidity createCertificateValidity() { - return new CertificateValidity(); - } - - /** - * Create an instance of {@link CAURICollection } - */ - public CAURICollection createCAURICollection() { - return new CAURICollection(); - } - - /** - * Create an instance of {@link PolicyCollection } - */ - public PolicyCollection createPolicyCollection() { - return new PolicyCollection(); - } - - /** - * Create an instance of {@link Revision } - */ - public Revision createRevision() { - return new Revision(); - } - - /** - * Create an instance of {@link OIDReferenceCollection } - */ - public OIDReferenceCollection createOIDReferenceCollection() { - return new OIDReferenceCollection(); - } - - /** - * Create an instance of {@link CA } - */ - public CA createCA() { - return new CA(); - } - - /** - * Create an instance of {@link CertificateEnrollmentPolicy } - */ - public CertificateEnrollmentPolicy createCertificateEnrollmentPolicy() { - return new CertificateEnrollmentPolicy(); - } - - /** - * Create an instance of {@link CryptoProviders } - */ - public CryptoProviders createCryptoProviders() { - return new CryptoProviders(); - } - - /** - * Create an instance of {@link Extension } - */ - public Extension createExtension() { - return new Extension(); - } - - /** - * Create an instance of {@link FilterOIDCollection } - */ - public FilterOIDCollection createFilterOIDCollection() { - return new FilterOIDCollection(); - } - - /** - * Create an instance of {@link CAURI } - */ - public CAURI createCAURI() { - return new CAURI(); - } - - /** - * Create an instance of {@link RARequirements } - */ - public RARequirements createRARequirements() { - return new RARequirements(); - } - - /** - * Create an instance of {@link PrivateKeyAttributes } - */ - public PrivateKeyAttributes createPrivateKeyAttributes() { - return new PrivateKeyAttributes(); - } - - /** - * Create an instance of {@link KeyArchivalAttributes } - */ - public KeyArchivalAttributes createKeyArchivalAttributes() { - return new KeyArchivalAttributes(); - } - - /** - * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}} - */ - @XmlElementDecl(namespace = - "http://schemas.microsoft.com/windows/pki/2009/01/enrollmentpolicy" + - "", name = "commonName") - public JAXBElement createCommonName(String value) { - return new JAXBElement(_CommonName_QNAME, String.class, null, value); - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PolicyCollection.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PolicyCollection.java deleted file mode 100644 index ed79e0f2c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PolicyCollection.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for PolicyCollection complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="PolicyCollection">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="policy" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CertificateEnrollmentPolicy"
- *         maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "PolicyCollection", propOrder = { - "policy" -}) -@SuppressWarnings("unused") -public class PolicyCollection { - - @XmlElement(required = true) - protected List policy; - - /** - * Gets the value of the policy property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the policy property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getPolicy().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link CertificateEnrollmentPolicy } - */ - public List getPolicy() { - if (policy == null) { - policy = new ArrayList(); - } - return this.policy; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PrivateKeyAttributes.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PrivateKeyAttributes.java deleted file mode 100644 index c908fbab7..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/PrivateKeyAttributes.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.*; - -/** - *

Java class for PrivateKeyAttributes complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="PrivateKeyAttributes">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="minimalKeyLength" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedInt"/>
- *         <element name="keySpec" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="keyUsageProperty" type="{http://www.w3
- *         .org/2001/XMLSchema}unsignedInt"/>
- *         <element name="permissions" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="algorithmOIDReference" type="{http://www.w3.org/2001/XMLSchema}int"/>
- *         <element name="cryptoProviders" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}CryptoProviders"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "PrivateKeyAttributes", propOrder = { - "minimalKeyLength", - "keySpec", - "keyUsageProperty", - "permissions", - "algorithmOIDReference", - "cryptoProviders" -}) -@SuppressWarnings("unused") -public class PrivateKeyAttributes { - - @XmlSchemaType(name = "unsignedInt") - protected long minimalKeyLength; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long keySpec; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long keyUsageProperty; - @XmlElement(required = true, nillable = true) - protected String permissions; - @XmlElement(required = true, type = Integer.class, nillable = true) - protected Integer algorithmOIDReference; - @XmlElement(required = true, nillable = true) - protected CryptoProviders cryptoProviders; - - /** - * Gets the value of the minimalKeyLength property. - */ - public long getMinimalKeyLength() { - return minimalKeyLength; - } - - /** - * Sets the value of the minimalKeyLength property. - */ - public void setMinimalKeyLength(long value) { - this.minimalKeyLength = value; - } - - /** - * Gets the value of the keySpec property. - * - * @return possible object is - * {@link Long } - */ - public Long getKeySpec() { - return keySpec; - } - - /** - * Sets the value of the keySpec property. - * - * @param value allowed object is - * {@link Long } - */ - public void setKeySpec(Long value) { - this.keySpec = value; - } - - /** - * Gets the value of the keyUsageProperty property. - * - * @return possible object is - * {@link Long } - */ - public Long getKeyUsageProperty() { - return keyUsageProperty; - } - - /** - * Sets the value of the keyUsageProperty property. - * - * @param value allowed object is - * {@link Long } - */ - public void setKeyUsageProperty(Long value) { - this.keyUsageProperty = value; - } - - /** - * Gets the value of the permissions property. - * - * @return possible object is - * {@link String } - */ - public String getPermissions() { - return permissions; - } - - /** - * Sets the value of the permissions property. - * - * @param value allowed object is - * {@link String } - */ - public void setPermissions(String value) { - this.permissions = value; - } - - /** - * Gets the value of the algorithmOIDReference property. - * - * @return possible object is - * {@link Integer } - */ - public Integer getAlgorithmOIDReference() { - return algorithmOIDReference; - } - - /** - * Sets the value of the algorithmOIDReference property. - * - * @param value allowed object is - * {@link Integer } - */ - public void setAlgorithmOIDReference(Integer value) { - this.algorithmOIDReference = value; - } - - /** - * Gets the value of the cryptoProviders property. - * - * @return possible object is - * {@link CryptoProviders } - */ - public CryptoProviders getCryptoProviders() { - return cryptoProviders; - } - - /** - * Sets the value of the cryptoProviders property. - * - * @param value allowed object is - * {@link CryptoProviders } - */ - public void setCryptoProviders(CryptoProviders value) { - this.cryptoProviders = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RARequirements.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RARequirements.java deleted file mode 100644 index 73c393504..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RARequirements.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.*; - -/** - *

Java class for RARequirements complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="RARequirements">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="rASignatures" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="rAEKUs" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}OIDReferenceCollection"/>
- *         <element name="rAPolicies" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}OIDReferenceCollection"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RARequirements", propOrder = { - "raSignatures", - "raekUs", - "raPolicies" -}) -@SuppressWarnings("unused") -public class RARequirements { - - @XmlElement(name = "rASignatures") - @XmlSchemaType(name = "unsignedInt") - protected long raSignatures; - @XmlElement(name = "rAEKUs", required = true, nillable = true) - protected OIDReferenceCollection raekUs; - @XmlElement(name = "rAPolicies", required = true, nillable = true) - protected OIDReferenceCollection raPolicies; - - /** - * Gets the value of the raSignatures property. - */ - public long getRASignatures() { - return raSignatures; - } - - /** - * Sets the value of the raSignatures property. - */ - public void setRASignatures(long value) { - this.raSignatures = value; - } - - /** - * Gets the value of the raekUs property. - * - * @return possible object is - * {@link OIDReferenceCollection } - */ - public OIDReferenceCollection getRAEKUs() { - return raekUs; - } - - /** - * Sets the value of the raekUs property. - * - * @param value allowed object is - * {@link OIDReferenceCollection } - */ - public void setRAEKUs(OIDReferenceCollection value) { - this.raekUs = value; - } - - /** - * Gets the value of the raPolicies property. - * - * @return possible object is - * {@link OIDReferenceCollection } - */ - public OIDReferenceCollection getRAPolicies() { - return raPolicies; - } - - /** - * Sets the value of the raPolicies property. - * - * @param value allowed object is - * {@link OIDReferenceCollection } - */ - public void setRAPolicies(OIDReferenceCollection value) { - this.raPolicies = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RequestFilter.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RequestFilter.java deleted file mode 100644 index 272f6c713..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/RequestFilter.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for RequestFilter complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="RequestFilter">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="policyOIDs" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}FilterOIDCollection"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "RequestFilter", propOrder = { - "policyOIDs", - "any" -}) -@SuppressWarnings("unused") -public class RequestFilter { - - @XmlElement(required = true, nillable = true) - protected FilterOIDCollection policyOIDs; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the policyOIDs property. - * - * @return possible object is - * {@link FilterOIDCollection } - */ - public FilterOIDCollection getPolicyOIDs() { - return policyOIDs; - } - - /** - * Sets the value of the policyOIDs property. - * - * @param value allowed object is - * {@link FilterOIDCollection } - */ - public void setPolicyOIDs(FilterOIDCollection value) { - this.policyOIDs = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Response.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Response.java deleted file mode 100644 index fdde436a7..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Response.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import org.w3c.dom.Element; - -import javax.xml.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for Response complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="Response">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="policyID" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="policyFriendlyName" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         <element name="nextUpdateHours" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="policiesNotChanged" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
- *         <element name="policies" type="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}PolicyCollection"/>
- *         <any processContents='lax' maxOccurs="unbounded" minOccurs="0"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Response", propOrder = { - "policyID", - "policyFriendlyName", - "nextUpdateHours", - "policiesNotChanged", - "policies", - "any" -}) -@SuppressWarnings("unused") -public class Response { - - @XmlElement(required = true) - protected String policyID; - @XmlElement(required = true, nillable = true) - protected String policyFriendlyName; - @XmlElement(required = true, type = Long.class, nillable = true) - @XmlSchemaType(name = "unsignedInt") - protected Long nextUpdateHours; - @XmlElement(required = true, type = Boolean.class, nillable = true) - protected Boolean policiesNotChanged; - @XmlElement(required = true, nillable = true) - protected PolicyCollection policies; - @XmlAnyElement(lax = true) - protected List any; - - /** - * Gets the value of the policyID property. - * - * @return possible object is - * {@link String } - */ - public String getPolicyID() { - return policyID; - } - - /** - * Sets the value of the policyID property. - * - * @param value allowed object is - * {@link String } - */ - public void setPolicyID(String value) { - this.policyID = value; - } - - /** - * Gets the value of the policyFriendlyName property. - * - * @return possible object is - * {@link String } - */ - public String getPolicyFriendlyName() { - return policyFriendlyName; - } - - /** - * Sets the value of the policyFriendlyName property. - * - * @param value allowed object is - * {@link String } - */ - public void setPolicyFriendlyName(String value) { - this.policyFriendlyName = value; - } - - /** - * Gets the value of the nextUpdateHours property. - * - * @return possible object is - * {@link Long } - */ - public Long getNextUpdateHours() { - return nextUpdateHours; - } - - /** - * Sets the value of the nextUpdateHours property. - * - * @param value allowed object is - * {@link Long } - */ - public void setNextUpdateHours(Long value) { - this.nextUpdateHours = value; - } - - /** - * Gets the value of the policiesNotChanged property. - * - * @return possible object is - * {@link Boolean } - */ - public Boolean isPoliciesNotChanged() { - return policiesNotChanged; - } - - /** - * Sets the value of the policiesNotChanged property. - * - * @param value allowed object is - * {@link Boolean } - */ - public void setPoliciesNotChanged(Boolean value) { - this.policiesNotChanged = value; - } - - /** - * Gets the value of the policies property. - * - * @return possible object is - * {@link PolicyCollection } - */ - public PolicyCollection getPolicies() { - return policies; - } - - /** - * Sets the value of the policies property. - * - * @param value allowed object is - * {@link PolicyCollection } - */ - public void setPolicies(PolicyCollection value) { - this.policies = value; - } - - /** - * Gets the value of the any property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the any property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getAny().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link Object } - * {@link Element } - */ - public List getAny() { - if (any == null) { - any = new ArrayList(); - } - return this.any; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Revision.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Revision.java deleted file mode 100644 index 3ede23b0e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/Revision.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlSchemaType; -import javax.xml.bind.annotation.XmlType; - -/** - *

Java class for Revision complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="Revision">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element name="majorRevision" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *         <element name="minorRevision" type="{http://www.w3.org/2001/XMLSchema}unsignedInt"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "Revision", propOrder = { - "majorRevision", - "minorRevision" -}) -@SuppressWarnings("unused") -public class Revision { - - @XmlSchemaType(name = "unsignedInt") - protected long majorRevision; - @XmlSchemaType(name = "unsignedInt") - protected long minorRevision; - - /** - * Gets the value of the majorRevision property. - */ - public long getMajorRevision() { - return majorRevision; - } - - /** - * Sets the value of the majorRevision property. - */ - public void setMajorRevision(long value) { - this.majorRevision = value; - } - - /** - * Gets the value of the minorRevision property. - */ - public long getMinorRevision() { - return minorRevision; - } - - /** - * Sets the value of the minorRevision property. - */ - public void setMinorRevision(long value) { - this.minorRevision = value; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/SupersededPolicies.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/SupersededPolicies.java deleted file mode 100644 index 949495095..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/SupersededPolicies.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlType; -import java.util.ArrayList; -import java.util.List; - -/** - *

Java class for SupersededPolicies complex type. - *

- *

The following schema fragment specifies the expected content contained within this class. - *

- *

- * <complexType name="SupersededPolicies">
- *   <complexContent>
- *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       <sequence>
- *         <element ref="{http://schemas.microsoft
- *         .com/windows/pki/2009/01/enrollmentpolicy}commonName" maxOccurs="unbounded"/>
- *       </sequence>
- *     </restriction>
- *   </complexContent>
- * </complexType>
- * 
- */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlType(name = "SupersededPolicies", propOrder = { - "commonName" -}) -@SuppressWarnings("unused") -public class SupersededPolicies { - - @XmlElement(required = true) - protected List commonName; - - /** - * Gets the value of the commonName property. - *

- *

- * This accessor method returns a reference to the live list, - * not a snapshot. Therefore any modification you make to the - * returned list will be present inside the JAXB object. - * This is why there is not a set method for the commonName property. - *

- *

- * For example, to add a new item, do as follows: - *

-	 *    getCommonName().add(newItem);
-	 * 
- *

- *

- *

- * Objects of the following type(s) are allowed in the list - * {@link String } - */ - public List getCommonName() { - if (commonName == null) { - commonName = new ArrayList(); - } - return this.commonName; - } - -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/package-info.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/package-info.java deleted file mode 100644 index 3560db69b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/beans/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -@javax.xml.bind.annotation.XmlSchema(namespace = "http://schemas.microsoft" + - ".com/windows/pki/2009/01/enrollmentpolicy", - elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans; diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/impl/CertificateEnrollmentPolicyServiceImpl.java b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/impl/CertificateEnrollmentPolicyServiceImpl.java deleted file mode 100644 index 467d1a771..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/java/org/wso2/carbon/device/mgt/mobile/windows/api/services/xcep/impl/CertificateEnrollmentPolicyServiceImpl.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -package org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.impl; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.context.PrivilegedCarbonContext; -import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.CertificateEnrollmentPolicyService; -import org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.beans.*; - -import javax.jws.WebService; -import javax.xml.ws.BindingType; -import javax.xml.ws.Holder; -import javax.xml.ws.soap.Addressing; -import javax.xml.ws.soap.SOAPBinding; - -/** - * Implementation class for CertificateEnrollmentPolicyService. - */ -@WebService(endpointInterface = PluginConstants.CERTIFICATE_ENROLLMENT_POLICY_SERVICE_ENDPOINT, - targetNamespace = PluginConstants.CERTIFICATE_ENROLLMENT_POLICY_SERVICE_TARGET_NAMESPACE) -@Addressing(enabled = true, required = true) -@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING) -public class CertificateEnrollmentPolicyServiceImpl implements CertificateEnrollmentPolicyService { - - private static Log log = LogFactory.getLog( - org.wso2.carbon.device.mgt.mobile.windows.api.services.xcep.impl.CertificateEnrollmentPolicyServiceImpl.class); - - /** - * This method implements the MS-XCEP protocol for certificate enrollment policy service. - * - * @param client - Included lastUpdate and preferredLanguage tags - * @param requestFilter - Policy constrain tag - * @param response - Response which includes minimal key length, hash algorithm, policy - * schema, policy OID reference - * @param caCollection - Contains the issuers for the certificate enrollment policies - * @param oidCollection - Contains the collection of OIDs for the response - */ - @Override - public void getPolicies(Client client, RequestFilter requestFilter, - Holder response, Holder caCollection, - Holder oidCollection) { - - if (log.isDebugEnabled()) { - log.debug("Enrolment certificate policy end point was triggered by device."); - } - - Response responseElement = new Response(); - OIDCollection oidCollectionElement = new OIDCollection(); - CACollection caCollectionElement = new CACollection(); - - PolicyCollection policyCollectionElement = new PolicyCollection(); - CertificateEnrollmentPolicy certEnrollmentPolicyElement = new CertificateEnrollmentPolicy(); - Attributes attributeElement = new Attributes(); - PrivateKeyAttributes privateKeyAttributeElement = new PrivateKeyAttributes(); - - privateKeyAttributeElement. - setMinimalKeyLength(PluginConstants.CertificateEnrolmentPolicy.MINIMAL_KEY_LENGTH); - - attributeElement.setPolicySchema(PluginConstants.CertificateEnrolmentPolicy.POLICY_SCHEMA); - attributeElement.setPrivateKeyAttributes(privateKeyAttributeElement); - attributeElement.setHashAlgorithmOIDReference(PluginConstants.CertificateEnrolmentPolicy. - HASH_ALGORITHM_OID_REFERENCE); - certEnrollmentPolicyElement.setPolicyOIDReference(PluginConstants.CertificateEnrolmentPolicy. - OID_REFERENCE); - certEnrollmentPolicyElement.setAttributes(attributeElement); - policyCollectionElement.getPolicy().add(certEnrollmentPolicyElement); - responseElement.setPolicies(policyCollectionElement); - response.value = responseElement; - - OID oidElement = new OID(); - oidElement.setValue(PluginConstants.CertificateEnrolmentPolicy.OID); - oidElement.setGroup(PluginConstants.CertificateEnrolmentPolicy.OID_GROUP); - oidElement.setOIDReferenceID(PluginConstants.CertificateEnrolmentPolicy.OID_REFERENCE_ID); - oidElement.setDefaultName(PluginConstants.CertificateEnrolmentPolicy.OID_DEFAULT_NAME); - - oidCollectionElement.getOID().add(oidElement); - caCollection.value = caCollectionElement; - oidCollection.value = oidCollectionElement; - PrivilegedCarbonContext.endTenantFlow(); - - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/wap-provisioning.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/wap-provisioning.xml deleted file mode 100644 index 9a6561b45..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/wap-provisioning.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml deleted file mode 100644 index fdbd89938..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/resources/win10-wap-provisioning.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/permissions.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/permissions.xml deleted file mode 100644 index 1a69d570d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/permissions.xml +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - Lock - /device-mgt/windows/operation/lock - /services/windows/operation/lock - POST - emm_admin,emm_user - - - - Enterprise Wipe - /device-mgt/windows/operation/wipe-data - /services/windows/operation/wipe-data - POST - emm_admin - - - - Ring - /device-mgt/windows/operation/ring-device - /services/windows/operation/ring-device - POST - emm_admin,emm_user - - - - Disenroll - /device-mgt/windows/operation/disenroll - /services/windows/operation/disenroll - POST - emm_admin,emm_user - - - - LockReset - /device-mgt/windows/operation/lock-reset - /services/windows/operation/lock-reset - POST - emm_admin,emm_user - - - - - Get CSR Policy - /device-mgt/windows/devices/getPolicy - /services/certificatepolicy/xcep - POST - emm_windows_agent - - - Get BST - /device-mgt/windows/devices/getBST - /services/federated/bst/authentication - POST - emm_windows_agent - - - Provide CSR - /device-mgt/windows/devices/requestSecurityToken - /services/deviceenrolment/wstep - POST - emm_windows_agent - - - GetLicense - /device-mgt/windows/devices/license - /services/device/license - GET - emm_windows_agent - - - - View Policies - /device-mgt/windows/policies/view - /services/policy/* - GET - emm_admin - - - - View Policy Features - /device-mgt/windows/policies/view - /services/policy/features/* - GET - emm_admin - - - - View Tenant configuration - /device-mgt/windows/tenant/configuration - /services/configuration - GET - emm_admin - - - - Add Tenant configuration - /device-mgt/windows/tenant/configuration - /services/configuration - POST - emm_admin - - - - Update Tenant configuration - /device-mgt/windows/tenant/configuration - /services/configuration - PUT - emm_admin - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/webapp-classloading.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/webapp-classloading.xml deleted file mode 100644 index c90403cc6..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/META-INF/webapp-classloading.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - false - - - Carbon - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/cxf-servlet.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/cxf-servlet.xml deleted file mode 100644 index cebd427bb..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/cxf-servlet.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/web.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index d4d1c22e9..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - Windows-Agent-Webapp - - - contextConfigLocation - /WEB-INF/cxf-servlet.xml - - - - org.wso2.carbon.device.mgt.mobile.windows.api.common.util.ContextInitializer - - - - - JAX-WS/JAX-RS-windows Endpoint - JAX-WS/JAX-RS-windows Servlet - JAXServlet-windows - - org.apache.cxf.transport.servlet.CXFServlet - - 1 - - - JAXServlet-windows - /* - - - 60 - - - managed-api-enabled - true - - - doAuthentication - true - - - isSharedWithAllTenants - true - - - nonSecuredEndPoints - /api/device-mgt/windows/v1.0/discovery/get,/api/device-mgt/windows/v1.0/discovery/post, - /api/device-mgt/windows/v1.0/certificatepolicy/xcep,/api/device-mgt/windows/v1.0/deviceenrolment/wstep, - /api/device-mgt/windows/v1.0/syncml/devicemanagement/request, - /api/device-mgt/windows/v1.0/deviceenrolment/enrollment, - /api/device-mgt/windows/v1.0/management/devicemgt/pending-operations - - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/servicelist.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/servicelist.css deleted file mode 100644 index b659c905e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.api/src/main/webapp/servicelist.css +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -@CHARSET "ISO-8859-1"; - -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ - -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -html { - background: #efefef; -} - -body { - line-height: 1; - width: 960px; - margin: auto; - background: white; - padding: 10px; - box-shadow: 0px 0px 5px #CCC; - font-family: "Lucida Grande", "Lucida Sans", "Microsoft Sans Serif", "Lucida Sans Unicode", "Verdana", "Sans-serif", "trebuchet ms" !important; - -} - -ol, ul { - list-style: none; -} - -blockquote, q { - quotes: none; -} - -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; - width: 960px; - border: solid 1px #ccc; -} - -table a { - font-size: 12px; - color: #1e90ff; - padding: 7px; - float: left;; -} - -.heading { - font-size: 18px; - margin-top: 20px; - float: left; - color: #0067B1; - margin-bottom: 20px; - padding-top: 20px; -} - -.field { - font-weight: normal; - width: 120px; - font-size: 12px; - float: left; - padding: 7px; - clear: left; -} - -.value { - font-weight: bold; - font-size: 12px; - float: left; - padding: 7px; - clear: right; -} - -.porttypename { - font-weight: bold; - font-size: 14px; -} - -UL { - margin-top: 0; -} - -LI { - font-weight: normal; - font-size: 12px; - margin-top: 10px; -} - -TD { - border: 1px solid #ccc; - vertical-align: text-top; - padding: 5px; -} - - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml deleted file mode 100644 index c0f5caf4b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - windows-plugin - org.wso2.carbon.devicemgt-plugins - 4.2.9-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.carbon.device.mgt.mobile.windows.ui - 4.2.9-SNAPSHOT - WSO2 Carbon - Mobile Windows UI - pom - - - - - maven-assembly-plugin - 2.5.5 - - ${project.artifactId}-${carbon.devicemgt.plugins.version} - false - - src/assembly/src.xml - - - - - create-archive - package - - single - - - - - - - - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/assembly/src.xml b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/assembly/src.xml deleted file mode 100644 index 5996c0457..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/assembly/src.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - src - - zip - - false - ${basedir}/src - - - ${basedir}/src/main/resources/jaggeryapps/windows-web-agent - /windows-web-agent - true - - - ${basedir}/src/main/resources/jaggeryapps/devicemgt - /devicemgt - true - - - ${basedir}/src/main/resources/jaggeryapps/uuf-template-app - /windows-web-agent - true - - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs deleted file mode 100644 index d1787fd27..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.hbs +++ /dev/null @@ -1,25 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "topCss"}} - {{css "css/daterangepicker.css"}} -{{/zone}} - -{{#zone "bottomJs"}} - {{js "js/moment.min.js"}} - {{js "js/daterangepicker.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js deleted file mode 100644 index 82648b301..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.js +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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 onRequest() { - return ""; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json deleted file mode 100644 index 688e93980..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/date-range-picker.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css deleted file mode 100644 index b1b44916b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/css/daterangepicker.css +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -.date-picker { - width: 170px; - height: 25px; - padding: 0; - border: 0; - line-height: 25px; - padding-left: 10px; - font-size: 12px; - font-family: Arial; - font-weight: bold; - cursor: pointer; - color: #303030; - position: relative; - z-index: 2; -} - -.date-picker-wrapper { - position: absolute; - z-index: 1; - border: 1px solid #bfbfbf; - background-color: #efefef; - width: 448px; - padding: 5px 12px; - font-size: 12px; - line-height: 20px; - color: #aaa; - font-family: Arial; - box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.5); -} - -.date-picker-wrapper.single-date { - width: auto; -} - -.date-picker-wrapper.no-shortcuts { - padding-bottom: 12px; -} - -.date-picker-wrapper .footer { - display: none; - font-size: 11px; - padding-top: 3px; -} - -.date-picker-wrapper b { - color: #666; - font-weight: 700; -} - -.date-picker-wrapper a { - color: rgb(107, 180, 214); - text-decoration: underline; -} - -.date-picker-wrapper .month-wrapper { - border: 1px solid #bfbfbf; - border-radius: 3px; - background-color: #fff; - padding: 5px; - cursor: default; - position: relative; - _overflow: hidden; -} - -.date-picker-wrapper .month-wrapper table { - width: 190px; - float: left; -} - -.date-picker-wrapper .month-wrapper table.month2 { - width: 190px; - float: right; -} - -.date-picker-wrapper .month-wrapper table th, -.date-picker-wrapper .month-wrapper table td { - vertical-align: middle; - text-align: center; - line-height: 14px; - margin: 0px; - padding: 0px; -} - -.date-picker-wrapper .month-wrapper table .day { - height: 19px; - line-height: 19px; - font-size: 12px; - margin-bottom: 1px; - color: #999; - cursor: default; -} - -.date-picker-wrapper .month-wrapper table div.day.lastMonth, -.date-picker-wrapper .month-wrapper table div.day.nextMonth { - color: #999; - cursor: default; -} - -.date-picker-wrapper .month-wrapper table .day.checked { - background-color: rgb(156, 219, 247); -} - -.date-picker-wrapper .month-wrapper table .week-name { - height: 20px; - line-height: 20px; - font-weight: 100; -} - -.date-picker-wrapper .month-wrapper table .day.has-tooltip { - cursor: help !important; -} - -.date-picker-wrapper .month-wrapper table .day.toMonth.valid { - color: #333; - cursor: pointer; -} - -.date-picker-wrapper .month-wrapper table .day.real-today { - background-color: rgb(255, 230, 132); -} - -.date-picker-wrapper .month-wrapper table .day.real-today.checked { - background-color: rgb(112, 204, 213); -} - -.date-picker-wrapper table .caption { - height: 40px; -} - -.date-picker-wrapper table .caption .next, -.date-picker-wrapper table .caption .prev { - padding: 0 5px; - cursor: pointer; -} - -.date-picker-wrapper table .caption .next:hover, -.date-picker-wrapper table .caption .prev:hover { - background-color: #ccc; - color: white; -} - -.date-picker-wrapper .gap { - position: absolute; - display: none; - top: 0px; - left: 204px; - z-index: 1; - width: 15px; - height: 100%; - background-color: red; - font-size: 0; - line-height: 0; -} - -.date-picker-wrapper .gap .gap-lines { - height: 100%; - overflow: hidden; -} - -.date-picker-wrapper .gap .gap-line { - height: 15px; - width: 15px; - position: relative; -} - -.date-picker-wrapper .gap .gap-line .gap-1 { - z-index: 1; - height: 0; - border-left: 8px solid white; - border-top: 8px solid #eee; - border-bottom: 8px solid #eee; -} - -.date-picker-wrapper .gap .gap-line .gap-2 { - position: absolute; - right: 0; - top: 0px; - z-index: 2; - height: 0; - border-left: 8px solid transparent; - border-top: 8px solid white; -} - -.date-picker-wrapper .gap .gap-line .gap-3 { - position: absolute; - right: 0; - top: 8px; - z-index: 2; - height: 0; - border-left: 8px solid transparent; - border-bottom: 8px solid white; -} - -.date-picker-wrapper .gap .gap-top-mask { - width: 6px; - height: 1px; - position: absolute; - top: -1px; - left: 1px; - background-color: #eee; - z-index: 3; -} - -.date-picker-wrapper .gap .gap-bottom-mask { - width: 6px; - height: 1px; - position: absolute; - bottom: -1px; - left: 7px; - background-color: #eee; - z-index: 3; -} - -.date-picker-wrapper .selected-days { - display: none; -} - -.date-picker-wrapper .drp_top-bar { - line-height: 40px; - height: 40px; - position: relative; -} - -.date-picker-wrapper .drp_top-bar .error-top { - display: none; -} - -.date-picker-wrapper .drp_top-bar .normal-top { - display: none; -} - -.date-picker-wrapper .drp_top-bar .default-top { - display: block; -} - -.date-picker-wrapper .drp_top-bar.error .default-top { - display: none; -} - -.date-picker-wrapper .drp_top-bar.error .error-top { - display: block; - color: red; -} - -.date-picker-wrapper .drp_top-bar.normal .default-top { - display: none; -} - -.date-picker-wrapper .drp_top-bar.normal .normal-top { - display: block; -} - -.date-picker-wrapper .drp_top-bar .apply-btn { - position: absolute; - right: 0px; - top: 6px; - padding: 3px 5px; - margin: 0; - font-size: 12px; - border-radius: 4px; - cursor: pointer; - - color: #d9eef7; - border: solid 1px #0076a3; - background: #0095cd; - background: -webkit-gradient(linear, left top, left bottom, from(#00adee), to(#0078a5)); - background: -moz-linear-gradient(top, #00adee, #0078a5); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00adee', endColorstr='#0078a5'); - color: white; -} - -.date-picker-wrapper .drp_top-bar .apply-btn.disabled { - pointer-events: none; - color: #606060; - border: solid 1px #b7b7b7; - background: #fff; - background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed)); - background: -moz-linear-gradient(top, #fff, #ededed); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed'); -} - -/*time styling*/ -.time { - position: relative; -} - -.time input[type=range] { - vertical-align: middle; -} - -.time1, .time2 { - width: 180px; - padding: 0 5px; - text-align: center; -} - -.time1 { - float: left; -} - -.time2 { - float: right; -} - -.hour, .minute { - text-align: left; -} - -.hide { - display: none; -} - -input.hour-range, input.minute-range { - width: 150px; -} - -#dateRangePickerContainer .date-range, #dateRangePickerContainer .input-append { - background: none !important; -} - -#date-range { - padding-right: 30px; - width: 300px; - height: 100%; - display: inline-block; -} - -#dateRangePickerContainer { - float: right; -} - -.date-range { - border: 1px solid #ccc; -} - -#dateRangePickerContainer button.active { - background-color: #e6e6e6 !important; -} - -#dateRangePickerContainer .btn-default:hover { - background-color: #b2b2b2; - border-color: #000000; -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js deleted file mode 100644 index b218d58bf..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/daterangepicker.js +++ /dev/null @@ -1,1542 +0,0 @@ -/** -* @version: 2.1.19 -* @author: Dan Grossman http://www.dangrossman.info/ -* @copyright: Copyright (c) 2012-2015 Dan Grossman. All rights reserved. -* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php -* @website: https://www.improvely.com/ -*/ - -(function(root, factory) { - - if (typeof define === 'function' && define.amd) { - define(['moment', 'jquery', 'exports'], function(momentjs, $, exports) { - root.daterangepicker = factory(root, exports, momentjs, $); - }); - - } else if (typeof exports !== 'undefined') { - var momentjs = require('moment'); - var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined; //isomorphic issue - if (!jQuery) { - try { - jQuery = require('jquery'); - if (!jQuery.fn) jQuery.fn = {}; //isomorphic issue - } catch (err) { - if (!jQuery) throw new Error('jQuery dependency not found'); - } - } - - factory(root, exports, momentjs, jQuery); - - // Finally, as a browser global. - } else { - root.daterangepicker = factory(root, {}, root.moment || moment, (root.jQuery || root.Zepto || root.ender || root.$)); - } - -}(this || {}, function(root, daterangepicker, moment, $) { // 'this' doesn't exist on a server - - var DateRangePicker = function(element, options, cb) { - - //default settings for options - this.parentEl = 'body'; - this.element = $(element); - this.startDate = moment().startOf('day'); - this.endDate = moment().endOf('day'); - this.minDate = false; - this.maxDate = false; - this.dateLimit = false; - this.autoApply = false; - this.singleDatePicker = false; - this.showDropdowns = false; - this.showWeekNumbers = false; - this.showISOWeekNumbers = false; - this.timePicker = false; - this.timePicker24Hour = false; - this.timePickerIncrement = 1; - this.timePickerSeconds = false; - this.linkedCalendars = true; - this.autoUpdateInput = true; - this.alwaysShowCalendars = false; - this.ranges = {}; - - this.opens = 'right'; - if (this.element.hasClass('pull-right')) - this.opens = 'left'; - - this.drops = 'down'; - if (this.element.hasClass('dropup')) - this.drops = 'up'; - - this.buttonClasses = 'btn btn-sm'; - this.applyClass = 'btn-success'; - this.cancelClass = 'btn-default'; - - this.locale = { - format: 'MM/DD/YYYY', - separator: ' - ', - applyLabel: 'Apply', - cancelLabel: 'Cancel', - weekLabel: 'W', - customRangeLabel: 'Custom Range', - daysOfWeek: moment.weekdaysMin(), - monthNames: moment.monthsShort(), - firstDay: moment.localeData().firstDayOfWeek() - }; - - this.callback = function() { }; - - //some state information - this.isShowing = false; - this.leftCalendar = {}; - this.rightCalendar = {}; - - //custom options from user - if (typeof options !== 'object' || options === null) - options = {}; - - //allow setting options with data attributes - //data-api options will be overwritten with custom javascript options - options = $.extend(this.element.data(), options); - - //html template for the picker UI - if (typeof options.template !== 'string' && !(options.template instanceof $)) - options.template = '

'; - - this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl); - this.container = $(options.template).appendTo(this.parentEl); - - // - // handle all the possible options overriding defaults - // - - if (typeof options.locale === 'object') { - - if (typeof options.locale.format === 'string') - this.locale.format = options.locale.format; - - if (typeof options.locale.separator === 'string') - this.locale.separator = options.locale.separator; - - if (typeof options.locale.daysOfWeek === 'object') - this.locale.daysOfWeek = options.locale.daysOfWeek.slice(); - - if (typeof options.locale.monthNames === 'object') - this.locale.monthNames = options.locale.monthNames.slice(); - - if (typeof options.locale.firstDay === 'number') - this.locale.firstDay = options.locale.firstDay; - - if (typeof options.locale.applyLabel === 'string') - this.locale.applyLabel = options.locale.applyLabel; - - if (typeof options.locale.cancelLabel === 'string') - this.locale.cancelLabel = options.locale.cancelLabel; - - if (typeof options.locale.weekLabel === 'string') - this.locale.weekLabel = options.locale.weekLabel; - - if (typeof options.locale.customRangeLabel === 'string') - this.locale.customRangeLabel = options.locale.customRangeLabel; - - } - - if (typeof options.startDate === 'string') - this.startDate = moment(options.startDate, this.locale.format); - - if (typeof options.endDate === 'string') - this.endDate = moment(options.endDate, this.locale.format); - - if (typeof options.minDate === 'string') - this.minDate = moment(options.minDate, this.locale.format); - - if (typeof options.maxDate === 'string') - this.maxDate = moment(options.maxDate, this.locale.format); - - if (typeof options.startDate === 'object') - this.startDate = moment(options.startDate); - - if (typeof options.endDate === 'object') - this.endDate = moment(options.endDate); - - if (typeof options.minDate === 'object') - this.minDate = moment(options.minDate); - - if (typeof options.maxDate === 'object') - this.maxDate = moment(options.maxDate); - - // sanity check for bad options - if (this.minDate && this.startDate.isBefore(this.minDate)) - this.startDate = this.minDate.clone(); - - // sanity check for bad options - if (this.maxDate && this.endDate.isAfter(this.maxDate)) - this.endDate = this.maxDate.clone(); - - if (typeof options.applyClass === 'string') - this.applyClass = options.applyClass; - - if (typeof options.cancelClass === 'string') - this.cancelClass = options.cancelClass; - - if (typeof options.dateLimit === 'object') - this.dateLimit = options.dateLimit; - - if (typeof options.opens === 'string') - this.opens = options.opens; - - if (typeof options.drops === 'string') - this.drops = options.drops; - - if (typeof options.showWeekNumbers === 'boolean') - this.showWeekNumbers = options.showWeekNumbers; - - if (typeof options.showISOWeekNumbers === 'boolean') - this.showISOWeekNumbers = options.showISOWeekNumbers; - - if (typeof options.buttonClasses === 'string') - this.buttonClasses = options.buttonClasses; - - if (typeof options.buttonClasses === 'object') - this.buttonClasses = options.buttonClasses.join(' '); - - if (typeof options.showDropdowns === 'boolean') - this.showDropdowns = options.showDropdowns; - - if (typeof options.singleDatePicker === 'boolean') { - this.singleDatePicker = options.singleDatePicker; - if (this.singleDatePicker) - this.endDate = this.startDate.clone(); - } - - if (typeof options.timePicker === 'boolean') - this.timePicker = options.timePicker; - - if (typeof options.timePickerSeconds === 'boolean') - this.timePickerSeconds = options.timePickerSeconds; - - if (typeof options.timePickerIncrement === 'number') - this.timePickerIncrement = options.timePickerIncrement; - - if (typeof options.timePicker24Hour === 'boolean') - this.timePicker24Hour = options.timePicker24Hour; - - if (typeof options.autoApply === 'boolean') - this.autoApply = options.autoApply; - - if (typeof options.autoUpdateInput === 'boolean') - this.autoUpdateInput = options.autoUpdateInput; - - if (typeof options.linkedCalendars === 'boolean') - this.linkedCalendars = options.linkedCalendars; - - if (typeof options.isInvalidDate === 'function') - this.isInvalidDate = options.isInvalidDate; - - if (typeof options.alwaysShowCalendars === 'boolean') - this.alwaysShowCalendars = options.alwaysShowCalendars; - - // update day names order to firstDay - if (this.locale.firstDay != 0) { - var iterator = this.locale.firstDay; - while (iterator > 0) { - this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift()); - iterator--; - } - } - - var start, end, range; - - //if no start/end dates set, check if an input element contains initial values - if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') { - if ($(this.element).is('input[type=text]')) { - var val = $(this.element).val(), - split = val.split(this.locale.separator); - - start = end = null; - - if (split.length == 2) { - start = moment(split[0], this.locale.format); - end = moment(split[1], this.locale.format); - } else if (this.singleDatePicker && val !== "") { - start = moment(val, this.locale.format); - end = moment(val, this.locale.format); - } - if (start !== null && end !== null) { - this.setStartDate(start); - this.setEndDate(end); - } - } - } - - if (typeof options.ranges === 'object') { - for (range in options.ranges) { - - if (typeof options.ranges[range][0] === 'string') - start = moment(options.ranges[range][0], this.locale.format); - else - start = moment(options.ranges[range][0]); - - if (typeof options.ranges[range][1] === 'string') - end = moment(options.ranges[range][1], this.locale.format); - else - end = moment(options.ranges[range][1]); - - // If the start or end date exceed those allowed by the minDate or dateLimit - // options, shorten the range to the allowable period. - if (this.minDate && start.isBefore(this.minDate)) - start = this.minDate.clone(); - - var maxDate = this.maxDate; - if (this.dateLimit && start.clone().add(this.dateLimit).isAfter(maxDate)) - maxDate = start.clone().add(this.dateLimit); - if (maxDate && end.isAfter(maxDate)) - end = maxDate.clone(); - - // If the end of the range is before the minimum or the start of the range is - // after the maximum, don't display this range option at all. - if ((this.minDate && end.isBefore(this.minDate)) || (maxDate && start.isAfter(maxDate))) - continue; - - //Support unicode chars in the range names. - var elem = document.createElement('textarea'); - elem.innerHTML = range; - var rangeHtml = elem.value; - - this.ranges[rangeHtml] = [start, end]; - } - - var list = '
    '; - for (range in this.ranges) { - list += '
  • ' + range + '
  • '; - } - list += '
  • ' + this.locale.customRangeLabel + '
  • '; - list += '
'; - this.container.find('.ranges').prepend(list); - } - - if (typeof cb === 'function') { - this.callback = cb; - } - - if (!this.timePicker) { - this.startDate = this.startDate.startOf('day'); - this.endDate = this.endDate.endOf('day'); - this.container.find('.calendar-time').hide(); - } - - //can't be used together for now - if (this.timePicker && this.autoApply) - this.autoApply = false; - - if (this.autoApply && typeof options.ranges !== 'object') { - this.container.find('.ranges').hide(); - } else if (this.autoApply) { - this.container.find('.applyBtn, .cancelBtn').addClass('hide'); - } - - if (this.singleDatePicker) { - this.container.addClass('single'); - this.container.find('.calendar.left').addClass('single'); - this.container.find('.calendar.left').show(); - this.container.find('.calendar.right').hide(); - this.container.find('.daterangepicker_input input, .daterangepicker_input i').hide(); - if (!this.timePicker) { - this.container.find('.ranges').hide(); - } - } - - if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) { - this.container.addClass('show-calendar'); - } - - this.container.addClass('opens' + this.opens); - - //swap the position of the predefined ranges if opens right - if (typeof options.ranges !== 'undefined' && this.opens == 'right') { - var ranges = this.container.find('.ranges'); - var html = ranges.clone(); - ranges.remove(); - this.container.find('.calendar.left').parent().prepend(html); - } - - //apply CSS classes and labels to buttons - this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses); - if (this.applyClass.length) - this.container.find('.applyBtn').addClass(this.applyClass); - if (this.cancelClass.length) - this.container.find('.cancelBtn').addClass(this.cancelClass); - this.container.find('.applyBtn').html(this.locale.applyLabel); - this.container.find('.cancelBtn').html(this.locale.cancelLabel); - - // - // event listeners - // - - this.container.find('.calendar') - .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this)) - .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this)) - .on('click.daterangepicker', 'td.available', $.proxy(this.clickDate, this)) - .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this)) - .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this)) - .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this)) - .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this)) - .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this)) - .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this)) - //.on('keyup.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this)) - .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this)); - - this.container.find('.ranges') - .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this)) - .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this)) - .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this)) - .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this)) - .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this)); - - if (this.element.is('input')) { - this.element.on({ - 'click.daterangepicker': $.proxy(this.show, this), - 'focus.daterangepicker': $.proxy(this.show, this), - 'keyup.daterangepicker': $.proxy(this.elementChanged, this), - 'keydown.daterangepicker': $.proxy(this.keydown, this) - }); - } else { - this.element.on('click.daterangepicker', $.proxy(this.toggle, this)); - } - - // - // if attached to a text input, set the initial value - // - - if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) { - this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); - this.element.trigger('change'); - } else if (this.element.is('input') && this.autoUpdateInput) { - this.element.val(this.startDate.format(this.locale.format)); - this.element.trigger('change'); - } - - }; - - DateRangePicker.prototype = { - - constructor: DateRangePicker, - - setStartDate: function(startDate) { - if (typeof startDate === 'string') - this.startDate = moment(startDate, this.locale.format); - - if (typeof startDate === 'object') - this.startDate = moment(startDate); - - if (!this.timePicker) - this.startDate = this.startDate.startOf('day'); - - if (this.timePicker && this.timePickerIncrement) - this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); - - if (this.minDate && this.startDate.isBefore(this.minDate)) - this.startDate = this.minDate; - - if (this.maxDate && this.startDate.isAfter(this.maxDate)) - this.startDate = this.maxDate; - - if (!this.isShowing) - this.updateElement(); - - this.updateMonthsInView(); - }, - - setEndDate: function(endDate) { - if (typeof endDate === 'string') - this.endDate = moment(endDate, this.locale.format); - - if (typeof endDate === 'object') - this.endDate = moment(endDate); - - if (!this.timePicker) - this.endDate = this.endDate.endOf('day'); - - if (this.timePicker && this.timePickerIncrement) - this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); - - if (this.endDate.isBefore(this.startDate)) - this.endDate = this.startDate.clone(); - - if (this.maxDate && this.endDate.isAfter(this.maxDate)) - this.endDate = this.maxDate; - - if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate)) - this.endDate = this.startDate.clone().add(this.dateLimit); - - this.previousRightTime = this.endDate.clone(); - - if (!this.isShowing) - this.updateElement(); - - this.updateMonthsInView(); - }, - - isInvalidDate: function() { - return false; - }, - - updateView: function() { - if (this.timePicker) { - this.renderTimePicker('left'); - this.renderTimePicker('right'); - if (!this.endDate) { - this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled'); - } else { - this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled'); - } - } - if (this.endDate) { - this.container.find('input[name="daterangepicker_end"]').removeClass('active'); - this.container.find('input[name="daterangepicker_start"]').addClass('active'); - } else { - this.container.find('input[name="daterangepicker_end"]').addClass('active'); - this.container.find('input[name="daterangepicker_start"]').removeClass('active'); - } - this.updateMonthsInView(); - this.updateCalendars(); - this.updateFormInputs(); - }, - - updateMonthsInView: function() { - if (this.endDate) { - - //if both dates are visible already, do nothing - if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && - (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) - && - (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) - ) { - return; - } - - this.leftCalendar.month = this.startDate.clone().date(2); - if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) { - this.rightCalendar.month = this.endDate.clone().date(2); - } else { - this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); - } - - } else { - if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) { - this.leftCalendar.month = this.startDate.clone().date(2); - this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); - } - } - }, - - updateCalendars: function() { - - if (this.timePicker) { - var hour, minute, second; - if (this.endDate) { - hour = parseInt(this.container.find('.left .hourselect').val(), 10); - minute = parseInt(this.container.find('.left .minuteselect').val(), 10); - second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; - if (!this.timePicker24Hour) { - var ampm = this.container.find('.left .ampmselect').val(); - if (ampm === 'PM' && hour < 12) - hour += 12; - if (ampm === 'AM' && hour === 12) - hour = 0; - } - } else { - hour = parseInt(this.container.find('.right .hourselect').val(), 10); - minute = parseInt(this.container.find('.right .minuteselect').val(), 10); - second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; - if (!this.timePicker24Hour) { - var ampm = this.container.find('.right .ampmselect').val(); - if (ampm === 'PM' && hour < 12) - hour += 12; - if (ampm === 'AM' && hour === 12) - hour = 0; - } - } - this.leftCalendar.month.hour(hour).minute(minute).second(second); - this.rightCalendar.month.hour(hour).minute(minute).second(second); - } - - this.renderCalendar('left'); - this.renderCalendar('right'); - - //highlight any predefined range matching the current start and end dates - this.container.find('.ranges li').removeClass('active'); - if (this.endDate == null) return; - - this.calculateChosenLabel(); - }, - - renderCalendar: function(side) { - - // - // Build the matrix of dates that will populate the calendar - // - - var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar; - var month = calendar.month.month(); - var year = calendar.month.year(); - var hour = calendar.month.hour(); - var minute = calendar.month.minute(); - var second = calendar.month.second(); - var daysInMonth = moment([year, month]).daysInMonth(); - var firstDay = moment([year, month, 1]); - var lastDay = moment([year, month, daysInMonth]); - var lastMonth = moment(firstDay).subtract(1, 'month').month(); - var lastYear = moment(firstDay).subtract(1, 'month').year(); - var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth(); - var dayOfWeek = firstDay.day(); - - //initialize a 6 rows x 7 columns array for the calendar - var calendar = []; - calendar.firstDay = firstDay; - calendar.lastDay = lastDay; - - for (var i = 0; i < 6; i++) { - calendar[i] = []; - } - - //populate the calendar with date objects - var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1; - if (startDay > daysInLastMonth) - startDay -= 7; - - if (dayOfWeek == this.locale.firstDay) - startDay = daysInLastMonth - 6; - - var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]); - - var col, row; - for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) { - if (i > 0 && col % 7 === 0) { - col = 0; - row++; - } - calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second); - curDate.hour(12); - - if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') { - calendar[row][col] = this.minDate.clone(); - } - - if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') { - calendar[row][col] = this.maxDate.clone(); - } - - } - - //make the calendar object available to hoverDate/clickDate - if (side == 'left') { - this.leftCalendar.calendar = calendar; - } else { - this.rightCalendar.calendar = calendar; - } - - // - // Display the calendar - // - - var minDate = side == 'left' ? this.minDate : this.startDate; - var maxDate = this.maxDate; - var selected = side == 'left' ? this.startDate : this.endDate; - - var html = ''; - html += ''; - html += ''; - - // add empty cell for week number - if (this.showWeekNumbers || this.showISOWeekNumbers) - html += ''; - - if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) { - html += ''; - } else { - html += ''; - } - - var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY"); - - if (this.showDropdowns) { - var currentMonth = calendar[1][1].month(); - var currentYear = calendar[1][1].year(); - var maxYear = (maxDate && maxDate.year()) || (currentYear + 5); - var minYear = (minDate && minDate.year()) || (currentYear - 50); - var inMinYear = currentYear == minYear; - var inMaxYear = currentYear == maxYear; - - var monthHtml = '"; - - var yearHtml = ''; - - dateHtml = monthHtml + yearHtml; - } - - html += ''; - if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) { - html += ''; - } else { - html += ''; - } - - html += ''; - html += ''; - - // add week number label - if (this.showWeekNumbers || this.showISOWeekNumbers) - html += ''; - - $.each(this.locale.daysOfWeek, function(index, dayOfWeek) { - html += ''; - }); - - html += ''; - html += ''; - html += ''; - - //adjust maxDate to reflect the dateLimit setting in order to - //grey out end dates beyond the dateLimit - if (this.endDate == null && this.dateLimit) { - var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day'); - if (!maxDate || maxLimit.isBefore(maxDate)) { - maxDate = maxLimit; - } - } - - for (var row = 0; row < 6; row++) { - html += ''; - - // add week number - if (this.showWeekNumbers) - html += ''; - else if (this.showISOWeekNumbers) - html += ''; - - for (var col = 0; col < 7; col++) { - - var classes = []; - - //highlight today's date - if (calendar[row][col].isSame(new Date(), "day")) - classes.push('today'); - - //highlight weekends - if (calendar[row][col].isoWeekday() > 5) - classes.push('weekend'); - - //grey out the dates in other months displayed at beginning and end of this calendar - if (calendar[row][col].month() != calendar[1][1].month()) - classes.push('off'); - - //don't allow selection of dates before the minimum date - if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) - classes.push('off', 'disabled'); - - //don't allow selection of dates after the maximum date - if (maxDate && calendar[row][col].isAfter(maxDate, 'day')) - classes.push('off', 'disabled'); - - //don't allow selection of date if a custom function decides it's invalid - if (this.isInvalidDate(calendar[row][col])) - classes.push('off', 'disabled'); - - //highlight the currently selected start date - if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD')) - classes.push('active', 'start-date'); - - //highlight the currently selected end date - if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD')) - classes.push('active', 'end-date'); - - //highlight dates in-between the selected dates - if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate) - classes.push('in-range'); - - var cname = '', disabled = false; - for (var i = 0; i < classes.length; i++) { - cname += classes[i] + ' '; - if (classes[i] == 'disabled') - disabled = true; - } - if (!disabled) - cname += 'available'; - - html += ''; - - } - html += ''; - } - - html += ''; - html += '
' + dateHtml + '
' + this.locale.weekLabel + '' + dayOfWeek + '
' + calendar[row][0].week() + '' + calendar[row][0].isoWeek() + '' + calendar[row][col].date() + '
'; - - this.container.find('.calendar.' + side + ' .calendar-table').html(html); - - }, - - renderTimePicker: function(side) { - - var html, selected, minDate, maxDate = this.maxDate; - - if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate))) - maxDate = this.startDate.clone().add(this.dateLimit); - - if (side == 'left') { - selected = this.startDate.clone(); - minDate = this.minDate; - } else if (side == 'right') { - selected = this.endDate ? this.endDate.clone() : this.previousRightTime.clone(); - minDate = this.startDate; - - //Preserve the time already selected - var timeSelector = this.container.find('.calendar.right .calendar-time div'); - if (timeSelector.html() != '') { - - selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour()); - selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute()); - selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second()); - - if (!this.timePicker24Hour) { - var ampm = timeSelector.find('.ampmselect option:selected').val(); - if (ampm === 'PM' && selected.hour() < 12) - selected.hour(selected.hour() + 12); - if (ampm === 'AM' && selected.hour() === 12) - selected.hour(0); - } - - if (selected.isBefore(this.startDate)) - selected = this.startDate.clone(); - - if (maxDate && selected.isAfter(maxDate)) - selected = maxDate.clone(); - - } - } - - // - // hours - // - - html = ' '; - - // - // minutes - // - - html += ': '; - - // - // seconds - // - - if (this.timePickerSeconds) { - html += ': '; - } - - // - // AM/PM - // - - if (!this.timePicker24Hour) { - html += ''; - } - - this.container.find('.calendar.' + side + ' .calendar-time div').html(html); - - }, - - updateFormInputs: function() { - - //ignore mouse movements while an above-calendar text input has focus - if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) - return; - - this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format)); - if (this.endDate) - this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format)); - - if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) { - this.container.find('button.applyBtn').removeAttr('disabled'); - } else { - this.container.find('button.applyBtn').attr('disabled', 'disabled'); - } - - }, - - move: function() { - var parentOffset = { top: 0, left: 0 }, - containerTop; - var parentRightEdge = $(window).width(); - if (!this.parentEl.is('body')) { - parentOffset = { - top: this.parentEl.offset().top - this.parentEl.scrollTop(), - left: this.parentEl.offset().left - this.parentEl.scrollLeft() - }; - parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left; - } - - if (this.drops == 'up') - containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top; - else - containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top; - this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup'); - - if (this.opens == 'left') { - this.container.css({ - top: containerTop, - right: parentRightEdge - this.element.offset().left - this.element.outerWidth(), - left: 'auto' - }); - if (this.container.offset().left < 0) { - this.container.css({ - right: 'auto', - left: 9 - }); - } - } else if (this.opens == 'center') { - this.container.css({ - top: containerTop, - left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2 - - this.container.outerWidth() / 2, - right: 'auto' - }); - if (this.container.offset().left < 0) { - this.container.css({ - right: 'auto', - left: 9 - }); - } - } else { - this.container.css({ - top: containerTop, - left: this.element.offset().left - parentOffset.left, - right: 'auto' - }); - if (this.container.offset().left + this.container.outerWidth() > $(window).width()) { - this.container.css({ - left: 'auto', - right: 0 - }); - } - } - }, - - show: function(e) { - if (this.isShowing) return; - - // Create a click proxy that is private to this instance of datepicker, for unbinding - this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this); - - // Bind global datepicker mousedown for hiding and - $(document) - .on('mousedown.daterangepicker', this._outsideClickProxy) - // also support mobile devices - .on('touchend.daterangepicker', this._outsideClickProxy) - // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them - .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy) - // and also close when focus changes to outside the picker (eg. tabbing between controls) - .on('focusin.daterangepicker', this._outsideClickProxy); - - // Reposition the picker if the window is resized while it's open - $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this)); - - this.oldStartDate = this.startDate.clone(); - this.oldEndDate = this.endDate.clone(); - this.previousRightTime = this.endDate.clone(); - - this.updateView(); - this.container.show(); - this.move(); - this.element.trigger('show.daterangepicker', this); - this.isShowing = true; - }, - - hide: function(e) { - if (!this.isShowing) return; - - //incomplete date selection, revert to last values - if (!this.endDate) { - this.startDate = this.oldStartDate.clone(); - this.endDate = this.oldEndDate.clone(); - } - - //if a new date range was selected, invoke the user callback function - if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate)) - this.callback(this.startDate, this.endDate, this.chosenLabel); - - //if picker is attached to a text input, update it - this.updateElement(); - - $(document).off('.daterangepicker'); - $(window).off('.daterangepicker'); - this.container.hide(); - this.element.trigger('hide.daterangepicker', this); - this.isShowing = false; - }, - - toggle: function(e) { - if (this.isShowing) { - this.hide(); - } else { - this.show(); - } - }, - - outsideClick: function(e) { - var target = $(e.target); - // if the page is clicked anywhere except within the daterangerpicker/button - // itself then call this.hide() - if ( - // ie modal dialog fix - e.type == "focusin" || - target.closest(this.element).length || - target.closest(this.container).length || - target.closest('.calendar-table').length - ) return; - this.hide(); - }, - - showCalendars: function() { - this.container.addClass('show-calendar'); - this.move(); - this.element.trigger('showCalendar.daterangepicker', this); - }, - - hideCalendars: function() { - this.container.removeClass('show-calendar'); - this.element.trigger('hideCalendar.daterangepicker', this); - }, - - hoverRange: function(e) { - - //ignore mouse movements while an above-calendar text input has focus - if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) - return; - - var label = e.target.innerHTML; - if (label == this.locale.customRangeLabel) { - this.updateView(); - } else { - var dates = this.ranges[label]; - this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format)); - this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format)); - } - - }, - - clickRange: function(e) { - var label = e.target.innerHTML; - this.chosenLabel = label; - if (label == this.locale.customRangeLabel) { - this.showCalendars(); - } else { - var dates = this.ranges[label]; - this.startDate = dates[0]; - this.endDate = dates[1]; - - if (!this.timePicker) { - this.startDate.startOf('day'); - this.endDate.endOf('day'); - } - - if (!this.alwaysShowCalendars) - this.hideCalendars(); - this.clickApply(); - } - }, - - clickPrev: function(e) { - var cal = $(e.target).parents('.calendar'); - if (cal.hasClass('left')) { - this.leftCalendar.month.subtract(1, 'month'); - if (this.linkedCalendars) - this.rightCalendar.month.subtract(1, 'month'); - } else { - this.rightCalendar.month.subtract(1, 'month'); - } - this.updateCalendars(); - }, - - clickNext: function(e) { - var cal = $(e.target).parents('.calendar'); - if (cal.hasClass('left')) { - this.leftCalendar.month.add(1, 'month'); - } else { - this.rightCalendar.month.add(1, 'month'); - if (this.linkedCalendars) - this.leftCalendar.month.add(1, 'month'); - } - this.updateCalendars(); - }, - - hoverDate: function(e) { - - //ignore mouse movements while an above-calendar text input has focus - if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus")) - return; - - //ignore dates that can't be selected - if (!$(e.target).hasClass('available')) return; - - //have the text inputs above calendars reflect the date being hovered over - var title = $(e.target).attr('data-title'); - var row = title.substr(1, 1); - var col = title.substr(3, 1); - var cal = $(e.target).parents('.calendar'); - var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; - - if (this.endDate) { - this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format)); - } else { - this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format)); - } - - //highlight the dates between the start date and the date being hovered as a potential end date - var leftCalendar = this.leftCalendar; - var rightCalendar = this.rightCalendar; - var startDate = this.startDate; - if (!this.endDate) { - this.container.find('.calendar td').each(function(index, el) { - - //skip week numbers, only look at dates - if ($(el).hasClass('week')) return; - - var title = $(el).attr('data-title'); - var row = title.substr(1, 1); - var col = title.substr(3, 1); - var cal = $(el).parents('.calendar'); - var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col]; - - if (dt.isAfter(startDate) && dt.isBefore(date)) { - $(el).addClass('in-range'); - } else { - $(el).removeClass('in-range'); - } - - }); - } - - }, - - clickDate: function(e) { - - if (!$(e.target).hasClass('available')) return; - - var title = $(e.target).attr('data-title'); - var row = title.substr(1, 1); - var col = title.substr(3, 1); - var cal = $(e.target).parents('.calendar'); - var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; - - // - // this function needs to do a few things: - // * alternate between selecting a start and end date for the range, - // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date - // * if autoapply is enabled, and an end date was chosen, apply the selection - // * if single date picker mode, and time picker isn't enabled, apply the selection immediately - // - - if (this.endDate || date.isBefore(this.startDate, 'day')) { - if (this.timePicker) { - var hour = parseInt(this.container.find('.left .hourselect').val(), 10); - if (!this.timePicker24Hour) { - var ampm = this.container.find('.left .ampmselect').val(); - if (ampm === 'PM' && hour < 12) - hour += 12; - if (ampm === 'AM' && hour === 12) - hour = 0; - } - var minute = parseInt(this.container.find('.left .minuteselect').val(), 10); - var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; - date = date.clone().hour(hour).minute(minute).second(second); - } - this.endDate = null; - this.setStartDate(date.clone()); - } else if (!this.endDate && date.isBefore(this.startDate)) { - //special case: clicking the same date for start/end, - //but the time of the end date is before the start date - this.setEndDate(this.startDate.clone()); - } else { - if (this.timePicker) { - var hour = parseInt(this.container.find('.right .hourselect').val(), 10); - if (!this.timePicker24Hour) { - var ampm = this.container.find('.right .ampmselect').val(); - if (ampm === 'PM' && hour < 12) - hour += 12; - if (ampm === 'AM' && hour === 12) - hour = 0; - } - var minute = parseInt(this.container.find('.right .minuteselect').val(), 10); - var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; - date = date.clone().hour(hour).minute(minute).second(second); - } - this.setEndDate(date.clone()); - if (this.autoApply) { - this.calculateChosenLabel(); - this.clickApply(); - } - } - - if (this.singleDatePicker) { - this.setEndDate(this.startDate); - if (!this.timePicker) - this.clickApply(); - } - - this.updateView(); - - }, - - calculateChosenLabel: function() { - var customRange = true; - var i = 0; - for (var range in this.ranges) { - if (this.timePicker) { - if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) { - customRange = false; - this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html(); - break; - } - } else { - //ignore times when comparing dates if time picker is not enabled - if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) { - customRange = false; - this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html(); - break; - } - } - i++; - } - if (customRange) { - this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html(); - this.showCalendars(); - } - }, - - clickApply: function(e) { - this.hide(); - this.element.trigger('apply.daterangepicker', this); - }, - - clickCancel: function(e) { - this.startDate = this.oldStartDate; - this.endDate = this.oldEndDate; - this.hide(); - this.element.trigger('cancel.daterangepicker', this); - }, - - monthOrYearChanged: function(e) { - var isLeft = $(e.target).closest('.calendar').hasClass('left'), - leftOrRight = isLeft ? 'left' : 'right', - cal = this.container.find('.calendar.'+leftOrRight); - - // Month must be Number for new moment versions - var month = parseInt(cal.find('.monthselect').val(), 10); - var year = cal.find('.yearselect').val(); - - if (!isLeft) { - if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) { - month = this.startDate.month(); - year = this.startDate.year(); - } - } - - if (this.minDate) { - if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) { - month = this.minDate.month(); - year = this.minDate.year(); - } - } - - if (this.maxDate) { - if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) { - month = this.maxDate.month(); - year = this.maxDate.year(); - } - } - - if (isLeft) { - this.leftCalendar.month.month(month).year(year); - if (this.linkedCalendars) - this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month'); - } else { - this.rightCalendar.month.month(month).year(year); - if (this.linkedCalendars) - this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month'); - } - this.updateCalendars(); - }, - - timeChanged: function(e) { - - var cal = $(e.target).closest('.calendar'), - isLeft = cal.hasClass('left'); - - var hour = parseInt(cal.find('.hourselect').val(), 10); - var minute = parseInt(cal.find('.minuteselect').val(), 10); - var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0; - - if (!this.timePicker24Hour) { - var ampm = cal.find('.ampmselect').val(); - if (ampm === 'PM' && hour < 12) - hour += 12; - if (ampm === 'AM' && hour === 12) - hour = 0; - } - - if (isLeft) { - var start = this.startDate.clone(); - start.hour(hour); - start.minute(minute); - start.second(second); - this.setStartDate(start); - if (this.singleDatePicker) { - this.endDate = this.startDate.clone(); - } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) { - this.setEndDate(start.clone()); - } - } else if (this.endDate) { - var end = this.endDate.clone(); - end.hour(hour); - end.minute(minute); - end.second(second); - this.setEndDate(end); - } - - //update the calendars so all clickable dates reflect the new time component - this.updateCalendars(); - - //update the form inputs above the calendars with the new time - this.updateFormInputs(); - - //re-render the time pickers because changing one selection can affect what's enabled in another - this.renderTimePicker('left'); - this.renderTimePicker('right'); - - }, - - formInputsChanged: function(e) { - var isRight = $(e.target).closest('.calendar').hasClass('right'); - var start = moment(this.container.find('input[name="daterangepicker_start"]').val(), this.locale.format); - var end = moment(this.container.find('input[name="daterangepicker_end"]').val(), this.locale.format); - - if (start.isValid() && end.isValid()) { - - if (isRight && end.isBefore(start)) - start = end.clone(); - - this.setStartDate(start); - this.setEndDate(end); - - if (isRight) { - this.container.find('input[name="daterangepicker_start"]').val(this.startDate.format(this.locale.format)); - } else { - this.container.find('input[name="daterangepicker_end"]').val(this.endDate.format(this.locale.format)); - } - - } - - this.updateCalendars(); - if (this.timePicker) { - this.renderTimePicker('left'); - this.renderTimePicker('right'); - } - }, - - elementChanged: function() { - if (!this.element.is('input')) return; - if (!this.element.val().length) return; - if (this.element.val().length < this.locale.format.length) return; - - var dateString = this.element.val().split(this.locale.separator), - start = null, - end = null; - - if (dateString.length === 2) { - start = moment(dateString[0], this.locale.format); - end = moment(dateString[1], this.locale.format); - } - - if (this.singleDatePicker || start === null || end === null) { - start = moment(this.element.val(), this.locale.format); - end = start; - } - - if (!start.isValid() || !end.isValid()) return; - - this.setStartDate(start); - this.setEndDate(end); - this.updateView(); - }, - - keydown: function(e) { - //hide on tab or enter - if ((e.keyCode === 9) || (e.keyCode === 13)) { - this.hide(); - } - }, - - updateElement: function() { - if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) { - this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); - this.element.trigger('change'); - } else if (this.element.is('input') && this.autoUpdateInput) { - this.element.val(this.startDate.format(this.locale.format)); - this.element.trigger('change'); - } - }, - - remove: function() { - this.container.remove(); - this.element.off('.daterangepicker'); - this.element.removeData(); - } - - }; - - $.fn.daterangepicker = function(options, callback) { - this.each(function() { - var el = $(this); - if (el.data('daterangepicker')) - el.data('daterangepicker').remove(); - el.data('daterangepicker', new DateRangePicker(el, options, callback)); - }); - return this; - }; - - return DateRangePicker; - -})); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js deleted file mode 100644 index 05199bd3b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker/public/js/moment.min.js +++ /dev/null @@ -1,7 +0,0 @@ -//! moment.js -//! version : 2.10.3 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com -!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Dc.apply(null,arguments)}function b(a){Dc=a}function c(a){return"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c0)for(c in Fc)d=Fc[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(b){m(this,b),this._d=new Date(+b._d),Gc===!1&&(Gc=!0,a.updateOffset(this),Gc=!1)}function o(a){return a instanceof n||null!=a&&null!=a._isAMomentObject}function p(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function q(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&p(a[d])!==p(b[d]))&&g++;return g+f}function r(){}function s(a){return a?a.toLowerCase().replace("_","-"):a}function t(a){for(var b,c,d,e,f=0;f0;){if(d=u(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&q(e,c,!0)>=b-1)break;b--}f++}return null}function u(a){var b=null;if(!Hc[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Ec._abbr,require("./locale/"+a),v(b)}catch(c){}return Hc[a]}function v(a,b){var c;return a&&(c="undefined"==typeof b?x(a):w(a,b),c&&(Ec=c)),Ec._abbr}function w(a,b){return null!==b?(b.abbr=a,Hc[a]||(Hc[a]=new r),Hc[a].set(b),v(a),Hc[a]):(delete Hc[a],null)}function x(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Ec;if(!c(a)){if(b=u(a))return b;a=[a]}return t(a)}function y(a,b){var c=a.toLowerCase();Ic[c]=Ic[c+"s"]=Ic[b]=a}function z(a){return"string"==typeof a?Ic[a]||Ic[a.toLowerCase()]:void 0}function A(a){var b,c,d={};for(c in a)f(a,c)&&(b=z(c),b&&(d[b]=a[c]));return d}function B(b,c){return function(d){return null!=d?(D(this,b,d),a.updateOffset(this,c),this):C(this,b)}}function C(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function D(a,b,c){return a._d["set"+(a._isUTC?"UTC":"")+b](c)}function E(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=z(a),"function"==typeof this[a])return this[a](b);return this}function F(a,b,c){for(var d=""+Math.abs(a),e=a>=0;d.lengthb;b++)Mc[d[b]]?d[b]=Mc[d[b]]:d[b]=H(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function J(a,b){return a.isValid()?(b=K(b,a.localeData()),Lc[b]||(Lc[b]=I(b)),Lc[b](a)):a.localeData().invalidDate()}function K(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Kc.lastIndex=0;d>=0&&Kc.test(a);)a=a.replace(Kc,c),Kc.lastIndex=0,d-=1;return a}function L(a,b,c){_c[a]="function"==typeof b?b:function(a){return a&&c?c:b}}function M(a,b){return f(_c,a)?_c[a](b._strict,b._locale):new RegExp(N(a))}function N(a){return a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function O(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=p(a)}),c=0;cd;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function V(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),R(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function W(b){return null!=b?(V(this,b),a.updateOffset(this,!0),this):C(this,"Month")}function X(){return R(this.year(),this.month())}function Y(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[cd]<0||c[cd]>11?cd:c[dd]<1||c[dd]>R(c[bd],c[cd])?dd:c[ed]<0||c[ed]>24||24===c[ed]&&(0!==c[fd]||0!==c[gd]||0!==c[hd])?ed:c[fd]<0||c[fd]>59?fd:c[gd]<0||c[gd]>59?gd:c[hd]<0||c[hd]>999?hd:-1,j(a)._overflowDayOfYear&&(bd>b||b>dd)&&(b=dd),j(a).overflow=b),a}function Z(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function $(a,b){var c=!0,d=a+"\n"+(new Error).stack;return g(function(){return c&&(Z(d),c=!1),b.apply(this,arguments)},b)}function _(a,b){kd[a]||(Z(b),kd[a]=!0)}function aa(a){var b,c,d=a._i,e=ld.exec(d);if(e){for(j(a).iso=!0,b=0,c=md.length;c>b;b++)if(md[b][1].exec(d)){a._f=md[b][0]+(e[6]||" ");break}for(b=0,c=nd.length;c>b;b++)if(nd[b][1].exec(d)){a._f+=nd[b][0];break}d.match(Yc)&&(a._f+="Z"),ta(a)}else a._isValid=!1}function ba(b){var c=od.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(aa(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function ca(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function da(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function ea(a){return fa(a)?366:365}function fa(a){return a%4===0&&a%100!==0||a%400===0}function ga(){return fa(this.year())}function ha(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=Aa(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ia(a){return ha(a,this._week.dow,this._week.doy).week}function ja(){return this._week.dow}function ka(){return this._week.doy}function la(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function ma(a){var b=ha(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function na(a,b,c,d,e){var f,g,h=da(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:ea(a-1)+g}}function oa(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function pa(a,b,c){return null!=a?a:null!=b?b:c}function qa(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function ra(a){var b,c,d,e,f=[];if(!a._d){for(d=qa(a),a._w&&null==a._a[dd]&&null==a._a[cd]&&sa(a),a._dayOfYear&&(e=pa(a._a[bd],d[bd]),a._dayOfYear>ea(e)&&(j(a)._overflowDayOfYear=!0),c=da(e,0,a._dayOfYear),a._a[cd]=c.getUTCMonth(),a._a[dd]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[ed]&&0===a._a[fd]&&0===a._a[gd]&&0===a._a[hd]&&(a._nextDay=!0,a._a[ed]=0),a._d=(a._useUTC?da:ca).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[ed]=24)}}function sa(a){var b,c,d,e,f,g,h;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=pa(b.GG,a._a[bd],ha(Aa(),1,4).year),d=pa(b.W,1),e=pa(b.E,1)):(f=a._locale._week.dow,g=a._locale._week.doy,c=pa(b.gg,a._a[bd],ha(Aa(),f,g).year),d=pa(b.w,1),null!=b.d?(e=b.d,f>e&&++d):e=null!=b.e?b.e+f:f),h=na(c,d,e,g,f),a._a[bd]=h.year,a._dayOfYear=h.dayOfYear}function ta(b){if(b._f===a.ISO_8601)return void aa(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=K(b._f,b._locale).match(Jc)||[],c=0;c0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),Mc[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),Q(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[ed]<=12&&b._a[ed]>0&&(j(b).bigHour=void 0),b._a[ed]=ua(b._locale,b._a[ed],b._meridiem),ra(b),Y(b)}function ua(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function va(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(0/0));for(e=0;ef)&&(d=f,c=b));g(a,c||b)}function wa(a){if(!a._d){var b=A(a._i);a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],ra(a)}}function xa(a){var b,e=a._i,f=a._f;return a._locale=a._locale||x(a._l),null===e||void 0===f&&""===e?l({nullInput:!0}):("string"==typeof e&&(a._i=e=a._locale.preparse(e)),o(e)?new n(Y(e)):(c(f)?va(a):f?ta(a):d(e)?a._d=e:ya(a),b=new n(Y(a)),b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b))}function ya(b){var f=b._i;void 0===f?b._d=new Date:d(f)?b._d=new Date(+f):"string"==typeof f?ba(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),ra(b)):"object"==typeof f?wa(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function za(a,b,c,d,e){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,xa(f)}function Aa(a,b,c,d){return za(a,b,c,d,!1)}function Ba(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Aa();for(d=b[0],e=1;ea&&(a=-a,c="-"),c+F(~~(a/60),2)+b+F(~~a%60,2)})}function Ha(a){var b=(a||"").match(Yc)||[],c=b[b.length-1]||[],d=(c+"").match(td)||["-",0,0],e=+(60*d[1])+p(d[2]);return"+"===d[0]?e:-e}function Ia(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(o(b)||d(b)?+b:+Aa(b))-+e,e._d.setTime(+e._d+f),a.updateOffset(e,!1),e):Aa(b).local();return c._isUTC?Aa(b).zone(c._offset||0):Aa(b).local()}function Ja(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Ka(b,c){var d,e=this._offset||0;return null!=b?("string"==typeof b&&(b=Ha(b)),Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ja(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?$a(this,Va(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ja(this)}function La(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Ma(a){return this.utcOffset(0,a)}function Na(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ja(this),"m")),this}function Oa(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ha(this._i)),this}function Pa(a){return a=a?Aa(a).utcOffset():0,(this.utcOffset()-a)%60===0}function Qa(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ra(){if(this._a){var a=this._isUTC?h(this._a):Aa(this._a);return this.isValid()&&q(this._a,a.toArray())>0}return!1}function Sa(){return!this._isUTC}function Ta(){return this._isUTC}function Ua(){return this._isUTC&&0===this._offset}function Va(a,b){var c,d,e,g=a,h=null;return Fa(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=ud.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:p(h[dd])*c,h:p(h[ed])*c,m:p(h[fd])*c,s:p(h[gd])*c,ms:p(h[hd])*c}):(h=vd.exec(a))?(c="-"===h[1]?-1:1,g={y:Wa(h[2],c),M:Wa(h[3],c),d:Wa(h[4],c),h:Wa(h[5],c),m:Wa(h[6],c),s:Wa(h[7],c),w:Wa(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=Ya(Aa(g.from),Aa(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Ea(g),Fa(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function Wa(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function Xa(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function Ya(a,b){var c;return b=Ia(b,a),a.isBefore(b)?c=Xa(a,b):(c=Xa(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function Za(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(_(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Va(c,d),$a(this,e,a),this}}function $a(b,c,d,e){var f=c._milliseconds,g=c._days,h=c._months;e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&D(b,"Date",C(b,"Date")+g*d),h&&V(b,C(b,"Month")+h*d),e&&a.updateOffset(b,g||h)}function _a(a){var b=a||Aa(),c=Ia(b,this).startOf("day"),d=this.diff(c,"days",!0),e=-6>d?"sameElse":-1>d?"lastWeek":0>d?"lastDay":1>d?"sameDay":2>d?"nextDay":7>d?"nextWeek":"sameElse";return this.format(this.localeData().calendar(e,this,Aa(b)))}function ab(){return new n(this)}function bb(a,b){var c;return b=z("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Aa(a),+this>+a):(c=o(a)?+a:+Aa(a),c<+this.clone().startOf(b))}function cb(a,b){var c;return b=z("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Aa(a),+a>+this):(c=o(a)?+a:+Aa(a),+this.clone().endOf(b)a?Math.ceil(a):Math.floor(a)}function gb(a,b,c){var d,e,f=Ia(a,this),g=6e4*(f.utcOffset()-this.utcOffset());return b=z(b),"year"===b||"month"===b||"quarter"===b?(e=hb(this,f),"quarter"===b?e/=3:"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:fb(e)}function hb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function ib(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function jb(){var a=this.clone().utc();return 0b;b++)if(this._weekdaysParse[b]||(c=Aa([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b}function Mb(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Hb(a,this.localeData()),this.add(a-b,"d")):b}function Nb(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Ob(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)}function Pb(a,b){G(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Qb(a,b){return b._meridiemParse}function Rb(a){return"p"===(a+"").toLowerCase().charAt(0)}function Sb(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Tb(a){G(0,[a,3],0,"millisecond")}function Ub(){return this._isUTC?"UTC":""}function Vb(){return this._isUTC?"Coordinated Universal Time":""}function Wb(a){return Aa(1e3*a)}function Xb(){return Aa.apply(null,arguments).parseZone()}function Yb(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.call(b,c):d}function Zb(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b}function $b(){return this._invalidDate}function _b(a){return this._ordinal.replace("%d",a)}function ac(a){return a}function bc(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)}function cc(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)}function dc(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function ec(a,b,c,d){var e=x(),f=h().set(d,b);return e[c](f,a)}function fc(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return ec(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=ec(a,f,c,e);return g}function gc(a,b){return fc(a,b,"months",12,"month")}function hc(a,b){return fc(a,b,"monthsShort",12,"month")}function ic(a,b){return fc(a,b,"weekdays",7,"day")}function jc(a,b){return fc(a,b,"weekdaysShort",7,"day")}function kc(a,b){return fc(a,b,"weekdaysMin",7,"day")}function lc(){var a=this._data;return this._milliseconds=Rd(this._milliseconds),this._days=Rd(this._days),this._months=Rd(this._months),a.milliseconds=Rd(a.milliseconds),a.seconds=Rd(a.seconds),a.minutes=Rd(a.minutes),a.hours=Rd(a.hours),a.months=Rd(a.months),a.years=Rd(a.years),this}function mc(a,b,c,d){var e=Va(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function nc(a,b){return mc(this,a,b,1)}function oc(a,b){return mc(this,a,b,-1)}function pc(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;return g.milliseconds=d%1e3,a=fb(d/1e3),g.seconds=a%60,b=fb(a/60),g.minutes=b%60,c=fb(b/60),g.hours=c%24,e+=fb(c/24),h=fb(qc(e)),e-=fb(rc(h)),f+=fb(e/30),e%=30,h+=fb(f/12),f%=12,g.days=e,g.months=f,g.years=h,this}function qc(a){return 400*a/146097}function rc(a){return 146097*a/400}function sc(a){var b,c,d=this._milliseconds;if(a=z(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+12*qc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(rc(this._months/12)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function tc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*p(this._months/12)}function uc(a){return function(){return this.as(a)}}function vc(a){return a=z(a),this[a+"s"]()}function wc(a){return function(){return this._data[a]}}function xc(){return fb(this.days()/7)}function yc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function zc(a,b,c){var d=Va(a).abs(),e=fe(d.as("s")),f=fe(d.as("m")),g=fe(d.as("h")),h=fe(d.as("d")),i=fe(d.as("M")),j=fe(d.as("y")),k=e0,k[4]=c,yc.apply(null,k)}function Ac(a,b){return void 0===ge[a]?!1:void 0===b?ge[a]:(ge[a]=b,!0)}function Bc(a){var b=this.localeData(),c=zc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function Cc(){var a=he(this.years()),b=he(this.months()),c=he(this.days()),d=he(this.hours()),e=he(this.minutes()),f=he(this.seconds()+this.milliseconds()/1e3),g=this.asSeconds();return g?(0>g?"-":"")+"P"+(a?a+"Y":"")+(b?b+"M":"")+(c?c+"D":"")+(d||e||f?"T":"")+(d?d+"H":"")+(e?e+"M":"")+(f?f+"S":""):"P0D"}var Dc,Ec,Fc=a.momentProperties=[],Gc=!1,Hc={},Ic={},Jc=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g,Kc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Lc={},Mc={},Nc=/\d/,Oc=/\d\d/,Pc=/\d{3}/,Qc=/\d{4}/,Rc=/[+-]?\d{6}/,Sc=/\d\d?/,Tc=/\d{1,3}/,Uc=/\d{1,4}/,Vc=/[+-]?\d{1,6}/,Wc=/\d+/,Xc=/[+-]?\d+/,Yc=/Z|[+-]\d\d:?\d\d/gi,Zc=/[+-]?\d+(\.\d{1,3})?/,$c=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,_c={},ad={},bd=0,cd=1,dd=2,ed=3,fd=4,gd=5,hd=6;G("M",["MM",2],"Mo",function(){return this.month()+1}),G("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),G("MMMM",0,0,function(a){return this.localeData().months(this,a)}),y("month","M"),L("M",Sc),L("MM",Sc,Oc),L("MMM",$c),L("MMMM",$c),O(["M","MM"],function(a,b){b[cd]=p(a)-1}),O(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[cd]=e:j(c).invalidMonth=a});var id="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),jd="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),kd={};a.suppressDeprecationWarnings=!1;var ld=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,md=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],nd=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],od=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=$("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),G(0,["YY",2],0,function(){return this.year()%100}),G(0,["YYYY",4],0,"year"),G(0,["YYYYY",5],0,"year"),G(0,["YYYYYY",6,!0],0,"year"),y("year","y"),L("Y",Xc),L("YY",Sc,Oc),L("YYYY",Uc,Qc),L("YYYYY",Vc,Rc),L("YYYYYY",Vc,Rc),O(["YYYY","YYYYY","YYYYYY"],bd),O("YY",function(b,c){c[bd]=a.parseTwoDigitYear(b)}),a.parseTwoDigitYear=function(a){return p(a)+(p(a)>68?1900:2e3)};var pd=B("FullYear",!1);G("w",["ww",2],"wo","week"),G("W",["WW",2],"Wo","isoWeek"),y("week","w"),y("isoWeek","W"),L("w",Sc),L("ww",Sc,Oc),L("W",Sc),L("WW",Sc,Oc),P(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=p(a)});var qd={dow:0,doy:6};G("DDD",["DDDD",3],"DDDo","dayOfYear"),y("dayOfYear","DDD"),L("DDD",Tc),L("DDDD",Pc),O(["DDD","DDDD"],function(a,b,c){c._dayOfYear=p(a)}),a.ISO_8601=function(){};var rd=$("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=Aa.apply(null,arguments);return this>a?this:a}),sd=$("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Aa.apply(null,arguments);return a>this?this:a});Ga("Z",":"),Ga("ZZ",""),L("Z",Yc),L("ZZ",Yc),O(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ha(a)});var td=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var ud=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,vd=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Va.fn=Ea.prototype;var wd=Za(1,"add"),xd=Za(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var yd=$("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});G(0,["gg",2],0,function(){return this.weekYear()%100}),G(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ab("gggg","weekYear"),Ab("ggggg","weekYear"),Ab("GGGG","isoWeekYear"),Ab("GGGGG","isoWeekYear"),y("weekYear","gg"),y("isoWeekYear","GG"),L("G",Xc),L("g",Xc),L("GG",Sc,Oc),L("gg",Sc,Oc),L("GGGG",Uc,Qc),L("gggg",Uc,Qc),L("GGGGG",Vc,Rc),L("ggggg",Vc,Rc),P(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=p(a)}),P(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),G("Q",0,0,"quarter"),y("quarter","Q"),L("Q",Nc),O("Q",function(a,b){b[cd]=3*(p(a)-1)}),G("D",["DD",2],"Do","date"),y("date","D"),L("D",Sc),L("DD",Sc,Oc),L("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),O(["D","DD"],dd),O("Do",function(a,b){b[dd]=p(a.match(Sc)[0],10)});var zd=B("Date",!0);G("d",0,"do","day"),G("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),G("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),G("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),G("e",0,0,"weekday"),G("E",0,0,"isoWeekday"),y("day","d"),y("weekday","e"),y("isoWeekday","E"),L("d",Sc),L("e",Sc),L("E",Sc),L("dd",$c),L("ddd",$c),L("dddd",$c),P(["dd","ddd","dddd"],function(a,b,c){var d=c._locale.weekdaysParse(a);null!=d?b.d=d:j(c).invalidWeekday=a}),P(["d","e","E"],function(a,b,c,d){b[d]=p(a)});var Ad="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Bd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Cd="Su_Mo_Tu_We_Th_Fr_Sa".split("_");G("H",["HH",2],0,"hour"),G("h",["hh",2],0,function(){return this.hours()%12||12}),Pb("a",!0),Pb("A",!1),y("hour","h"),L("a",Qb),L("A",Qb),L("H",Sc),L("h",Sc),L("HH",Sc,Oc),L("hh",Sc,Oc),O(["H","HH"],ed),O(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),O(["h","hh"],function(a,b,c){b[ed]=p(a),j(c).bigHour=!0});var Dd=/[ap]\.?m?\.?/i,Ed=B("Hours",!0);G("m",["mm",2],0,"minute"),y("minute","m"),L("m",Sc),L("mm",Sc,Oc),O(["m","mm"],fd);var Fd=B("Minutes",!1);G("s",["ss",2],0,"second"),y("second","s"),L("s",Sc),L("ss",Sc,Oc),O(["s","ss"],gd);var Gd=B("Seconds",!1);G("S",0,0,function(){return~~(this.millisecond()/100)}),G(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Tb("SSS"),Tb("SSSS"),y("millisecond","ms"),L("S",Tc,Nc),L("SS",Tc,Oc),L("SSS",Tc,Pc),L("SSSS",Wc),O(["S","SS","SSS","SSSS"],function(a,b){b[hd]=p(1e3*("0."+a))});var Hd=B("Milliseconds",!1);G("z",0,0,"zoneAbbr"),G("zz",0,0,"zoneName");var Id=n.prototype;Id.add=wd,Id.calendar=_a,Id.clone=ab,Id.diff=gb,Id.endOf=sb,Id.format=kb,Id.from=lb,Id.fromNow=mb,Id.to=nb,Id.toNow=ob,Id.get=E,Id.invalidAt=zb,Id.isAfter=bb,Id.isBefore=cb,Id.isBetween=db,Id.isSame=eb,Id.isValid=xb,Id.lang=yd,Id.locale=pb,Id.localeData=qb,Id.max=sd,Id.min=rd,Id.parsingFlags=yb,Id.set=E,Id.startOf=rb,Id.subtract=xd,Id.toArray=wb,Id.toDate=vb,Id.toISOString=jb,Id.toJSON=jb,Id.toString=ib,Id.unix=ub,Id.valueOf=tb,Id.year=pd,Id.isLeapYear=ga,Id.weekYear=Cb,Id.isoWeekYear=Db,Id.quarter=Id.quarters=Gb,Id.month=W,Id.daysInMonth=X,Id.week=Id.weeks=la,Id.isoWeek=Id.isoWeeks=ma,Id.weeksInYear=Fb,Id.isoWeeksInYear=Eb,Id.date=zd,Id.day=Id.days=Mb,Id.weekday=Nb,Id.isoWeekday=Ob,Id.dayOfYear=oa,Id.hour=Id.hours=Ed,Id.minute=Id.minutes=Fd,Id.second=Id.seconds=Gd,Id.millisecond=Id.milliseconds=Hd,Id.utcOffset=Ka,Id.utc=Ma,Id.local=Na,Id.parseZone=Oa,Id.hasAlignedHourOffset=Pa,Id.isDST=Qa,Id.isDSTShifted=Ra,Id.isLocal=Sa,Id.isUtcOffset=Ta,Id.isUtc=Ua,Id.isUTC=Ua,Id.zoneAbbr=Ub,Id.zoneName=Vb,Id.dates=$("dates accessor is deprecated. Use date instead.",zd),Id.months=$("months accessor is deprecated. Use month instead",W),Id.years=$("years accessor is deprecated. Use year instead",pd),Id.zone=$("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",La);var Jd=Id,Kd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ld={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY LT",LLLL:"dddd, MMMM D, YYYY LT"},Md="Invalid date",Nd="%d",Od=/\d{1,2}/,Pd={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour", -hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Qd=r.prototype;Qd._calendar=Kd,Qd.calendar=Yb,Qd._longDateFormat=Ld,Qd.longDateFormat=Zb,Qd._invalidDate=Md,Qd.invalidDate=$b,Qd._ordinal=Nd,Qd.ordinal=_b,Qd._ordinalParse=Od,Qd.preparse=ac,Qd.postformat=ac,Qd._relativeTime=Pd,Qd.relativeTime=bc,Qd.pastFuture=cc,Qd.set=dc,Qd.months=S,Qd._months=id,Qd.monthsShort=T,Qd._monthsShort=jd,Qd.monthsParse=U,Qd.week=ia,Qd._week=qd,Qd.firstDayOfYear=ka,Qd.firstDayOfWeek=ja,Qd.weekdays=Ib,Qd._weekdays=Ad,Qd.weekdaysMin=Kb,Qd._weekdaysMin=Cd,Qd.weekdaysShort=Jb,Qd._weekdaysShort=Bd,Qd.weekdaysParse=Lb,Qd.isPM=Rb,Qd._meridiemParse=Dd,Qd.meridiem=Sb,v("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===p(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=$("moment.lang is deprecated. Use moment.locale instead.",v),a.langData=$("moment.langData is deprecated. Use moment.localeData instead.",x);var Rd=Math.abs,Sd=uc("ms"),Td=uc("s"),Ud=uc("m"),Vd=uc("h"),Wd=uc("d"),Xd=uc("w"),Yd=uc("M"),Zd=uc("y"),$d=wc("milliseconds"),_d=wc("seconds"),ae=wc("minutes"),be=wc("hours"),ce=wc("days"),de=wc("months"),ee=wc("years"),fe=Math.round,ge={s:45,m:45,h:22,d:26,M:11},he=Math.abs,ie=Ea.prototype;ie.abs=lc,ie.add=nc,ie.subtract=oc,ie.as=sc,ie.asMilliseconds=Sd,ie.asSeconds=Td,ie.asMinutes=Ud,ie.asHours=Vd,ie.asDays=Wd,ie.asWeeks=Xd,ie.asMonths=Yd,ie.asYears=Zd,ie.valueOf=tc,ie._bubble=pc,ie.get=vc,ie.milliseconds=$d,ie.seconds=_d,ie.minutes=ae,ie.hours=be,ie.days=ce,ie.weeks=xc,ie.months=de,ie.years=ee,ie.humanize=Bc,ie.toISOString=Cc,ie.toString=Cc,ie.toJSON=Cc,ie.locale=pb,ie.localeData=qb,ie.toIsoString=$("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Cc),ie.lang=yd,G("X",0,0,"unix"),G("x",0,0,"valueOf"),L("x",Xc),L("X",Zc),O("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),O("x",function(a,b,c){c._d=new Date(p(a))}),a.version="2.10.3",b(Aa),a.fn=Jd,a.min=Ca,a.max=Da,a.utc=h,a.unix=Wb,a.months=gc,a.isDate=d,a.locale=v,a.invalid=l,a.duration=Va,a.isMoment=o,a.weekdays=ic,a.parseZone=Xb,a.localeData=x,a.isDuration=Fa,a.monthsShort=hc,a.weekdaysMin=kc,a.defineLocale=w,a.weekdaysShort=jc,a.normalizeUnits=z,a.relativeTimeThreshold=Ac;var je=a;return je}); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs deleted file mode 100644 index f1951c492..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.hbs +++ /dev/null @@ -1,138 +0,0 @@ -{{unit "cdmf.unit.lib.editable"}} -{{unit "cdmf.unit.lib.qrcode"}} -{{unit "cdmf.unit.device.type.qr-modal"}} - -{{#if deviceFound}} - {{#if isAuthorized}} - - {{#zone "device-thumbnail"}} - - {{/zone}} - - {{#zone "device-details-header"}} -

- {{device.owner}}'s {{device.name}} -

- - - - {{#if device.model}} -

{{device.vendor}} {{device.model}}

- {{/if}} -

Ownership - {{device.ownership}}

-

Device is - - {{#equal device.status "ACTIVE"}}Active{{/equal}} - {{#equal device.status "INACTIVE"}}Inactive{{/equal}} - {{#equal device.status "BLOCKED"}}Blocked{{/equal}} - {{#equal device.status "REMOVED"}}Removed{{/equal}} - {{#equal device.status "UNREACHABLE"}}Unreachable{{/equal}} - -

- {{/zone}} - - {{#zone "device-opetations"}} - {{#if device.isNotRemoved}} -
-
-

Device Operations

-
- {{unit "cdmf.unit.device.type.windows.operation-bar" device=device - backendApiUri=backendApiUri autoCompleteParams=autoCompleteParams}} -
- {{/if}} - {{/zone}} - - {{#zone "device-details"}} -
- {{#if device.deviceInfoAvailable}} - {{#if device.BatteryLevel}} -

{{device.BatteryLevel.value}}%

- {{/if}} - {{#if device.ramUsage}} -

{{device.ramUsage.value}} MB

- {{/if}} - {{#if device.internalMemory}} -

{{device.internalMemory.value}} GB -

- {{/if}} - {{else}} -

Battery, RAM and Storage related information are not - available yet.

- {{/if}} -
- {{/zone}} - - {{#zone "device-details-tab-injected"}} -
  • Location
  • -
  • Policy Compliance
  • - {{/zone}} - - {{#zone "device-view-tab-injected-conents"}} -
    - {{#if device.location}} -
    -
    -
    -
    -
    - {{unit "cdmf.unit.geo-dashboard" device=device noGeoFencing=false hideSearch=true}} - {{else}} -
    -

    - - The device location information is not available right now! Please refresh the page in a few minutes. - The location details will not be available if the device’s “Location Services setting” is disabled - or if Entgra IoT Server has not received the device’s location information from the device. -

    -
    -

    -

    -

    - {{/if}} -
    -
    -
    -
    -
    - - {{/zone}} - - - - {{else}} -

    - Permission Denied -

    -
    - You are not authorized to view specified device in the system. - {{/if}} -{{else}} -

    - Device not found -

    -
    - You have tried to access either a removed or non-existing device. -{{/if}} - -{{#zone "bottomJs"}} - {{#if isAuthorized}} - - - {{js "js/device-detail.js"}} - {{/if}} -{{/zone}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js deleted file mode 100644 index da372562f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.js +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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 onRequest(context) { - // var log = new Log("device-view.js"); - var deviceType = context["uriParams"]["deviceType"]; - var deviceId = request.getParameter("id"); - var owner = request.getParameter("owner"); - var deviceViewData = {}; - - if (deviceType && deviceId) { - var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"]; - var response = deviceModule.viewDevice(deviceType, deviceId, owner); - if (response["status"] === "success") { - deviceViewData["deviceFound"] = true; - deviceViewData["isAuthorized"] = true; - - var filteredDeviceData = response["content"]; - - // creating deviceView information model from filtered device data - var viewModel = {}; - var deviceInfoServiceAPI = devicemgtProps["deviceInfoServiceAPI"]; - var deviceLocationServiceAPI = devicemgtProps["deviceLocationServiceAPI"]; - - if (deviceInfoServiceAPI){ - viewModel["deviceInfoServiceAPI"] = deviceInfoServiceAPI.replace("%device-type%", deviceType) - } - if (deviceLocationServiceAPI){ - viewModel['deviceLocationServiceAPI'] = deviceLocationServiceAPI.replace("%device-type%", deviceType) - } - if (filteredDeviceData["type"]) { - viewModel["type"] = filteredDeviceData["type"]; - viewModel.isNotWindows = true; - } - if (filteredDeviceData["deviceIdentifier"]) { - viewModel["deviceIdentifier"] = filteredDeviceData["deviceIdentifier"]; - } - if (filteredDeviceData["name"]) { - viewModel["name"] = filteredDeviceData["name"]; - } - if (filteredDeviceData["enrolmentInfo"]) { - if (filteredDeviceData["enrolmentInfo"]["status"]) { - viewModel["status"] = filteredDeviceData["enrolmentInfo"]["status"]; - viewModel.isActive = false ; - viewModel.isNotRemoved = true; - if (filteredDeviceData["enrolmentInfo"]["status"]== "ACTIVE") { - viewModel.isActive = true ; - } - if (filteredDeviceData["enrolmentInfo"]["status"]== "REMOVED") { - viewModel.isNotRemoved = false ; - } - } - if (filteredDeviceData["enrolmentInfo"]["owner"]) { - viewModel["owner"] = filteredDeviceData["enrolmentInfo"]["owner"]; - } - if (filteredDeviceData["enrolmentInfo"]["ownership"]) { - viewModel["ownership"] = filteredDeviceData["enrolmentInfo"]["ownership"]; - } - } - if (filteredDeviceData["latestDeviceInfo"]) { - viewModel["deviceInfoAvailable"] = true; - if (filteredDeviceData["latestDeviceInfo"]["osBuildDate"]) { - if (filteredDeviceData["latestDeviceInfo"]["osBuildDate"] != "0") { - viewModel["osBuildDate"] = new Date(filteredDeviceData["latestDeviceInfo"]["osBuildDate"] * 1000); - } - } - if (filteredDeviceData["latestDeviceInfo"]["location"]["latitude"] && - filteredDeviceData["latestDeviceInfo"]["location"]["longitude"]) { - viewModel["location"] = {}; - viewModel["location"]["latitude"] = filteredDeviceData["latestDeviceInfo"]["location"]["latitude"]; - viewModel["location"]["longitude"] = filteredDeviceData["latestDeviceInfo"]["location"]["longitude"]; - viewModel["location"]["updatedTime"] = filteredDeviceData["latestDeviceInfo"]["location"]["updatedTime"]; - } - if (filteredDeviceData["latestDeviceInfo"]["vendor"] && filteredDeviceData["latestDeviceInfo"]["deviceModel"]) { - viewModel["vendor"] = filteredDeviceData["latestDeviceInfo"]["vendor"]; - viewModel["model"] = filteredDeviceData["latestDeviceInfo"]["deviceModel"]; - } - if (filteredDeviceData["latestDeviceInfo"]["updatedTime"]) { - viewModel["lastUpdatedTime"] = filteredDeviceData["latestDeviceInfo"]["updatedTime"]. - substr(0, filteredDeviceData["latestDeviceInfo"]["updatedTime"].indexOf("+")); - } - viewModel["BatteryLevel"] = {}; - viewModel["BatteryLevel"]["value"] = filteredDeviceData["latestDeviceInfo"]["batteryLevel"]; - - viewModel["ramUsage"] = {}; - viewModel["ramUsage"]["value"] = (filteredDeviceData["latestDeviceInfo"]["availableRAMMemory"]); - - viewModel["internalMemory"] = {}; - viewModel["internalMemory"]["value"] = replaceNaNVal(Math.round((filteredDeviceData["latestDeviceInfo"]["internalAvailableMemory"]) / 1024)); - - } - if (!filteredDeviceData["initialDeviceInfo"] && !filteredDeviceData["latestDeviceInfo"]) { - viewModel["deviceInfoAvailable"] = false; - } - viewModel.locationHistory = stringify(filteredDeviceData["locationHistory"]); - deviceViewData["device"] = viewModel; - } else if (response["status"] == "unauthorized") { - deviceViewData["deviceFound"] = true; - deviceViewData["isAuthorized"] = false; - } else if (response["status"] == "notFound") { - deviceViewData["deviceFound"] = false; - } - } else { - deviceViewData["deviceFound"] = false; - } - - var autoCompleteParams = [ - {"name" : "deviceId", "value" : deviceId} - ]; - - var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; - var permissions = userModule.getUIPermissions(); - deviceViewData["autoCompleteParams"] = autoCompleteParams; - deviceViewData["permissions"] = permissions; - return deviceViewData; - - function replaceNaNVal(val) { - if (isNaN(val)) { - return "N/A"; - } - return val; - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json deleted file mode 100644 index 688e93980..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/device-view.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/TemperatureController.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/TemperatureController.png deleted file mode 100755 index e16b48d8eefcac064473f94464964b77fa41e23b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234616 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'+ - '

    Copied '+lines+' row'+plural+' to the clipboard.

    ', - 1500 - ); - } - } ), - - "pdf": $.extend( {}, TableTools.buttonBase, { - "sAction": "flash_pdf", - "sNewLine": "\n", - "sFileName": "*.pdf", - "sButtonClass": "DTTT_button_pdf", - "sButtonText": "PDF", - "sPdfOrientation": "portrait", - "sPdfSize": "A4", - "sPdfMessage": "", - "fnClick": function( nButton, oConfig, flash ) { - this.fnSetText( flash, - "title:"+ this.fnGetTitle(oConfig) +"\n"+ - "message:"+ oConfig.sPdfMessage +"\n"+ - "colWidth:"+ this.fnCalcColRatios(oConfig) +"\n"+ - "orientation:"+ oConfig.sPdfOrientation +"\n"+ - "size:"+ oConfig.sPdfSize +"\n"+ - "--/TableToolsOpts--\n" + - this.fnGetTableData(oConfig) - ); - } - } ), - - "print": $.extend( {}, TableTools.buttonBase, { - "sInfo": "
    Print view

    Please use your browser's print function to "+ - "print this table. Press escape when finished.

    ", - "sMessage": null, - "bShowAll": true, - "sToolTip": "View print view", - "sButtonClass": "DTTT_button_print", - "sButtonText": "Print", - "fnClick": function ( nButton, oConfig ) { - this.fnPrint( true, oConfig ); - } - } ), - - "text": $.extend( {}, TableTools.buttonBase ), - - "select": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Select button", - "fnSelect": function( nButton, oConfig ) { - if ( this.fnGetSelected().length !== 0 ) { - $(nButton).removeClass( this.classes.buttons.disabled ); - } else { - $(nButton).addClass( this.classes.buttons.disabled ); - } - }, - "fnInit": function( nButton, oConfig ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } - } ), - - "select_single": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Select button", - "fnSelect": function( nButton, oConfig ) { - var iSelected = this.fnGetSelected().length; - if ( iSelected == 1 ) { - $(nButton).removeClass( this.classes.buttons.disabled ); - } else { - $(nButton).addClass( this.classes.buttons.disabled ); - } - }, - "fnInit": function( nButton, oConfig ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } - } ), - - "select_all": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Select all", - "fnClick": function( nButton, oConfig ) { - this.fnSelectAll(); - }, - "fnSelect": function( nButton, oConfig ) { - if ( this.fnGetSelected().length == this.s.dt.fnRecordsDisplay() ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } else { - $(nButton).removeClass( this.classes.buttons.disabled ); - } - } - } ), - - "select_none": $.extend( {}, TableTools.buttonBase, { - "sButtonText": "Deselect all", - "fnClick": function( nButton, oConfig ) { - this.fnSelectNone(); - }, - "fnSelect": function( nButton, oConfig ) { - if ( this.fnGetSelected().length !== 0 ) { - $(nButton).removeClass( this.classes.buttons.disabled ); - } else { - $(nButton).addClass( this.classes.buttons.disabled ); - } - }, - "fnInit": function( nButton, oConfig ) { - $(nButton).addClass( this.classes.buttons.disabled ); - } - } ), - - "ajax": $.extend( {}, TableTools.buttonBase, { - "sAjaxUrl": "/xhr.php", - "sButtonText": "Ajax button", - "fnClick": function( nButton, oConfig ) { - var sData = this.fnGetTableData(oConfig); - $.ajax( { - "url": oConfig.sAjaxUrl, - "data": [ - { "name": "tableData", "value": sData } - ], - "success": oConfig.fnAjaxComplete, - "dataType": "json", - "type": "POST", - "cache": false, - "error": function () { - alert( "Error detected when sending table data to server" ); - } - } ); - }, - "fnAjaxComplete": function( json ) { - alert( 'Ajax complete' ); - } - } ), - - "div": $.extend( {}, TableTools.buttonBase, { - "sAction": "div", - "sTag": "div", - "sButtonClass": "DTTT_nonbutton", - "sButtonText": "Text button" - } ), - - "collection": $.extend( {}, TableTools.buttonBase, { - "sAction": "collection", - "sButtonClass": "DTTT_button_collection", - "sButtonText": "Collection", - "fnClick": function( nButton, oConfig ) { - this._fnCollectionShow(nButton, oConfig); - } - } ) -}; -/* - * on* callback parameters: - * 1. node - button element - * 2. object - configuration object for this button - * 3. object - ZeroClipboard reference (flash button only) - * 4. string - Returned string from Flash (flash button only - and only on 'complete') - */ - -// Alias to match the other plug-ins styling -TableTools.buttons = TableTools.BUTTONS; - - -/** - * @namespace Classes used by TableTools - allows the styles to be override easily. - * Note that when TableTools initialises it will take a copy of the classes object - * and will use its internal copy for the remainder of its run time. - */ -TableTools.classes = { - "container": "DTTT_container", - "buttons": { - "normal": "DTTT_button", - "disabled": "DTTT_disabled" - }, - "collection": { - "container": "DTTT_collection", - "background": "DTTT_collection_background", - "buttons": { - "normal": "DTTT_button", - "disabled": "DTTT_disabled" - } - }, - "select": { - "table": "DTTT_selectable", - "row": "DTTT_selected selected" - }, - "print": { - "body": "DTTT_Print", - "info": "DTTT_print_info", - "message": "DTTT_PrintMessage" - } -}; - - -/** - * @namespace ThemeRoller classes - built in for compatibility with DataTables' - * bJQueryUI option. - */ -TableTools.classes_themeroller = { - "container": "DTTT_container ui-buttonset ui-buttonset-multi", - "buttons": { - "normal": "DTTT_button ui-button ui-state-default" - }, - "collection": { - "container": "DTTT_collection ui-buttonset ui-buttonset-multi" - } -}; - - -/** - * @namespace TableTools default settings for initialisation - */ -TableTools.DEFAULTS = { - "sSwfPath": "../swf/copy_csv_xls_pdf.swf", - "sRowSelect": "none", - "sRowSelector": "tr", - "sSelectedClass": null, - "fnPreRowSelect": null, - "fnRowSelected": null, - "fnRowDeselected": null, - "aButtons": [ "copy", "csv", "xls", "pdf", "print" ], - "oTags": { - "container": "div", - "button": "a", // We really want to use buttons here, but Firefox and IE ignore the - // click on the Flash element in the button (but not mouse[in|out]). - "liner": "span", - "collection": { - "container": "div", - "button": "a", - "liner": "span" - } - } -}; - -// Alias to match the other plug-ins -TableTools.defaults = TableTools.DEFAULTS; - - -/** - * Name of this class - * @constant CLASS - * @type String - * @default TableTools - */ -TableTools.prototype.CLASS = "TableTools"; - - -/** - * TableTools version - * @constant VERSION - * @type String - * @default See code - */ -TableTools.version = "2.2.4"; - - - -// DataTables 1.10 API -// -// This will be extended in a big way in in TableTools 3 to provide API methods -// such as rows().select() and rows.selected() etc, but for the moment the -// tabletools() method simply returns the instance. - -if ( $.fn.dataTable.Api ) { - $.fn.dataTable.Api.register( 'tabletools()', function () { - var tt = null; - - if ( this.context.length > 0 ) { - tt = TableTools.fnGetInstance( this.context[0].nTable ); - } - - return tt; - } ); -} - - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Initialisation - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Register a new feature with DataTables - */ -if ( typeof $.fn.dataTable == "function" && - typeof $.fn.dataTableExt.fnVersionCheck == "function" && - $.fn.dataTableExt.fnVersionCheck('1.9.0') ) -{ - $.fn.dataTableExt.aoFeatures.push( { - "fnInit": function( oDTSettings ) { - var init = oDTSettings.oInit; - var opts = init ? - init.tableTools || init.oTableTools || {} : - {}; - - return new TableTools( oDTSettings.oInstance, opts ).dom.container; - }, - "cFeature": "T", - "sFeature": "TableTools" - } ); -} -else -{ - alert( "Warning: TableTools requires DataTables 1.9.0 or newer - www.datatables.net/download"); -} - -$.fn.DataTable.TableTools = TableTools; - -})(jQuery, window, document); - -/* - * Register a new feature with DataTables - */ -if ( typeof $.fn.dataTable == "function" && - typeof $.fn.dataTableExt.fnVersionCheck == "function" && - $.fn.dataTableExt.fnVersionCheck('1.9.0') ) -{ - $.fn.dataTableExt.aoFeatures.push( { - "fnInit": function( oDTSettings ) { - var oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ? - oDTSettings.oInit.oTableTools : {}; - - var oTT = new TableTools( oDTSettings.oInstance, oOpts ); - TableTools._aInstances.push( oTT ); - - return oTT.dom.container; - }, - "cFeature": "T", - "sFeature": "TableTools" - } ); -} -else -{ - alert( "Warning: TableTools 2 requires DataTables 1.9.0 or newer - www.datatables.net/download"); -} - - -$.fn.dataTable.TableTools = TableTools; -$.fn.DataTable.TableTools = TableTools; - - -return TableTools; -}; // /factory - - -// Define as an AMD module if possible -if ( typeof define === 'function' && define.amd ) { - define( ['jquery', 'datatables'], factory ); -} -else if ( typeof exports === 'object' ) { - // Node/CommonJS - factory( require('jquery'), require('datatables') ); -} -else if ( jQuery && !jQuery.fn.dataTable.TableTools ) { - // Otherwise simply initialise as normal, stopping multiple evaluation - factory( jQuery, jQuery.fn.dataTable ); -} - - -})(window, document); - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/js/dataTables.tableTools.min.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/js/dataTables.tableTools.min.js deleted file mode 100644 index e8c87056b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/js/dataTables.tableTools.min.js +++ /dev/null @@ -1,70 +0,0 @@ -/*! - TableTools 2.2.4 - 2009-2015 SpryMedia Ltd - datatables.net/license - - ZeroClipboard 1.0.4 - Author: Joseph Huckaby - MIT licensed -*/ -var TableTools; -(function(n,k,q){var p=function(m,p){var g={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=k.getElementById(a));a.addClass||(a.hide=function(){this.style.display="none"},a.show=function(){this.style.display=""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(RegExp("\\s*"+a+ -"\\s*"))});return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,c){(a=this.clients[a])&&a.receiveEvent(b,c)},register:function(a,b){this.clients[a]=b},getDOMObjectPosition:function(a){var b={left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};""!==a.style.width&&(b.width=a.style.width.replace("px",""));""!==a.style.height&&(b.height=a.style.height.replace("px",""));for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b}, -Client:function(a){this.handlers={};this.id=g.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;g.register(this.id,this);a&&this.glue(a)}};g.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"",action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,glue:function(a,b){this.domElement=g.$(a);var c=99;this.domElement.style.zIndex&&(c=parseInt(this.domElement.style.zIndex,10)+1);var d=g.getDOMObjectPosition(this.domElement);this.div=k.createElement("div");var f= -this.div.style;f.position="absolute";f.left="0px";f.top="0px";f.width=d.width+"px";f.height=d.height+"px";f.zIndex=c;"undefined"!=typeof b&&""!==b&&(this.div.title=b);0!==d.width&&0!==d.height&&(this.sized=!0);this.domElement&&(this.domElement.appendChild(this.div),this.div.innerHTML=this.getHTML(d.width,d.height).replace(/&/g,"&"))},positionElement:function(){var a=g.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.width=a.width+"px";b.height=a.height+"px";0!==a.width&& -0!==a.height&&(this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=a.height)},getHTML:function(a,b){var c="",d="id="+this.id+"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/))var f=location.href.match(/^https/i)?"https://":"http://",c=c+('');else c+='';return c},hide:function(){this.div&&(this.div.style.left="-2000px")},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=k.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.div=this.domElement=null}},reposition:function(a){a&&((this.domElement=g.$(a))||this.hide());if(this.domElement&&this.div){var a=g.getDOMObjectPosition(this.domElement),b=this.div.style;b.left=""+a.left+ -"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setCharSet:function(a){this.charSet=a;this.ready&&this.movie.setCharSet(a)},setBomInc:function(a){this.incBom=a;this.ready&&this.movie.setBomInc(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},setAction:function(a){this.action= -a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){var c,a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=k.getElementById(this.movieId);if(!this.movie){c=this;setTimeout(function(){c.receiveEvent("load", -null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=!0;return}this.ready=!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setCharSet(this.charSet);this.movie.setBomInc(this.incBom);this.movie.setHandCursor(this.handCursorEnabled);break;case "mouseover":this.domElement&&this.cssEffects&& -this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")&&(this.domElement.removeClass("active"),this.recoverActive=!0));break;case "mousedown":this.domElement&&this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":this.domElement&&this.cssEffects&&(this.domElement.removeClass("active"),this.recoverActive=!1)}if(this.handlers[a])for(var d=0,f=this.handlers[a].length;d< -f;d++){var e=this.handlers[a][d];if("function"==typeof e)e(this,b);else if("object"==typeof e&&2==e.length)e[0][e[1]](this,b);else if("string"==typeof e)n[e](this,b)}}};n.ZeroClipboard_TableTools=g;var e=jQuery;TableTools=function(a,b){!this instanceof TableTools&&alert("Warning: TableTools must be initialised with the keyword 'new'");this.s={that:this,dt:e.fn.dataTable.Api?(new e.fn.dataTable.Api(a)).settings()[0]:a.fnSettings(),print:{saveStart:-1,saveLength:-1,saveScroll:-1,funcEnd:function(){}}, -buttonCounter:0,select:{type:"",selected:[],preRowSelect:null,postSelected:null,postDeselected:null,all:!1,selectedClass:""},custom:{},swfPath:"",buttonSet:[],master:!1,tags:{}};this.dom={container:null,table:null,print:{hidden:[],message:null},collection:{collection:null,background:null}};this.classes=e.extend(!0,{},TableTools.classes);this.s.dt.bJUI&&e.extend(!0,this.classes,TableTools.classes_themeroller);this.fnSettings=function(){return this.s};"undefined"==typeof b&&(b={});TableTools._aInstances.push(this); -this._fnConstruct(b);return this};TableTools.prototype={fnGetSelected:function(a){var b=[],c=this.s.dt.aoData,d=this.s.dt.aiDisplay,f;if(a){a=0;for(f=d.length;a"¡".toString().length?b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""):b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g,"")},fnCalcColRatios:function(a){var b=this.s.dt.aoColumns,a=this._fnColumnTargets(a.mColumns),c=[],d=0,f=0,e,i;e=0;for(i=a.length;e").addClass(this.classes.print.info).html(a).appendTo("body");setTimeout(function(){c.fadeOut("normal",function(){c.remove()})},b)},fnContainer:function(){return this.dom.container},_fnConstruct:function(a){var b=this;this._fnCustomiseSettings(a);this.dom.container=k.createElement(this.s.tags.container);this.dom.container.className=this.classes.container; -"none"!=this.s.select.type&&this._fnRowSelectConfig();this._fnButtonDefinations(this.s.buttonSet,this.dom.container);this.s.dt.aoDestroyCallback.push({sName:"TableTools",fn:function(){e(b.s.dt.nTBody).off("click.DTTT_Select",b.s.custom.sRowSelector).off("mousedown.DTTT_Select","tr").off("mouseup.DTTT_Select","tr");e(b.dom.container).empty();var a=e.inArray(b,TableTools._aInstances);-1!==a&&TableTools._aInstances.splice(a,1)}})},_fnCustomiseSettings:function(a){"undefined"==typeof this.s.dt._TableToolsInit&& -(this.s.master=!0,this.s.dt._TableToolsInit=!0);this.dom.table=this.s.dt.nTable;this.s.custom=e.extend({},TableTools.DEFAULTS,a);this.s.swfPath=this.s.custom.sSwfPath;"undefined"!=typeof g&&(g.moviePath=this.s.swfPath);this.s.select.type=this.s.custom.sRowSelect;this.s.select.preRowSelect=this.s.custom.fnPreRowSelect;this.s.select.postSelected=this.s.custom.fnRowSelected;this.s.select.postDeselected=this.s.custom.fnRowDeselected;this.s.custom.sSelectedClass&&(this.classes.select.row=this.s.custom.sSelectedClass); -this.s.tags=this.s.custom.oTags;this.s.buttonSet=this.s.custom.aButtons},_fnButtonDefinations:function(a,b){for(var c,d=0,f=a.length;dh?i:h)+"px";l.style.width=(o>g?o:g)+"px";l.className=this.classes.collection.background;e(l).css("opacity",0);k.body.appendChild(l);k.body.appendChild(f);i=e(f).outerWidth();o=e(f).outerHeight();j+i>g&&(f.style.left=g-i+"px");d+o>h&&(f.style.top=d-o-e(a).outerHeight()+"px");this.dom.collection.collection=f;this.dom.collection.background=l;setTimeout(function(){e(f).animate({opacity:1},500);e(l).animate({opacity:0.25}, -500)},10);this.fnResizeButtons();e(l).click(function(){c._fnCollectionHide.call(c,null,null)})},_fnCollectionHide:function(a,b){!(null!==b&&"collection"==b.sExtends)&&null!==this.dom.collection.collection&&(e(this.dom.collection.collection).animate({opacity:0},500,function(){this.style.display="none"}),e(this.dom.collection.background).animate({opacity:0},500,function(){this.parentNode.removeChild(this)}),this.dom.collection.collection=null,this.dom.collection.background=null)},_fnRowSelectConfig:function(){if(this.s.master){var a= -this,b=this.s.dt;e(b.nTable).addClass(this.classes.select.table);"os"===this.s.select.type&&(e(b.nTBody).on("mousedown.DTTT_Select","tr",function(a){if(a.shiftKey)e(b.nTBody).css("-moz-user-select","none").one("selectstart.DTTT_Select","tr",function(){return!1})}),e(b.nTBody).on("mouseup.DTTT_Select","tr",function(){e(b.nTBody).css("-moz-user-select","")}));e(b.nTBody).on("click.DTTT_Select",this.s.custom.sRowSelector,function(c){var d=this.nodeName.toLowerCase()==="tr"?this:e(this).parents("tr")[0], -f=a.s.select,j=a.s.dt.oInstance.fnGetPosition(d);if(d.parentNode==b.nTBody&&b.oInstance.fnGetData(d)!==null){if(f.type=="os")if(c.ctrlKey||c.metaKey)a.fnIsSelected(d)?a._fnRowDeselect(d,c):a._fnRowSelect(d,c);else if(c.shiftKey){var i=a.s.dt.aiDisplay.slice(),h=e.inArray(f.lastRow,i),o=e.inArray(j,i);if(a.fnGetSelected().length===0||h===-1)i.splice(e.inArray(j,i)+1,i.length);else{if(h>o)var g=o,o=h,h=g;i.splice(o+1,i.length);i.splice(0,h)}if(a.fnIsSelected(d)){i.splice(e.inArray(j,i),1);a._fnRowDeselect(i, -c)}else a._fnRowSelect(i,c)}else if(a.fnIsSelected(d)&&a.fnGetSelected().length===1)a._fnRowDeselect(d,c);else{a.fnSelectNone();a._fnRowSelect(d,c)}else if(a.fnIsSelected(d))a._fnRowDeselect(d,c);else if(f.type=="single"){a.fnSelectNone();a._fnRowSelect(d,c)}else f.type=="multi"&&a._fnRowSelect(d,c);f.lastRow=j}});b.oApi._fnCallbackReg(b,"aoRowCreatedCallback",function(c,d,f){b.aoData[f]._DTTT_selected&&e(c).addClass(a.classes.select.row)},"TableTools-SelectAll")}},_fnRowSelect:function(a,b){var c= -this._fnSelectData(a),d=[],f,j;f=0;for(j=c.length;f/g,"").replace(/^\s+|\s+$/g,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));i.push(j.join(a.sFieldSeperator))}d=!0;var m;f=this.fnGetSelectedIndexes();m=(d="none"!==this.s.select.type&&d&&0!==f.length)?f:p.Api?(new p.Api(g)).rows(a.oSelectorOpts).indexes().flatten().toArray():g.oInstance.$("tr",a.oSelectorOpts).map(function(a,b){return g.oInstance.fnGetPosition(b)}).get(); -d=0;for(f=m.length;d]+)).*?>/gi,"$1$2$3"),h=h.replace(/<.*?>/g,"")):h+="",h=h.replace(/^\s+/,"").replace(/\s+$/,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));i.push(j.join(a.sFieldSeperator));a.bOpenRows&& -(b=e.grep(g.aoOpenRows,function(a){return a.nParent===k}),1===b.length&&(h=this._fnBoundData(e("td",b[0].nTr).html(),a.sFieldBoundary,l),i.push(h)))}if(a.bFooter&&null!==g.nTFoot){j=[];b=0;for(c=g.aoColumns.length;b/g,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));i.push(j.join(a.sFieldSeperator))}return i.join(this._fnNewline(a))},_fnBoundData:function(a,b,c){return""=== -b?a:b+a.replace(c,b+b)+b},_fnChunkData:function(a,b){for(var c=[],d=a.length,f=0;f").addClass(this.classes.print.message).html(a.sMessage).prependTo("body");this.s.print.saveScroll=e(n).scrollTop();n.scrollTo(0,0);e(k).bind("keydown.DTTT",function(a){if(a.keyCode==27){a.preventDefault();b._fnPrintEnd.call(b,a)}})},_fnPrintEnd:function(){var a=this.s.dt,b=this.s.print;this._fnPrintShowNodes();if(""!==a.oScroll.sX||""!==a.oScroll.sY)e(this.s.dt.nTable).unbind("draw.DTTT_Print"), -this._fnPrintScrollEnd();n.scrollTo(0,b.saveScroll);e("div."+this.classes.print.message).remove();e(k.body).removeClass("DTTT_Print");a._iDisplayStart=b.saveStart;a._iDisplayLength=b.saveLength;a.oApi._fnCalculateEnd&&a.oApi._fnCalculateEnd(a);a.oApi._fnDraw(a);e(k).unbind("keydown.DTTT")},_fnPrintScrollStart:function(){var a=this.s.dt;a.nScrollHead.getElementsByTagName("div")[0].getElementsByTagName("table");var b=a.nTable.parentNode,c;c=a.nTable.getElementsByTagName("thead");0Table copied

    Copied "+a+" row"+(1==a?"":"s")+" to the clipboard.

    ",1500)}}),pdf:e.extend({},TableTools.buttonBase,{sAction:"flash_pdf",sNewLine:"\n",sFileName:"*.pdf",sButtonClass:"DTTT_button_pdf",sButtonText:"PDF",sPdfOrientation:"portrait",sPdfSize:"A4",sPdfMessage:"",fnClick:function(a,b,c){this.fnSetText(c,"title:"+this.fnGetTitle(b)+"\nmessage:"+b.sPdfMessage+"\ncolWidth:"+this.fnCalcColRatios(b)+ -"\norientation:"+b.sPdfOrientation+"\nsize:"+b.sPdfSize+"\n--/TableToolsOpts--\n"+this.fnGetTableData(b))}}),print:e.extend({},TableTools.buttonBase,{sInfo:"
    Print view

    Please use your browser's print function to print this table. Press escape when finished.

    ",sMessage:null,bShowAll:!0,sToolTip:"View print view",sButtonClass:"DTTT_button_print",sButtonText:"Print",fnClick:function(a,b){this.fnPrint(!0,b)}}),text:e.extend({},TableTools.buttonBase),select:e.extend({},TableTools.buttonBase, -{sButtonText:"Select button",fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),select_single:e.extend({},TableTools.buttonBase,{sButtonText:"Select button",fnSelect:function(a){1==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}), -select_all:e.extend({},TableTools.buttonBase,{sButtonText:"Select all",fnClick:function(){this.fnSelectAll()},fnSelect:function(a){this.fnGetSelected().length==this.s.dt.fnRecordsDisplay()?e(a).addClass(this.classes.buttons.disabled):e(a).removeClass(this.classes.buttons.disabled)}}),select_none:e.extend({},TableTools.buttonBase,{sButtonText:"Deselect all",fnClick:function(){this.fnSelectNone()},fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)}, -fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),ajax:e.extend({},TableTools.buttonBase,{sAjaxUrl:"/xhr.php",sButtonText:"Ajax button",fnClick:function(a,b){var c=this.fnGetTableData(b);e.ajax({url:b.sAjaxUrl,data:[{name:"tableData",value:c}],success:b.fnAjaxComplete,dataType:"json",type:"POST",cache:!1,error:function(){alert("Error detected when sending table data to server")}})},fnAjaxComplete:function(){alert("Ajax complete")}}),div:e.extend({},TableTools.buttonBase,{sAction:"div", -sTag:"div",sButtonClass:"DTTT_nonbutton",sButtonText:"Text button"}),collection:e.extend({},TableTools.buttonBase,{sAction:"collection",sButtonClass:"DTTT_button_collection",sButtonText:"Collection",fnClick:function(a,b){this._fnCollectionShow(a,b)}})};TableTools.buttons=TableTools.BUTTONS;TableTools.classes={container:"DTTT_container",buttons:{normal:"DTTT_button",disabled:"DTTT_disabled"},collection:{container:"DTTT_collection",background:"DTTT_collection_background",buttons:{normal:"DTTT_button", -disabled:"DTTT_disabled"}},select:{table:"DTTT_selectable",row:"DTTT_selected selected"},print:{body:"DTTT_Print",info:"DTTT_print_info",message:"DTTT_PrintMessage"}};TableTools.classes_themeroller={container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}};TableTools.DEFAULTS={sSwfPath:"../swf/copy_csv_xls_pdf.swf",sRowSelect:"none",sRowSelector:"tr",sSelectedClass:null, -fnPreRowSelect:null,fnRowSelected:null,fnRowDeselected:null,aButtons:["copy","csv","xls","pdf","print"],oTags:{container:"div",button:"a",liner:"span",collection:{container:"div",button:"a",liner:"span"}}};TableTools.defaults=TableTools.DEFAULTS;TableTools.prototype.CLASS="TableTools";TableTools.version="2.2.4";e.fn.dataTable.Api&&e.fn.dataTable.Api.register("tabletools()",function(){var a=null;05xGClFvT5MU!W&$^JmdX&}|XGlY=uhW`PC-0=)^_HnhA-|5(nKa1SmYwaND z&X!8s+uOzM>qXbwEKT3OeY;eiDb37Gp~jTI>jc`)l;dB%HWxXlGGF(sZeY1ip7UDE z?FDzQUF&-_^bbzEJQ=YyNhs(h`rH?AnN3ghaq?-F@;tr_@2L}hw)dW^w!oQgQ z-J|Q+1B874m-Ve>r2eWtXP#TJt!~TJJcIl=Vx$P+DyFA(*fhzJA`#yFoFD?}KRqID zxt5WRYExueyr9WNK1q$hvz$$O&vk94Imrdj({@v_UN5k0U%9s%un5hZST+;u7?$6) zwOy&v^{jv;4Y#voNUdHFxQ?u&?i$+(k}b^6YuU7H_7DSAzv-%eEL>+f2$80Z% z@v6J+(1=>^Cj9_AD%;>=19jPoYcOT;*+OOQWo>Cq@ei?nUHx4@U>&)^^d1&t7ba8a z-`%dd9nEsoWmhwpx8#_v=(%p7+8=netMSIc9r#kc^@{0%U>O(tM^7`{7Axv*r?k+x zUYaSFZrgDMo%t!p6g|ooGs0^jC{4elD7;sZdjhm z3}*hQPvlKc>$WZ3S6Xb-a1p797-Z~*}`gJGSrp&dSmfr{mJ5ErBAM}^}%ZW=|edt*H>k%`_hwz zwMCJaPKolch5Jh#J1?}~ry}p%Sf%K&Aj1#DV`egsIXaUo^_A7-MRdeFKhZVJg|)Wj z=Pd^}gz~&==1;V79)*q@L&FVR$gbyHt#Kd6J;U_ zcgGoD<@ZJf%eD{SyQfYungH#%# z(g>ACDV(Bkn!*_h;}p(PI7i_;g-Lke{Ys}vql;W32< z1&n!}!V?NlDLkX_E2{pQ!V5aoq@Yn~QF)U>o5HKJpxB^v(6>XurKv6zeoIABXB~7bQ&PRQISM1sXq77ARads5{V>|QldXZ4^UZ2lH{mDNCH45L?-yw zOXMIO0T~>JA&c+JRB8a}F~|Xt27%BaAo4H}Wdw*i3M4fKBz+1<2EVbgXMhZh1Ie8Q zGI$Qi(0L%kxYP(x5y&V;BP)rp{0%}$K~*!&PYTzXO5xLd{ep;~a2%ZMgNftd=Y3E- z4i@@g62bJpAuKOxkK_s#mq?Xq>^(ygmi> zFCd~O$Ye8b-oXFO`j;X?CD3kd+(x2)n`<;@&96f9O#O}!Gk53V13fn{e4xLcPkf-~ z=S5D}b9_UBxe%H;MrfgCnfSolqQ0L3yF z)3A(q7Fk6AMU{~)Ks$xJ$^%OwADXGXw-J;&vfym`h)pA#Ibt)&W;v@MYpQ$N3<3km zgra^ImN%*os^m@er+v)KVrY&>S<4h!BU2cgIe@_q5wg#ht)0gLr0X>ympw$z9U|Ac za;BhE= zqKi1~n@hef<}P7&_TQNg_6o1x*1m;_gJB*|A1FX=S-Ah_#JiR_`u^ac0QU(Q5^$?i zxK-(aMBYe0g=TgL?}_~@|AP7o>|gm~JpC9=d-aE~k4D1@Nl|^ieDMCz5NTc9GnWEA z$$ju;uN=h2Kl3T~C5E=w5^Hq`-oHapdVoj96($Im4{{dqKXB;Xg!}`}E%Ep0wI#Na zqklR$;7gC-MI~Pj%ZxN9%gxnt^HI6^xZG@%n=<~Mk@L~hrkJFmVg8kU^6PsZk^caS Gw#hVg)?W(% diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/swf/copy_csv_xls_pdf.swf b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/TableTools/swf/copy_csv_xls_pdf.swf deleted file mode 100644 index 10f6d950f851157160e6385f5adeaf5be3aafeb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58846 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 NK-1vB{{!5-pq43jD?9)I diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.css deleted file mode 100644 index eec02ef59..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.css +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Table styles - */ -table.dataTable { - width: 100%; - margin: 0 auto; - clear: both; - border-collapse: separate; - border-spacing: 0; - /* - * Header and footer styles - */ - /* - * Body styles - */ -} -table.dataTable thead th, -table.dataTable tfoot th { - font-weight: bold; -} -table.dataTable thead th, -table.dataTable thead td { - padding: 10px 18px; - border-bottom: 1px solid #111; -} -table.dataTable thead th:active, -table.dataTable thead td:active { - outline: none; -} -table.dataTable tfoot th, -table.dataTable tfoot td { - padding: 10px 18px 6px 18px; - border-top: 1px solid #111; -} -table.dataTable thead .sorting, -table.dataTable thead .sorting_asc, -table.dataTable thead .sorting_desc { - cursor: pointer; - *cursor: hand; -} -table.dataTable thead .sorting, -table.dataTable thead .sorting_asc, -table.dataTable thead .sorting_desc, -table.dataTable thead .sorting_asc_disabled, -table.dataTable thead .sorting_desc_disabled { - background-repeat: no-repeat; - background-position: center right; -} -table.dataTable thead .sorting { - background-image: url("../images/sort_both.png"); -} -table.dataTable thead .sorting_asc { - background-image: url("../images/sort_asc.png"); -} -table.dataTable thead .sorting_desc { - background-image: url("../images/sort_desc.png"); -} -table.dataTable thead .sorting_asc_disabled { - background-image: url("../images/sort_asc_disabled.png"); -} -table.dataTable thead .sorting_desc_disabled { - background-image: url("../images/sort_desc_disabled.png"); -} -table.dataTable tbody tr { - background-color: #ffffff; -} -table.dataTable tbody tr.selected { - background-color: #B0BED9; -} -table.dataTable tbody th, -table.dataTable tbody td { - padding: 8px 10px; -} -table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { - border-top: 1px solid #ddd; -} -table.dataTable.row-border tbody tr:first-child th, -table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, -table.dataTable.display tbody tr:first-child td { - border-top: none; -} -table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; -} -table.dataTable.cell-border tbody tr th:first-child, -table.dataTable.cell-border tbody tr td:first-child { - border-left: 1px solid #ddd; -} -table.dataTable.cell-border tbody tr:first-child th, -table.dataTable.cell-border tbody tr:first-child td { - border-top: none; -} -table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { - background-color: #f9f9f9; -} -table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { - background-color: #abb9d3; -} -table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { - background-color: whitesmoke; -} -table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { - background-color: #a9b7d1; -} -table.dataTable.order-column tbody tr > .sorting_1, -table.dataTable.order-column tbody tr > .sorting_2, -table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, -table.dataTable.display tbody tr > .sorting_2, -table.dataTable.display tbody tr > .sorting_3 { - background-color: #f9f9f9; -} -table.dataTable.order-column tbody tr.selected > .sorting_1, -table.dataTable.order-column tbody tr.selected > .sorting_2, -table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, -table.dataTable.display tbody tr.selected > .sorting_2, -table.dataTable.display tbody tr.selected > .sorting_3 { - background-color: #acbad4; -} -table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { - background-color: #f1f1f1; -} -table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { - background-color: #f3f3f3; -} -table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { - background-color: whitesmoke; -} -table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { - background-color: #a6b3cd; -} -table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { - background-color: #a7b5ce; -} -table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { - background-color: #a9b6d0; -} -table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { - background-color: #f9f9f9; -} -table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { - background-color: #fbfbfb; -} -table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { - background-color: #fdfdfd; -} -table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { - background-color: #acbad4; -} -table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { - background-color: #adbbd6; -} -table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { - background-color: #afbdd8; -} -table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { - background-color: #eaeaea; -} -table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { - background-color: #ebebeb; -} -table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { - background-color: #eeeeee; -} -table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { - background-color: #a1aec7; -} -table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { - background-color: #a2afc8; -} -table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { - background-color: #a4b2cb; -} -table.dataTable.no-footer { - border-bottom: 1px solid #111; -} -table.dataTable.nowrap th, table.dataTable.nowrap td { - white-space: nowrap; -} -table.dataTable.compact thead th, -table.dataTable.compact thead td { - padding: 4px 17px 4px 4px; -} -table.dataTable.compact tfoot th, -table.dataTable.compact tfoot td { - padding: 4px; -} -table.dataTable.compact tbody th, -table.dataTable.compact tbody td { - padding: 4px; -} -table.dataTable th.dt-left, -table.dataTable td.dt-left { - text-align: left; -} -table.dataTable th.dt-center, -table.dataTable td.dt-center, -table.dataTable td.dataTables_empty { - text-align: center; -} -table.dataTable th.dt-right, -table.dataTable td.dt-right { - text-align: right; -} -table.dataTable th.dt-justify, -table.dataTable td.dt-justify { - text-align: justify; -} -table.dataTable th.dt-nowrap, -table.dataTable td.dt-nowrap { - white-space: nowrap; -} -table.dataTable thead th.dt-head-left, -table.dataTable thead td.dt-head-left, -table.dataTable tfoot th.dt-head-left, -table.dataTable tfoot td.dt-head-left { - text-align: left; -} -table.dataTable thead th.dt-head-center, -table.dataTable thead td.dt-head-center, -table.dataTable tfoot th.dt-head-center, -table.dataTable tfoot td.dt-head-center { - text-align: center; -} -table.dataTable thead th.dt-head-right, -table.dataTable thead td.dt-head-right, -table.dataTable tfoot th.dt-head-right, -table.dataTable tfoot td.dt-head-right { - text-align: right; -} -table.dataTable thead th.dt-head-justify, -table.dataTable thead td.dt-head-justify, -table.dataTable tfoot th.dt-head-justify, -table.dataTable tfoot td.dt-head-justify { - text-align: justify; -} -table.dataTable thead th.dt-head-nowrap, -table.dataTable thead td.dt-head-nowrap, -table.dataTable tfoot th.dt-head-nowrap, -table.dataTable tfoot td.dt-head-nowrap { - white-space: nowrap; -} -table.dataTable tbody th.dt-body-left, -table.dataTable tbody td.dt-body-left { - text-align: left; -} -table.dataTable tbody th.dt-body-center, -table.dataTable tbody td.dt-body-center { - text-align: center; -} -table.dataTable tbody th.dt-body-right, -table.dataTable tbody td.dt-body-right { - text-align: right; -} -table.dataTable tbody th.dt-body-justify, -table.dataTable tbody td.dt-body-justify { - text-align: justify; -} -table.dataTable tbody th.dt-body-nowrap, -table.dataTable tbody td.dt-body-nowrap { - white-space: nowrap; -} - -table.dataTable, -table.dataTable th, -table.dataTable td { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -/* - * Control feature layout - */ -.dataTables_wrapper { - position: relative; - clear: both; - *zoom: 1; - zoom: 1; -} -.dataTables_wrapper .dataTables_length { - float: left; -} -.dataTables_wrapper .dataTables_filter { - float: right; - text-align: right; -} -.dataTables_wrapper .dataTables_filter input { - margin-left: 0.5em; -} -.dataTables_wrapper .dataTables_info { - clear: both; - float: left; - padding-top: 0.755em; -} -.dataTables_wrapper .dataTables_paginate { - float: right; - text-align: right; - padding-top: 0.25em; -} -.dataTables_wrapper .dataTables_paginate .paginate_button { - box-sizing: border-box; - display: inline-block; - min-width: 1.5em; - padding: 0.5em 1em; - margin-left: 2px; - text-align: center; - text-decoration: none !important; - cursor: pointer; - *cursor: hand; - color: #333 !important; - border: 1px solid transparent; -} -.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { - color: #333 !important; - border: 1px solid #cacaca; - background-color: white; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); - /* Chrome10+,Safari5.1+ */ - background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); - /* FF3.6+ */ - background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); - /* IE10+ */ - background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); - /* Opera 11.10+ */ - background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); - /* W3C */ -} -.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { - cursor: default; - color: #666 !important; - border: 1px solid transparent; - background: transparent; - box-shadow: none; -} -.dataTables_wrapper .dataTables_paginate .paginate_button:hover { - color: white !important; - border: 1px solid #111; - background-color: #585858; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #585858 0%, #111 100%); - /* Chrome10+,Safari5.1+ */ - background: -moz-linear-gradient(top, #585858 0%, #111 100%); - /* FF3.6+ */ - background: -ms-linear-gradient(top, #585858 0%, #111 100%); - /* IE10+ */ - background: -o-linear-gradient(top, #585858 0%, #111 100%); - /* Opera 11.10+ */ - background: linear-gradient(to bottom, #585858 0%, #111 100%); - /* W3C */ -} -.dataTables_wrapper .dataTables_paginate .paginate_button:active { - outline: none; - background-color: #2b2b2b; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); - /* Chrome10+,Safari5.1+ */ - background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); - /* FF3.6+ */ - background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); - /* IE10+ */ - background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); - /* Opera 11.10+ */ - background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); - /* W3C */ - box-shadow: inset 0 0 3px #111; -} -.dataTables_wrapper .dataTables_paginate .ellipsis { - padding: 0 1em; -} -.dataTables_wrapper .dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 100%; - height: 40px; - margin-left: -50%; - margin-top: -25px; - padding-top: 20px; - text-align: center; - font-size: 1.2em; - background-color: white; - background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* Chrome10+,Safari5.1+ */ - background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* FF3.6+ */ - background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* IE10+ */ - background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* Opera 11.10+ */ - background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* W3C */ -} -.dataTables_wrapper .dataTables_length, -.dataTables_wrapper .dataTables_filter, -.dataTables_wrapper .dataTables_info, -.dataTables_wrapper .dataTables_processing, -.dataTables_wrapper .dataTables_paginate { - color: #333; -} -.dataTables_wrapper .dataTables_scroll { - clear: both; -} -.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { - *margin-top: -1px; - -webkit-overflow-scrolling: touch; -} -.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing, -.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing { - height: 0; - overflow: hidden; - margin: 0 !important; - padding: 0 !important; -} -.dataTables_wrapper.no-footer .dataTables_scrollBody { - border-bottom: 1px solid #111; -} -.dataTables_wrapper.no-footer div.dataTables_scrollHead table, -.dataTables_wrapper.no-footer div.dataTables_scrollBody table { - border-bottom: none; -} -.dataTables_wrapper:after { - visibility: hidden; - display: block; - content: ""; - clear: both; - height: 0; -} - -@media screen and (max-width: 767px) { - .dataTables_wrapper .dataTables_info, - .dataTables_wrapper .dataTables_paginate { - float: none; - text-align: center; - } - .dataTables_wrapper .dataTables_paginate { - margin-top: 0.5em; - } -} -@media screen and (max-width: 640px) { - .dataTables_wrapper .dataTables_length, - .dataTables_wrapper .dataTables_filter { - float: none; - text-align: center; - } - .dataTables_wrapper .dataTables_filter { - margin-top: 0.5em; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.min.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.min.css deleted file mode 100644 index 2edb32f7c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables.min.css +++ /dev/null @@ -1 +0,0 @@ -table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables_themeroller.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables_themeroller.css deleted file mode 100644 index 1426a44a1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/css/jquery.dataTables_themeroller.css +++ /dev/null @@ -1,416 +0,0 @@ -/* - * Table styles - */ -table.dataTable { - width: 100%; - margin: 0 auto; - clear: both; - border-collapse: separate; - border-spacing: 0; - /* - * Header and footer styles - */ - /* - * Body styles - */ -} -table.dataTable thead th, -table.dataTable thead td, -table.dataTable tfoot th, -table.dataTable tfoot td { - padding: 4px 10px; -} -table.dataTable thead th, -table.dataTable tfoot th { - font-weight: bold; -} -table.dataTable thead th:active, -table.dataTable thead td:active { - outline: none; -} -table.dataTable thead .sorting_asc, -table.dataTable thead .sorting_desc, -table.dataTable thead .sorting { - cursor: pointer; - *cursor: hand; -} -table.dataTable thead th div.DataTables_sort_wrapper { - position: relative; - padding-right: 10px; -} -table.dataTable thead th div.DataTables_sort_wrapper span { - position: absolute; - top: 50%; - margin-top: -8px; - right: -5px; -} -table.dataTable thead th.ui-state-default { - border-right-width: 0; -} -table.dataTable thead th.ui-state-default:last-child { - border-right-width: 1px; -} -table.dataTable tbody tr { - background-color: #ffffff; -} -table.dataTable tbody tr.selected { - background-color: #B0BED9; -} -table.dataTable tbody th, -table.dataTable tbody td { - padding: 8px 10px; -} -table.dataTable th.center, -table.dataTable td.center, -table.dataTable td.dataTables_empty { - text-align: center; -} -table.dataTable th.right, -table.dataTable td.right { - text-align: right; -} -table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { - border-top: 1px solid #ddd; -} -table.dataTable.row-border tbody tr:first-child th, -table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, -table.dataTable.display tbody tr:first-child td { - border-top: none; -} -table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { - border-top: 1px solid #ddd; - border-right: 1px solid #ddd; -} -table.dataTable.cell-border tbody tr th:first-child, -table.dataTable.cell-border tbody tr td:first-child { - border-left: 1px solid #ddd; -} -table.dataTable.cell-border tbody tr:first-child th, -table.dataTable.cell-border tbody tr:first-child td { - border-top: none; -} -table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { - background-color: #f9f9f9; -} -table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { - background-color: #abb9d3; -} -table.dataTable.hover tbody tr:hover, -table.dataTable.hover tbody tr.odd:hover, -table.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover, -table.dataTable.display tbody tr.odd:hover, -table.dataTable.display tbody tr.even:hover { - background-color: whitesmoke; -} -table.dataTable.hover tbody tr:hover.selected, -table.dataTable.hover tbody tr.odd:hover.selected, -table.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected, -table.dataTable.display tbody tr.odd:hover.selected, -table.dataTable.display tbody tr.even:hover.selected { - background-color: #a9b7d1; -} -table.dataTable.order-column tbody tr > .sorting_1, -table.dataTable.order-column tbody tr > .sorting_2, -table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, -table.dataTable.display tbody tr > .sorting_2, -table.dataTable.display tbody tr > .sorting_3 { - background-color: #f9f9f9; -} -table.dataTable.order-column tbody tr.selected > .sorting_1, -table.dataTable.order-column tbody tr.selected > .sorting_2, -table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, -table.dataTable.display tbody tr.selected > .sorting_2, -table.dataTable.display tbody tr.selected > .sorting_3 { - background-color: #acbad4; -} -table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { - background-color: #f1f1f1; -} -table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { - background-color: #f3f3f3; -} -table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { - background-color: whitesmoke; -} -table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { - background-color: #a6b3cd; -} -table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { - background-color: #a7b5ce; -} -table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { - background-color: #a9b6d0; -} -table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { - background-color: #f9f9f9; -} -table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { - background-color: #fbfbfb; -} -table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { - background-color: #fdfdfd; -} -table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { - background-color: #acbad4; -} -table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { - background-color: #adbbd6; -} -table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { - background-color: #afbdd8; -} -table.dataTable.display tbody tr:hover > .sorting_1, -table.dataTable.display tbody tr.odd:hover > .sorting_1, -table.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1, -table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1, -table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 { - background-color: #eaeaea; -} -table.dataTable.display tbody tr:hover > .sorting_2, -table.dataTable.display tbody tr.odd:hover > .sorting_2, -table.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2, -table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2, -table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 { - background-color: #ebebeb; -} -table.dataTable.display tbody tr:hover > .sorting_3, -table.dataTable.display tbody tr.odd:hover > .sorting_3, -table.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3, -table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3, -table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 { - background-color: #eeeeee; -} -table.dataTable.display tbody tr:hover.selected > .sorting_1, -table.dataTable.display tbody tr.odd:hover.selected > .sorting_1, -table.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1, -table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1, -table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 { - background-color: #a1aec7; -} -table.dataTable.display tbody tr:hover.selected > .sorting_2, -table.dataTable.display tbody tr.odd:hover.selected > .sorting_2, -table.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2, -table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2, -table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 { - background-color: #a2afc8; -} -table.dataTable.display tbody tr:hover.selected > .sorting_3, -table.dataTable.display tbody tr.odd:hover.selected > .sorting_3, -table.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3, -table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3, -table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 { - background-color: #a4b2cb; -} -table.dataTable.nowrap th, table.dataTable.nowrap td { - white-space: nowrap; -} -table.dataTable.compact thead th, -table.dataTable.compact thead td { - padding: 5px 9px; -} -table.dataTable.compact tfoot th, -table.dataTable.compact tfoot td { - padding: 5px 9px 3px 9px; -} -table.dataTable.compact tbody th, -table.dataTable.compact tbody td { - padding: 4px 5px; -} -table.dataTable th.dt-left, -table.dataTable td.dt-left { - text-align: left; -} -table.dataTable th.dt-center, -table.dataTable td.dt-center, -table.dataTable td.dataTables_empty { - text-align: center; -} -table.dataTable th.dt-right, -table.dataTable td.dt-right { - text-align: right; -} -table.dataTable th.dt-justify, -table.dataTable td.dt-justify { - text-align: justify; -} -table.dataTable th.dt-nowrap, -table.dataTable td.dt-nowrap { - white-space: nowrap; -} -table.dataTable thead th.dt-head-left, -table.dataTable thead td.dt-head-left, -table.dataTable tfoot th.dt-head-left, -table.dataTable tfoot td.dt-head-left { - text-align: left; -} -table.dataTable thead th.dt-head-center, -table.dataTable thead td.dt-head-center, -table.dataTable tfoot th.dt-head-center, -table.dataTable tfoot td.dt-head-center { - text-align: center; -} -table.dataTable thead th.dt-head-right, -table.dataTable thead td.dt-head-right, -table.dataTable tfoot th.dt-head-right, -table.dataTable tfoot td.dt-head-right { - text-align: right; -} -table.dataTable thead th.dt-head-justify, -table.dataTable thead td.dt-head-justify, -table.dataTable tfoot th.dt-head-justify, -table.dataTable tfoot td.dt-head-justify { - text-align: justify; -} -table.dataTable thead th.dt-head-nowrap, -table.dataTable thead td.dt-head-nowrap, -table.dataTable tfoot th.dt-head-nowrap, -table.dataTable tfoot td.dt-head-nowrap { - white-space: nowrap; -} -table.dataTable tbody th.dt-body-left, -table.dataTable tbody td.dt-body-left { - text-align: left; -} -table.dataTable tbody th.dt-body-center, -table.dataTable tbody td.dt-body-center { - text-align: center; -} -table.dataTable tbody th.dt-body-right, -table.dataTable tbody td.dt-body-right { - text-align: right; -} -table.dataTable tbody th.dt-body-justify, -table.dataTable tbody td.dt-body-justify { - text-align: justify; -} -table.dataTable tbody th.dt-body-nowrap, -table.dataTable tbody td.dt-body-nowrap { - white-space: nowrap; -} - -table.dataTable, -table.dataTable th, -table.dataTable td { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - -/* - * Control feature layout - */ -.dataTables_wrapper { - position: relative; - clear: both; - *zoom: 1; - zoom: 1; -} -.dataTables_wrapper .dataTables_length { - float: left; -} -.dataTables_wrapper .dataTables_filter { - float: right; - text-align: right; -} -.dataTables_wrapper .dataTables_filter input { - margin-left: 0.5em; -} -.dataTables_wrapper .dataTables_info { - clear: both; - float: left; - padding-top: 0.55em; -} -.dataTables_wrapper .dataTables_paginate { - float: right; - text-align: right; -} -.dataTables_wrapper .dataTables_paginate .fg-button { - box-sizing: border-box; - display: inline-block; - min-width: 1.5em; - padding: 0.5em; - margin-left: 2px; - text-align: center; - text-decoration: none !important; - cursor: pointer; - *cursor: hand; - color: #333 !important; - border: 1px solid transparent; -} -.dataTables_wrapper .dataTables_paginate .fg-button:active { - outline: none; -} -.dataTables_wrapper .dataTables_paginate .fg-button:first-child { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.dataTables_wrapper .dataTables_paginate .fg-button:last-child { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.dataTables_wrapper .dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 100%; - height: 40px; - margin-left: -50%; - margin-top: -25px; - padding-top: 20px; - text-align: center; - font-size: 1.2em; - background-color: white; - background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); - /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* Chrome10+,Safari5.1+ */ - background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* FF3.6+ */ - background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* IE10+ */ - background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* Opera 11.10+ */ - background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); - /* W3C */ -} -.dataTables_wrapper .dataTables_length, -.dataTables_wrapper .dataTables_filter, -.dataTables_wrapper .dataTables_info, -.dataTables_wrapper .dataTables_processing, -.dataTables_wrapper .dataTables_paginate { - color: #333; -} -.dataTables_wrapper .dataTables_scroll { - clear: both; -} -.dataTables_wrapper .dataTables_scrollBody { - *margin-top: -1px; - -webkit-overflow-scrolling: touch; -} -.dataTables_wrapper .ui-widget-header { - font-weight: normal; -} -.dataTables_wrapper .ui-toolbar { - padding: 8px; -} -.dataTables_wrapper:after { - visibility: hidden; - display: block; - content: ""; - clear: both; - height: 0; -} - -@media screen and (max-width: 767px) { - .dataTables_wrapper .dataTables_length, - .dataTables_wrapper .dataTables_filter, - .dataTables_wrapper .dataTables_info, - .dataTables_wrapper .dataTables_paginate { - float: none; - text-align: center; - } - .dataTables_wrapper .dataTables_filter, - .dataTables_wrapper .dataTables_paginate { - margin-top: 0.5em; - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_asc.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_asc.png deleted file mode 100644 index e1ba61a8055fcb18273f2468d335572204667b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*bWaz@5R22v2@;zYta_*?F5u6Q zWR@in#&u+WgT?Hi<}D3B3}GOXuX|8Oj3tosHiJ3*4TN zC7>_x-r1O=t(?KoTC+`+>7&2GzdqLHBg&F)2Q?&EGZ+}|Rpsc~9`m>jw35No)z4*} HQ$iB}HK{Sd diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_asc_disabled.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_asc_disabled.png deleted file mode 100644 index fb11dfe24a6c564cb7ddf8bc96703ebb121df1e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX(Vi}jAsXkC6BcOhI9!^3NY?Do zDX;f`c1`y6n0RgO@$!H7chZT&|Jn0dmaqO^XNm-CGtk!Ur<_=Jws3;%W$<+Mb6Mw<&;$T1GdZXL diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_both.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_both.png deleted file mode 100644 index af5bc7c5a10b9d6d57cb641aeec752428a07f0ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX6FglULp08Bycxyy87-Q;~nRxO8@-UU*I^KVWyN+&SiMHu5xDOu|HNvwzODfTdXjhVyNu1 z#7^XbGKZ7LW3XeONb$RKLeE*WhqbYpIXPIqK@r4)v+qN8um%99%MPpS9d#7Ed7SL@Bp00i_>zopr0H-Zb Aj{pDw diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_desc.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/media/images/sort_desc.png deleted file mode 100644 index 0e156deb5f61d18f9e2ec5da4f6a8c94a5b4fb41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*R8JSj5R22v2@yo z(czD9$NuDl3Ljm9c#_#4$vXUz=f1~&WY3aa=h!;z7fOEN>ySP9QA=6C-^Dmb&tuM= z4Z&=WZU;2WF>e%GI&mWJk^K!jrbro{W;-I>FeCfLGJl3}+Z^2)3Kw?+EoAU?^>bP0 Hl+XkKC^j|Q{b@g3TV7E(Grjn^aLC2o)_ptHrtUEoT$S@q)~)7U@V;W{6)!%@ u>N?4t-1qslpJw9!O?PJ&w0Cby */function( window, document, undefined ) { - -(function( factory ) { - "use strict"; - - if ( typeof define === 'function' && define.amd ) { - // Define as an AMD module if possible - define( 'datatables', ['jquery'], factory ); - } - else if ( typeof exports === 'object' ) { - // Node/CommonJS - module.exports = factory( require( 'jquery' ) ); - } - else if ( jQuery && !jQuery.fn.dataTable ) { - // Define using browser globals otherwise - // Prevent multiple instantiations if the script is loaded twice - factory( jQuery ); - } -} -(/** @lends */function( $ ) { - "use strict"; - - /** - * DataTables is a plug-in for the jQuery Javascript library. It is a highly - * flexible tool, based upon the foundations of progressive enhancement, - * which will add advanced interaction controls to any HTML table. For a - * full list of features please refer to - * [DataTables.net](href="http://datatables.net). - * - * Note that the `DataTable` object is not a global variable but is aliased - * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may - * be accessed. - * - * @class - * @param {object} [init={}] Configuration object for DataTables. Options - * are defined by {@link DataTable.defaults} - * @requires jQuery 1.7+ - * - * @example - * // Basic initialisation - * $(document).ready( function { - * $('#example').dataTable(); - * } ); - * - * @example - * // Initialisation with configuration options - in this case, disable - * // pagination and sorting. - * $(document).ready( function { - * $('#example').dataTable( { - * "paginate": false, - * "sort": false - * } ); - * } ); - */ - var DataTable; - - - /* - * It is useful to have variables which are scoped locally so only the - * DataTables functions can access them and they don't leak into global space. - * At the same time these functions are often useful over multiple files in the - * core and API, so we list, or at least document, all variables which are used - * by DataTables as private variables here. This also ensures that there is no - * clashing of variable names and that they can easily referenced for reuse. - */ - - - // Defined else where - // _selector_run - // _selector_opts - // _selector_first - // _selector_row_indexes - - var _ext; // DataTable.ext - var _Api; // DataTable.Api - var _api_register; // DataTable.Api.register - var _api_registerPlural; // DataTable.Api.registerPlural - - var _re_dic = {}; - var _re_new_lines = /[\r\n]/g; - var _re_html = /<.*?>/g; - var _re_date_start = /^[\w\+\-]/; - var _re_date_end = /[\w\+\-]$/; - - // Escape regular expression special characters - var _re_escape_regex = new RegExp( '(\\' + [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ].join('|\\') + ')', 'g' ); - - // http://en.wikipedia.org/wiki/Foreign_exchange_market - // - \u20BD - Russian ruble. - // - \u20a9 - South Korean Won - // - \u20BA - Turkish Lira - // - \u20B9 - Indian Rupee - // - R - Brazil (R$) and South Africa - // - fr - Swiss Franc - // - kr - Swedish krona, Norwegian krone and Danish krone - // - \u2009 is thin space and \u202F is narrow no-break space, both used in many - // standards as thousands separators. - var _re_formatted_numeric = /[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfk]/gi; - - - var _empty = function ( d ) { - return !d || d === true || d === '-' ? true : false; - }; - - - var _intVal = function ( s ) { - var integer = parseInt( s, 10 ); - return !isNaN(integer) && isFinite(s) ? integer : null; - }; - - // Convert from a formatted number with characters other than `.` as the - // decimal place, to a Javascript number - var _numToDecimal = function ( num, decimalPoint ) { - // Cache created regular expressions for speed as this function is called often - if ( ! _re_dic[ decimalPoint ] ) { - _re_dic[ decimalPoint ] = new RegExp( _fnEscapeRegex( decimalPoint ), 'g' ); - } - return typeof num === 'string' && decimalPoint !== '.' ? - num.replace( /\./g, '' ).replace( _re_dic[ decimalPoint ], '.' ) : - num; - }; - - - var _isNumber = function ( d, decimalPoint, formatted ) { - var strType = typeof d === 'string'; - - // If empty return immediately so there must be a number if it is a - // formatted string (this stops the string "k", or "kr", etc being detected - // as a formatted number for currency - if ( _empty( d ) ) { - return true; - } - - if ( decimalPoint && strType ) { - d = _numToDecimal( d, decimalPoint ); - } - - if ( formatted && strType ) { - d = d.replace( _re_formatted_numeric, '' ); - } - - return !isNaN( parseFloat(d) ) && isFinite( d ); - }; - - - // A string without HTML in it can be considered to be HTML still - var _isHtml = function ( d ) { - return _empty( d ) || typeof d === 'string'; - }; - - - var _htmlNumeric = function ( d, decimalPoint, formatted ) { - if ( _empty( d ) ) { - return true; - } - - var html = _isHtml( d ); - return ! html ? - null : - _isNumber( _stripHtml( d ), decimalPoint, formatted ) ? - true : - null; - }; - - - var _pluck = function ( a, prop, prop2 ) { - var out = []; - var i=0, ien=a.length; - - // Could have the test in the loop for slightly smaller code, but speed - // is essential here - if ( prop2 !== undefined ) { - for ( ; i') - .css( { - position: 'absolute', - top: 0, - left: 0, - height: 1, - width: 1, - overflow: 'hidden' - } ) - .append( - $('
      ') - .css( { - position: 'absolute', - top: 1, - left: 1, - width: 100, - overflow: 'scroll' - } ) - .append( - $('
      ') - .css( { - width: '100%', - height: 10 - } ) - ) - ) - .appendTo( 'body' ); - - var test = n.find('.test'); - - // IE6/7 will oversize a width 100% element inside a scrolling element, to - // include the width of the scrollbar, while other browsers ensure the inner - // element is contained without forcing scrolling - browser.bScrollOversize = test[0].offsetWidth === 100; - - // In rtl text layout, some browsers (most, but not all) will place the - // scrollbar on the left, rather than the right. - browser.bScrollbarLeft = Math.round( test.offset().left ) !== 1; - - n.remove(); - } - - - /** - * Array.prototype reduce[Right] method, used for browsers which don't support - * JS 1.6. Done this way to reduce code size, since we iterate either way - * @param {object} settings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnReduce ( that, fn, init, start, end, inc ) - { - var - i = start, - value, - isSet = false; - - if ( init !== undefined ) { - value = init; - isSet = true; - } - - while ( i !== end ) { - if ( ! that.hasOwnProperty(i) ) { - continue; - } - - value = isSet ? - fn( value, that[i], i, that ) : - that[i]; - - isSet = true; - i += inc; - } - - return value; - } - - /** - * Add a column to the list used for the table with default values - * @param {object} oSettings dataTables settings object - * @param {node} nTh The th element for this column - * @memberof DataTable#oApi - */ - function _fnAddColumn( oSettings, nTh ) - { - // Add column to aoColumns array - var oDefaults = DataTable.defaults.column; - var iCol = oSettings.aoColumns.length; - var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { - "nTh": nTh ? nTh : document.createElement('th'), - "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', - "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], - "mData": oDefaults.mData ? oDefaults.mData : iCol, - idx: iCol - } ); - oSettings.aoColumns.push( oCol ); - - // Add search object for column specific search. Note that the `searchCols[ iCol ]` - // passed into extend can be undefined. This allows the user to give a default - // with only some of the parameters defined, and also not give a default - var searchCols = oSettings.aoPreSearchCols; - searchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch, searchCols[ iCol ] ); - - // Use the default column options function to initialise classes etc - _fnColumnOptions( oSettings, iCol, $(nTh).data() ); - } - - - /** - * Apply options for a column - * @param {object} oSettings dataTables settings object - * @param {int} iCol column index to consider - * @param {object} oOptions object with sType, bVisible and bSearchable etc - * @memberof DataTable#oApi - */ - function _fnColumnOptions( oSettings, iCol, oOptions ) - { - var oCol = oSettings.aoColumns[ iCol ]; - var oClasses = oSettings.oClasses; - var th = $(oCol.nTh); - - // Try to get width information from the DOM. We can't get it from CSS - // as we'd need to parse the CSS stylesheet. `width` option can override - if ( ! oCol.sWidthOrig ) { - // Width attribute - oCol.sWidthOrig = th.attr('width') || null; - - // Style attribute - var t = (th.attr('style') || '').match(/width:\s*(\d+[pxem%]+)/); - if ( t ) { - oCol.sWidthOrig = t[1]; - } - } - - /* User specified column options */ - if ( oOptions !== undefined && oOptions !== null ) - { - // Backwards compatibility - _fnCompatCols( oOptions ); - - // Map camel case parameters to their Hungarian counterparts - _fnCamelToHungarian( DataTable.defaults.column, oOptions ); - - /* Backwards compatibility for mDataProp */ - if ( oOptions.mDataProp !== undefined && !oOptions.mData ) - { - oOptions.mData = oOptions.mDataProp; - } - - if ( oOptions.sType ) - { - oCol._sManualType = oOptions.sType; - } - - // `class` is a reserved word in Javascript, so we need to provide - // the ability to use a valid name for the camel case input - if ( oOptions.className && ! oOptions.sClass ) - { - oOptions.sClass = oOptions.className; - } - - $.extend( oCol, oOptions ); - _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); - - /* iDataSort to be applied (backwards compatibility), but aDataSort will take - * priority if defined - */ - if ( oOptions.iDataSort !== undefined ) - { - oCol.aDataSort = [ oOptions.iDataSort ]; - } - _fnMap( oCol, oOptions, "aDataSort" ); - } - - /* Cache the data get and set functions for speed */ - var mDataSrc = oCol.mData; - var mData = _fnGetObjectDataFn( mDataSrc ); - var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; - - var attrTest = function( src ) { - return typeof src === 'string' && src.indexOf('@') !== -1; - }; - oCol._bAttrSrc = $.isPlainObject( mDataSrc ) && ( - attrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter) - ); - - oCol.fnGetData = function (rowData, type, meta) { - var innerData = mData( rowData, type, undefined, meta ); - - return mRender && type ? - mRender( innerData, type, rowData, meta ) : - innerData; - }; - oCol.fnSetData = function ( rowData, val, meta ) { - return _fnSetObjectDataFn( mDataSrc )( rowData, val, meta ); - }; - - // Indicate if DataTables should read DOM data as an object or array - // Used in _fnGetRowElements - if ( typeof mDataSrc !== 'number' ) { - oSettings._rowReadObject = true; - } - - /* Feature sorting overrides column specific when off */ - if ( !oSettings.oFeatures.bSort ) - { - oCol.bSortable = false; - th.addClass( oClasses.sSortableNone ); // Have to add class here as order event isn't called - } - - /* Check that the class assignment is correct for sorting */ - var bAsc = $.inArray('asc', oCol.asSorting) !== -1; - var bDesc = $.inArray('desc', oCol.asSorting) !== -1; - if ( !oCol.bSortable || (!bAsc && !bDesc) ) - { - oCol.sSortingClass = oClasses.sSortableNone; - oCol.sSortingClassJUI = ""; - } - else if ( bAsc && !bDesc ) - { - oCol.sSortingClass = oClasses.sSortableAsc; - oCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed; - } - else if ( !bAsc && bDesc ) - { - oCol.sSortingClass = oClasses.sSortableDesc; - oCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed; - } - else - { - oCol.sSortingClass = oClasses.sSortable; - oCol.sSortingClassJUI = oClasses.sSortJUI; - } - } - - - /** - * Adjust the table column widths for new data. Note: you would probably want to - * do a redraw after calling this function! - * @param {object} settings dataTables settings object - * @memberof DataTable#oApi - */ - function _fnAdjustColumnSizing ( settings ) - { - /* Not interested in doing column width calculation if auto-width is disabled */ - if ( settings.oFeatures.bAutoWidth !== false ) - { - var columns = settings.aoColumns; - - _fnCalculateColumnWidths( settings ); - for ( var i=0 , iLen=columns.length ; i
    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

    iYAl1X%rJ{>#2~VjB1@L6DcP3@$&w|6 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 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js deleted file mode 100755 index 47bf3e1a8..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/js/device-detail.js +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -var InitiateViewOption = null; - -(function () { - var deviceId = $(".device-id"); - var deviceIdentifier = deviceId.data("deviceid"); - var deviceType = deviceId.data("type"); - var ownership = deviceId.data("ownership"); - var devStatus = deviceId.data("status"); - var payload = [deviceIdentifier]; - var operationTable; - - if ("REMOVED" !== devStatus) { - var deviceInfoServiceAPI = deviceId.data("deviceinfoservice"); - var deviceLocationServiceAPI = deviceId.data("devicelocationservice"); - if (deviceInfoServiceAPI) { - invokerUtil.post( - deviceInfoServiceAPI, - payload, - // success-callback - function () { - $(".panel-body").show(); - }, - // error-callback - function () { - var defaultInnerHTML = - "

    Device data may not have been updated. Please refresh to try again.

    "; - $(".panel-body").append(defaultInnerHTML); - } - ); - } - if (deviceLocationServiceAPI) { - invokerUtil.post( - deviceLocationServiceAPI, - payload, - // success-callback - function () { - $(".panel-body").show(); - }, - // error-callback - function () { - var defaultInnerHTML = - "

    Device data may not have been updated. Please refresh to try again.

    "; - $(".panel-body").append(defaultInnerHTML); - } - ); - } - } - - - $(".media.tab-responsive [data-toggle=tab]").on("shown.bs.tab", function (e) { - var activeTabPane = $(e.target).attr("href"); - var activeListGroupItem = $(".media .list-group-item.active"); - - $(activeTabPane).removeClass("visible-xs-block"); - $(activeTabPane).siblings().not(".arrow-left").addClass("visible-xs-block"); - positionArrow(activeListGroupItem); - }); - - $(".media.tab-responsive .tab-content").on("shown.bs.collapse", function (e) { - var thisParent = $(e.target).parent(); - var activeTabPaneCaret = thisParent.find('.caret-updown'); - var activeTabPaneCaretSiblings = thisParent.siblings().find('.caret-updown'); - - activeTabPaneCaret.removeClass("fw-up").addClass("fw-down"); - activeTabPaneCaretSiblings.removeClass("fw-down").addClass("fw-up"); - }); - - $('.media.tab-responsive a[data-toggle="collapse"]').on('click',function(){ - var clickedPanel = $(this).attr('href'); - - if($(clickedPanel).hasClass('in')){ - $(clickedPanel).collapse('hide'); - }else{ - $(clickedPanel).collapse('show'); - } - }); - - $('#status').on('save', function (e, params) { - var deviceStatus = params.submitValue.toUpperCase(); - var serviceUrl = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceIdentifier - + "/changestatus?newStatus=" + deviceStatus; - var payload = null; - - if (serviceUrl) { - var successCallback = function (jqXHR, status, resp) { - if (resp.status == 200) { - setTimeout(function () { - if (deviceStatus == "REMOVED") { - $('#statusIcon').removeClass().addClass('fw fw-delete icon-danger'); - } else if (deviceStatus == "INACTIVE") { - $('#statusIcon').removeClass().addClass('fw fw-warning icon-warning'); - } else if (deviceStatus == "ACTIVE") { - $('#statusIcon').removeClass().addClass('fw fw-success icon-success'); - } - $("#statusIcon").show(); - - }, 1500); - } else { - console.log(resp.status); - } - }; - - invokerUtil.put(serviceUrl, payload, - successCallback, function (message) { - console.log(message); - }); - } - - }); - - $("#status").click(function () { - $("#statusIcon").hide(); - }); - - $.fn.editable.defaults.mode = 'inline'; - - $('#status').editable({ - value: $('#status').attr("selectedValue"), - source: [ - {value: 'Active', text: 'Active'}, - {value: "Inactive", text: 'Inactive'}, - {value: "Removed", text: 'Removed'} - ], - success: this.update_elements - }); - - $.fn.editableform.buttons = - '' + - ''; - - function positionArrow(selectedTab) { - var selectedTabHeight = $(selectedTab).innerHeight(); - var arrowPosition = 0; - var totalHeight = 0; - var arrow = $(".media .panel-group.tab-content .arrow-left"); - var parentHeight = $(arrow).parent().innerHeight(); - - - if($(selectedTab).prev().length){ - $(selectedTab).prevAll().each(function() { - totalHeight += $(this).innerHeight(); - }); - arrowPosition = totalHeight + (selectedTabHeight / 2); - }else{ - arrowPosition = selectedTabHeight / 2; - } - - if(arrowPosition >= parentHeight){ - parentHeight = arrowPosition + 50; - $(arrow).siblings(".panel.active").height(parentHeight); - }else{ - $(arrow).parent().removeAttr("style"); - } - - $(arrow).css("top", arrowPosition - 10); - } - - $(document).ready(function() { - $(".device-detail-body").removeClass("hidden"); - $("#loading-content").remove(); - loadApplicationsList(); - loadPolicyCompliance(); - - $("#refresh-policy").click(function () { - $("#policy-spinner").removeClass("hidden"); - loadPolicyCompliance(); - }); - - $("#refresh-apps").click(function () { - $("#apps-spinner").removeClass("hidden"); - loadApplicationsList(); - }); - }); - - function loadOperationsLog(update) { - var owner = $("#device-owner").data("owner"); - var operationsLogTable = "#operations-log-table"; - if (update) { - operationTable = $(operationsLogTable).DataTable(); - operationTable.ajax.reload(false); - return; - } - operationTable = $(operationsLogTable).datatables_extended({ - serverSide: true, - processing: false, - searching: false, - ordering: false, - pageLength : 10, - order: [], - ajax: { - url: "/devicemgt/api/operation/paginate", - data: {deviceId : deviceIdentifier, deviceType: deviceType, owner:owner}, - dataSrc: function (json) { - $("#operations-spinner").addClass("hidden"); - $("#operations-log-container").empty(); - return json.data; - } - }, - columnDefs: [ - {targets: 0, data: "code" }, - {targets: 1, data: "status", render: - function (status) { - var html; - switch (status) { - case "COMPLETED" : - html = " Completed"; - break; - case "PENDING" : - html = " Pending"; - break; - case "ERROR" : - html = " Error"; - break; - case "IN_PROGRESS" : - html = " In Progress"; - break; - case "REPEATED" : - html = " Repeated"; - break; - } - return html; - } - }, - {targets: 2, data: "createdTimeStamp", render: - function (date) { - var value = String(date); - return value.slice(0, 16); - } - } - ], - "createdRow": function(row, data) { - $(row).attr("data-type", "selectable"); - $(row).attr("data-id", data["id"]); - $.each($("td", row), - function(colIndex) { - switch(colIndex) { - case 1: - $(this).attr("data-grid-label", "Code"); - $(this).attr("data-display", data["code"]); - break; - case 2: - $(this).attr("data-grid-label", "Status"); - $(this).attr("data-display", data["status"]); - break; - case 3: - $(this).attr("data-grid-label", "Created Timestamp"); - $(this).attr("data-display", data["createdTimeStamp"]); - break; - } - } - ); - } - }); - } - - function loadApplicationsList() { - var applicationsList = $("#applications-list"); - var applicationListingTemplate = applicationsList.attr("src"); - var deviceId = applicationsList.data("device-id"); - var deviceType = applicationsList.data("device-type"); - - $.template("application-list", applicationListingTemplate, function (template) { - var serviceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/applications"; - invokerUtil.get( - serviceURL, - // success-callback - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - data = JSON.parse(data); - $("#apps-spinner").addClass("hidden"); - if (data.length > 0) { - for (var i = 0; i < data.length; i++) { - data[i]["name"] = decodeURIComponent(data[i]["name"]); - data[i]["platform"] = deviceType; - } - - var viewModel = {}; - viewModel["applications"] = data; - viewModel["deviceType"] = deviceType; - viewModel["deviceId"] = deviceId; - viewModel["appContext"] = context; - var content = template(viewModel); - $("#applications-list-container").html(content); - var iconSource = $("#applications-list-container").data("public-uri") + "/img/device_icons/windows_app_icon.png"; - $("#applications-list-container img").attr("src",iconSource); - } else { - $("#applications-list-container"). - html("

    "); - } - } - }, - // error-callback - function () { - $("#applications-list-container"). - html("

     Loading application list " + - "was not successful. please try refreshing the list in a while.

    "); - }); - }); - } - - function loadPolicyCompliance() { - var policyCompliance = $("#policy-view"); - var policyComplianceTemplate = policyCompliance.attr("src"); - var deviceId = policyCompliance.data("device-id"); - var deviceType = policyCompliance.data("device-type"); - var activePolicy = null; - - $.template( - "policy-view", - policyComplianceTemplate, - function (template) { - var getEffectivePolicyURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/effective-policy"; - var getDeviceComplianceURL = "/api/device-mgt/v1.0/devices/" + deviceType + "/" + deviceId + "/compliance-data"; - - invokerUtil.get( - getEffectivePolicyURL, - // success-callback - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - data = JSON.parse(data); - $("#policy-spinner").addClass("hidden"); - if (data["active"] == true) { - activePolicy = data; - invokerUtil.get( - getDeviceComplianceURL, - // success-callback - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - var viewModel = {}; - viewModel["policy"] = activePolicy; - viewModel["deviceType"] = deviceType; - data = JSON.parse(data); - var content; - if (data["complianceData"]) { - if (data["complianceData"]["complianceFeatures"] && - data["complianceData"]["complianceFeatures"].length > 0) { - viewModel["compliance"] = "NON-COMPLIANT"; - viewModel["complianceFeatures"] = data["complianceData"]["complianceFeatures"]; - content = template(viewModel); - $("#policy-list-container").html(content); - } else { - viewModel["compliance"] = "COMPLIANT"; - content = template(viewModel); - $("#policy-list-container").html(content); - $("#policy-compliance-table").addClass("hidden"); - } - } else { - $("#policy-list-container"). - html("

    This device " + - "has no policy applied.

    "); - } - } - }, - // error-callback - function () { - $("#policy-list-container"). - html("

    Loading policy compliance related data " + - "was not successful. please try refreshing data in a while.

    "); - } - ); - } - } - }, - // error-callback - function () { - $("#policy-list-container"). - html("

    Loading policy compliance related data " + - "was not successful. please try refreshing data in a while.

    "); - } - ); - } - ); - } - -}()); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs deleted file mode 100644 index 984df89cf..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/applications-list.hbs +++ /dev/null @@ -1,9 +0,0 @@ -{{#each applications}} -
    - -
    -

    {{name}}

    -

    v{{version}}

    -
    -
    -{{/each}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs deleted file mode 100644 index d87b813f1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/templates/policy-compliance.hbs +++ /dev/null @@ -1,45 +0,0 @@ -
    - - - - - - - - - {{#each complianceFeatures}} - - - - - {{/each}} -
    - -
    FeatureCompliance
    {{featureCode}} - {{#equal compliance true}} Compliant{{/equal}} - {{#equal compliance false}} Not Compliant{{/equal}} -
    diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs deleted file mode 100644 index 9385d60d5..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.hbs +++ /dev/null @@ -1,6 +0,0 @@ -{{#zone "topLibCss"}} - -{{/zone}} -{{#zone "bottomJs"}} - -{{/zone}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/leaflet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css deleted file mode 100644 index c161c3134..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/css/leaflet.css +++ /dev/null @@ -1,479 +0,0 @@ -/* required styles */ - -.leaflet-map-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-pane, -.leaflet-tile-container, -.leaflet-overlay-pane, -.leaflet-shadow-pane, -.leaflet-marker-pane, -.leaflet-popup-pane, -.leaflet-overlay-pane svg, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - -ms-touch-action: none; - touch-action: none; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container img { - max-width: none !important; - } -/* stupid Android 2 doesn't understand "max-width: none" properly */ -.leaflet-container img.leaflet-image-layer { - max-width: 15000px !important; - } -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-tile-pane { z-index: 2; } -.leaflet-objects-pane { z-index: 3; } -.leaflet-overlay-pane { z-index: 4; } -.leaflet-shadow-pane { z-index: 5; } -.leaflet-marker-pane { z-index: 6; } -.leaflet-popup-pane { z-index: 7; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 7; - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile, -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-tile-loaded, -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } - -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile, -.leaflet-touching .leaflet-zoom-animated { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-clickable { - cursor: pointer; - } -.leaflet-container { - cursor: -webkit-grab; - cursor: -moz-grab; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-container, -.leaflet-dragging .leaflet-clickable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - } - - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } - - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } -.leaflet-control-zoom-out { - font-size: 20px; - } - -.leaflet-touch .leaflet-control-zoom-in { - font-size: 22px; - } -.leaflet-touch .leaflet-control-zoom-out { - font-size: 24px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(images/layers.png); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(images/layers-2x.png); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: content-box; - box-sizing: content-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - margin: 0 auto; - width: 40px; - height: 20px; - position: relative; - overflow: hidden; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers-2x.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/layers-2x.png deleted file mode 100644 index a2cf7f9efef65d2e021f382f47ef50d51d51a0df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2898 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 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-shadow.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.leaflet/public/js/images/marker-shadow.png deleted file mode 100644 index d1e773c715a9b508ebea055c4bb4b0a2ad7f6e52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmV+&1LFLNP)oNwbRQ6Eq$4M3RDU@$ z<4cV9zWLV=bA&uX9wCpA{{f^4$D#k>GcX53-UQqf>_LzMU@frMz|MwbfQGbY0?ccG zBj_wh0?6Tv;HWR0`x;m^Bm<;sCm_85SGspFBn6|A!tDh$nR`wGorGkyL7j?F3#OJq zIswLIz;iF7f|LMnF(pXPAY*GYpsw%&e_WjlnV`C$6@#Q7GZu1$Q8>&p8=(iJj8o|T~0u%hM*Yg_d(Av{WS$h&pM%nlEAonVL0;DkN|xc zn)9F+aMDk#VtAMb0c=kIb1pU-$e4$3pwo&qVh(Umlw3_IU_dFcFe(In6*x}D4LHLhFZ4N=V2ZR+>XHU5D&uY$npJ7Eu?{iAK>UxC?4uyg4+iD z!nst**H%2zhOBxc7C7Tv{f^`%hqT1KpU@Vf6+C2|bGaR(1~TU5D-1;&HXT~PMc2Lu z{Q%^i6vvox&EMFT7I_)R$xq1779I8kE@?|D*cLWnP0a@a)xJA`o*^$^V(yN)b`kV7 z=o@jbFF4j{KeuQhi;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;it;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=!t.PointerEvent&&t.MSPointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&(m||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;ni||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-(1/0),o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator, -transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-(1/0));for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||in;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=this._getTileSize(),o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(it.max.x||nt.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;e.detectRetina&&o.Browser.retina?i.width=i.height=2*n:i.width=i.height=n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i="shadow"===e?o.point(n.shadowAnchor||n.iconAnchor):o.point(n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){return this._icon&&this._setPos(this._map.latLngToLayerPoint(this._latlng).round()),this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;is?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),"off"in t&&t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,i.dashArray?t.dashStyle=o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):t.dashStyle="",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color),t.lineCap&&(this._ctx.lineCap=t.lineCap),t.lineJoin&&(this._ctx.lineJoin=t.lineJoin)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill(e.fillRule||"evenodd")),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click dblclick contextmenu",this._fireMouseEvent,this))},_fireMouseEvent:function(t){this._containsPoint(t.layerPoint)&&this.fire(t.type,t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.xe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+ei;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!t.shiftKey&&(1===t.which||1===t.button||t.touches)&&(o.DomEvent.stopPropagation(t),!o.Draggable._disabled&&(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],"function"==typeof n?s[a]=n.bind(h):s[a]=n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n); -case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.hbs deleted file mode 100644 index 9c836a537..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.hbs +++ /dev/null @@ -1,146 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#if control_operations}} -
    - - {{#each control_operations}} - - {{#if iconFont}} - - {{else}} - {{#if icon}} - - {{else}} - - {{/if}} - {{/if}} - {{name}} - - -
    -
    -
    -
    -

    - - - - - {{name}} -
    -

    -

    - {{description}} -
    -

    - -
    - {{#each params.0.pathParams}} - -
    - {{/each}} - {{#each params.0.formParams}} - -
    - {{/each}} - {{#each params.0.queryParams}} - -
    - {{/each}} - {{#each uiParams}} - {{#equal this.type "checkbox"}} - - {{this.label}} -
    - {{/equal}} - {{#equal this.type "text"}} - -
    - {{/equal}} - {{/each}} - - - -
    -
    -
    -
    -
    - {{/each}} -
    -{{else}} -
    -

    - Operations Loading Failed!

    -
    -{{/if}} - - - -{{#zone "bottomJs"}} - {{js "js/operation-bar.js"}} -{{/zone}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.js deleted file mode 100644 index 30a8d397f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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 onRequest(context) { - var log = new Log("operation.js"); - var operationModule = require("/app/modules/business-controllers/operation.js")["operationModule"]; - var device = context.unit.params.device; - var autoCompleteParams = context.unit.params.autoCompleteParams; - var encodedFeaturePayloads=context.unit.params.encodedFeaturePayloads; - var controlOperations = operationModule.getControlOperations(device); - var queryParams = []; - var formParams = []; - var pathParams = []; - for (var i = 0; i < controlOperations.length; i++) { - var currentParamList = controlOperations[i]["params"]; - var uiParamList = controlOperations[i]["uiParams"]; - for (var j = 0; j < currentParamList.length; j++) { - var currentParam = currentParamList[j]; - currentParamList[j]["formParams"] = processParams(currentParam["formParams"], autoCompleteParams); - currentParamList[j]["queryParams"] = processParams(currentParam["queryParams"], autoCompleteParams); - currentParamList[j]["pathParams"] = processParams(currentParam["pathParams"], autoCompleteParams); - } - controlOperations[i]["uiParams"] = uiParamList; - if (encodedFeaturePayloads) { - controlOperations[i]["payload"] = getPayload(encodedFeaturePayloads, controlOperations[i]["operation"]); - } - } - return {"control_operations": controlOperations, "device": device}; -} - -function processParams(paramsList, autoCompleteParams) { - for (var i = 0; i < paramsList.length; i++) { - var paramName = paramsList[i]; - var paramValue = ""; - var paramType = "text"; - for (var k = 0; k < autoCompleteParams.length; k++) { - if (paramName == autoCompleteParams[k].name) { - paramValue = autoCompleteParams[k].value; - paramType = "hidden"; - } - } - paramsList[i] = {"name": paramName, "value": paramValue, "type": paramType}; - } - return paramsList; -} - -function getPayload(featuresPayload, featureCode){ - var featuresJSONPayloads = JSON.parse(featuresPayload); - return featuresJSONPayloads[featureCode]; -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.json deleted file mode 100644 index 688e93980..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/operation-bar.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/js/operation-bar.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/js/operation-bar.js deleted file mode 100644 index 64d736076..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/js/operation-bar.js +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -/* - * Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - * - * Entgra (Pvt) Ltd. 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. - */ - -/* - * On operation click function. - * @param selection: Selected operation - */ -function operationSelect(selection) { - $(modalPopupContent).addClass("operation-data"); - $(modalPopupContent).html($(" .operation[data-operation-code=" + selection + "]").html()); - $(modalPopupContent).data("operation-code", selection); - showPopup(); -} - -function submitForm(formId) { - var form = $("#" + formId); - var uri = form.attr("action"); - var deviceIdList = form.data("device-id"); - var contentType = form.data("content-type"); - var operationCode = form.data("operation-code"); - var uriEncodedQueryStr = ""; - var uriEncodedFormStr = ""; - var payload = {}; - form.find("input").each(function () { - var input = $(this); - var prefix; - if (input.data("param-type") === "path") { - uri = uri.replace("{" + input.attr("id") + "}", input.val()); - } else if (input.data("param-type") === "query") { - prefix = !uriEncodedQueryStr ? "?" : "&"; - uriEncodedQueryStr += prefix + input.attr("id") + "=" + input.val(); - } else if (input.data("param-type") === "form") { - prefix = !uriEncodedFormStr ? "" : "&"; - uriEncodedFormStr += prefix + input.attr("id") + "=" + input.val(); - if(input.attr("type") === "text"){ - payload[input.attr("id")] = input.val(); - } else if(input.attr("type") === "checkbox"){ - payload[input.attr("id")] = input.is(":checked"); - } - } - }); - uri += uriEncodedQueryStr; - var httpMethod = form.attr("method").toUpperCase(); - - if (!contentType) { - contentType = "application/x-www-form-urlencoded"; - payload = uriEncodedFormStr; - } - - //setting responses callbacks - var defaultStatusClasses = "fw fw-stack-1x"; - var content = $("#operation-response-template").find(".content"); - var title = content.find("#title"); - var statusIcon = content.find("#status-icon"); - var description = content.find("#description"); - description.html(""); - var successCallBack = function (response) { - var res = response; - try { - res = JSON.parse(response).messageFromServer; - } catch (err) { - //do nothing - } - title.html("Operation Triggered!"); - statusIcon.attr("class", defaultStatusClasses + " fw-check"); - description.html(res); - console.log("success!"); - $(modalPopupContent).html(content.html()); - }; - var errorCallBack = function (response) { - console.log(response); - title.html("An Error Occurred!"); - statusIcon.attr("class", defaultStatusClasses + " fw-error"); - var reason = (response.responseText === "null")?response.statusText:response.responseText; - try { - reason = JSON.parse(reason).message; - } catch (err) { - //do nothing - } - description.html(reason); - console.log("Error!"); - $(modalPopupContent).html(content.html()); - }; - //executing http request - if (httpMethod === "GET") { - invokerUtil.get(uri, successCallBack, errorCallBack, contentType); - } else if (httpMethod === "POST") { - var deviceList = deviceIdList.split(","); - payload = generatePayload(operationCode, payload, deviceList); - invokerUtil.post(uri, payload, successCallBack, errorCallBack, contentType); - } else if (httpMethod === "PUT") { - invokerUtil.put(uri, payload, successCallBack, errorCallBack, contentType); - } else if (httpMethod === "DELETE") { - invokerUtil.delete(uri, successCallBack, errorCallBack, contentType); - } else { - title.html("An Error Occurred!"); - statusIcon.attr("class", defaultStatusClasses + " fw-error"); - description.html("This operation requires http method: " + httpMethod + " which is not supported yet!"); - $(modalPopupContent).html(content.html()); - } -} - -$(document).on('submit', 'form', function (e) { - e.preventDefault(); - var postOperationRequest = $.ajax({ - url: $(this).attr("action") + '&' + $(this).serialize(), - method: "post" - }); - - var btnSubmit = $('#btnSend', this); - btnSubmit.addClass('hidden'); - - var lblSending = $('#lblSending', this); - lblSending.removeClass('hidden'); - - var lblSent = $('#lblSent', this); - postOperationRequest.done(function (data) { - lblSending.addClass('hidden'); - lblSent.removeClass('hidden'); - setTimeout(function () { - hidePopup(); - }, 3000); - }); - - postOperationRequest.fail(function (jqXHR, textStatus) { - lblSending.addClass('hidden'); - lblSent.addClass('hidden'); - }); -}); - -// Constants to define operation types available -var operationTypeConstants = { - "PROFILE": "profile", - "CONFIG": "config", - "COMMAND": "command" -}; - - -var generatePayload = function (operationCode, operationData, deviceList) { - var payload; - var operationType; - switch (operationCode) { - case windowsOperationConstants["CAMERA_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "enabled": operationData["cameraEnabled"] - } - }; - break; - case windowsOperationConstants["CHANGE_LOCK_CODE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "lockCode": operationData["lockCode"] - } - }; - break; - case windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "encrypted": operationData["encryptStorageEnabled"] - } - }; - break; - case windowsOperationConstants["NOTIFICATION_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "message": operationData["message"] - } - }; - break; - case windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "allowSimple": operationData["passcodePolicyAllowSimple"], - "requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"], - "minLength": operationData["passcodePolicyMinLength"], - "minComplexChars": operationData["passcodePolicyMinComplexChars"], - "maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"], - "pinHistory": operationData["passcodePolicyPasscodeHistory"], - "maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"] - } - }; - break; - default: - // If the operation is neither of above, it is a command operation - operationType = operationTypeConstants["COMMAND"]; - // Operation payload of a command operation is simply an array of device IDs - payload = deviceList; - } - - if (operationType === operationTypeConstants["PROFILE"] && deviceList) { - payload["deviceIDs"] = deviceList; - } - return payload; -}; - - -// Constants to define Windows Operation Constants -var windowsOperationConstants = { - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "CAMERA_OPERATION_CODE": "CAMERA", - "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE", - "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", - "CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE" -}; \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/templates/operation-bar.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/templates/operation-bar.hbs deleted file mode 100644 index f15d531de..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-bar/public/templates/operation-bar.hbs +++ /dev/null @@ -1,142 +0,0 @@ -{{! - Copyright (c) 2019, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved. - - Entgra (Pvt) Ltd. 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. -}} -{{#if control_operations}} -
    - - {{#each control_operations}} - - {{#if iconFont}} - - {{else}} - {{#if icon}} - - {{else}} - - {{/if}} - {{/if}} - {{name}} - - -
    -
    -
    -
    -

    - - - - - {{name}} -
    -

    -

    - {{description}} -
    -

    - -
    - {{#each params.0.pathParams}} - -
    - {{/each}} - {{#each params.0.formParams}} - -
    - {{/each}} - {{#each params.0.queryParams}} - -
    - {{/each}} - {{#each uiParams}} - {{#equal this.type "checkbox"}} - - {{this.label}} -
    - {{/equal}} - {{#equal this.type "text"}} - -
    - {{/equal}} - {{/each}} - - - -
    -
    -
    -
    -
    - {{/each}} -
    -{{else}} -
    -

    - Operations Loading Failed!

    -
    -{{/if}} - - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs deleted file mode 100644 index 8d7e6bc16..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.hbs +++ /dev/null @@ -1,20 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "bottomJs"}} - {{js "js/operation-mod.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json deleted file mode 100644 index 8fcf779d1..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/operation-mod.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": "1.0.0", - "pushedUris": [ - "/policies", - "/policy/{+any}" - ], - "extends": "cdmf.unit.device.operation-mod" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js deleted file mode 100644 index b064ef186..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.operation-mod/public/js/operation-mod.js +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -var windowsOperationModule = function () { - var publicMethods = {}; - var privateMethods = {}; - - // Constants to define operation types available - var operationTypeConstants = { - "PROFILE": "profile", - "CONFIG": "config", - "COMMAND": "command" - }; - - // Constants to define Windows Operation Constants - var windowsOperationConstants = { - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "CAMERA_OPERATION_CODE": "CAMERA", - "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE", - "NOTIFICATION_OPERATION_CODE": "NOTIFICATION", - "CHANGE_LOCK_CODE_OPERATION_CODE": "CHANGE_LOCK_CODE" - }; - - /** - * Convert the windows platform specific code to the generic payload. - * TODO: think of the possibility to follow a pattern to the key name (namespace?) - * @param operationCode - * @param operationPayload - * @returns {{}} - */ - privateMethods.generateGenericPayloadFromWindowsPayload = function (operationCode, operationPayload) { - var payload = {}; - operationPayload = JSON.parse(operationPayload); - switch (operationCode) { - case windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: - payload = { - "passcodePolicyAllowSimple": operationPayload["allowSimple"], - "passcodePolicyRequireAlphanumeric": operationPayload["requireAlphanumeric"], - "passcodePolicyMinLength": operationPayload["minLength"], - "passcodePolicyMinComplexChars": operationPayload["minComplexChars"], - "passcodePolicyMaxPasscodeAgeInDays": operationPayload["maxPINAgeInDays"], - "passcodePolicyPasscodeHistory": operationPayload["pinHistory"], - "passcodePolicyMaxFailedAttempts": operationPayload["maxFailedAttempts"] - }; - break; - case windowsOperationConstants["CAMERA_OPERATION_CODE"]: - payload = { - "cameraEnabled": operationPayload["enabled"] - }; - break; - case windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: - payload = { - "encryptStorageEnabled": operationPayload["encrypted"] - }; - break; - } - return payload; - }; - - privateMethods.generateWindowsOperationPayload = function (operationCode, operationData, deviceList) { - var payload; - var operationType; - switch (operationCode) { - case windowsOperationConstants["CAMERA_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "enabled": operationData["cameraEnabled"] - } - }; - break; - case windowsOperationConstants["CHANGE_LOCK_CODE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "lockCode": operationData["lockCode"] - } - }; - break; - case windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "encrypted": operationData["encryptStorageEnabled"] - } - }; - break; - case windowsOperationConstants["NOTIFICATION_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "message": operationData["message"] - } - }; - break; - case windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]: - operationType = operationTypeConstants["PROFILE"]; - payload = { - "operation": { - "allowSimple": operationData["passcodePolicyAllowSimple"], - "requireAlphanumeric": operationData["passcodePolicyRequireAlphanumeric"], - "minLength": operationData["passcodePolicyMinLength"], - "minComplexChars": operationData["passcodePolicyMinComplexChars"], - "maxPINAgeInDays": operationData["passcodePolicyMaxPasscodeAgeInDays"], - "pinHistory": operationData["passcodePolicyPasscodeHistory"], - "maxFailedAttempts": operationData["passcodePolicyMaxFailedAttempts"] - } - }; - break; - default: - // If the operation is neither of above, it is a command operation - operationType = operationTypeConstants["COMMAND"]; - // Operation payload of a command operation is simply an array of device IDs - payload = deviceList; - } - - if (operationType == operationTypeConstants["PROFILE"] && deviceList) { - payload["deviceIDs"] = deviceList; - } - - return payload; - }; - - - publicMethods.getWindowsServiceEndpoint = function (operationCode) { - var featureMap = { - "DEVICE_LOCK": "lock-devices", - "DISENROLL": "disenroll", - "DEVICE_RING": "ring-device", - "LOCK_RESET": "lock-reset", - "WIPE_DATA": "wipe-data", - "DEVICE_LOCATION": "location", - "DEVICE_REBOOT": "reboot" - }; - return "/api/device-mgt/windows/v1.0/operation/admin/devices/" + featureMap[operationCode]; - }; - - /** - * Get the icon for the featureCode - * @param operationCode - * @returns icon class - */ - publicMethods.getWindowsIconForFeature = function (operationCode) { - var featureMap = { - "DEVICE_LOCK": "fw-lock", - "DEVICE_RING": "fw-dial-up", - "DISENROLL": "fw-export", - "LOCK_RESET": "fw-key", - "WIPE_DATA": "fw-delete", - "DEVICE_LOCATION": "location", - "DEVICE_REBOOT": "fw-refresh" - }; - return featureMap[operationCode]; - }; - - /** - * Filter a list by a data attribute. - * @param prop - * @param val - * @returns {Array} - */ - $.fn.filterByData = function (prop, val) { - return this.filter( - function () { - return $(this).data(prop) == val; - } - ); - }; - - /** - * Method to generate Platform specific operation payload. - * - * @param operationCode Operation Codes to generate the profile from - * @param deviceList Optional device list to include in payload body for operations - * @returns {*} - */ - publicMethods.generatePayload = function (operationCode, deviceList) { - var payload; - var operationData = {}; - // capturing form input data designated by .operationDataKeys - $(".operation-data").filterByData("operation-code", operationCode).find(".operationDataKeys").each( - function () { - var operationDataObj = $(this); - var key = operationDataObj.data("key"); - var value; - if (operationDataObj.is(":text") || operationDataObj.is("textarea") || - operationDataObj.is(":password") || operationDataObj.is("input[type=hidden]")) { - value = operationDataObj.val(); - operationData[key] = value; - } else if (operationDataObj.is(":checkbox")) { - value = operationDataObj.is(":checked"); - operationData[key] = value; - } else if (operationDataObj.is(":radio") && operationDataObj.is(":checked")) { - value = operationDataObj.val(); - operationData[key] = value; - } else if (operationDataObj.is("select")) { - value = operationDataObj.find("option:selected").attr("value"); - operationData[key] = value; - } else if (operationDataObj.hasClass("grouped-array-input")) { - value = []; - var childInput; - var childInputValue; - if (operationDataObj.hasClass("one-column-input-array")) { - $(".child-input", this).each(function () { - childInput = $(this); - if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password") - || childInput.is("input[type=hidden]")) { - childInputValue = childInput.val(); - } else if (childInput.is(":checkbox")) { - childInputValue = childInput.is(":checked"); - } else if (childInput.is("select")) { - childInputValue = childInput.find("option:selected").attr("value"); - } - // push to value - value.push(childInputValue); - }); - } else if (operationDataObj.hasClass("valued-check-box-array")) { - $(".child-input", this).each(function () { - childInput = $(this); - if (childInput.is(":checked")) { - // get associated value with check-box - childInputValue = childInput.data("value"); - // push to value - value.push(childInputValue); - } - }); - } else if (operationDataObj.hasClass("multi-column-joined-input-array")) { - var columnCount = operationDataObj.data("column-count"); - var inputCount = 0; - var joinedInput; - $(".child-input", this).each(function () { - childInput = $(this); - if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password") - || childInput.is("input[type=hidden]")) { - childInputValue = childInput.val(); - } else if (childInput.is(":checkbox")) { - childInputValue = childInput.is(":checked"); - } else if (childInput.is("select")) { - childInputValue = childInput.find("option:selected").attr("value"); - } - inputCount++; - if (inputCount % columnCount == 1) { - // initialize joinedInput value - joinedInput = ""; - // append childInputValue to joinedInput - joinedInput += childInputValue; - } else if ((inputCount % columnCount) >= 2) { - // append childInputValue to joinedInput - joinedInput += childInputValue; - } else { - // append childInputValue to joinedInput - joinedInput += childInputValue; - // push to value - value.push(joinedInput); - } - }); - } else if (operationDataObj.hasClass("multi-column-key-value-pair-array")) { - columnCount = operationDataObj.data("column-count"); - inputCount = 0; - var childInputKey; - var keyValuePairJson; - $(".child-input", this).each(function () { - childInput = $(this); - childInputKey = childInput.data("child-key"); - if (childInput.is(":text") || childInput.is("textarea") || childInput.is(":password") - || childInput.is("input[type=hidden]")) { - childInputValue = childInput.val(); - } else if (childInput.is(":checkbox")) { - childInputValue = childInput.is(":checked"); - } else if (childInput.is("select")) { - childInputValue = childInput.find("option:selected").attr("value"); - } - inputCount++; - if ((inputCount % columnCount) == 1) { - // initialize keyValuePairJson value - keyValuePairJson = {}; - // set key-value-pair - keyValuePairJson[childInputKey] = childInputValue; - } else if ((inputCount % columnCount) >= 2) { - // set key-value-pair - keyValuePairJson[childInputKey] = childInputValue; - } else { - // set key-value-pair - keyValuePairJson[childInputKey] = childInputValue; - // push to value - value.push(keyValuePairJson); - } - }); - } - operationData[key] = value; - } - } - ); - payload = privateMethods.generateWindowsOperationPayload(operationCode, operationData, deviceList); - return payload; - }; - - /** - * Method to populate the Platform specific operation payload. - * - * @param operationCode Operation Codes to generate the profile from - * @param operationPayload payload - * @returns {*} - */ - publicMethods.populateUI = function (operationCode, operationPayload) { - var uiPayload = privateMethods.generateGenericPayloadFromWindowsPayload(operationCode, operationPayload); - // capturing form input data designated by .operationDataKeys - $(".operation-data").filterByData("operation-code", operationCode).find(".operationDataKeys").each( - function () { - var operationDataObj = $(this); - //operationDataObj.prop('disabled', true) - var key = operationDataObj.data("key"); - // retrieve corresponding input value associated with the key - var value = uiPayload[key]; - // populating input value according to the type of input - if (operationDataObj.is(":text") || - operationDataObj.is("textarea") || - operationDataObj.is(":password") || - operationDataObj.is("input[type=hidden]")) { - operationDataObj.val(value); - } else if (operationDataObj.is(":checkbox")) { - operationDataObj.prop("checked", value); - } else if (operationDataObj.is(":radio")) { - if (operationDataObj.val() == uiPayload[key]) { - operationDataObj.attr("checked", true); - operationDataObj.trigger("click"); - } - } else if (operationDataObj.is("select")) { - operationDataObj.val(value); - /* trigger a change of value, so that if slidable panes exist, - make them slide-down or slide-up accordingly */ - operationDataObj.trigger("change"); - } else if (operationDataObj.hasClass("grouped-array-input")) { - // then value is complex - var i, childInput; - var childInputIndex = 0; - // var childInputValue; - if (operationDataObj.hasClass("one-column-input-array")) { - // generating input fields to populate complex value - if (value) { - for (i = 0; i < value.length; ++i) { - operationDataObj.parent().find("a").filterByData("click-event", "add-form").click(); - } - // traversing through each child input - $(".child-input", this).each(function () { - childInput = $(this); - var childInputValue = value[childInputIndex]; - // populating extracted value in the UI according to the input type - if (childInput.is(":text") || - childInput.is("textarea") || - childInput.is(":password") || - childInput.is("input[type=hidden]") || - childInput.is("select")) { - childInput.val(childInputValue); - } else if (childInput.is(":checkbox")) { - operationDataObj.prop("checked", childInputValue); - } - // incrementing childInputIndex - childInputIndex++; - }); - } - } else if (operationDataObj.hasClass("valued-check-box-array")) { - // traversing through each child input - $(".child-input", this).each(function () { - childInput = $(this); - // check if corresponding value of current checkbox exists in the array of values - if (value) { - if (value.indexOf(childInput.data("value")) != -1) { - // if YES, set checkbox as checked - childInput.prop("checked", true); - } - } - }); - } else if (operationDataObj.hasClass("multi-column-joined-input-array")) { - // generating input fields to populate complex value - if (value) { - for (i = 0; i < value.length; ++i) { - operationDataObj.parent().find("a").filterByData("click-event", "add-form").click(); - } - var columnCount = operationDataObj.data("column-count"); - var multiColumnJoinedInputArrayIndex = 0; - // handling scenarios specifically - if (operationDataObj.attr("id") == "wifi-mcc-and-mncs") { - // traversing through each child input - $(".child-input", this).each(function () { - childInput = $(this); - var multiColumnJoinedInput = value[multiColumnJoinedInputArrayIndex]; - var childInputValue; - if ((childInputIndex % columnCount) == 0) { - childInputValue = multiColumnJoinedInput.substring(3, 0) - } else { - childInputValue = multiColumnJoinedInput.substring(3); - // incrementing childInputIndex - multiColumnJoinedInputArrayIndex++; - } - // populating extracted value in the UI according to the input type - if (childInput.is(":text") || - childInput.is("textarea") || - childInput.is(":password") || - childInput.is("input[type=hidden]") || - childInput.is("select")) { - childInput.val(childInputValue); - } else if (childInput.is(":checkbox")) { - operationDataObj.prop("checked", childInputValue); - } - // incrementing childInputIndex - childInputIndex++; - }); - } - } - } else if (operationDataObj.hasClass("multi-column-key-value-pair-array")) { - // generating input fields to populate complex value - if (value) { - for (i = 0; i < value.length; ++i) { - operationDataObj.parent().find("a").filterByData("click-event", "add-form").click(); - } - columnCount = operationDataObj.data("column-count"); - var multiColumnKeyValuePairArrayIndex = 0; - // traversing through each child input - $(".child-input", this).each(function () { - childInput = $(this); - var multiColumnKeyValuePair = value[multiColumnKeyValuePairArrayIndex]; - var childInputKey = childInput.data("child-key"); - var childInputValue = multiColumnKeyValuePair[childInputKey]; - // populating extracted value in the UI according to the input type - if (childInput.is(":text") || - childInput.is("textarea") || - childInput.is(":password") || - childInput.is("input[type=hidden]") || - childInput.is("select")) { - childInput.val(childInputValue); - } else if (childInput.is(":checkbox")) { - operationDataObj.prop("checked", childInputValue); - } - // incrementing multiColumnKeyValuePairArrayIndex for the next row of inputs - if ((childInputIndex % columnCount) == (columnCount - 1)) { - multiColumnKeyValuePairArrayIndex++; - } - // incrementing childInputIndex - childInputIndex++; - }); - } - } - } - } - ); - }; - - /** - * generateProfile method is only used for policy-creation UIs. - * - * @param operationCodes Operation codes to generate the profile from - * @returns {{}} - */ - publicMethods.generateProfile = function (operationCodes) { - var generatedProfile = {}; - for (var i = 0; i < operationCodes.length; ++i) { - var operationCode = operationCodes[i]; - var payload = publicMethods.generatePayload(operationCode, null); - generatedProfile[operationCode] = payload["operation"]; - } - return generatedProfile; - }; - - /** - * populateProfile method is used to populate the html ui with saved payload. - * - * @param payload List of profileFeatures - * @returns [] configuredOperations array - */ - publicMethods.populateProfile = function (payload) { - var i, configuredOperations = []; - for (i = 0; i < payload.length; ++i) { - var configuredFeature = payload[i]; - var featureCode = configuredFeature["featureCode"]; - var operationPayload = configuredFeature["content"]; - //push the feature-code to the configuration array - configuredOperations.push(featureCode); - publicMethods.populateUI(featureCode, operationPayload); - } - return configuredOperations; - }; - - return publicMethods; -}(); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.hbs deleted file mode 100644 index 07fe26ebb..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.hbs +++ /dev/null @@ -1,61 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} - -
    - -
    - -

    - Device Polling Configuration -
    -

    -
    -
    - - -
    -
    -

    - End User License Agreement ( EULA ) -
    -

    -
    - -
    -
    - -
    -
    -
    - -{{#zone "bottomJs"}} - {{js "js/platform-configuration.js"}} -{{/zone}} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.json deleted file mode 100644 index fd2590129..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/configuration.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version" : "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/public/js/platform-configuration.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/public/js/platform-configuration.js deleted file mode 100644 index 32b42eac4..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.platform.configuration/public/js/platform-configuration.js +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -// Constants to define platform types available -var platformTypeConstants = { - "WINDOWS": "windows" -}; - -var responseCodes = { - "CREATED": "Created", - "SUCCESS": "201", - "INTERNAL_SERVER_ERROR": "Internal Server Error" -}; - -var configParams = { - "NOTIFIER_TYPE": "notifierType", - "NOTIFIER_FREQUENCY": "notifierFrequency", - "FCM_API_KEY": "fcmAPIKey", - "FCM_SENDER_ID": "fcmSenderId", - "ANDROID_EULA": "androidEula", - "IOS_EULA": "iosEula", - "CONFIG_COUNTRY": "configCountry", - "CONFIG_STATE": "configState", - "CONFIG_LOCALITY": "configLocality", - "CONFIG_ORGANIZATION": "configOrganization", - "CONFIG_ORGANIZATION_UNIT": "configOrganizationUnit", - "MDM_CERT_PASSWORD": "MDMCertPassword", - "MDM_CERT_TOPIC_ID": "MDMCertTopicID", - "APNS_CERT_PASSWORD": "APNSCertPassword", - "MDM_CERT": "MDMCert", - "MDM_CERT_NAME": "MDMCertName", - "APNS_CERT": "APNSCert", - "APNS_CERT_NAME": "APNSCertName", - "ORG_DISPLAY_NAME": "organizationDisplayName", - "GENERAL_EMAIL_HOST": "emailHost", - "GENERAL_EMAIL_PORT": "emailPort", - "GENERAL_EMAIL_USERNAME": "emailUsername", - "GENERAL_EMAIL_PASSWORD": "emailPassword", - "GENERAL_EMAIL_SENDER_ADDRESS": "emailSender", - "GENERAL_EMAIL_TEMPLATE": "emailTemplate", - "COMMON_NAME": "commonName", - "KEYSTORE_PASSWORD": "keystorePassword", - "PRIVATE_KEY_PASSWORD": "privateKeyPassword", - "BEFORE_EXPIRE": "beforeExpire", - "AFTER_EXPIRE": "afterExpire", - "WINDOWS_EULA": "windowsLicense", - "IOS_CONFIG_MDM_MODE": "iOSConfigMDMMode", - "IOS_CONFIG_APNS_MODE": "iOSConfigAPNSMode" -}; - -function promptErrorPolicyPlatform(errorMsg) { - var mainErrorMsgWrapper = "#platform-config-main-error-msg"; - var mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(errorMsg); - $(mainErrorMsgWrapper).show(); -} - -$(document).ready(function () { - tinymce.init({ - selector: "#windows-eula", - height:500, - theme: "modern", - plugins: [ - "autoresize", - "advlist autolink lists link image charmap print preview anchor", - "searchreplace visualblocks code fullscreen", - "insertdatetime image table contextmenu paste" - ], - toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image" - }); - - var windowsConfigAPI = "/api/device-mgt/windows/v1.0/configuration"; - - invokerUtil.get( - windowsConfigAPI, - function (data) { - data = JSON.parse(data); - if (data != null && data.configuration != null) { - for (var i = 0; i < data.configuration.length; i++) { - var config = data.configuration[i]; - if (config.name == configParams["NOTIFIER_FREQUENCY"]) { - $("input#windows-config-notifier-frequency").val(config.value / 1000); - } else if (config.name == configParams["WINDOWS_EULA"]) { - $("#windows-eula").val(config.value); - } - } - } - }, function (data) { - console.log(data); - } - ); - - $("select.select2[multiple=multiple]").select2({ - tags: true - }); - - var errorMsgWrapperWindows = "#windows-config-error-msg"; - var errorMsgWindows = "#windows-config-error-msg span"; - var fileTypesWindows = ['jks']; - var notSupportedError = false; - - var base64WindowsMDMCert = ""; - var fileInputWindowsMDMCert = $('#windows-config-mdm-certificate'); - var fileNameWindowsMDMCert = ""; - var invalidFormatWindowsMDMCert = false; - - $(fileInputWindowsMDMCert).change(function () { - - if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { - $(errorMsgWindows).text("The File APIs are not fully supported in this browser."); - $(errorMsgWrapperWindows).removeClass("hidden"); - notSupportedError = true; - return; - } - - var file = fileInputWindowsMDMCert[0].files[0]; - fileNameWindowsMDMCert = file.name; - var extension = file.name.split('.').pop().toLowerCase(), - isSuccess = fileTypesWindows.indexOf(extension) > -1; - - if (isSuccess) { - var fileReader = new FileReader(); - fileReader.onload = function (event) { - base64WindowsMDMCert = event.target.result; - }; - fileReader.readAsDataURL(file); - invalidFormatWindowsMDMCert = false; - } else { - base64MDMCert = ""; - invalidFormatWindowsMDMCert = true; - } - }); - - $("button#save-windows-btn").click(function () { - - var notifierFrequency = $("#windows-config-notifier-frequency").val(); - var windowsLicense = tinyMCE.activeEditor.getContent(); - - if (!notifierFrequency) { - $(errorMsgWindows).text("Polling Interval is a required field. It cannot be empty."); - $(errorMsgWrapperWindows).removeClass("hidden"); - } else if (!windowsLicense) { - $(errorMsgWindows).text("License is a required field. It cannot be empty."); - $(errorMsgWrapperWindows).removeClass("hidden"); - } else if (!$.isNumeric(notifierFrequency)) { - $(errorMsgWindows).text("Provided Notifier frequency is invalid. It must be a number."); - $(errorMsgWrapperWindows).removeClass("hidden"); - } else { - var addConfigFormData = {}; - var configList = new Array(); - - var paramNotifierFrequency = { - "name": configParams["NOTIFIER_FREQUENCY"], - "value": String(notifierFrequency * 1000), - "contentType": "text" - }; - - var windowsEula = { - "name": configParams["WINDOWS_EULA"], - "value": windowsLicense, - "contentType": "text" - }; - - configList.push(paramNotifierFrequency); - configList.push(windowsEula); - - addConfigFormData.type = platformTypeConstants["WINDOWS"]; - addConfigFormData.configuration = configList; - - var addConfigAPI = windowsConfigAPI; - - invokerUtil.put( - addConfigAPI, - addConfigFormData, - function (data, textStatus, jqXHR) { - data = jqXHR.status; - if (data == 200) { - $("#config-save-form").addClass("hidden"); - $("#record-created-msg").removeClass("hidden"); - } else if (data == 500) { - $(errorMsgWindows).text("Exception occurred at backend."); - } else if (data == 400) { - $(errorMsgWindows).text("Configurations cannot be empty."); - } else { - $(errorMsgWindows).text("An unexpected error occurred."); - } - - $(errorMsgWrapperWindows).removeClass("hidden"); - }, function (data) { - data = data.status; - if (data == 500) { - $(errorMsgWindows).text("Exception occurred at backend."); - } else if (data == 403) { - $(errorMsgWindows).text("Action was not permitted."); - } else { - $(errorMsgWindows).text("An unexpected error occurred."); - } - $(errorMsgWrapperWindows).removeClass("hidden"); - } - ); - } - - }); -}); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.hbs deleted file mode 100644 index 7b9952568..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.hbs +++ /dev/null @@ -1,18 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{unit "cdmf.unit.policy.edit"}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/policy-edit.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/js/windows-policy-edit.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/js/windows-policy-edit.js deleted file mode 100644 index 1e756185b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/js/windows-policy-edit.js +++ /dev/null @@ -1,590 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -var configuredOperations = []; - -var windowsOperationConstants = { - "PASSCODE_POLICY_OPERATION": "passcode-policy", - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "CAMERA_OPERATION": "camera", - "CAMERA_OPERATION_CODE": "CAMERA", - "ENCRYPT_STORAGE_OPERATION": "encrypt-storage", - "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE" -}; - -/** - * Method to update the visibility of grouped input. - * @param domElement HTML grouped-input element with class name "grouped-input" - */ -var updateGroupedInputVisibility = function (domElement) { - if ($(".parent-input:first", domElement).is(":checked")) { - if ($(".grouped-child-input:first", domElement).hasClass("disabled")) { - $(".grouped-child-input:first", domElement).removeClass("disabled"); - } - $(".child-input", domElement).each(function () { - $(this).prop('disabled', false); - }); - } else { - if (!$(".grouped-child-input:first", domElement).hasClass("disabled")) { - $(".grouped-child-input:first", domElement).addClass("disabled"); - } - $(".child-input", domElement).each(function () { - $(this).prop('disabled', true); - }); - } -}; - -/** - * Populates policy configuration to the ui elements. - * - * This method will be invoked from the relevant cdmf unit when the edit page gets loaded. - * - * @param profileFeatureList saved feature list - */ -var polulateProfileOperations = function (profileFeatureList) { - var selectedOperations = windowsOperationModule.populateProfile(profileFeatureList); - $(".wr-advance-operations li.grouped-input").each(function () { - updateGroupedInputVisibility(this); - }); - for (var i = 0; i < selectedOperations.length; ++i) { - var selectedOperation = selectedOperations[i]; - $(".operation-data").filterByData("operation-code", selectedOperation) - .find(".panel-title .wr-input-control.switch input[type=checkbox]").each(function () { - $(this).click(); - }); - } -}; - -/** - * Generates policy profile feature list which will be saved with the profile. - * - * This function will be invoked from the relevant cdmf unit at the time of policy creation. - * - * @returns {Array} profile payloads - */ -var generateProfileFeaturesList = function () { - var profilePayloads = []; - // traverses key by key in policy["profile"] - var key; - for (key in policy["profile"]) { - if (policy["profile"].hasOwnProperty(key)) { - if (key == windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]) { - policy["profile"][key].enablePassword = true; - } - profilePayloads.push({ - "featureCode": key, - "deviceType": policy["platform"], - "content": policy["profile"][key] - }); - } - } - return profilePayloads; -}; - -/** - * Generates policy profile object which will be saved with the profile. - * - * This function will be invoked from the relevant cdmf unit at the time of policy creation. - * - * @returns {object} generated profile. - */ -var generatePolicyProfile = function () { - return windowsOperationModule.generateProfile(configuredOperations); -}; - -/** - * Checks if provided number is valid against a range. - * - * @param numberInput Number Input - * @param min Minimum Limit - * @param max Maximum Limit - * @returns {boolean} Returns true if input is within the specified range - */ -var inputIsValidAgainstRange = function (numberInput, min, max) { - return (numberInput == min || (numberInput > min && numberInput < max) || numberInput == max); -}; - -/** - * Validates policy profile operations for the windows platform. - * - * This function will be invoked from the relevant cdmf unit at the time of policy creation. - * - * @returns {boolean} whether validation is successful. - */ -var validatePolicyProfile = function () { - var validationStatusArray = []; - var validationStatus; - var operation; - - // starting validation process and updating validationStatus - if (configuredOperations.length == 0) { - // updating validationStatus - validationStatus = { - "error": true, - "mainErrorMsg": "You cannot continue. Zero configured features." - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } else { - // validating each and every configured Operation - // Validating PASSCODE_POLICY - if ($.inArray(windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = windowsOperationConstants["PASSCODE_POLICY_OPERATION"]; - // initializing continueToCheckNextInputs to true - var continueToCheckNextInputs = true; - - // validating first input: passcodePolicyMaxPasscodeAgeInDays - var passcodePolicyMaxPasscodeAgeInDays = $("input#passcode-policy-max-passcode-age-in-days").val(); - if (passcodePolicyMaxPasscodeAgeInDays) { - if (!$.isNumeric(passcodePolicyMaxPasscodeAgeInDays)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode age is not a number.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(passcodePolicyMaxPasscodeAgeInDays, 1, 730)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode age is not with in the range of 1-to-730.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - // validating second and last input: passcodePolicyPasscodeHistory - if (continueToCheckNextInputs) { - var passcodePolicyPasscodeHistory = $("input#passcode-policy-passcode-history").val(); - if (passcodePolicyPasscodeHistory) { - if (!$.isNumeric(passcodePolicyPasscodeHistory)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode history is not a number.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(passcodePolicyPasscodeHistory, 1, 50)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode history is not with in the range of 1-to-50.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - // at-last, if the value of continueToCheckNextInputs is still true - // this means that no error is found - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating CAMERA - if ($.inArray(windowsOperationConstants["CAMERA_OPERATION_CODE"], configuredOperations) != -1) { - // if CAMERA is configured - operation = windowsOperationConstants["CAMERA_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating ENCRYPT_STORAGE - if ($.inArray(windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"], configuredOperations) != -1) { - // if ENCRYPT_STORAGE is configured - operation = windowsOperationConstants["ENCRYPT_STORAGE_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - - } - // ending validation process - - // start taking specific notifying actions upon validation - var wizardIsToBeContinued; - var errorCount = 0; - var mainErrorMsgWrapper, mainErrorMsg, - subErrorMsgWrapper, subErrorMsg, subErrorIcon, subOkIcon, featureConfiguredIcon; - var i; - for (i = 0; i < validationStatusArray.length; i++) { - validationStatus = validationStatusArray[i]; - if (validationStatus["error"]) { - errorCount++; - if (validationStatus["mainErrorMsg"]) { - mainErrorMsgWrapper = "#policy-profile-main-error-msg"; - mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else if (validationStatus["subErrorMsg"]) { - subErrorMsgWrapper = "#" + validationStatus["erroneousFeature"] + "-feature-error-msg"; - subErrorMsg = subErrorMsgWrapper + " span"; - subErrorIcon = "#" + validationStatus["erroneousFeature"] + "-error"; - subOkIcon = "#" + validationStatus["erroneousFeature"] + "-ok"; - featureConfiguredIcon = "#" + validationStatus["erroneousFeature"] + "-configured"; - // hiding featureConfiguredState as the first step - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - // updating error state and corresponding messages - $(subErrorMsg).text(validationStatus["subErrorMsg"]); - if ($(subErrorMsgWrapper).hasClass("hidden")) { - $(subErrorMsgWrapper).removeClass("hidden"); - } - if (!$(subOkIcon).hasClass("hidden")) { - $(subOkIcon).addClass("hidden"); - } - if ($(subErrorIcon).hasClass("hidden")) { - $(subErrorIcon).removeClass("hidden"); - } - } - } else { - if (validationStatus["okFeature"]) { - subErrorMsgWrapper = "#" + validationStatus["okFeature"] + "-feature-error-msg"; - subErrorIcon = "#" + validationStatus["okFeature"] + "-error"; - subOkIcon = "#" + validationStatus["okFeature"] + "-ok"; - featureConfiguredIcon = "#" + validationStatus["okFeature"] + "-configured"; - // hiding featureConfiguredState as the first step - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - // updating success state and corresponding messages - if (!$(subErrorMsgWrapper).hasClass("hidden")) { - $(subErrorMsgWrapper).addClass("hidden"); - } - if (!$(subErrorIcon).hasClass("hidden")) { - $(subErrorIcon).addClass("hidden"); - } - if ($(subOkIcon).hasClass("hidden")) { - $(subOkIcon).removeClass("hidden"); - } - } - } - } - - wizardIsToBeContinued = (errorCount == 0); - return wizardIsToBeContinued; -}; - -// Start of HTML embedded invoke methods -var showAdvanceOperation = function (operation, button) { - $(button).addClass('selected'); - $(button).siblings().removeClass('selected'); - var hiddenOperation = ".wr-hidden-operations-content > div"; - $(hiddenOperation + '[data-operation="' + operation + '"]').show(); - $(hiddenOperation + '[data-operation="' + operation + '"]').siblings().hide(); -}; - -/** - * Method to slide down a provided pane upon provided value set. - * - * @param selectElement Select HTML Element to consider - * @param paneID HTML ID of div element to slide down - * @param valueSet Applicable Value Set - */ -var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = $(selectElement).find("option:selected").val(); - if ($(selectElement).is("input:checkbox")) { - selectedValueOnChange = $(selectElement).is(":checked").toString(); - } - - var i, slideDownVotes = 0; - for (i = 0; i < valueSet.length; i++) { - if (selectedValueOnChange == valueSet[i]) { - slideDownVotes++; - } - } - var paneSelector = "#" + paneID; - if (slideDownVotes > 0) { - if (!$(paneSelector).hasClass("expanded")) { - $(paneSelector).addClass("expanded"); - } - $(paneSelector).slideDown(); - } else { - if ($(paneSelector).hasClass("expanded")) { - $(paneSelector).removeClass("expanded"); - } - $(paneSelector).slideUp(); - /* now follows the code to reinitialize all inputs of the slidable pane */ - // reinitializing input fields into the defaults - $(paneSelector + " input").each( - function () { - if ($(this).is("input:text")) { - $(this).val($(this).data("default")); - } else if ($(this).is("input:password")) { - $(this).val(""); - } else if ($(this).is("input:checkbox")) { - $(this).prop("checked", $(this).data("default")); - // if this checkbox is the parent input of a grouped-input - if ($(this).hasClass("parent-input")) { - var groupedInput = $(this).parent().parent().parent(); - updateGroupedInputVisibility(groupedInput); - } - } - } - ); - // reinitializing select fields into the defaults - $(paneSelector + " select").each( - function () { - var defaultOption = $(this).data("default"); - $("option:eq(" + defaultOption + ")", this).prop("selected", "selected"); - } - ); - // collapsing expanded-panes (upon the selection of html-select-options) if any - $(paneSelector + " .expanded").each( - function () { - if ($(this).hasClass("expanded")) { - $(this).removeClass("expanded"); - } - $(this).slideUp(); - } - ); - // removing all entries of grid-input elements if exist - $(paneSelector + " .grouped-array-input").each( - function () { - var gridInputs = $(this).find("[data-add-form-clone]"); - if (gridInputs.length > 0) { - gridInputs.remove(); - } - var helpTexts = $(this).find("[data-help-text=add-form]"); - if (helpTexts.length > 0) { - helpTexts.show(); - } - } - ); - } -}; -// End of HTML embedded invoke methods - -// Start of functions related to grid-input-view -/** - * Method to set count id to cloned elements. - * @param {object} addFormContainer - */ -var setId = function (addFormContainer) { - $(addFormContainer).find("[data-add-form-clone]").each(function (i) { - $(this).attr("id", $(this).attr("data-add-form-clone").slice(1) + "-" + (i + 1)); - if ($(this).find(".index").length > 0) { - $(this).find(".index").html(i + 1); - } - }); -}; - -/** - * Method to set count id to cloned elements. - * @param {object} addFormContainer - */ -var showHideHelpText = function (addFormContainer) { - var helpText = "[data-help-text=add-form]"; - if ($(addFormContainer).find("[data-add-form-clone]").length > 0) { - $(addFormContainer).find(helpText).hide(); - } else { - $(addFormContainer).find(helpText).show(); - } -}; - -$(document).ready(function () { - // Maintains an array of configured features of the profile - var advanceOperations = ".wr-advance-operations"; - $(advanceOperations).on("click", ".wr-input-control.switch", function (event) { - var operationCode = $(this).parents(".operation-data").data("operation-code"); - var operation = $(this).parents(".operation-data").data("operation"); - var operationDataWrapper = $(this).data("target"); - // prevents event bubbling by figuring out what element it's being called from. - if (event.target.tagName == "INPUT") { - var featureConfiguredIcon; - if ($("input[type='checkbox']", this).is(":checked")) { - configuredOperations.push(operationCode); - // when a feature is enabled, if "zero-configured-features" msg is available, hide that. - var zeroConfiguredOperationsErrorMsg = "#policy-profile-main-error-msg"; - if (!$(zeroConfiguredOperationsErrorMsg).hasClass("hidden")) { - $(zeroConfiguredOperationsErrorMsg).addClass("hidden"); - } - // add configured-state-icon to the feature - featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).removeClass("hidden"); - } - } else { - //splicing the array if operation is present. - var index = $.inArray(operationCode, configuredOperations); - if (index != -1) { - configuredOperations.splice(index, 1); - } - // when a feature is disabled, clearing all its current configured, error or success states - var subErrorMsgWrapper = "#" + operation + "-feature-error-msg"; - var subErrorIcon = "#" + operation + "-error"; - var subOkIcon = "#" + operation + "-ok"; - featureConfiguredIcon = "#" + operation + "-configured"; - - if (!$(subErrorMsgWrapper).hasClass("hidden")) { - $(subErrorMsgWrapper).addClass("hidden"); - } - if (!$(subErrorIcon).hasClass("hidden")) { - $(subErrorIcon).addClass("hidden"); - } - if (!$(subOkIcon).hasClass("hidden")) { - $(subOkIcon).addClass("hidden"); - } - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - // reinitializing input fields into the defaults - $(operationDataWrapper + " input").each( - function () { - if ($(this).is("input:text")) { - $(this).val($(this).data("default")); - } else if ($(this).is("input:password")) { - $(this).val(""); - } else if ($(this).is("input:checkbox")) { - $(this).prop("checked", $(this).data("default")); - // if this checkbox is the parent input of a grouped-input - if ($(this).hasClass("parent-input")) { - var groupedInput = $(this).parent().parent().parent(); - updateGroupedInputVisibility(groupedInput); - } - } - } - ); - // reinitializing select fields into the defaults - $(operationDataWrapper + " select").each( - function () { - var defaultOption = $(this).data("default"); - $("option:eq(" + defaultOption + ")", this).prop("selected", "selected"); - } - ); - // collapsing expanded-panes (upon the selection of html-select-options) if any - $(operationDataWrapper + " .expanded").each( - function () { - if ($(this).hasClass("expanded")) { - $(this).removeClass("expanded"); - } - $(this).slideUp(); - } - ); - // removing all entries of grid-input elements if exist - $(operationDataWrapper + " .grouped-array-input").each( - function () { - var gridInputs = $(this).find("[data-add-form-clone]"); - if (gridInputs.length > 0) { - gridInputs.remove(); - } - var helpTexts = $(this).find("[data-help-text=add-form]"); - if (helpTexts.length > 0) { - helpTexts.show(); - } - } - ); - } - } - }); - - // - $(advanceOperations).on('hidden.bs.collapse', function (event) { - var collapsedFeatureBody = event.target.id; - var operation = collapsedFeatureBody.substr(0, collapsedFeatureBody.lastIndexOf("-")); - var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]"; - var featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguringSwitch).prop("checked") == true) { - $(featureConfiguringSwitch).prop("checked", false); - } - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - }); - - $(advanceOperations).on('shown.bs.collapse', function (event) { - var expandedFeatureBody = event.target.id; - var operation = expandedFeatureBody.substr(0, expandedFeatureBody.lastIndexOf("-")); - var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]"; - var featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguringSwitch).prop("checked") == false) { - $(featureConfiguringSwitch).prop("checked", true); - } - if ($(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).removeClass("hidden"); - } - }); - // - - // adding support for cloning multiple profiles per feature with cloneable class definitions - $(advanceOperations).on("click", ".multi-view.add.enabled", function () { - // get a copy of .cloneable and create new .cloned div element - var cloned = "

    " + $(".cloneable", $(this).parent().parent()).html() + "
    "; - // append newly created .cloned div element to panel-body - $(this).parent().parent().append(cloned); - // enable remove action of newly cloned div element - $(".cloned", $(this).parent().parent()).each( - function () { - if ($(".multi-view.remove", this).hasClass("disabled")) { - $(".multi-view.remove", this).removeClass("disabled"); - } - if (!$(".multi-view.remove", this).hasClass("enabled")) { - $(".multi-view.remove", this).addClass("enabled"); - } - } - ); - }); - - $(advanceOperations).on("click", ".multi-view.remove.enabled", function () { - $(this).parent().remove(); - }); - - // enabling or disabling grouped-input based on the status of a parent check-box - $(advanceOperations).on("click", ".grouped-input", function () { - updateGroupedInputVisibility(this); - }); - - // add form entry click function for grid inputs - $(advanceOperations).on("click", "[data-click-event=add-form]", function () { - var addFormContainer = $("[data-add-form-container=" + $(this).attr("href") + "]"); - var clonedForm = $("[data-add-form=" + $(this).attr("href") + "]").clone().find("[data-add-form-element=clone]") - .attr("data-add-form-clone", $(this).attr("href")); - - // adding class .child-input to capture text-input-array-values - $("input, select", clonedForm).addClass("child-input"); - - $(addFormContainer).append(clonedForm); - setId(addFormContainer); - showHideHelpText(addFormContainer); - }); - - // remove form entry click function for grid inputs - $(advanceOperations).on("click", "[data-click-event=remove-form]", function () { - var addFormContainer = $("[data-add-form-container=" + $(this).attr("href") + "]"); - - $(this).closest("[data-add-form-element=clone]").remove(); - setId(addFormContainer); - showHideHelpText(addFormContainer); - }); -}); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/templates/windows-policy-edit.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/templates/windows-policy-edit.hbs deleted file mode 100644 index 5b97a6692..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-edit/public/templates/windows-policy-edit.hbs +++ /dev/null @@ -1,391 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you need to disable camera. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you need to disable storage-encryption. -
    -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    - -
    -
    - - - - -
    - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.hbs deleted file mode 100644 index e1454e050..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.hbs +++ /dev/null @@ -1,18 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{unit "cdmf.unit.policy.view"}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/policy-view.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/js/windows-policy-view.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/js/windows-policy-view.js deleted file mode 100644 index 9280bec14..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/js/windows-policy-view.js +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -/** - * Method to update the visibility (i.e. disabled or enabled view) - * of grouped input according to the values - * that they currently possess. - * @param domElement HTML grouped-input element with class name "grouped-input" - */ -var updateGroupedInputVisibility = function (domElement) { - if ($(".parent-input:first", domElement).is(":checked")) { - if ($(".grouped-child-input:first", domElement).hasClass("disabled")) { - $(".grouped-child-input:first", domElement).removeClass("disabled"); - } - $(".child-input", domElement).each(function () { - $(this).prop('disabled', false); - }); - } else { - if (!$(".grouped-child-input:first", domElement).hasClass("disabled")) { - $(".grouped-child-input:first", domElement).addClass("disabled"); - } - $(".child-input", domElement).each(function () { - $(this).prop('disabled', true); - }); - } -}; - -/** - * Populates policy configuration to the ui elements. - * - * This method will be invoked from the relevant cdmf unit when the edit page gets loaded. - * - * @param profileFeatureList selected configurations. - */ -var polulateProfileOperations = function (profileFeatureList) { - var selectedConfigurations = windowsOperationModule.populateProfile(profileFeatureList); - $(".wr-advance-operations li.grouped-input").each(function () { - updateGroupedInputVisibility(this); - }); - // enabling previously configured options of last update - for (var i = 0; i < selectedConfigurations.length; ++i) { - var selectedOperation = selectedConfigurations[i]; - $(".operation-data").filterByData("operation-code", selectedOperation) - .find(".panel-title .wr-input-control.switch input[type=checkbox]").each(function () { - $(this).click(); - }); - } -}; - -// Start of HTML embedded invoke methods -var showAdvanceOperation = function (operation, button) { - $(button).addClass('selected'); - $(button).siblings().removeClass('selected'); - var hiddenOperation = ".wr-hidden-operations-content > div"; - $(hiddenOperation + '[data-operation="' + operation + '"]').show(); - $(hiddenOperation + '[data-operation="' + operation + '"]').siblings().hide(); -}; - -/** - * Method to slide down a provided pane upon provided value set. - * - * @param selectElement Select HTML Element to consider - * @param paneID HTML ID of div element to slide down - * @param valueSet Applicable Value Set - */ -var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = $(selectElement).find("option:selected").val(); - if ($(selectElement).is("input:checkbox")) { - selectedValueOnChange = $(selectElement).is(":checked").toString(); - } - - var i, slideDownVotes = 0; - for (i = 0; i < valueSet.length; i++) { - if (selectedValueOnChange == valueSet[i]) { - slideDownVotes++; - } - } - var paneSelector = "#" + paneID; - if (slideDownVotes > 0) { - if (!$(paneSelector).hasClass("expanded")) { - $(paneSelector).addClass("expanded"); - } - $(paneSelector).slideDown(); - } else { - if ($(paneSelector).hasClass("expanded")) { - $(paneSelector).removeClass("expanded"); - } - $(paneSelector).slideUp(); - /* now follows the code to reinitialize all inputs of the slidable pane. - reinitializing input fields into the defaults.*/ - $(paneSelector + " input").each( - function () { - if ($(this).is("input:text")) { - $(this).val($(this).data("default")); - } else if ($(this).is("input:password")) { - $(this).val(""); - } else if ($(this).is("input:checkbox")) { - $(this).prop("checked", $(this).data("default")); - // if this checkbox is the parent input of a grouped-input - if ($(this).hasClass("parent-input")) { - var groupedInput = $(this).parent().parent().parent(); - } - } - } - ); - // reinitializing select fields into the defaults - $(paneSelector + " select").each( - function () { - var defaultOption = $(this).data("default"); - $("option:eq(" + defaultOption + ")", this).prop("selected", "selected"); - } - ); - // collapsing expanded-panes (upon the selection of html-select-options) if any - $(paneSelector + " .expanded").each( - function () { - if ($(this).hasClass("expanded")) { - $(this).removeClass("expanded"); - } - $(this).slideUp(); - } - ); - // removing all entries of grid-input elements if exist - $(paneSelector + " .grouped-array-input").each( - function () { - var gridInputs = $(this).find("[data-add-form-clone]"); - if (gridInputs.length > 0) { - gridInputs.remove(); - } - var helpTexts = $(this).find("[data-help-text=add-form]"); - if (helpTexts.length > 0) { - helpTexts.show(); - } - } - ); - } -}; - -var slideDownPaneAgainstValueSetForRadioButtons = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = selectElement.value; - var slideDownVotes = 0; - for (var i = 0; i < valueSet.length; i++) { - if (selectedValueOnChange == valueSet[i]) { - slideDownVotes++; - } - } - var paneSelector = "#" + paneID; - if (slideDownVotes > 0) { - $(paneSelector).removeClass("hidden"); - } else { - $(paneSelector).addClass("hidden"); - } -}; -// End of HTML embedded invoke methods - -$(document).ready(function () { - var advanceOperations = ".wr-advance-operations"; - $(advanceOperations).on("click", ".wr-input-control.switch", function (event) { - var operation = $(this).parents(".operation-data").data("operation"); - // prevents event bubbling by figuring out what element it's being called from. - if (event.target.tagName == "INPUT") { - var featureConfiguredIcon; - if ($("input[type='checkbox']", this).is(":checked")) { - // add configured-state-icon to the feature - featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).removeClass("hidden"); - } - } - } - }); -}); \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/templates/windows-policy-view.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/templates/windows-policy-view.hbs deleted file mode 100644 index cbf6f558e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-view/public/templates/windows-policy-view.hbs +++ /dev/null @@ -1,288 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you need to disable camera. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you need to disable storage-encryption. -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.hbs deleted file mode 100644 index 9e1fd3b09..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.hbs +++ /dev/null @@ -1,18 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{unit "mdm.unit.policy.wizard"}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/policy-wizard.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/js/windows-policy-operations.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/js/windows-policy-operations.js deleted file mode 100644 index 4f8c121d0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/js/windows-policy-operations.js +++ /dev/null @@ -1,578 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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. - */ - -var configuredOperations = []; - -var windowsOperationConstants = { - "PASSCODE_POLICY_OPERATION": "passcode-policy", - "PASSCODE_POLICY_OPERATION_CODE": "PASSCODE_POLICY", - "CAMERA_OPERATION": "camera", - "CAMERA_OPERATION_CODE": "CAMERA", - "ENCRYPT_STORAGE_OPERATION": "encrypt-storage", - "ENCRYPT_STORAGE_OPERATION_CODE": "ENCRYPT_STORAGE" -}; - -/** - * Method to update the visibility of grouped input. - * @param domElement HTML grouped-input element with class name "grouped-input" - */ -var updateGroupedInputVisibility = function (domElement) { - if ($(".parent-input:first", domElement).is(":checked")) { - if ($(".grouped-child-input:first", domElement).hasClass("disabled")) { - $(".grouped-child-input:first", domElement).removeClass("disabled"); - } - $(".child-input", domElement).each(function () { - $(this).prop('disabled', false); - }); - } else { - if (!$(".grouped-child-input:first", domElement).hasClass("disabled")) { - $(".grouped-child-input:first", domElement).addClass("disabled"); - } - $(".child-input", domElement).each(function () { - $(this).prop('disabled', true); - }); - } -}; - -/** - * Checks if provided number is valid against a range. - * - * @param numberInput Number Input - * @param min Minimum Limit - * @param max Maximum Limit - * @returns {boolean} Returns true if input is within the specified range - */ -var inputIsValidAgainstRange = function (numberInput, min, max) { - return (numberInput == min || (numberInput > min && numberInput < max) || numberInput == max); -}; - -/** - * Validates policy profile operations for the windows platform. - * - * This function will be invoked from the relevant cdmf unit at the time of policy creation. - * - * @returns {boolean} whether validation is successful. - */ -var validatePolicyProfile = function () { - var validationStatusArray = []; - var validationStatus; - var operation; - - // starting validation process and updating validationStatus - if (configuredOperations.length == 0) { - // updating validationStatus - validationStatus = { - "error": true, - "mainErrorMsg": "You cannot continue. Zero configured features." - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } else { - // validating each and every configured Operation - // Validating PASSCODE_POLICY - if ($.inArray(windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"], configuredOperations) != -1) { - // if PASSCODE_POLICY is configured - operation = windowsOperationConstants["PASSCODE_POLICY_OPERATION"]; - // initializing continueToCheckNextInputs to true - var continueToCheckNextInputs = true; - - // validating first input: passcodePolicyMaxPasscodeAgeInDays - var passcodePolicyMaxPasscodeAgeInDays = $("input#passcode-policy-max-passcode-age-in-days").val(); - if (passcodePolicyMaxPasscodeAgeInDays) { - if (!$.isNumeric(passcodePolicyMaxPasscodeAgeInDays)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode age is not a number.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(passcodePolicyMaxPasscodeAgeInDays, 1, 730)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode age is not with in the range of 1-to-730.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - - // validating second and last input: passcodePolicyPasscodeHistory - if (continueToCheckNextInputs) { - var passcodePolicyPasscodeHistory = $("input#passcode-policy-passcode-history").val(); - if (passcodePolicyPasscodeHistory) { - if (!$.isNumeric(passcodePolicyPasscodeHistory)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode history is not a number.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } else if (!inputIsValidAgainstRange(passcodePolicyPasscodeHistory, 1, 50)) { - validationStatus = { - "error": true, - "subErrorMsg": "Provided passcode history is not with in the range of 1-to-50.", - "erroneousFeature": operation - }; - continueToCheckNextInputs = false; - } - } - } - - // at-last, if the value of continueToCheckNextInputs is still true - // this means that no error is found - if (continueToCheckNextInputs) { - validationStatus = { - "error": false, - "okFeature": operation - }; - } - - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating CAMERA - if ($.inArray(windowsOperationConstants["CAMERA_OPERATION_CODE"], configuredOperations) != -1) { - // if CAMERA is configured - operation = windowsOperationConstants["CAMERA_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - // Validating ENCRYPT_STORAGE - if ($.inArray(windowsOperationConstants["ENCRYPT_STORAGE_OPERATION_CODE"], configuredOperations) != -1) { - // if ENCRYPT_STORAGE is configured - operation = windowsOperationConstants["ENCRYPT_STORAGE_OPERATION"]; - // updating validationStatus - validationStatus = { - "error": false, - "okFeature": operation - }; - // updating validationStatusArray with validationStatus - validationStatusArray.push(validationStatus); - } - - } - // ending validation process - - // start taking specific notifying actions upon validation - var wizardIsToBeContinued; - var errorCount = 0; - var mainErrorMsgWrapper, mainErrorMsg, - subErrorMsgWrapper, subErrorMsg, subErrorIcon, subOkIcon, featureConfiguredIcon; - var i; - for (i = 0; i < validationStatusArray.length; i++) { - validationStatus = validationStatusArray[i]; - if (validationStatus["error"]) { - errorCount++; - if (validationStatus["mainErrorMsg"]) { - mainErrorMsgWrapper = "#policy-profile-main-error-msg"; - mainErrorMsg = mainErrorMsgWrapper + " span"; - $(mainErrorMsg).text(validationStatus["mainErrorMsg"]); - $(mainErrorMsgWrapper).removeClass("hidden"); - } else if (validationStatus["subErrorMsg"]) { - subErrorMsgWrapper = "#" + validationStatus["erroneousFeature"] + "-feature-error-msg"; - subErrorMsg = subErrorMsgWrapper + " span"; - subErrorIcon = "#" + validationStatus["erroneousFeature"] + "-error"; - subOkIcon = "#" + validationStatus["erroneousFeature"] + "-ok"; - featureConfiguredIcon = "#" + validationStatus["erroneousFeature"] + "-configured"; - // hiding featureConfiguredState as the first step - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - // updating error state and corresponding messages - $(subErrorMsg).text(validationStatus["subErrorMsg"]); - if ($(subErrorMsgWrapper).hasClass("hidden")) { - $(subErrorMsgWrapper).removeClass("hidden"); - } - if (!$(subOkIcon).hasClass("hidden")) { - $(subOkIcon).addClass("hidden"); - } - if ($(subErrorIcon).hasClass("hidden")) { - $(subErrorIcon).removeClass("hidden"); - } - } - } else { - if (validationStatus["okFeature"]) { - subErrorMsgWrapper = "#" + validationStatus["okFeature"] + "-feature-error-msg"; - subErrorIcon = "#" + validationStatus["okFeature"] + "-error"; - subOkIcon = "#" + validationStatus["okFeature"] + "-ok"; - featureConfiguredIcon = "#" + validationStatus["okFeature"] + "-configured"; - // hiding featureConfiguredState as the first step - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - // updating success state and corresponding messages - if (!$(subErrorMsgWrapper).hasClass("hidden")) { - $(subErrorMsgWrapper).addClass("hidden"); - } - if (!$(subErrorIcon).hasClass("hidden")) { - $(subErrorIcon).addClass("hidden"); - } - if ($(subOkIcon).hasClass("hidden")) { - $(subOkIcon).removeClass("hidden"); - } - } - } - } - - wizardIsToBeContinued = (errorCount == 0); - return wizardIsToBeContinued; -}; - -/** - * Generates policy profile feature list which will be saved with the profile. - * - * This function will be invoked from the relevant cdmf unit at the time of policy creation. - * - * @returns {Array} profile payloads - */ -var generateProfileFeaturesList = function () { - var profilePayloads = []; - // traverses key by key in policy["profile"] - var key; - for (key in policy["profile"]) { - if (policy["profile"].hasOwnProperty(key)) { - if (key == windowsOperationConstants["PASSCODE_POLICY_OPERATION_CODE"]) { - policy["profile"][key].enablePassword = true; - } - profilePayloads.push({ - "featureCode": key, - "deviceType": policy["platform"], - "content": policy["profile"][key] - }); - } - } - return profilePayloads; -}; - -/** - * Generates policy profile object which will be saved with the profile. - * - * This function will be invoked from the relevant cdmf unit at the time of policy creation. - * - * @returns {object} generated profile. - */ -var generatePolicyProfile = function () { - return windowsOperationModule.generateProfile(configuredOperations); -}; - -/** - * Resets policy profile configurations. - */ -var resetPolicyProfile = function () { - configuredOperations = []; -}; - -// Start of HTML embedded invoke methods -var showAdvanceOperation = function (operation, button) { - $(button).addClass('selected'); - $(button).siblings().removeClass('selected'); - var hiddenOperation = ".wr-hidden-operations-content > div"; - $(hiddenOperation + '[data-operation="' + operation + '"]').show(); - $(hiddenOperation + '[data-operation="' + operation + '"]').siblings().hide(); -}; - -/** - * Method to slide down a provided pane upon provided value set. - * - * @param selectElement Select HTML Element to consider - * @param paneID HTML ID of div element to slide down - * @param valueSet Applicable Value Set - */ -var slideDownPaneAgainstValueSet = function (selectElement, paneID, valueSet) { - var selectedValueOnChange = $(selectElement).find("option:selected").val(); - if ($(selectElement).is("input:checkbox")) { - selectedValueOnChange = $(selectElement).is(":checked").toString(); - } - - var i, slideDownVotes = 0; - for (i = 0; i < valueSet.length; i++) { - if (selectedValueOnChange == valueSet[i]) { - slideDownVotes++; - } - } - var paneSelector = "#" + paneID; - if (slideDownVotes > 0) { - if (!$(paneSelector).hasClass("expanded")) { - $(paneSelector).addClass("expanded"); - } - $(paneSelector).slideDown(); - } else { - if ($(paneSelector).hasClass("expanded")) { - $(paneSelector).removeClass("expanded"); - } - $(paneSelector).slideUp(); - /** now follows the code to reinitialize all inputs of the slidable pane */ - // reinitializing input fields into the defaults - $(paneSelector + " input").each( - function () { - if ($(this).is("input:text")) { - $(this).val($(this).data("default")); - } else if ($(this).is("input:password")) { - $(this).val(""); - } else if ($(this).is("input:checkbox")) { - $(this).prop("checked", $(this).data("default")); - // if this checkbox is the parent input of a grouped-input - if ($(this).hasClass("parent-input")) { - var groupedInput = $(this).parent().parent().parent(); - updateGroupedInputVisibility(groupedInput); - } - } - } - ); - // reinitializing select fields into the defaults - $(paneSelector + " select").each( - function () { - var defaultOption = $(this).data("default"); - $("option:eq(" + defaultOption + ")", this).prop("selected", "selected"); - } - ); - // collapsing expanded-panes (upon the selection of html-select-options) if any - $(paneSelector + " .expanded").each( - function () { - if ($(this).hasClass("expanded")) { - $(this).removeClass("expanded"); - } - $(this).slideUp(); - } - ); - // removing all entries of grid-input elements if exist - $(paneSelector + " .grouped-array-input").each( - function () { - var gridInputs = $(this).find("[data-add-form-clone]"); - if (gridInputs.length > 0) { - gridInputs.remove(); - } - var helpTexts = $(this).find("[data-help-text=add-form]"); - if (helpTexts.length > 0) { - helpTexts.show(); - } - } - ); - } -}; -// End of HTML embedded invoke methods - - -// Start of functions related to grid-input-view - -/** - * Method to set count id to cloned elements. - * @param {object} addFormContainer - */ -var setId = function (addFormContainer) { - $(addFormContainer).find("[data-add-form-clone]").each(function (i) { - $(this).attr("id", $(this).attr("data-add-form-clone").slice(1) + "-" + (i + 1)); - if ($(this).find(".index").length > 0) { - $(this).find(".index").html(i + 1); - } - }); -}; - -/** - * Method to set count id to cloned elements. - * @param {object} addFormContainer - */ -var showHideHelpText = function (addFormContainer) { - var helpText = "[data-help-text=add-form]"; - if ($(addFormContainer).find("[data-add-form-clone]").length > 0) { - $(addFormContainer).find(helpText).hide(); - } else { - $(addFormContainer).find(helpText).show(); - } -}; - -$(document).ready(function () { - // Maintains an array of configured features of the profile - var advanceOperations = ".wr-advance-operations"; - $(advanceOperations).on("click", ".wr-input-control.switch", function (event) { - var operationCode = $(this).parents(".operation-data").data("operation-code"); - var operation = $(this).parents(".operation-data").data("operation"); - var operationDataWrapper = $(this).data("target"); - // prevents event bubbling by figuring out what element it's being called from. - if (event.target.tagName == "INPUT") { - var featureConfiguredIcon; - if ($("input[type='checkbox']", this).is(":checked")) { - configuredOperations.push(operationCode); - // when a feature is enabled, if "zero-configured-features" msg is available, hide that. - var zeroConfiguredOperationsErrorMsg = "#policy-profile-main-error-msg"; - if (!$(zeroConfiguredOperationsErrorMsg).hasClass("hidden")) { - $(zeroConfiguredOperationsErrorMsg).addClass("hidden"); - } - // add configured-state-icon to the feature - featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).removeClass("hidden"); - } - } else { - //splicing the array if operation is present. - var index = $.inArray(operationCode, configuredOperations); - if (index != -1) { - configuredOperations.splice(index, 1); - } - // when a feature is disabled, clearing all its current configured, error or success states - var subErrorMsgWrapper = "#" + operation + "-feature-error-msg"; - var subErrorIcon = "#" + operation + "-error"; - var subOkIcon = "#" + operation + "-ok"; - featureConfiguredIcon = "#" + operation + "-configured"; - - if (!$(subErrorMsgWrapper).hasClass("hidden")) { - $(subErrorMsgWrapper).addClass("hidden"); - } - if (!$(subErrorIcon).hasClass("hidden")) { - $(subErrorIcon).addClass("hidden"); - } - if (!$(subOkIcon).hasClass("hidden")) { - $(subOkIcon).addClass("hidden"); - } - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - // reinitializing input fields into the defaults - $(operationDataWrapper + " input").each( - function () { - if ($(this).is("input:text")) { - $(this).val($(this).data("default")); - } else if ($(this).is("input:password")) { - $(this).val(""); - } else if ($(this).is("input:checkbox")) { - $(this).prop("checked", $(this).data("default")); - // if this checkbox is the parent input of a grouped-input - if ($(this).hasClass("parent-input")) { - var groupedInput = $(this).parent().parent().parent(); - updateGroupedInputVisibility(groupedInput); - } - } - } - ); - // reinitializing select fields into the defaults - $(operationDataWrapper + " select").each( - function () { - var defaultOption = $(this).data("default"); - $("option:eq(" + defaultOption + ")", this).prop("selected", "selected"); - } - ); - // collapsing expanded-panes (upon the selection of html-select-options) if any - $(operationDataWrapper + " .expanded").each( - function () { - if ($(this).hasClass("expanded")) { - $(this).removeClass("expanded"); - } - $(this).slideUp(); - } - ); - // removing all entries of grid-input elements if exist - $(operationDataWrapper + " .grouped-array-input").each( - function () { - var gridInputs = $(this).find("[data-add-form-clone]"); - if (gridInputs.length > 0) { - gridInputs.remove(); - } - var helpTexts = $(this).find("[data-help-text=add-form]"); - if (helpTexts.length > 0) { - helpTexts.show(); - } - } - ); - } - } - }); - - // - $(advanceOperations).on('hidden.bs.collapse', function (event) { - var collapsedFeatureBody = event.target.id; - var operation = collapsedFeatureBody.substr(0, collapsedFeatureBody.lastIndexOf("-")); - var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]"; - var featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguringSwitch).prop("checked") == true) { - $(featureConfiguringSwitch).prop("checked", false); - } - if (!$(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).addClass("hidden"); - } - }); - - $(advanceOperations).on('shown.bs.collapse', function (event) { - var expandedFeatureBody = event.target.id; - var operation = expandedFeatureBody.substr(0, expandedFeatureBody.lastIndexOf("-")); - var featureConfiguringSwitch = "#" + operation + "-heading input[type=checkbox]"; - var featureConfiguredIcon = "#" + operation + "-configured"; - if ($(featureConfiguringSwitch).prop("checked") == false) { - $(featureConfiguringSwitch).prop("checked", true); - } - if ($(featureConfiguredIcon).hasClass("hidden")) { - $(featureConfiguredIcon).removeClass("hidden"); - } - }); - // - - // adding support for cloning multiple profiles per feature with cloneable class definitions - $(advanceOperations).on("click", ".multi-view.add.enabled", function () { - // get a copy of .cloneable and create new .cloned div element - var cloned = "

    " + $(".cloneable", $(this).parent().parent()).html() + "
    "; - // append newly created .cloned div element to panel-body - $(this).parent().parent().append(cloned); - // enable remove action of newly cloned div element - $(".cloned", $(this).parent().parent()).each( - function () { - if ($(".multi-view.remove", this).hasClass("disabled")) { - $(".multi-view.remove", this).removeClass("disabled"); - } - if (!$(".multi-view.remove", this).hasClass("enabled")) { - $(".multi-view.remove", this).addClass("enabled"); - } - } - ); - }); - - $(advanceOperations).on("click", ".multi-view.remove.enabled", function () { - $(this).parent().remove(); - }); - - // enabling or disabling grouped-input based on the status of a parent check-box - $(advanceOperations).on("click", ".grouped-input", function () { - updateGroupedInputVisibility(this); - }); - - // add form entry click function for grid inputs - $(advanceOperations).on("click", "[data-click-event=add-form]", function () { - var addFormContainer = $("[data-add-form-container=" + $(this).attr("href") + "]"); - var clonedForm = $("[data-add-form=" + $(this).attr("href") + "]").clone().find("[data-add-form-element=clone]") - .attr("data-add-form-clone", $(this).attr("href")); - - // adding class .child-input to capture text-input-array-values - $("input, select", clonedForm).addClass("child-input"); - - $(addFormContainer).append(clonedForm); - setId(addFormContainer); - showHideHelpText(addFormContainer); - }); - - // remove form entry click function for grid inputs - $(advanceOperations).on("click", "[data-click-event=remove-form]", function () { - var addFormContainer = $("[data-add-form-container=" + $(this).attr("href") + "]"); - - $(this).closest("[data-add-form-element=clone]").remove(); - setId(addFormContainer); - showHideHelpText(addFormContainer); - }); -}); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/templates/windows-policy-operations.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/templates/windows-policy-operations.hbs deleted file mode 100644 index 5b97a6692..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.policy-wizard/public/templates/windows-policy-operations.hbs +++ /dev/null @@ -1,391 +0,0 @@ -
    - - -
    - -
    -
    - -
    -
    - - -
    - -
    - -
    - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    - -
    - - -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you need to disable camera. -
    -
    -
    - -
    -
    -
    -
    -
    - - - -
    -
    - -
    -
    - - Un-check following checkbox in case you need to disable storage-encryption. -
    -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    - -
    -
    - - - - -
    - -
    - - - - - - - - - - - - - - -
    No:Application Name/DescriptionPackage Name
    - No entries added yet . -
    - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/private/config.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/private/config.json deleted file mode 100644 index d6f50da06..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/private/config.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "deviceType": { - "label": "Windows", - "category": "mobile", - "scopes" : [ - "perm:windows:enroll", - "perm:windows:lock-devices", - "perm:windows:ring", - "perm:windows:wipe", - "perm:windows:lock-reset", - "perm:windows:reboot", - "perm:windows:location", - "perm:windows:disenroll", - "perm:windows:manage-configuration", - "perm:windows:view-configuration" - ], - "analyticsEnabled": "false", - "groupingEnabled": "false", - "features": { - "DEVICE_RING": { - "icon": "fw-dial-up", - "permission": "/device-mgt/devices/owning-device/operations/android/ring" - }, - "DEVICE_LOCK": { - "icon": "fw-lock", - "permission": "/device-mgt/devices/owning-device/operations/windows/lock" - }, - "DEVICE_LOCATION": { - "icon": "fw-map-location", - "permission": "/device-mgt/devices/owning-device/operations/windows/location" - }, - "DEVICE_REBOOT": { - "icon": "fw-refresh", - "permission": "/device-mgt/devices/owning-device/operations/windows/reboot" - }, - "LOCK_RESET": { - "icon": "fw-security", - "permission": "/device-mgt/devices/owning-device/operations/windows/lock-reset" - - }, - "DISENROLL": { - "icon": "fw-block", - "permission": "/device-mgt/devices/owning-device/operations/windows/disenroll" - }, - "WIPE_DATA": { - "icon": "fw-delete", - "permission": "/device-mgt/devices/owning-device/operations/windows/wipe" - } - } - } -} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/css/styles.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/css/styles.css deleted file mode 100644 index 04e2a2611..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/css/styles.css +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) 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. - */ -.circle { - background: none repeat scroll 0 0 #191919; - border-radius: 50px; - height: 50px; - padding: 10px; - width: 50px; - color: #fff; -} -.padding-top-double { - padding-top: 20px; -} -.padding-double { - padding: 20px; -} -.grey { - color: #333; -} -hr { - display: block; - height: 1px; - border: 0; - border-top: 1px solid #7f7f7f; - margin: 1em 0; - padding: 0; - opacity: 0.2; -} -.light-grey { - color: #7c7c7c; -} -.uppercase { - text-transform: uppercase; -} -.grey-bg { - background-color: #f6f4f4; -} - -.doc-link { - background: #11375B; - padding: 20px; - color: white; - margin-top: 0; -} - -.doc-link a { - color: white; -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/images/thumb.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/public/images/thumb.png deleted file mode 100644 index f4541a6ec74ebe7801d9417ee7fcf22fa27a33bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5195 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 othfK!nf$wk4tOt62HAqOdGm?;yYEkUO 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 0) { - $(notificationBubble).html(newNotificationsCount); - $(notificationBubble).show(); - } else { - $(notificationBubble).hide(); - } - } -}; - -function updateNotificationCountOnError() { - var notificationBubble = "#notification-bubble"; - $(notificationBubble).html("Error"); - $(notificationBubble).show(); -} - -function loadNewNotificationsOnSideViewPanel() { - if ($("#right-sidebar").attr("is-authorized") == "false") { - $("#notification-bubble-wrapper").remove(); - } else { - var serviceURL = emmAdminBasePath + "/notifications?status=NEW"; - invokerUtil.get(serviceURL, updateNotificationCountOnSuccess, updateNotificationCountOnError); - loadNewNotifications(); - } -} - -function loadNewNotifications() { - var messageSideBar = ".sidebar-messages"; - if ($("#right-sidebar").attr("is-authorized") == "false") { - $(messageSideBar).html("

    You are not authorized to view notifications.

    "); - } else { - var notifications = $("#notifications"); - var currentUser = notifications.data("currentUser"); - - $.template("notification-listing", notifications.attr("src"), function (template) { - var serviceURL = emmAdminBasePath + "/notifications?offset=0&limit=5&status=NEW"; - invokerUtil.get( - serviceURL, - // on success - function (data, textStatus, jqXHR) { - if (jqXHR.status == 200 && data) { - var viewModel = {}; - var responsePayload = JSON.parse(data); - if (responsePayload["notifications"]) { - if (responsePayload.count > 0) { - viewModel["notifications"] = responsePayload["notifications"]; - viewModel["appContext"] = context; - $(messageSideBar).html(template(viewModel)); - } else { - $(messageSideBar).html("

    No New Notifications

    " + - "
    " + - "Check this section for error notifications
    related to device operations" + - "
    "); - } - } else { - $(messageSideBar).html("

    Unexpected error " + - "occurred while loading new notifications.

    "); - } - } - }, - // on error - function (jqXHR) { - if (jqXHR.status = 500) { - $(messageSideBar).html("

    Unexpected error occurred while trying " + - "to retrieve any new notifications.

    "); - } - } - ); - }); - } -} - -/** - * Toggle function for - * notification listing sidebar. - * @return {Null} - */ -$.sidebar_toggle = function (action, target, container) { - var elem = '[data-toggle=sidebar]', - button, - containerOffsetLeft, - containerOffsetRight, - targetOffsetLeft, - targetOffsetRight, - targetWidth, - targetSide, - relationship, - pushType, - buttonParent; - - var sidebar_window = { - update: function (target, container, button) { - containerOffsetLeft = $(container).data('offset-left') ? $(container).data('offset-left') : 0; - containerOffsetRight = $(container).data('offset-right') ? $(container).data('offset-right') : 0; - targetOffsetLeft = $(target).data('offset-left') ? $(target).data('offset-left') : 0; - targetOffsetRight = $(target).data('offset-right') ? $(target).data('offset-right') : 0; - targetWidth = $(target).data('width'); - targetSide = $(target).data("side"); - pushType = $(container).parent().is('body') == true ? 'padding' : 'margin'; - - if (button !== undefined) { - relationship = button.attr('rel') ? button.attr('rel') : ''; - buttonParent = $(button).parent(); - } - }, - - show: function () { - if ($(target).data('sidebar-fixed') == true) { - $(target).height($(window).height() - $(target).data('fixed-offset')); - } - $(target).trigger('show.sidebar'); - if (targetWidth !== undefined) { - $(target).css('width', targetWidth); - } - $(target).addClass('toggled'); - if (button !== undefined) { - if (relationship !== '') { - // Removing active class from all relative buttons - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').removeClass("active"); - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').attr('aria-expanded', 'false'); - } - // Adding active class to button - if (button.attr('data-handle') !== 'close') { - button.addClass("active"); - button.attr('aria-expanded', 'true'); - } - if (buttonParent.is('li')) { - if (relationship !== '') { - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().removeClass("active"); - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().attr('aria-expanded', 'false'); - } - buttonParent.addClass("active"); - buttonParent.attr('aria-expanded', 'true'); - } - } - // Sidebar open function - if (targetSide == 'left') { - if ((button !== undefined) && (button.attr('data-container-divide'))) { - $(container).css(pushType + '-' + targetSide, targetWidth + targetOffsetLeft); - } - $(target).css(targetSide, targetOffsetLeft); - } else if (targetSide == 'right') { - if ((button !== undefined) && (button.attr('data-container-divide'))) { - $(container).css(pushType + '-' + targetSide, targetWidth + targetOffsetRight); - } - $(target).css(targetSide, targetOffsetRight); - } - $(target).trigger('shown.sidebar'); - }, - - hide: function () { - $(target).trigger('hide.sidebar'); - $(target).removeClass('toggled'); - if (button !== undefined) { - if (relationship !== '') { - // Removing active class from all relative buttons - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').removeClass("active"); - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').attr('aria-expanded', 'false'); - } - // Removing active class from button - if (button.attr('data-handle') !== 'close') { - button.removeClass("active"); - button.attr('aria-expanded', 'false'); - } - if ($(button).parent().is('li')) { - if (relationship !== '') { - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().removeClass("active"); - $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().attr('aria-expanded', 'false'); - } - } - } - // Sidebar close function - if (targetSide == 'left') { - if ((button !== undefined) && (button.attr('data-container-divide'))) { - $(container).css(pushType + '-' + targetSide, targetOffsetLeft); - } - $(target).css(targetSide, -Math.abs(targetWidth + targetOffsetLeft)); - } else if (targetSide == 'right') { - if ((button !== undefined) && (button.attr('data-container-divide'))) { - $(container).css(pushType + '-' + targetSide, targetOffsetRight); - } - $(target).css(targetSide, -Math.abs(targetWidth + targetOffsetRight)); - } - $(target).trigger('hidden.sidebar'); - } - }; - if (action === 'show') { - sidebar_window.update(target, container); - sidebar_window.show(); - } - if (action === 'hide') { - sidebar_window.update(target, container); - sidebar_window.hide(); - } - // binding click function - var body = 'body'; - $(body).off('click', elem); - $(body).on('click', elem, function (e) { - e.preventDefault(); - button = $(this); - container = button.data('container'); - target = button.data('target'); - sidebar_window.update(target, container, button); - /** - * Sidebar function on data container divide - * @return {Null} - */ - if (button.attr('aria-expanded') == 'false') { - sidebar_window.show(); - } else if (button.attr('aria-expanded') == 'true') { - sidebar_window.hide(); - } - }); -}; - -$.fn.collapse_nav_sub = function () { - var navSelector = 'ul.nav'; - - if (!$(navSelector).hasClass('collapse-nav-sub')) { - $(navSelector + ' > li', this).each(function () { - var position = $(this).offset().left - $(this).parent().scrollLeft(); - $(this).attr('data-absolute-position', (position + 5)); - }); - - $(navSelector + ' li', this).each(function () { - if ($('ul', this).length !== 0) { - $(this).addClass('has-sub'); - } - }); - - $(navSelector + ' > li', this).each(function () { - $(this).css({ - 'left': $(this).data('absolute-position'), - 'position': 'absolute' - }); - }); - - $(navSelector + ' li.has-sub', this).on('click', function () { - var elem = $(this); - if (elem.attr('aria-expanded') !== 'true') { - elem.siblings().fadeOut(100, function () { - elem.animate({'left': '15'}, 200, function () { - $(elem).first().children('ul').fadeIn(200); - }); - }); - elem.siblings().attr('aria-expanded', 'false'); - elem.attr('aria-expanded', 'true'); - } else { - $(elem).first().children('ul').fadeOut(100, function () { - elem.animate({'left': $(elem).data('absolute-position')}, 200, function () { - elem.siblings().fadeIn(100); - }); - }); - elem.siblings().attr('aria-expanded', 'false'); - elem.attr('aria-expanded', 'false'); - } - }); - - $(navSelector + ' > li.has-sub ul', this).on('click', function (e) { - e.stopPropagation(); - }); - $(navSelector).addClass('collapse-nav-sub'); - } -}; - -$(".download-link").click(function(){ - toggleEnrollment(); -}); - -$(document).ready(function () { - $.sidebar_toggle(); - if (typeof $.fn.collapse == 'function') { - $('.navbar-collapse.tiles').on('shown.bs.collapse', function () { - $(this).collapse_nav_sub(); - }); - } - - loadNewNotificationsOnSideViewPanel(); - $("#right-sidebar").on("click", ".new-notification", function () { - var notificationId = $(this).data("id"); - var redirectUrl = $(this).data("url"); - var markAsReadNotificationsEpr = emmAdminBasePath + "/notifications/" + notificationId + "/mark-checked"; - var messageSideBar = ".sidebar-messages"; - - invokerUtil.put( - markAsReadNotificationsEpr, - null, - // on success - function (data) { - data = JSON.parse(data); - if (data.statusCode == responseCodes["ACCEPTED"]) { - location.href = redirectUrl; - } - }, - // on error - function () { - var content = "
  • Warning

    " + - "

    Unexpected error occurred while loading notification. Please refresh the page and" + - " try again

  • "; - $(messageSideBar).html(content); - } - ); - }); -}); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.hbs deleted file mode 100644 index 58818e613..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.hbs +++ /dev/null @@ -1,66 +0,0 @@ -{{unit "cdmf.unit.lib.qrcode"}} -{{unit "cdmf.unit.device.type.qr-modal" enrollmentURL=enrollmentURL deviceTypeName="Windows"}} -{{unit "cdmf.unit.device.type.email.invite-modal" deviceTypeView="windows"}} - -
    -

    Windows Mobile

    -
    -
    -
    - -
    - - -
    - -

    What it Does

    -
    -

    Connect and manage your Windows device with Entgra IoT Server.

    -
    - - Enroll Device - Invite by Email - -

    Configure your workplace account

    -
    -
      -
    • STEP 01 Open Workplace native application on your - mobile device through device settings. -
    • -
    • STEP 02 Tap add account to start the - registration process. -
    • -
    • STEP 03 Provide your corporate email address, - and tap sign in. -
    • -
    • STEP 04 Enter your details, and tap Login. - Username - Enter username provided in the email. - Password - Enter password provided in the email. -
    • - -
    • STEP 05 Read the policy agreement, - and tap I Accept to accept the agreement and completed the device enrollment. -
    • - -
    -
    -
    - -
    -

    Follow instructions in wizard

    -
    - - - -
    -
    - -
    - -{{#zone "topCss"}} - {{css "css/styles.css"}} -{{/zone}} - -{{#zone "bottomJs"}} - {{js "js/type-view.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.js deleted file mode 100644 index eb13c2c89..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. 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 onRequest(context){ - var viewModel = {}; - var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; - viewModel["hostName"] = devicemgtProps["httpsURL"]; - viewModel["enrollmentURL"] = devicemgtProps["managerHTTPSURL"] + devicemgtProps["windowsEnrollmentDir"]; - return viewModel; -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.json deleted file mode 100644 index 9eecd8f5b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.type-view/type-view.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "1.0.0" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/app-conf.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/app-conf.json deleted file mode 100644 index 63bcd3f5f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/app-conf.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "appName": "UUF Template App", - "cachingEnabled": false, - "debuggingEnabled": false, - "permissionRoot": "/", - "loginPage": "uuf.page.sign-in", - "adminServicesUrl": "https://${server.ip}:${server.https_port}/admin/services/", - "authModule": { - "enabled": true, - "login": { - "onSuccess": { - "script": "/app/modules/login.js", - "page": "uuf.page.home" - }, - "onFail": { - "script": "/app/modules/login.js", - "page": "uuf.page.sign-in" - } - }, - "logout": { - "onSuccess": { - "script": "/app/modules/logout.js", - "page": "uuf.page.sign-in" - }, - "onFail": { - "script": "/app/modules/logout.js", - "page": "uuf.page.home" - } - }, - "sso": { - "enabled": false, - "issuer": "uuf", - "responseSigningEnabled": true, - "keyStoreName": "repository/resources/security/wso2carbon.jks", - "keyStorePassword": "wso2carbon", - "identityProviderAlias": "wso2carbon", - "identityProviderUrl": "https://${server.ip}:${server.https_port}/samlsso", - "intermediatePage": "uuf.page.sso-intermediate" - } - }, - "errorPages": { - "404": "uuf.page.error", - "default": "uuf.page.error" - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/uuf-conf.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/uuf-conf.json deleted file mode 100644 index 72d2df1ed..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/conf/uuf-conf.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "displayName": "UUF Template App", - "logLevel": "debug" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.default.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.default.hbs deleted file mode 100644 index a67a3e63e..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.default.hbs +++ /dev/null @@ -1,67 +0,0 @@ -{{!-- -* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. 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. ---}} - - - - - - - - - {{#defineZone "title"}}WSO2 Template{{/defineZone}} - {{defineZone "favicon"}} - {{defineZone "topCss"}} - {{defineZone "topJs"}} - - - -{{defineZone "header"}} - - - - - - - -{{defineZone "sidePanes"}} - - - -
    - {{defineZone "contentTitle"}} -
    -
    - {{defineZone "content"}} -
    -
    -
    - - - -
    -
    - {{defineZone "footer"}} -
    -
    - - -{{defineZone "bottomJs"}} - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.sign-in.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.sign-in.hbs deleted file mode 100644 index 3283927e5..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/layouts/uuf.layout.sign-in.hbs +++ /dev/null @@ -1,56 +0,0 @@ -{{!-- -* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. 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. ---}} - - - - - - - - - {{#defineZone "title"}}WSO2 Template{{/defineZone}} - {{defineZone "favicon"}} - {{defineZone "topCss"}} - {{defineZone "topJs"}} - - - -{{defineZone "header"}} - - - -
    -
    -
    - {{defineZone "content"}} -
    -
    -
    - - - -
    -
    - {{defineZone "footer"}} -
    -
    - - -{{defineZone "bottomJs"}} - - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.hbs deleted file mode 100644 index a4a31d008..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.hbs +++ /dev/null @@ -1,38 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "title"}}Error | {{@app.conf.appName}}{{/zone}} - -{{#zone "breadcrumbs"}} -
  • - - - -
  • -{{/zone}} - -{{#zone "content"}} -
    -

    An Error Occurred!

    - -
    -
    HTTP Status : {{@page.params.status}}
    - -

    {{@page.params.message}}

    -
    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.json deleted file mode 100644 index c60eb5207..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.error/error.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/error/default", - "layout": "uuf.layout.default", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/public/js/sign-in-validations.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/public/js/sign-in-validations.js deleted file mode 100644 index 2db2c795f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/public/js/sign-in-validations.js +++ /dev/null @@ -1,24 +0,0 @@ -$(document).ready(function(){ - $("#signInForm").validate({ - rules: { - username: { - required: true, - minlength: 3 - }, - password: { - required: true, - minlength: 3 - } - }, - messages: { - username: { - required: "Please enter a username", - minlength: "Your username must consist of at least 3 characters" - }, - password: { - required: "Please provide a password", - minlength: "Your password must be at least 3 characters long" - } - } - }); -}); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.hbs deleted file mode 100644 index 06fde86ec..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.hbs +++ /dev/null @@ -1,63 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "title"}}Sign In | {{@app.conf.appName}}{{/zone}} - -{{~#zone "content"}} -
    -
    -
    -

    - {{#defineZone "signIn-title" scope="protected"}}Sign In to UUF Template App{{/defineZone}} -

    -
    -
    - {{#if message}} -
    - {{message}}! -
    - {{/if}} -
    -
    - -
    -
    - -
    - {{#if referer}} - - {{/if}} -
    - -
    - {{defineZone "signInForm-below" scope="protected"}} -
    -
    -
    -
    -{{/zone}} - -{{! sign-in form validation}} -{{~unit "uuf.unit.lib.form-validation"}} -{{~#zone "bottomJs"}} - {{~js "js/sign-in-validations.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.js deleted file mode 100644 index 939e7c82b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.js +++ /dev/null @@ -1,30 +0,0 @@ -function onRequest(context) { - var authModuleConfigs = context.app.conf["authModule"]; - if (authModuleConfigs && (authModuleConfigs["enabled"].toString() == "true")) { - // Auth module is enabled. - if (context.user) { - // User is already logged in. - response.sendRedirect(context.app.context + "/"); - exit(); - } else { - // User is not logged in. - var ssoConfigs = authModuleConfigs["sso"]; - if (ssoConfigs && (ssoConfigs["enabled"].toString() == "true")) { - // SSO is enabled in Auth module. - var redirectUri = context.app.context + "/uuf/login"; - var queryString = request.getQueryString(); - if (queryString && (queryString.length > 0)) { - redirectUri = redirectUri + "?" + queryString; - } - response.sendRedirect(encodeURI(redirectUri)); - exit(); - } else { - // Generic login process is enabled. - return { - message: request.getParameter("error"), - referer: request.getParameter("referer") - }; - } - } - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.json deleted file mode 100644 index 4bafc2dbb..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-in/sign-in.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/signin", - "layout": "uuf.layout.sign-in", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.hbs deleted file mode 100644 index 23e70695f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.hbs +++ /dev/null @@ -1,18 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{! This template won't be rendered. So nothing is here }} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.js deleted file mode 100644 index 527c97733..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.js +++ /dev/null @@ -1,16 +0,0 @@ -function onRequest(context) { - var authModuleConfigs = context.app.conf["authModule"]; - if (authModuleConfigs && (authModuleConfigs["enabled"].toString() == "true")) { - // Auth module is enabled. - if (context.user) { - // User is logged in. - response.sendRedirect(context.app.context + "/uuf/logout"); - exit(); - } else { - // User is already logged out. - response.sendRedirect(context.app.context + "/"); - exit(); - } - } - -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.json deleted file mode 100644 index 0667f6f06..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sign-out/sign-out.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": "1.0.0", - "uri": "/signout", - "layout": "uuf.layout.sign-in" -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.hbs deleted file mode 100644 index 73de91e94..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.hbs +++ /dev/null @@ -1,45 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "title"}}Sign In | {{@app.conf.appName}}{{/zone}} - -{{unit "uuf.unit.theme"}} -{{unit "uuf.unit.header.logo"}}{{unit "uuf.unit.header"}} -{{unit "uuf.unit.footer"}} - -{{#zone "content"}} -
    -

    - You are now being redirected to Identity Server. If the redirection fails, please click - on the button below. -

    - -
    -
    - - - - -
    -
    -
    -{{/zone}} - -{{#zone "bottomJs"}} - -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.json deleted file mode 100644 index e3c6cdde2..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/pages/uuf.page.sso-intermediate/sso-intermediate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "1.0.0", - "uri": "//", - "layout": "uuf.layout.sign-in", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.hbs deleted file mode 100644 index 51a365f77..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.hbs +++ /dev/null @@ -1,27 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} - \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.js deleted file mode 100644 index aa4e1482f..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.js +++ /dev/null @@ -1,15 +0,0 @@ -function onRequest(context) { - var type = context.unit.params.type; - switch (type) { - case "success": - return {icon: "ok"}; - case "info": - return {icon: "info"}; - case "warning": - return {icon: "warning"}; - case "danger": - return {icon: "error"}; - default: - return {icon: "ok"}; - } -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.json deleted file mode 100644 index f2f22da9a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.alert/alert.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.hbs deleted file mode 100644 index 8274b5e66..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.hbs +++ /dev/null @@ -1,20 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "favicon"}} - -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.json deleted file mode 100644 index 6e8b1666c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/favicon.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": "1.0.0", - "pushedUris": [ - "/", - "/{+any}" - ], - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/public/img/favicon.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.favicon/public/img/favicon.png deleted file mode 100644 index 43c53c40662d866bd0e202bcc413c70e4da02ed7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18171 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 Qy+dqjXk}2O?|kh409YiFxc~qF diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.hbs deleted file mode 100644 index e726ab6dd..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.hbs +++ /dev/null @@ -1,23 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "footer"}} -

    - WSO2 | © 2015 - Inc. -

    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.json deleted file mode 100644 index 6e8b1666c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.footer/footer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": "1.0.0", - "pushedUris": [ - "/", - "/{+any}" - ], - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.hbs deleted file mode 100644 index 4ce5f300d..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.hbs +++ /dev/null @@ -1,27 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "brand"}} - - -

    - 
 - {{#defineZone "productNameResponsive"}}UUI Tmpl. App{{/defineZone}} -

    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.json deleted file mode 100644 index 38acf5dc9..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/logo.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": "1.0.0", - "index": 9100, - "pushedUris": [ - "/", - "/{+any}" - ], - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/public/img/logo.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.logo/public/img/logo.png deleted file mode 100644 index b4cba1d37c8b5301edde47df0bb22dcdc9dd0d1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33023 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 -
  • - - - - - - - - -
  • - -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.user-menu/user-menu.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.user-menu/user-menu.json deleted file mode 100644 index 614b0890b..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header.user-menu/user-menu.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "version": "1.0.0", - "index": 9110, - "pushedUris": [ - "/", - "/{+any}" - ] -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs deleted file mode 100644 index fe6c030d2..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.hbs +++ /dev/null @@ -1,29 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "header"}} -
    -
    -
    - {{defineZone "brand"}} -
    -
    - {{defineZone "userMenu"}} -
    -
    -
    -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.json deleted file mode 100644 index 8a3fe9c7c..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.header/header.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": "1.0.0", - "index": 9199, - "pushedUris": [ - "/", - "/{+any}" - ], - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.hbs b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.hbs deleted file mode 100644 index e2e188f5a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.hbs +++ /dev/null @@ -1,27 +0,0 @@ -{{! - Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - - WSO2 Inc. 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. -}} -{{#zone "topCss"}} - {{~css "data-tables_1.10.7/extensions/Bootstrap/css/dataTables.bootstrap.css"}} - {{~css "data-tables_1.10.7/extensions/Responsive/css/dataTables.responsive.css"}} -{{/zone}} - -{{~#zone "bottomJs"}} - {{~js "data-tables_1.10.7/media/js/jquery.dataTables.min.js"}} - {{~js "data-tables_1.10.7/extensions/Bootstrap/js/dataTables.bootstrap.js"}} - {{~js "data-tables_1.10.7/extensions/Responsive/js/dataTables.responsive.js"}} -{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.json b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.json deleted file mode 100644 index f2f22da9a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/data-table.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "version": "1.0.0", - "isAnonymous": true -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.css deleted file mode 100644 index cab59b3a0..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.css +++ /dev/null @@ -1,24 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * AutoFill styles - */ - -div.AutoFill_filler { - display: none; - position: absolute; - height: 14px; - width: 14px; - background: url(../images/filler.png) no-repeat center center; - z-index: 1002; -} - -div.AutoFill_border { - display: none; - position: absolute; - background-color: #0063dc; - z-index: 1001; - - box-shadow: 0px 0px 5px #76b4ff; - -moz-box-shadow: 0px 0px 5px #76b4ff; - -webkit-box-shadow: 0px 0px 5px #76b4ff; -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.min.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.min.css deleted file mode 100644 index b485f2163..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/css/dataTables.autoFill.min.css +++ /dev/null @@ -1 +0,0 @@ -div.AutoFill_filler{display:none;position:absolute;height:14px;width:14px;background:url(../images/filler.png) no-repeat center center;z-index:1002}div.AutoFill_border{display:none;position:absolute;background-color:#0063dc;z-index:1001;box-shadow:0px 0px 5px #76b4ff;-moz-box-shadow:0px 0px 5px #76b4ff;-webkit-box-shadow:0px 0px 5px #76b4ff} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/images/filler.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/AutoFill/images/filler.png deleted file mode 100644 index f2af65d8c38a5b752894dffc224021da92b182c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1040 zcmaJ=&ui0A9M66@w!&Z+!70ikJBe%ZlKu{>-PSCwvdq#I>|w&vYiQvJ*5b8_Ub{?#`r0{k+Lq*2zHAYueQ6G zuVR9|Dt172AqG@UH|-#9;#F13*&fks9p&USOBFcNG^F?pgo&gOn--L~AjnEm7NL?z zMw6*X9Lg!7&6TmfW+9ujxyCU!-jy4yg5}W6GIGszWGF7SK(l1Y?CvGfRj(P&hdK>+K$ z<(~eLG5Kqz6arhHFQ57{oj=S>GJC1~', { - 'class': 'AutoFill_filler' - } ) - .appendTo( 'body' ); - this.dom.filler = filler[0]; - - // Get the height / width of the click element - this.s.filler.height = filler.height(); - this.s.filler.width = filler.width(); - filler[0].style.display = "none"; - - /* Border display - one div for each side. We can't just use a single - * one with a border, as we want the events to effectively pass through - * the transparent bit of the box - */ - var border; - var appender = document.body; - if ( that.s.dt.oScroll.sY !== "" ) { - that.s.dt.nTable.parentNode.style.position = "relative"; - appender = that.s.dt.nTable.parentNode; - } - - border = $('
    ', { - "class": "AutoFill_border" - } ); - this.dom.borderTop = border.clone().appendTo( appender )[0]; - this.dom.borderRight = border.clone().appendTo( appender )[0]; - this.dom.borderBottom = border.clone().appendTo( appender )[0]; - this.dom.borderLeft = border.clone().appendTo( appender )[0]; - - /* Events */ - filler.on( 'mousedown.DTAF', function (e) { - this.onselectstart = function() { return false; }; - that._fnFillerDragStart.call( that, e ); - return false; - } ); - - $('tbody', this.dom.table).on( - 'mouseover.DTAF mouseout.DTAF', - '>tr>td, >tr>th', - function (e) { - that._fnFillerDisplay.call( that, e ); - } - ); - - $(this.dom.table).on( 'destroy.dt.DTAF', function () { - filler.off( 'mousedown.DTAF' ).remove(); - $('tbody', this.dom.table).off( 'mouseover.DTAF mouseout.DTAF' ); - } ); - }, - - - _initColumns: function ( ) - { - var that = this; - var i, ien; - var dt = this.s.dt; - var config = this.s.init; - - for ( i=0, ien=dt.aoColumns.length ; i offsetEnd.left) { - x1 = offsetEnd.left - border; - x2 = offsetStart.left + $(nStart).outerWidth(); - width = offsetStart.left + $(nStart).outerWidth() - offsetEnd.left + (2*border); - } - - if ( this.s.dt.oScroll.sY !== "" ) - { - /* The border elements are inside the DT scroller - so position relative to that */ - var - offsetScroll = $(this.s.dt.nTable.parentNode).offset(), - scrollTop = $(this.s.dt.nTable.parentNode).scrollTop(), - scrollLeft = $(this.s.dt.nTable.parentNode).scrollLeft(); - - x1 -= offsetScroll.left - scrollLeft; - x2 -= offsetScroll.left - scrollLeft; - y1 -= offsetScroll.top - scrollTop; - y2 -= offsetScroll.top - scrollTop; - } - - /* Top */ - oStyle = this.dom.borderTop.style; - oStyle.top = y1+"px"; - oStyle.left = x1+"px"; - oStyle.height = this.s.border.width+"px"; - oStyle.width = width+"px"; - - /* Bottom */ - oStyle = this.dom.borderBottom.style; - oStyle.top = y2+"px"; - oStyle.left = x1+"px"; - oStyle.height = this.s.border.width+"px"; - oStyle.width = width+"px"; - - /* Left */ - oStyle = this.dom.borderLeft.style; - oStyle.top = y1+"px"; - oStyle.left = x1+"px"; - oStyle.height = height+"px"; - oStyle.width = this.s.border.width+"px"; - - /* Right */ - oStyle = this.dom.borderRight.style; - oStyle.top = y1+"px"; - oStyle.left = x2+"px"; - oStyle.height = height+"px"; - oStyle.width = this.s.border.width+"px"; - }, - - - /** - * Mouse down event handler for starting a drag - * @method _fnFillerDragStart - * @param {Object} e Event object - * @returns void - */ - "_fnFillerDragStart": function (e) - { - var that = this; - var startingTd = this.dom.currentTarget; - - this.s.drag.dragging = true; - - that.dom.borderTop.style.display = "block"; - that.dom.borderRight.style.display = "block"; - that.dom.borderBottom.style.display = "block"; - that.dom.borderLeft.style.display = "block"; - - var coords = this._fnTargetCoords( startingTd ); - this.s.drag.startX = coords.x; - this.s.drag.startY = coords.y; - - this.s.drag.startTd = startingTd; - this.s.drag.endTd = startingTd; - - this._fnUpdateBorder( startingTd, startingTd ); - - $(document).bind('mousemove.AutoFill', function (e) { - that._fnFillerDragMove.call( that, e ); - } ); - - $(document).bind('mouseup.AutoFill', function (e) { - that._fnFillerFinish.call( that, e ); - } ); - - /* Scrolling information cache */ - this.s.screen.y = e.pageY; - this.s.screen.height = $(window).height(); - this.s.screen.scrollTop = $(document).scrollTop(); - - if ( this.s.dt.oScroll.sY !== "" ) - { - this.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top; - this.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height(); - } - - /* Scrolling handler - we set an interval (which is cancelled on mouse up) which will fire - * regularly and see if we need to do any scrolling - */ - this.s.screen.interval = setInterval( function () { - var iScrollTop = $(document).scrollTop(); - var iScrollDelta = iScrollTop - that.s.screen.scrollTop; - that.s.screen.y += iScrollDelta; - - if ( that.s.screen.height - that.s.screen.y + iScrollTop < 50 ) - { - $('html, body').animate( { - "scrollTop": iScrollTop + 50 - }, 240, 'linear' ); - } - else if ( that.s.screen.y - iScrollTop < 50 ) - { - $('html, body').animate( { - "scrollTop": iScrollTop - 50 - }, 240, 'linear' ); - } - - if ( that.s.dt.oScroll.sY !== "" ) - { - if ( that.s.screen.y > that.s.scroller.bottom - 50 ) - { - $(that.s.dt.nTable.parentNode).animate( { - "scrollTop": $(that.s.dt.nTable.parentNode).scrollTop() + 50 - }, 240, 'linear' ); - } - else if ( that.s.screen.y < that.s.scroller.top + 50 ) - { - $(that.s.dt.nTable.parentNode).animate( { - "scrollTop": $(that.s.dt.nTable.parentNode).scrollTop() - 50 - }, 240, 'linear' ); - } - } - }, 250 ); - }, - - - /** - * Mouse move event handler for during a move. See if we want to update the display based on the - * new cursor position - * @method _fnFillerDragMove - * @param {Object} e Event object - * @returns void - */ - "_fnFillerDragMove": function (e) - { - if ( e.target && e.target.nodeName.toUpperCase() == "TD" && - e.target != this.s.drag.endTd ) - { - var coords = this._fnTargetCoords( e.target ); - - if ( this.c.mode == "y" && coords.x != this.s.drag.startX ) - { - e.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0]; - } - if ( this.c.mode == "x" && coords.y != this.s.drag.startY ) - { - e.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0]; - } - - if ( this.c.mode == "either") - { - if(coords.x != this.s.drag.startX ) - { - e.target = $('tbody>tr:eq('+this.s.drag.startY+')>td:eq('+coords.x+')', this.dom.table)[0]; - } - else if ( coords.y != this.s.drag.startY ) { - e.target = $('tbody>tr:eq('+coords.y+')>td:eq('+this.s.drag.startX+')', this.dom.table)[0]; - } - } - - // update coords - if ( this.c.mode !== "both" ) { - coords = this._fnTargetCoords( e.target ); - } - - var drag = this.s.drag; - drag.endTd = e.target; - - if ( coords.y >= this.s.drag.startY ) { - this._fnUpdateBorder( drag.startTd, drag.endTd ); - } - else { - this._fnUpdateBorder( drag.endTd, drag.startTd ); - } - this._fnFillerPosition( e.target ); - } - - /* Update the screen information so we can perform scrolling */ - this.s.screen.y = e.pageY; - this.s.screen.scrollTop = $(document).scrollTop(); - - if ( this.s.dt.oScroll.sY !== "" ) - { - this.s.scroller.scrollTop = $(this.s.dt.nTable.parentNode).scrollTop(); - this.s.scroller.top = $(this.s.dt.nTable.parentNode).offset().top; - this.s.scroller.bottom = this.s.scroller.top + $(this.s.dt.nTable.parentNode).height(); - } - }, - - - /** - * Mouse release handler - end the drag and take action to update the cells with the needed values - * @method _fnFillerFinish - * @param {Object} e Event object - * @returns void - */ - "_fnFillerFinish": function (e) - { - var that = this, i, iLen, j; - - $(document).unbind('mousemove.AutoFill mouseup.AutoFill'); - - this.dom.borderTop.style.display = "none"; - this.dom.borderRight.style.display = "none"; - this.dom.borderBottom.style.display = "none"; - this.dom.borderLeft.style.display = "none"; - - this.s.drag.dragging = false; - - clearInterval( this.s.screen.interval ); - - var cells = []; - var table = this.dom.table; - var coordsStart = this._fnTargetCoords( this.s.drag.startTd ); - var coordsEnd = this._fnTargetCoords( this.s.drag.endTd ); - var columnIndex = function ( visIdx ) { - return that.s.dt.oApi._fnVisibleToColumnIndex( that.s.dt, visIdx ); - }; - - // xxx - urgh - there must be a way of reducing this... - if ( coordsStart.y <= coordsEnd.y ) { - for ( i=coordsStart.y ; i<=coordsEnd.y ; i++ ) { - if ( coordsStart.x <= coordsEnd.x ) { - for ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) { - cells.push( { - node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], - x: j - coordsStart.x, - y: i - coordsStart.y, - colIdx: columnIndex( j ) - } ); - } - } - else { - for ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) { - cells.push( { - node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], - x: j - coordsStart.x, - y: i - coordsStart.y, - colIdx: columnIndex( j ) - } ); - } - } - } - } - else { - for ( i=coordsStart.y ; i>=coordsEnd.y ; i-- ) { - if ( coordsStart.x <= coordsEnd.x ) { - for ( j=coordsStart.x ; j<=coordsEnd.x ; j++ ) { - cells.push( { - node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], - x: j - coordsStart.x, - y: i - coordsStart.y, - colIdx: columnIndex( j ) - } ); - } - } - else { - for ( j=coordsStart.x ; j>=coordsEnd.x ; j-- ) { - cells.push( { - node: $('tbody>tr:eq('+i+')>td:eq('+j+')', table)[0], - x: coordsStart.x - j, - y: coordsStart.y - i, - colIdx: columnIndex( j ) - } ); - } - } - } - } - - // An auto-fill requires 2 or more cells - if ( cells.length <= 1 ) { - return; - } - - var edited = []; - var previous; - - for ( i=0, iLen=cells.length ; i",{"class":"AutoFill_filler"}).appendTo("body");this.dom.filler=e[0];this.s.filler.height=e.height();this.s.filler.width=e.width();e[0].style.display= -"none";var g,f=j.body;""!==a.s.dt.oScroll.sY&&(a.s.dt.nTable.parentNode.style.position="relative",f=a.s.dt.nTable.parentNode);g=c("
    ",{"class":"AutoFill_border"});this.dom.borderTop=g.clone().appendTo(f)[0];this.dom.borderRight=g.clone().appendTo(f)[0];this.dom.borderBottom=g.clone().appendTo(f)[0];this.dom.borderLeft=g.clone().appendTo(f)[0];e.on("mousedown.DTAF",function(b){this.onselectstart=function(){return false};a._fnFillerDragStart.call(a,b);return false});c("tbody",this.dom.table).on("mouseover.DTAF mouseout.DTAF", -">tr>td, >tr>th",function(b){a._fnFillerDisplay.call(a,b)});c(this.dom.table).on("destroy.dt.DTAF",function(){e.off("mousedown.DTAF").remove();c("tbody",this.dom.table).off("mouseover.DTAF mouseout.DTAF")})},_initColumns:function(){var d=this,b,a,e=this.s.dt,g=this.s.init;b=0;for(a=e.aoColumns.length;bg.left&&(f=g.left-a,i=e.left+c(d).outerWidth(),j=e.left+c(d).outerWidth()-g.left+2*a);""!==this.s.dt.oScroll.sY&&(a=c(this.s.dt.nTable.parentNode).offset(),e=c(this.s.dt.nTable.parentNode).scrollTop(), -g=c(this.s.dt.nTable.parentNode).scrollLeft(),f-=a.left-g,i-=a.left-g,n-=a.top-e,h-=a.top-e);a=this.dom.borderTop.style;a.top=n+"px";a.left=f+"px";a.height=this.s.border.width+"px";a.width=j+"px";a=this.dom.borderBottom.style;a.top=h+"px";a.left=f+"px";a.height=this.s.border.width+"px";a.width=j+"px";a=this.dom.borderLeft.style;a.top=n+"px";a.left=f+"px";a.height=k+"px";a.width=this.s.border.width+"px";a=this.dom.borderRight.style;a.top=n+"px";a.left=i+"px";a.height=k+"px";a.width=this.s.border.width+ -"px"},_fnFillerDragStart:function(d){var b=this,a=this.dom.currentTarget;this.s.drag.dragging=!0;b.dom.borderTop.style.display="block";b.dom.borderRight.style.display="block";b.dom.borderBottom.style.display="block";b.dom.borderLeft.style.display="block";var e=this._fnTargetCoords(a);this.s.drag.startX=e.x;this.s.drag.startY=e.y;this.s.drag.startTd=a;this.s.drag.endTd=a;this._fnUpdateBorder(a,a);c(j).bind("mousemove.AutoFill",function(a){b._fnFillerDragMove.call(b,a)});c(j).bind("mouseup.AutoFill", -function(a){b._fnFillerFinish.call(b,a)});this.s.screen.y=d.pageY;this.s.screen.height=c(o).height();this.s.screen.scrollTop=c(j).scrollTop();""!==this.s.dt.oScroll.sY&&(this.s.scroller.top=c(this.s.dt.nTable.parentNode).offset().top,this.s.scroller.bottom=this.s.scroller.top+c(this.s.dt.nTable.parentNode).height());this.s.screen.interval=setInterval(function(){var a=c(j).scrollTop();b.s.screen.y=b.s.screen.y+(a-b.s.screen.scrollTop);b.s.screen.height-b.s.screen.y+a<50?c("html, body").animate({scrollTop:a+ -50},240,"linear"):b.s.screen.y-a<50&&c("html, body").animate({scrollTop:a-50},240,"linear");b.s.dt.oScroll.sY!==""&&(b.s.screen.y>b.s.scroller.bottom-50?c(b.s.dt.nTable.parentNode).animate({scrollTop:c(b.s.dt.nTable.parentNode).scrollTop()+50},240,"linear"):b.s.screen.ytr:eq("+b.y+")>td:eq("+this.s.drag.startX+")",this.dom.table)[0]);"x"==this.c.mode&&b.y!=this.s.drag.startY&&(d.target=c("tbody>tr:eq("+this.s.drag.startY+")>td:eq("+b.x+")",this.dom.table)[0]);"either"==this.c.mode&&(b.x!=this.s.drag.startX?d.target=c("tbody>tr:eq("+this.s.drag.startY+")>td:eq("+b.x+")",this.dom.table)[0]:b.y!=this.s.drag.startY&&(d.target=c("tbody>tr:eq("+b.y+")>td:eq("+this.s.drag.startX+ -")",this.dom.table)[0]));"both"!==this.c.mode&&(b=this._fnTargetCoords(d.target));var a=this.s.drag;a.endTd=d.target;b.y>=this.s.drag.startY?this._fnUpdateBorder(a.startTd,a.endTd):this._fnUpdateBorder(a.endTd,a.startTd);this._fnFillerPosition(d.target)}this.s.screen.y=d.pageY;this.s.screen.scrollTop=c(j).scrollTop();""!==this.s.dt.oScroll.sY&&(this.s.scroller.scrollTop=c(this.s.dt.nTable.parentNode).scrollTop(),this.s.scroller.top=c(this.s.dt.nTable.parentNode).offset().top,this.s.scroller.bottom= -this.s.scroller.top+c(this.s.dt.nTable.parentNode).height())},_fnFillerFinish:function(){var d=this,b,a;c(j).unbind("mousemove.AutoFill mouseup.AutoFill");this.dom.borderTop.style.display="none";this.dom.borderRight.style.display="none";this.dom.borderBottom.style.display="none";this.dom.borderLeft.style.display="none";this.s.drag.dragging=!1;clearInterval(this.s.screen.interval);var e=[],g=this.dom.table,f=this._fnTargetCoords(this.s.drag.startTd),i=this._fnTargetCoords(this.s.drag.endTd),h=function(a){return d.s.dt.oApi._fnVisibleToColumnIndex(d.s.dt, -a)};if(f.y<=i.y)for(b=f.y;b<=i.y;b++)if(f.x<=i.x)for(a=f.x;a<=i.x;a++)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(a=f.x;a>=i.x;a--)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(b=f.y;b>=i.y;b--)if(f.x<=i.x)for(a=f.x;a<=i.x;a++)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:a-f.x,y:b-f.y,colIdx:h(a)});else for(a=f.x;a>=i.x;a--)e.push({node:c("tbody>tr:eq("+b+")>td:eq("+a+")",g)[0],x:f.x-a,y:f.y- -b,colIdx:h(a)});if(!(1>=e.length)){var g=[],m;b=0;for(a=e.length;bg||0>f?-1:1)):a===m?b:a}}};return h};"function"===typeof define&&define.amd? -define(["jquery","datatables"],l):"object"===typeof exports?l(require("jquery"),require("datatables")):jQuery&&!jQuery.fn.dataTable.AutoFill&&l(jQuery,jQuery.fn.dataTable)})(window,document); diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/css/dataTables.bootstrap.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/css/dataTables.bootstrap.css deleted file mode 100644 index 2ccacaff8..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/css/dataTables.bootstrap.css +++ /dev/null @@ -1,372 +0,0 @@ -div.dataTables_length label { - font-weight: normal; - text-align: left; - white-space: nowrap; -} - -div.dataTables_length select { - width: 75px; - display: inline-block; -} - -div.dataTables_filter { - text-align: right; -} - -div.dataTables_filter label { - font-weight: normal; - white-space: nowrap; - text-align: left; -} - -div.dataTables_filter input { - margin-left: 0.5em; - display: inline-block; - width: auto; -} - -div.dataTables_info { - padding-top: 8px; - white-space: nowrap; -} - -div.dataTables_paginate { - margin: 0; - white-space: nowrap; - text-align: right; -} - -div.dataTables_paginate ul.pagination { - margin: 2px 0; - white-space: nowrap; -} - -@media screen and (max-width: 767px) { - div.dataTables_wrapper > div.row > div, - div.dataTables_length, - div.dataTables_filter, - div.dataTables_info, - div.dataTables_paginate { - text-align: center; - } - - div.DTTT { - margin-bottom: 0.5em; - } -} - - -table.dataTable td, -table.dataTable th { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} - - -table.dataTable { - clear: both; - margin-top: 6px !important; - margin-bottom: 6px !important; - max-width: none !important; -} - -table.dataTable thead .sorting, -table.dataTable thead .sorting_asc, -table.dataTable thead .sorting_desc, -table.dataTable thead .sorting_asc_disabled, -table.dataTable thead .sorting_desc_disabled { - cursor: pointer; - position: relative; -} - -table.dataTable thead .sorting:after, -table.dataTable thead .sorting_asc:after, -table.dataTable thead .sorting_desc:after { - position: absolute; - top: 8px; - right: 8px; - display: block; - font-family: 'Glyphicons Halflings'; - opacity: 0.5; -} -table.dataTable thead .sorting:after { - opacity: 0.2; - content: "\e150"; /* sort */ -} -table.dataTable thead .sorting_asc:after { - content: "\e155"; /* sort-by-attributes */ -} -table.dataTable thead .sorting_desc:after { - content: "\e156"; /* sort-by-attributes-alt */ -} -div.dataTables_scrollBody table.dataTable thead .sorting:after, -div.dataTables_scrollBody table.dataTable thead .sorting_asc:after, -div.dataTables_scrollBody table.dataTable thead .sorting_desc:after { - display: none; -} - -table.dataTable thead .sorting_asc_disabled:after, -table.dataTable thead .sorting_desc_disabled:after { - color: #eee; -} - -table.dataTable thead > tr > th { - padding-right: 30px; -} - -table.dataTable th:active { - outline: none; -} - - -/* Condensed */ -table.dataTable.table-condensed thead > tr > th { - padding-right: 20px; -} - -table.dataTable.table-condensed thead .sorting:after, -table.dataTable.table-condensed thead .sorting_asc:after, -table.dataTable.table-condensed thead .sorting_desc:after { - top: 6px; - right: 6px; -} - -/* Scrolling */ -div.dataTables_scrollHead table { - margin-bottom: 0 !important; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} - -div.dataTables_scrollHead table thead tr:last-child th:first-child, -div.dataTables_scrollHead table thead tr:last-child td:first-child { - border-bottom-left-radius: 0 !important; - border-bottom-right-radius: 0 !important; -} - -div.dataTables_scrollBody table { - border-top: none; - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -div.dataTables_scrollBody tbody tr:first-child th, -div.dataTables_scrollBody tbody tr:first-child td { - border-top: none; -} - -div.dataTables_scrollFoot table { - margin-top: 0 !important; - border-top: none; -} - -/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column - width calculations when using scrolling impossible to align columns. We have - to use separate - */ -table.table-bordered.dataTable { - border-collapse: separate !important; -} -table.table-bordered thead th, -table.table-bordered thead td { - border-left-width: 0; - border-top-width: 0; -} -table.table-bordered tbody th, -table.table-bordered tbody td { - border-left-width: 0; - border-bottom-width: 0; -} -table.table-bordered tfoot th, -table.table-bordered tfoot td { - border-left-width: 0; - border-bottom-width: 0; -} -table.table-bordered th:last-child, -table.table-bordered td:last-child { - border-right-width: 0; -} -div.dataTables_scrollHead table.table-bordered { - border-bottom-width: 0; -} - - - - -/* - * TableTools styles - */ -.table.dataTable tbody tr.active td, -.table.dataTable tbody tr.active th { - background-color: #08C; - color: white; -} - -.table.dataTable tbody tr.active:hover td, -.table.dataTable tbody tr.active:hover th { - background-color: #0075b0 !important; -} - -.table.dataTable tbody tr.active th > a, -.table.dataTable tbody tr.active td > a { - color: white; -} - -.table-striped.dataTable tbody tr.active:nth-child(odd) td, -.table-striped.dataTable tbody tr.active:nth-child(odd) th { - background-color: #017ebc; -} - -table.DTTT_selectable tbody tr { - cursor: pointer; -} - -div.DTTT .btn:hover { - text-decoration: none !important; -} - -ul.DTTT_dropdown.dropdown-menu { - z-index: 2003; -} - -ul.DTTT_dropdown.dropdown-menu a { - color: #333 !important; /* needed only when demo_page.css is included */ -} - -ul.DTTT_dropdown.dropdown-menu li { - position: relative; -} - -ul.DTTT_dropdown.dropdown-menu li:hover a { - background-color: #0088cc; - color: white !important; -} - -div.DTTT_collection_background { - z-index: 2002; -} - -/* TableTools information display */ -div.DTTT_print_info { - position: fixed; - top: 50%; - left: 50%; - width: 400px; - height: 150px; - margin-left: -200px; - margin-top: -75px; - text-align: center; - color: #333; - padding: 10px 30px; - opacity: 0.95; - - background-color: white; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 6px; - - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5); -} - -div.DTTT_print_info h6 { - font-weight: normal; - font-size: 28px; - line-height: 28px; - margin: 1em; -} - -div.DTTT_print_info p { - font-size: 14px; - line-height: 20px; -} - -div.dataTables_processing { - position: absolute; - top: 50%; - left: 50%; - width: 100%; - height: 60px; - margin-left: -50%; - margin-top: -25px; - padding-top: 20px; - padding-bottom: 20px; - text-align: center; - font-size: 1.2em; - background-color: white; - background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0))); - background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); - background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); - background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); - background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); - background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%); -} - - - -/* - * FixedColumns styles - */ -div.DTFC_LeftHeadWrapper table, -div.DTFC_LeftFootWrapper table, -div.DTFC_RightHeadWrapper table, -div.DTFC_RightFootWrapper table, -table.DTFC_Cloned tr.even { - background-color: white; - margin-bottom: 0; -} - -div.DTFC_RightHeadWrapper table , -div.DTFC_LeftHeadWrapper table { - border-bottom: none !important; - margin-bottom: 0 !important; - border-top-right-radius: 0 !important; - border-bottom-left-radius: 0 !important; - border-bottom-right-radius: 0 !important; -} - -div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child, -div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child, -div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child, -div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child { - border-bottom-left-radius: 0 !important; - border-bottom-right-radius: 0 !important; -} - -div.DTFC_RightBodyWrapper table, -div.DTFC_LeftBodyWrapper table { - border-top: none; - margin: 0 !important; -} - -div.DTFC_RightBodyWrapper tbody tr:first-child th, -div.DTFC_RightBodyWrapper tbody tr:first-child td, -div.DTFC_LeftBodyWrapper tbody tr:first-child th, -div.DTFC_LeftBodyWrapper tbody tr:first-child td { - border-top: none; -} - -div.DTFC_RightFootWrapper table, -div.DTFC_LeftFootWrapper table { - border-top: none; - margin-top: 0 !important; -} - - -div.DTFC_LeftBodyWrapper table.dataTable thead .sorting:after, -div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_asc:after, -div.DTFC_LeftBodyWrapper table.dataTable thead .sorting_desc:after, -div.DTFC_RightBodyWrapper table.dataTable thead .sorting:after, -div.DTFC_RightBodyWrapper table.dataTable thead .sorting_asc:after, -div.DTFC_RightBodyWrapper table.dataTable thead .sorting_desc:after { - display: none; -} - - -/* - * FixedHeader styles - */ -div.FixedHeader_Cloned table { - margin: 0 !important -} - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/js/dataTables.bootstrap.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/js/dataTables.bootstrap.js deleted file mode 100644 index dcc561fcf..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/Bootstrap/js/dataTables.bootstrap.js +++ /dev/null @@ -1,206 +0,0 @@ -/*! DataTables Bootstrap 3 integration - * ©2011-2014 SpryMedia Ltd - datatables.net/license - */ - -/** - * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and - * DataTables 1.10 or newer. - * - * This file sets the defaults and adds options to DataTables to style its - * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap - * for further information. - */ -(function(window, document, undefined){ - -var factory = function( $, DataTable ) { -"use strict"; - - -/* Set the defaults for DataTables initialisation */ -$.extend( true, DataTable.defaults, { - dom: - "<'row'<'col-sm-6'l><'col-sm-6'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-5'i><'col-sm-7'p>>", - renderer: 'bootstrap' -} ); - - -/* Default class modification */ -$.extend( DataTable.ext.classes, { - sWrapper: "dataTables_wrapper form-inline dt-bootstrap", - sFilterInput: "form-control input-sm", - sLengthSelect: "form-control input-sm" -} ); - - -/* Bootstrap paging button renderer */ -DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { - var api = new DataTable.Api( settings ); - var classes = settings.oClasses; - var lang = settings.oLanguage.oPaginate; - var btnDisplay, btnClass, counter=0; - - var attach = function( container, buttons ) { - var i, ien, node, button; - var clickHandler = function ( e ) { - e.preventDefault(); - if ( !$(e.currentTarget).hasClass('disabled') ) { - api.page( e.data.action ).draw( false ); - } - }; - - for ( i=0, ien=buttons.length ; i 0 ? - '' : ' disabled'); - break; - - case 'previous': - btnDisplay = lang.sPrevious; - btnClass = button + (page > 0 ? - '' : ' disabled'); - break; - - case 'next': - btnDisplay = lang.sNext; - btnClass = button + (page < pages-1 ? - '' : ' disabled'); - break; - - case 'last': - btnDisplay = lang.sLast; - btnClass = button + (page < pages-1 ? - '' : ' disabled'); - break; - - default: - btnDisplay = button + 1; - btnClass = page === button ? - 'active' : ''; - break; - } - - if ( btnDisplay ) { - node = $('
  • ', { - 'class': classes.sPageButton+' '+btnClass, - 'id': idx === 0 && typeof button === 'string' ? - settings.sTableId +'_'+ button : - null - } ) - .append( $('', { - 'href': '#', - 'aria-controls': settings.sTableId, - 'data-dt-idx': counter, - 'tabindex': settings.iTabIndex - } ) - .html( btnDisplay ) - ) - .appendTo( container ); - - settings.oApi._fnBindAction( - node, {action: button}, clickHandler - ); - - counter++; - } - } - } - }; - - // IE9 throws an 'unknown error' if document.activeElement is used - // inside an iframe or frame. - var activeEl; - - try { - // Because this approach is destroying and recreating the paging - // elements, focus is lost on the select button which is bad for - // accessibility. So we want to restore focus once the draw has - // completed - activeEl = $(document.activeElement).data('dt-idx'); - } - catch (e) {} - - attach( - $(host).empty().html('
      ').children('ul'), - buttons - ); - - if ( activeEl ) { - $(host).find( '[data-dt-idx='+activeEl+']' ).focus(); - } -}; - - -/* - * TableTools Bootstrap compatibility - * Required TableTools 2.1+ - */ -if ( DataTable.TableTools ) { - // Set the classes that TableTools uses to something suitable for Bootstrap - $.extend( true, DataTable.TableTools.classes, { - "container": "DTTT btn-group", - "buttons": { - "normal": "btn btn-default", - "disabled": "disabled" - }, - "collection": { - "container": "DTTT_dropdown dropdown-menu", - "buttons": { - "normal": "", - "disabled": "disabled" - } - }, - "print": { - "info": "DTTT_print_info" - }, - "select": { - "row": "active" - } - } ); - - // Have the collection use a bootstrap compatible drop down - $.extend( true, DataTable.TableTools.DEFAULTS.oTags, { - "collection": { - "container": "ul", - "button": "li", - "liner": "a" - } - } ); -} - -}; // /factory - - -// Define as an AMD module if possible -if ( typeof define === 'function' && define.amd ) { - define( ['jquery', 'datatables'], factory ); -} -else if ( typeof exports === 'object' ) { - // Node/CommonJS - factory( require('jquery'), require('datatables') ); -} -else if ( jQuery ) { - // Otherwise simply initialise as normal, stopping multiple evaluation - factory( jQuery, jQuery.fn.dataTable ); -} - - -})(window, document); - diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.css deleted file mode 100644 index bdd6aa0b9..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.css +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Namespace DTCR - "DataTables ColReorder" plug-in - */ - -table.DTCR_clonedTable { - background-color: rgba(255, 255, 255, 0.7); - z-index: 202; -} - -div.DTCR_pointer { - width: 1px; - background-color: #0259C4; - z-index: 201; -} \ No newline at end of file diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.min.css b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.min.css deleted file mode 100644 index 77b230e01..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/css/dataTables.colReorder.min.css +++ /dev/null @@ -1 +0,0 @@ -table.DTCR_clonedTable{background-color:rgba(255,255,255,0.7);z-index:202}div.DTCR_pointer{width:1px;background-color:#0259C4;z-index:201} diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/images/insert.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/images/insert.png deleted file mode 100644 index 15d5522da64f4f036c5a717dbb320799884fa12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1885 zcmaJ?Yfuwc6ke)>fRTqUjALP&*xC`v?j}Y`Bs^n)nFNqTMNwhdEF?m*%Vv>?mPoZ# zs@74ainfY%Y-t(Plw!alqNXAbBPu#pi$zL{3SvNQVEafum8T(P?s-2qUyS)Q#a8v?Rj@fQTpqiDJ1p4QAmv8l9M9YiQzt z8kLx{LMVsjWE`&6BotA&q9{p;73E^#Do#`+7-0}G0$Q9#L4!6=rxzK-oR_*HX6@dF zIN(bNoh#=2Z7NNk0>%*(4hng2CU&fu`OnL+{@Qv%LK0nAJ;L{PBCL0mV5CH=C)i*l*A|vcd}CQ%gxXLOs9De@MJ3-+U->UezzfZ4b zJDpe>ABVV|6;VdEdGHKsX=!PJ>v9@Kn~W|t@WyrzRlm8j!&R9aK9bS8z6zK&X|cdk z*(77liTIq=RO}i#|HFm0nxSBe(bFG(ia4%38}6-pu1!C&>BfqCSbhBfpBoJzRUTSQ zm7Qg(Nfq@x`UWc=xE=VBUxg8Ic-%RIosS7P;!Uh9cDzt5GOklknin#ycXYRrU4CE| zd$TWUO6kcl3|5c!4{xbs?flrRU`H?4s1pw-wweTIpA2y=pZP_xi=8j5CVdaeo;kCx z(tk-bKt*14vAi{ASD-a&`MJw2@Sf6A?*)_G)f?Y;4X0-gR}b0!GK#VKi3=ZE_Ghqe zC3i1&{&9O_i06@;3l>z%ShA*B2V6BZ$R?+2OUa%she~$r`LN_r*{;%n2WMT;A?0bC z`G z$-ze_iKgC|tjs8iGDTVw(z83-tuF}mA!xKU7Y;POO_fxlS=Wuy<;@5X<$ zW1h_i22Tfo(RY9K>y%8tG;C|wxZ=bgbB+n;_JiJU%?zB{DVbgO&K;l0($f4)EPvm- zlN+v;S_1+DEnC0R!389oRr~E*Q?J+FnOR@k)fi;I|7kZj<@(pq>4t}An{4){BaxAZ zH%?gQRj|6J@`?R=a0O2#7_@L5=9|4}Mg4|&WxZ+J_C6!DEOJHrsga0gds4A--}I0z z0(Ir4@~w0iFvTagY;*62was1uOG}S><-aM}(OOpiY_D=(P^td<#@N~37i`nIC&zj2 z-9OcH-N+i&oP*rA;o^%IAVsoIPshsTvIhr)6zGqqehOLDU-LWl=f%4@inL4pE0-{K*64}5NYR>RpukMimF|MslT0q9QPlIW+biD--V00;u>>pd3$=G z{Kl$ZDq^cRN%8jvq^Ez>n1dg9+UCz6?K>R94Vrd)F*dL}C`am-a4hC=-mPt|!i%1t zRh%7suNYZ#gZ)K~K71uGOct$wqWyvtM1FoR?S1=~=?;@Hx$tqLv>m;F{CSiA v3v1c-1AQT_MP7}WOBDevGdhR%UqvP!KOI{pd-r?y4=-^^lH^2e<_CWP6QK!R diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/js/dataTables.colReorder.js b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/js/dataTables.colReorder.js deleted file mode 100644 index c3b2f1e2a..000000000 --- a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/uuf-template-app/app/units/uuf.unit.lib.data-table/public/data-tables_1.10.7/extensions/ColReorder/js/dataTables.colReorder.js +++ /dev/null @@ -1,1372 +0,0 @@ -/*! ColReorder 1.1.3 - * ©2010-2014 SpryMedia Ltd - datatables.net/license - */ - -/** - * @summary ColReorder - * @description Provide the ability to reorder columns in a DataTable - * @version 1.1.3 - * @file dataTables.colReorder.js - * @author SpryMedia Ltd (www.sprymedia.co.uk) - * @contact www.sprymedia.co.uk/contact - * @copyright Copyright 2010-2014 SpryMedia Ltd. - * - * This source file is free software, available under the following license: - * MIT license - http://datatables.net/license/mit - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - * - * For details please refer to: http://www.datatables.net - */ - -(function(window, document, undefined) { - - -/** - * Switch the key value pairing of an index array to be value key (i.e. the old value is now the - * key). For example consider [ 2, 0, 1 ] this would be returned as [ 1, 2, 0 ]. - * @method fnInvertKeyValues - * @param array aIn Array to switch around - * @returns array - */ -function fnInvertKeyValues( aIn ) -{ - var aRet=[]; - for ( var i=0, iLen=aIn.length ; i= iCols ) - { - this.oApi._fnLog( oSettings, 1, "ColReorder 'from' index is out of bounds: "+iFrom ); - return; - } - - if ( iTo < 0 || iTo >= iCols ) - { - this.oApi._fnLog( oSettings, 1, "ColReorder 'to' index is out of bounds: "+iTo ); - return; - } - - /* - * Calculate the new column array index, so we have a mapping between the old and new - */ - var aiMapping = []; - for ( i=0, iLen=iCols ; i this.s.fixed-1 && i < iLen - this.s.fixedRight ) - { - this._fnMouseListener( i, this.s.dt.aoColumns[i].nTh ); - } - - /* Mark the original column order for later reference */ - this.s.dt.aoColumns[i]._ColReorder_iOrigCol = i; - } - - /* State saving */ - this.s.dt.oApi._fnCallbackReg( this.s.dt, 'aoStateSaveParams', function (oS, oData) { - that._fnStateSave.call( that, oData ); - }, "ColReorder_State" ); - - /* An initial column order has been specified */ - var aiOrder = null; - if ( this.s.init.aiOrder ) - { - aiOrder = this.s.init.aiOrder.slice(); - } - - /* State loading, overrides the column order given */ - if ( this.s.dt.oLoadedState && typeof this.s.dt.oLoadedState.ColReorder != 'undefined' && - this.s.dt.oLoadedState.ColReorder.length == this.s.dt.aoColumns.length ) - { - aiOrder = this.s.dt.oLoadedState.ColReorder; - } - - /* If we have an order to apply - do so */ - if ( aiOrder ) - { - /* We might be called during or after the DataTables initialisation. If before, then we need - * to wait until the draw is done, if after, then do what we need to do right away - */ - if ( !that.s.dt._bInitComplete ) - { - var bDone = false; - this.s.dt.aoDrawCallback.push( { - "fn": function () { - if ( !that.s.dt._bInitComplete && !bDone ) - { - bDone = true; - var resort = fnInvertKeyValues( aiOrder ); - that._fnOrderColumns.call( that, resort ); - } - }, - "sName": "ColReorder_Pre" - } ); - } - else - { - var resort = fnInvertKeyValues( aiOrder ); - that._fnOrderColumns.call( that, resort ); - } - } - else { - this._fnSetColumnIndexes(); - } - }, - - - /** - * Set the column order from an array - * @method _fnOrderColumns - * @param array a An array of integers which dictate the column order that should be applied - * @returns void - * @private - */ - "_fnOrderColumns": function ( a ) - { - if ( a.length != this.s.dt.aoColumns.length ) - { - this.s.dt.oInstance.oApi._fnLog( this.s.dt, 1, "ColReorder - array reorder does not "+ - "match known number of columns. Skipping." ); - return; - } - - for ( var i=0, iLen=a.length ; i
  • ') - .addClass( 'DTCR_pointer' ) - .css( { - position: 'absolute', - top: scrolling ? - $('div.dataTables_scroll', this.s.dt.nTableWrapper).offset().top : - $(this.s.dt.nTable).offset().top, - height : scrolling ? - $('div.dataTables_scroll', this.s.dt.nTableWrapper).height() : - $(this.s.dt.nTable).height() - } ) - .appendTo( 'body' ); - }, - - /** - * Clean up ColReorder memory references and event handlers - * @method _fnDestroy - * @returns void - * @private - */ - "_fnDestroy": function () - { - var i, iLen; - - for ( i=0, iLen=this.s.dt.aoDrawCallback.length ; ib||b>=n)this.oApi._fnLog(a,1,"ColReorder 'from' index is out of bounds: "+b);else if(0>e||e>=n)this.oApi._fnLog(a,1,"ColReorder 'to' index is out of bounds: "+e);else{f=[];c=0;for(g=n;cthis.s.fixed-1&&eMath.pow(Math.pow(a.pageX-this.s.mouse.startX,2)+Math.pow(a.pageY-this.s.mouse.startY,2),0.5))return;this._fnCreateDragNode()}this.dom.drag.css({left:a.pageX-this.s.mouse.offsetX,top:a.pageY-this.s.mouse.offsetY});for(var b=!1,e=this.s.mouse.toIndex,d=1,c=this.s.aoTargets.length;d
    ").addClass("DTCR_pointer").css({position:"absolute",top:a?d("div.dataTables_scroll",this.s.dt.nTableWrapper).offset().top:d(this.s.dt.nTable).offset().top,height:a?d("div.dataTables_scroll",this.s.dt.nTableWrapper).height(): -d(this.s.dt.nTable).height()}).appendTo("body")},_fnDestroy:function(){var a,b;a=0;for(b=this.s.dt.aoDrawCallback.length;a

    4*9t^x*H?1W4_eSBO(j)dZE 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ÐT=za;AQ^X{o=X~1HyA@3L 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 =Np#Sh!kFG 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 Y)v^`Vy{`9j5BTrKHHE7H@a+Eo0I#2R6aWAK diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/android.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/android.png deleted file mode 100755 index 7fee78a646d5c43d1254dbd4c34232fd760deb1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2948 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 diff --git a/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/windows_app_icon.png b/components/mobile-plugins/windows-plugin/org.wso2.carbon.device.mgt.mobile.windows.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.device-view/public/img/device_icons/windows_app_icon.png deleted file mode 100644 index b373460318b10225a3a2e4bea58510e1ca221d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7453 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